YouPeriod.app -- the privacy-first period tracking app

Overview

YouPeriod.app

The privacy-first period-tracking app.

Stars Forks Repo Size MIT License



IMPORTANT: This app is still being developed. It's not ready for use yet, but will be soon. Please check back.



Privacy First

We believe this kind of private and sensitive medical information belongs to you, and you alone. As such, You. (the app) puts you in control of all your information, and never collects or tracks anything about you, not even your name or email address. Since we don't have any of your data, we obviously CANNOT sell it or hand it over to any governmental authority.

Everything you enter into You. (the app) is yours, and always and only yours. It stays on your device, protected and secure, and you decide what to do with that information.

This app is free to use, and will remain so forever.

Once installed, this web-app (PWA) runs entirely offline -- only locally on your device, with no need for any internet or to connect to any remote service -- and uses strong cryptography practices to keep your data secure and private on your device, ONLY.

That means that even if the server were to be taken down, your local install of this app will remain functional on your device, with your data safe and secure, for as long as you decide.

How To Install

This web-app is an installable PWA (progressive web app), meaning you install it via your device's web browser.

This is important, because it means that even if device app stores (like Apple's App Store or Google's Google Play Store) refuse to allow this app, or governments force them to block it, as long as you have an open internet connection, you can always install this application free of any governmental control.

  1. Visit https://YouPeriod.app in a browser on your device.

    • For iOS devices, Safari browser offers the best installable PWA experience, so that's strongly recommended.

    • For all other devices (Android, Windows, etc), Chrome browser offers the best installable PWA experience, so that's strongly recommended.

  2. For iOS, click the "share" button in Safari's bottom toolbar, then scroll to find "Add to homescreen". Follow the prompts to install the app. Once installed, close the Safari tab and use the app from your homescreen / app-drawer.

  3. For Android (using Chrome), click the Install button in the banner and follow the prompts. Once installed, close the Chrome tab and use the app from your homescreen / app-drawer.

  4. For any other device (again, using Chrome), click the settings icon (three dots) near the top address bar, then select the menu option that says Install YouPeriod.

For Developers

All code for this app (both client and static-file-server) is open-source (MIT License) and freely available for anyone to inspect, audit, etc.

If you would like more details about the technical architecture of the app (client or server), please check out the tech documentation.

Contributing

Before contributing to this project, please make sure to review our Code of Conduct.

PRs for this project are welcome. Please check the open issues and discussions before filing new issues or PRs.

If you are looking to contribute to the design, there is an active Figma project in which we test all the visual changes and enhancements prior to being developed. Leave a comment here and edit permissions will be granted.

License

License

All code and documentation are (c) 2022 YouPeriod.app and released under the MIT License. A copy of the MIT License is also included.

