A todo webapp for creating and managing tasks! ๐
Application Link - http://ec2-43-204-103-180.ap-south-1.compute.amazonaws.com/
- Users can create profile, logout or delete profile
- Users can create, view, update and delete tasks
- Users can mention the following details while creating/updating tasks
- Title (max 50 chars)
- Description (max 300 chars)
- Due Date
- Priority -
LOW
,MEDIUM
, andHIGH
- Status -
INCOMPLETE
,COMPLETE
,CANCELLED
- Enable Daily Reminder (starting from a particular timestamp)
- Enable Recurring Tasks by specifying Time, Frequency
- Tasks are segregated into 3 columns based on Status
- Tasks are sorted based on
Priority
and time of creation - Users cannot set Reminder for Completed Tasks
- Users cannot edit Cancelled Task except for Status
- Docker (preferably version >= 25.0.3)
- Docker Compose (preferably version >= v2.24.6)
- Node (preferably version >= v20.14.0)
Please note, the app was tested with the above version and may or may not work for older ones. If you are facing issues, please try after updating!
The following steps are required to run and setup the project in local!
- Create a
.env
file at the root of the project, and add the following:
CACHE_PORT=6379
CACHE_PASSWORD=<provide-your-own-password>
CACHE_URL=redis://:${CACHE_PASSWORD}@cache-service:${CACHE_PORT}
DB_PORT=27017
APP_DATABASE_URL=mongodb://db-service:${DB_PORT}/taskone
SCHEDULER_DATABASE_URL=mongodb://db-service:${DB_PORT}/agenda
APP_PORT=8080
UI_PORT=3000
PUBLIC_VAPID_KEY=<provide-your-own-public-key>
PRIVATE_VAPID_KEY=<provide-your-own-private-key>
BASE_URL=<provide-your-base-url-e.g.-http://localhost>
- In order to set
PUBLIC_VAPID_KEY
andPRIVATE_VAPID_KEY
, you need to generate your own VAPID key pairs:
# 1. Install web-push libary
npm i web-push -g
# 2. Generate key pairs
# Either run
web-push generate-vapid-key
# Or if you have npx installed
npx web-push generate-vapid-key
- The project can be executed with just one command:
# Run the project
# Either
npm run build
# Or
docker-compose up --build --remove-orphans
# Or
docker-compose up --build
# Or
docker compose up --build
The project has 5 components
- nginx-proxy - port 80
- app-service - port 8080
- ui-service - port 3000
- cache-service - port 6379
- db-service - 27017
Make sure, each one has been compiled and running successfully!
NOTE: If you have existing applications already running on these ports, please free them before you execute the build command
If you have made it this far without any issues, just head over to your browser, and type localhost
and you will have your own personal taskone ๐
GET localhost
-> ui-serviceGET localhost/ping
-> app-service (basic health check)POST loalhost/api
-> app-service (taskone APIs)GET localhost/api-docs
-> app-service (swagger docs)POST localhost/subscribe
-> app-service (push notification)
NOTE: You can also replace localhost with 127.0.0.1
Tests are added only for app-service!
You can run it using:
cd app-service/ && npm test
-
Reminder Feature is implemented using Service workers in browsers, and for the push notification to work, Chrome requires SSL certification. Hence, this feature is not working as expected over HTTP.
-
Swagger Docs has certain security policies in place that require HTTPS. The docs are also not available over HTTP.
Please note, these issues only exist in the hosted application but its working fine in local environment.
In local env:
- Reminder Feature has been tested on Safari
- Swagger Docs are available in all browsers
The GNU GPLv3 - Priyabrata Biswas.