Giter Site home page Giter Site logo

jofaval / fusa-period-tracking Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 1.2 MB

Open-source gender neutral period tracking app that leaves data management in it's totally to the end user

Home Page: https://jofaval.github.io/fusa-period-tracking/

License: MIT License

HTML 0.91% JavaScript 3.98% Vue 27.08% TypeScript 67.04% CSS 0.16% Dockerfile 0.83%
cypress tailwindcss typescript vite vitest vue period-tracking element-plus indexeddb javascript

fusa-period-tracking's Introduction

FUSA Deployment Validation

An open-source gender-neutral period-tracking app that leaves data management in it's totally to the end user.

Inspiration

From Jessica Khoury's tweet https://twitter.com/jkbibliophile/status/1540345161955385345

Delete your period tracking apps today.

📑 Contents

  1. 📰 Description
  2. 📚 Documentation
  3. 🧱 Tech Stack
  4. 🌇 Architecture
  5. 💡 Objectives and requirements
  6. 🗽 Product
    1. 😥 Description
    2. 🤔 Why?
    3. 📈 Roadmap
  7. 🚀 Deployment
  8. 🍹 Usage
    1. 🕴️ Pre-requisites
    2. ⚙️ How to start the app
    3. 🧑‍🚀 How to deploy the app
    4. 🧪 How to test the app
  9. ⚖️ Legal notice
  10. 🧑🏽‍⚖️ Acknowledgements

📰 Description

↑ Table of contents

A period tracking app based on the premise that no server will store the data, not even temporarily (and this is an important and crucial part of the project's idea).

📚 Documentation

↑ Table of contents

All the documentation is detailed at the /docs folder which you can access from here or at the official link.

🧱 Tech Stack

↑ Table of contents

  • Vue3
    • Frontend framework based on reactivity and progressiveness originally developed by Evan You.
  • Typescript
    • Improved version of JavaScript that implements TypeScript so that safer code is delivered.
  • Vite
    • Web bundler originally created for Vue's ecosystem.
  • Tailwind
    • CSS library that delivers a really small bundle to the client with only what you used.
  • Vitest + Cypress
    • Testing packages for unit, integration and e2e tests.
  • Docker + Docker-Compose
    • Virtualization technologies to deploy containers with the technologies you want.

🌇 Architecture

↑ Table of contents

It will attempt to be an hexagonal architecture so to say, since there will be no backend, elements have to be processed on the client, but that does not mean no structure should be followed.

I'm choosing the hexagonal architecture since entities will be the core part of the application. There will be connections (in both ways) to the IndexedDB, to the UI (React), to the store most likely (Redux). Having as much information and logic of each entity centralized will be helpful on the long run, and, from my current perspective, it will be scalable.

As for the decisions, they're based on my experience, both professional and personal experiences, mostly personal. But it is worth noting that this project will be complicating things for the sake of it, not necessarily reinventing the wheel, but it's not it's most optimized version. But I'll learn along the way, and will be prototyping until I get it right.

💡 Objectives and requirements

↑ Table of contents

For the up-to-date document defining the requirements and objectives, please, refer to the REQUIREMENTS.md document.

🗽 Product

↑ Table of contents

😥 Description

↑ To the section

It's going to be a period tracking app based on the premise that the user will have total and full access and control to their data, and it will be gender-neutral and customizable to an extent (as much as I'm able to do and acknowledge).

🤔 Why?

↑ To the section