Comments
  • need to plan out some of the main features

    need to plan out some of the main features

    Here's a few ideas for initial features:

    1. we're going to need a way to easily see ranges of dates in the future for projected/expected periods, as well as the ranges in the past for actual periods (and compared to what was projected).

    2. There will also be a sort of "daily check-in" during a period (or the days leading up to it) for self-reporting any symptoms or status of the menstrual flow, etc.

    But especially for those who have seen/used period-tracking apps already, please speak up and help us plan out what features are needed, and details about how they need to work to be useful and as easy as possible UX wise.

    opened by getify 14
  • More accurate alert for insufficient passphrase length (letters -> characters)

    More accurate alert for insufficient passphrase length (letters -> characters)

    Status

    PENDING REVIEW

    What does this PR accomplish?

    • Uses "characters" instead of "letters" to describe the minimum passphrase length in the related alert
    • Updates the documentation accordingly

    Note Although it might seem like nitpicking, the distinction between letters and characters is quite important when it comes to the password complexity.

    opened by nemanjaglumac 11
  • Need to document the tech architecture (so far)

    Need to document the tech architecture (so far)

    The app is currently (at time of this writing) a proof-of-concept for the registration/login/encryption portion of this app, involving Argon2 (WASM build) password hashing and AES-GCM 256-bit symmetric encryption/decryption. Data is persisted only in the client, using indexDB, while sessionStorage is used for tracking the login session (including storing temporarily the encryption/decryption key).

    There's some nuances around needing graceful handling if the cryptography settings of the app are changed later and that ends up needing to upgrade someone's existing account, transparently and without data loss. That part was slightly tricky to get correct and robust.

    Need to document more fully how the current JS code (split into several files, including a web worker) is architected, so THAT part of the behavior isn't lost when the code is worked on more significantly by other contributors. Also need to document the parts of the static file server that are important, given they are sending out some very specific and important security headers for different types of responses.

    All the JS code that handles UI stuff is fine to re-org or throw away, that's all toy POC stuff. But the cryptography/security stuff is important to not be messed with.

    opened by getify 10
  • Define and set the code style early on

    Define and set the code style early on

    Is your feature request related to a problem? Please describe.

    Define the code style from the beginning of the project (aka now or ASAP) and set the guards that would "enforce" it. This has multiple benefits:

    1. It will remove opinionated debates and potential flame wars
    2. It will streamline contribution
    3. It will save A LOT of time for both contributors and code reviewers by preventing redundant whitespace changes

    Describe the solution you'd like

    There is already .editorconfig in the project which is an amazing first step! It will set the tone for everything else. However, it is a basic set of definitions which is easily "overridable", depending on the IDE and the preferences people set in their IDEs.

    Note Prettier integrates pretty nicely with editorconfig and will enforce and respect its rules, unless instructed otherwise!

    Proposal:

    • [ ] At the very minimum, add the prettier config that would extend editorconfig (#28)
    • [ ] I'd also suggest adding eslint to the project but that could be a potentially sensitive topic and I'd leave it to @getify to define his own set of rules and checks, rather than going with any predefined ruleset

    Next steps:

    • Add a script that would auto-format the code
    • Add pre-commit hook that would automate that process
    • Add a basic lint check using GitHub Actions

    Describe alternatives you've considered

    A clear and concise description of any alternative solutions or features you've considered.

    Additional context

    https://github.com/getify/youperiod.app/pull/28 is WIP and a place where the initial discussion about Prettier config extending editorconfig should happen. Once complete and merged, this PR will:

    • at the very least add a config
    • at best add both the config and the lint script
    opened by nemanjaglumac 9
  • Code of Conduct: need community leaders

    Code of Conduct: need community leaders

    Please see my note here:

    https://github.com/getify/youperiod.app/pull/10#issuecomment-1174441718

    If this is interesting to you, please speak up, or reach out to me privately [email protected].

    opened by getify 9
  • Use GitHub Discussions to build the community

    Use GitHub Discussions to build the community

    Is your feature request related to a problem? Please describe.

    People will have a lot of questions about this project as it starts growing. Both the contributors and the potential users of the app. Using Slack for discussion is a common practice but it has many downsides and can be overwhelming for people who are not used to using it.

    Also, if the key value of this app is privacy, Slack is probably not the best idea.

    Describe the solution you'd like

    Enable GitHub Discussions for this project to start building the community and the body of knowledge.

    Describe alternatives you've considered

    • Mattermost is almost identical to Slack but it is OSS
    • Twist is an amazing Slack alternative and is much better suited for async communication

    Additional context

    In general, I'd suggest using the full GitHub ecosystem (wiki, projects, discussions, actions...). This is an OS project and as such it is eligible for a pretty generous free packages that GH offers.

    opened by nemanjaglumac 7
  • Add about page

    Add about page

    Changes

    closes #51

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] This change requires a documentation update

    Checklist

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [x] I have commented my code, particularly in hard-to-understand areas
    • [x] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    opened by rzvl 6
  • Discovery:  Use WASM backend

    Discovery: Use WASM backend

    I just happened to stumble upon this video: Building a Containerless Future with WebAssembly.

    It might be related to what you're building here.

    WebAssembly is the future of distributed computing. Its security, memory isolation, small footprint, and true portability are all advantages on the web, but become truly game-changing when used to build functions and services deployed in the cloud. This session illustrates how to host WebAssembly modules in Rust code, how to build modules in many different languages (including pros and cons of each), and how to securely grant cloud-native capabilities to these modules. Discussed in detail is the current state of the art in WebAssembly and what can be built with it today. Learn what developers can start doing now to build the containerless future where WebAssembly modules are the de-facto unit of immutable deployment in the cloud, at the edge, and even in IoT and embedded devices.

    opened by jzombie 5
  • Add code formatting rules and format the existing code [WIP]

    Add code formatting rules and format the existing code [WIP]

    Changes

    This PR adds some sane defaults re: code formatting. It attempts to explicitly communicate and set the code style rules for the whole project.

    I've envisioned three stages for this PR:

    1. Add .prettierc and define all the rules (code review process should be used for discussion)
    2. Install Prettier as a dev-dependency and create a script that would format the code
    3. Finally, commit the formatted code to the code base as the new baseline

    Warning Formatting the code with these new rules will create a huge diff. It is somewhat painful step and it is crucial to get it done as early as possible for that very reason.

    Type of change

    • [x] New feature (non-breaking change which adds functionality)
    • [ ] This change requires a documentation update (quite possibly, not sure yet)

    Checklist

    • [ ] My code follows the style guidelines of this project
    • [ ] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation
    • [ ] My changes generate no new warnings
    opened by nemanjaglumac 5
  • Privacy beyond data concerns

    Privacy beyond data concerns

    Is your feature request related to a problem? Please describe.

    It would be nice to have some kind of protection on the app itself. What do I mean? Anyone can go through your phone and access the app. For example, I'm thinking how customs have the right to go through your phone without a warrant in an airport, or if you are in an abusive relationship they can do the same. Are there any proposals for this?

    Describe the solution you'd like

    Some ideas that come to mind: pin protected app, easy to access wipe functionality

    opened by artnerdnet 5
  • Suggest Passphrase

    Suggest Passphrase

    Changes

    The core part of this is functionality is done, the design and placement is kind of rough, I assume the design will get picked up else where in work.

    Adds feature #4

    Type of change

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] This change requires a documentation update

    Checklist

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    opened by rayblair06 4
  • Add Calendar

    Add Calendar

    Changes

    Created a calendar.html, calendar.css and calendar.js (separated out the css because didn't want to interfere with the base css as I worked through it all)

    I looked at the sigma and added spaces for each thing on the dash board but the calendar is the only part with function so far. This creates the calendar of the current month and marks the current date. It also allows the user to use the arrows next to the month/year info to go forward and backwards to a new month. It populates the month with what should be the correct first day of the month and the total days.

    There are some classes in the css that would be used to display the predicted period if that is a feature, a logged period and the flow of the logged period if add. The js for that isn't made yet because I just thought about that but wanted to push a smaller pull request instead of giant change files.

    Fixes #53

    Type of change

    • [x] New feature (non-breaking change which adds functionality)

    Checklist

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [x] I have commented my code, particularly in hard-to-understand areas
    • [x] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    opened by bbland1 0
  • Add Education page

    Add Education page

    Add an education page.

    Need a page that would seek to educate users on topics related to menstruation cycles including:

    • What to Expect for those who have yet to have a period, or those who have only started their periods (some content in the post below)
    • How contraceptives (eg, the Pill, mini Pill, IUDs, implants) affect menstruation
    • Postpartum menstruation for those who have recently given birth and/or are expecting to give birth
    • Some sort of a when-to-see-a-medical-provider page

    Possibly FAQ style, should have links to medically credible sources as reference

    Per #3 -- suggested to work out copy here before HTML

    opened by eireann07 5
  • Allow users to track period date

    Allow users to track period date

    Add "Track" capability, where user will log bleeding for a specific date.

    Considerations:

    • Bleeding is the first thing to track, but other tracking will be added in the future
    • This needs to be able to be considered into calendar display to display logged periods on the calendar
    opened by pselle 3
  • Add calendar

    Add calendar

    Add calendar to app.

    • The calendar should highlight today's date
    • The user should be able to navigate into the past in the calendar

    Possible considerations:

    • A date on the calendar may have a different display if there is a period logged for that day in the data
    • A date may have a different display if it is a projected period date
    opened by pselle 8
  • Need: logo and favicon

    Need: logo and favicon

    Related to #2.

    I kinda like the logo I originally designed for this, as can be seen in the attached image. But I'm not deeply attached to it. If someone comes up with some good variations on logo, we can certainly discuss them here.

    youperiod-logo-screenshot

    More importantly, whatever logo we pick, we need:

    1. SVG of it (with font glyphs changed to curves)
    2. PNG of it in a couple of general sizes (small ~100px, medium ~400px, large ~1000px) on both transparent, light, and dark backgrounds
    3. Favicon that is based on, or recognizable as related to, the logo. I had envisioned something like a red circle with a "Y" in the middle of it, as the favicon. But certainly open to input. The favicon should be square and have 16x16, 24x24, 32x32, and 64x64 resolutions embedded into it. I use an app (windows) called Icofx (v3) for making my own favicons like this.
    enhancement 
    opened by getify 16
  • Need to implement

    Need to implement "persistent storage" capability

    Need to implement JS functionality (and some UI and carefully considered wording to the user) around opting the storage of this app (indexDB) into "persistent storage" mode.

    More info here: https://web.dev/persistent-storage/

    This is a tricky piece of functionality, because how it works and how it appears to users varies cross browser, and it can also sound a little "scary" to users -- like in violation of the core principles of this project -- if messaged poorly.

    In detail...

    1. We need to check if the user's device supports "persistent storage" (a web platform feature). If not, we need to explain to the user the implications of not having their data stored in such a protected/resilient state, and the risks of them continuing to save their information on that device and in this app.

    2. But if the device supports this feature, need to have a message that comes up, sometime after the user has registered and logged in the first time, but not right away. Probably when they go to enter their first piece of "real" data (not just account info or settings).

    3. The messaging needs to be something along the lines of (but not this exact wording, because I'm not a skilled copy writer):

      Since the data you enter in this app only ever resides on this device, and we assume you want to keep your data as safe as possible, we'd like to request the device to elevate its protection of your data in this app -- what is referred to as "persistent storage" (again, on this device only). This protection will help prevent your important information from accidentally being discarded by the browser or device, as happens on occasion with typical web data. If you agree, once you click this button, your device may offer you an additional confirmation prompt, or it may simply grant the permission, depending on your device type and settings.

      Like I said, that's wordy and needs a lot of cleanup. But it's a tricky and delicate thing to explain to the user why we need to ask this, and also to help them understand what the device prompt is about (in cases where the device pops it up) so they're not surprised by it and deny the permission.

      We also need to carefully but firmly explain that if they do NOT agree to this, their data is less safe and subject to potential loss at some point that's not much in our (or their!) control.

    4. Once we have properly and successfully received the user's permission to do this, we call an API to try to get the persistent storage mode activated. A promise will resolve letting us know if that was successful. If so, great. If not, we need to message the user similarly to if the device didn't support such storage, explaining the risks of continuing use without that protection in place.

    5. Moreover, there's another API we need to call from time to time, perhaps once per session, but not all the time, which essentially re-checks to see if the storage is persistent. Once granted, it should stay granted forever, but it's possible some devices/settings might someday revoke it. If it has been revoked, we might end up then needing to re-prompt the user for continued persistent storage permission, so again need careful messaging like the above to warn them about what's happening.

    enhancement 
    opened by getify 2
Owner
Kyle Simpson
Kyle Simpson is a human first and then an engineer. He's fighting for the people behind the pixels.
Kyle Simpson
Privacy First Toolbox For Developers 🧰

Dev Toolbox ?? A collection of tools for developers in one place Note This project is inspired and shares some code from tooling.one by @egoist which

Nafees Nazik 8 Nov 30, 2022
There can be more than Notion and Miro. Affine is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy first, open-source, customizable and ready to use.

AFFiNE.PRO The Next-Gen Knowledge Base to Replace Notion & Miro. Planning, Sorting and Creating all Together. Open-source, Privacy-First, and Free to

Toeverything 12.1k Jan 9, 2023
πŸ” A Privacy-first Diff tool for everyone. βœ… Your data never hits our servers.

Features ?? Privacy-first developer tool. ?? Run on your Web Browser, Your data is sent nowhere. ?? Find a Difference between two text input for Side

Proxyman 41 Dec 5, 2022
This is an app that helps people keep track of all their activities for a period of time.

To-Do List This is an app that helps people keep track of all their activities for a period of time. They can be able to see what activities they have

Abubakar Ummar 6 Oct 17, 2022
You view the Twitch channel chat and you can access the details of the users who wrote during the viewing period.

Twitch Chat Web Page You view the Twitch channel chat and you can access the details of the users who wrote during the viewing period. Getting Started

Mert 6 Dec 13, 2022
A tiny clock and date, period, or duration math library < 2k (minified/gzipped)

timewave v0.1.4 A tiny time simulation and date/time math library < 3k (minified/gzipped) const clock = Clock(new Date(2022,1,1),{tz:'America/New_York

Simon Y. Blackwell 46 Dec 18, 2022
⚑ the first open-source redis client made with care and acessibility-first πŸš€

⚑ Redis UI The first open-source project to create an awesome and accessible UI for Redis as a native desktop application. ✨ ?? ?? How to develop loca

Nicolas Lopes Aquino 14 Dec 5, 2022
A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!

A free and open source resume builder. Go to App What is this app all about? Reactive Resume is a free and open source resume builder that’s built to

Reactive Resume 9.7k Jan 3, 2023
Open source privacy notice design patterns.

Design-first privacy notice template The Juro Privacy Notice is an open source project by https://juro.com and https://stefaniapassera.com/. A couple

Juro 159 Nov 10, 2022
Privacy-focused Google Fonts alternative

Privacy-focused Google Fonts CDN alternative I wrote it in an hour, so please report bugs here. Several improvements could be made here and there, so

coolLabs 245 Dec 27, 2022
DecentraMix.io is a cross-chain, non-custodial, universal privacy-preserving protocol with the decentralized governance

DecentraMix.io is a cross-chain, non-custodial, universal privacy-preserving protocol with the decentralized governance. DecentraWorld applies zkSNARKs to enable transactional privacy for all DeFi components by breaking the on-chain link between depositor and recipient addresses.

DecentraWorld Ecosystem 65 May 7, 2022
Dapp example for airdropping ERC-20 tokens using World ID, preserving privacy for the claimers with zero-knowledge proofs.

World ID Example - Mesha Airdrop This repository contains an example decentralized application (dapp) for World ID. With Mesha Airdrop test airdroppin

Worldcoin 14 Dec 16, 2022
Privacy preserving governance mechanism using zero knowledge for proof of merkle inclusion.

Zero Knowledge Private Voting V1 Motivation On-chain governance today is fully transparent at the cost of privacy. This means that every proposal and

Blockchain Capital 18 Dec 16, 2022
Privacy preserving governance mechanism using zero knowledge for proof of merkle inclusion.

Zero Knowledge Private Voting V1 Motivation On-chain governance today is fully transparent at the cost of privacy. This means that every proposal and

Blockchain Capital 11 Jun 7, 2022
Eigen ZK-ZKRollup, Low gas-fee, better privacy-enhancement, high composable

ZKZRU: Eigen ZK-ZKRollup Eigen ZK-ZKRollup provides confidential transaction for users with low gas cost. The ZK-Rollup is an extention of RollupNC an

Eigen Labs 25 Dec 22, 2022
Lightweight privacy respecting geolocation library with no dependencies.

tzlocator Lightweight privacy respecting geolocation library with no dependencies. Key features ?? No third-party API calls ?? Works without browser p

null 13 Nov 15, 2022
πŸ“ŠπŸŒ Super small, light, privacy-focused, self-hostable web statistics provider

femtostats Update: It turns out Fathom Lite does everything I wanted to do except custom events for free, so I'm going to stop working on this for now

Ian Langworth ☠ 12 Nov 17, 2022
Always with personal privacy and anonymity in mind.

Clodbunker At the moment we aim to be a cutting-edge service that provides anonymous and secure cloud storage, with a strong focus on end-to-end encry

Cloudbunker 4 Mar 15, 2023
Your personal budget tracking app.

Btracker Your personal budget tracking app. ?? Links Postman workspace Video Explanation Deployed Frontend Link Frontend Repository ?? Features Create

Fidal Mathew 2 Jan 29, 2022