The situation in USA at the moment of development is out of control, it has put, not only women, but any fertile, person with a uterus at high risk, so, currently, having a period tracking app may put you in danger since they may be selling your data (which, if not most, a lot of them are! More on that on the following article How period tracking apps and data privacy fit into a post-Roe v. Wade climate.

Periods are also something that as a cis male, I don't know that much about, but I'm ready to learn all that I can, and is also a strong point I'm looking forward

📈 Roadmap

↑ To the section

It is specified, visible and up-to-date at the Github's Project.

🚀 Deployment

↑ Table of contents

It will be deployed on Github Pages for the moment being. I might end up using VercelJS in the future, but it's something I have not properly considered.

🍹 Usage

↑ Table of contents

It uses vue, with vite, since it uses vite, it already provides some utility commands.

🕴️ Pre-requisites

↑ To the section

You'll need to have node.js install in your system to run the application locally. It could also be delivered on-premise (not the intended way though).

I'm currently using:

  • node.js (v15.14.0)
  • npm (8.11.0)

⚙️ How to start the app

↑ To the section

Kind of simple, if you've met the requirements

npm run dev

So you can now head to:

https://localhost:3000

🧑‍🚀 How to deploy the app

↑ To the section

You can just execute the following command.

npm run build

And move the app/dist/ folder it genereted to the path you want to application in. This process can be completely be automated.

🧪 How to test the app

↑ To the section

The following command, using vitest, will be testing on watch mode, which means it won't exit, and as soon as you make a change, it will refresh the test you modified, a little more complex than that, but until that I kind of comprehend.

npm run test

If you want the coverage, and this one won't execute on watch mode, meaning, once finished, it will stop.

npm run coverage

⚖️ Legal notice

↑ Table of contents

It attempts to be as crystal clear as possible, but no data is intended to be stored at any other device that your own. To be shared with no one but who you consent by directly sending your data with whatever security you mean necessary and required, at your own risk. Be safe out there!

🧑🏽‍⚖️ Acknowledgements

↑ Table of contents

  • To Jessica Khoury for her viral tweet putting to the light such a serious problem.
  • To all the people with uterus in USA that at such level of risk because of old jerks.

fusa-period-tracking's People

Contributors

jofaval avatar

Stargazers

 avatar

Watchers

 avatar

fusa-period-tracking's Issues

Birth control component

A list-type of component/element that describes the type of birth control used and it's dosis, it will be a list of types of (birth) control used

Design and integreate a CI/CD pipeline

No unvalidated piece of code will pass "easily" to the main codebase. So that, that way, we can deploy safer code, and to actually deploy on any master's branch change.

  • Checkout repository
  • Install packages
  • Build
  • Validation
  • Testing
  • Deployment to Github Pages, and/or any other deployment service later down the line

Implement routing

The basic code for the base routing, not necessarily all of the routes, just to "bootstrap" that part

Intercourse component

The amount of times the user may have had, in one specific point of time (maybe, for the future, time intervals) sexual intercourse

Temperature component

Allow for different standards of degrees, but store it in celsius, since it's the one that I'm the most familiar with, and I feel it's also a standard (except for USA, I'll give it a thought though). Users should be able to choose their default/preferred format

Integrate a CI/CD pipeline for Pull-Requests

It won't be forced, but it will be a reminder so that any non-expected unvalidated code gets passed to the main codebase

  • Checkout repository
  • Install packages
  • Build
  • Validation
  • Testing

Same than the #35 but without the deployment, validation and testing only.

Initialize the base configuration

Completely configure all the configuration for the initial services to be used

  • Vue.js
  • Typescript
  • Testing (Vitest + Cypress)
  • Git hooks (Husky)
  • Tailwind

Enable PWA

Progressive WebApps are the way to go for mobile apps using just web applications, they allow for installation and basic customization, which should be more than enough, while still allowing for web browser client utilities such as persistent store and DOM (with React, not react native)

Create all the base tickets

Just to have some starting playground from which to iterate and keep on improving.

Just the conceptual idea, there will, hopefully, increase more.

Weight component

A component to represent the user's current weight, wether in kg, lbs and it'd be a nice extra to implement a conversor.

Adding a label of, would be nice:
Weight yourself at the same hour or moment (i.e., in the mornings after poopoo), with the same amount of clothes, and taking into account that weight, while "not relative", it fluctuates.
It'd may be better as sort of a tooltip

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.