the todo app for people that get things done eventually™
📆 Task Scheduling: Easily schedule tasks for today, tomorrow, or a year from now.
🔜 Date Ranges: Many day-to-day tasks don't have a single, strict "due date" - give a task a date range and its priority will scale accordingly.
🔁 Repeating Tasks: Set up tasks to repeat every day, week, month, year, or somewhere in between.
⏱️ Time Estimates: Estimate how long your tasks will take so you can plan around them.
Be sure to read the user-facing documentation for more info.
This app can be run locally on any machine that supports Node and MongoDB, or it can be deployed remotely "on the cloud". If you just want to try it out, there is an invite-only instance running for beta testing purposes. Send us an email to request access.
This is a Next.js project bootstrapped with create-next-app
.
- TypeScript (statically-typed JavaScript)
- React (front-end framework)
- Tailwind CSS (style framework)
- Node.js and Express.js (web & dev server framework)
- MongoDB (data store)
- Webpack (build and bundling tools)
- Nodemailer, MJML, and Handlebars (email templating & sending)
- NextAuth.js (user authentication)
- Jest (automated testing)
You'll need the following dependencies:
- Node.js v20.18.0 or greater.
- npm, yarn, or pnpm.
- MongoDB connection string - either a local installation, or a remote instance, like on MongoDB Atlas for example.
- Create a database, recommended name
LyfeSchedule_beta
and initial collectionuser
. Keep the defaults for all other options.
- Create a database, recommended name
- A SMTP email service.
- A clone of this repo.
Finally, install Node dependencies:
# from inside the project directory
npm install
# or
yarn install
# or
pnpm install
See the .env.example
for info on required and optional environment variables. Either create a .env.local
file at the project root or define the variables another way.
TODO more info on configuration options here, like IS_REGISTRATION_INVITE_ONLY
?
Build and run the server:
npm run build && npm start
# or yarn or pnpm
Open http://localhost:3000 with your browser to see the result.
In order to set up the initial user, it's recommended to insert a dummy user and follow the password reset flow.
- Using the MongoDB CLI or Compass, create the
user
collection if it doesn't exist. Then insert a record/document in theuser
collection like{ "email": "<your-email>" }
; for example,{ "email": "me@website.com" }
. - Get the ObjectID for that record/document and copy it into the
ADMIN_USER_ID
env var. - Restart the server.
- Visit /auth/request-reset-password, type in your email from Step 1, and click "Send password reset email". Follow the instructions from the password reset email you receive.
- Sign in with your email and newly set password.
- If there are other users you want to invite, you can do so through the /auth/send-invitation page. They will get an invite email with further instructions on how to register.
Here's an alternate, more UI-centric approach:
- Set the
IS_REGISTRATION_INVITE_ONLY
env var tofalse
. - Restart the server.
- Visit /auth/register and create as many users as needed.
- [Recommended] Set the
IS_REGISTRATION_INVITE_ONLY
env var back totrue
to prevent further registrations. Only skip this step if you know what you're doing. - [Optional] Using the MongoDB CLI or Compass, check the
user
collection and get the ObjectID for the admin user (probably you). Copy this ID into theADMIN_USER_ID
env var. - If any env vars were changed, restart the server.
TODO contribution guide
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
See the Installation and Environment sections above.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
Open http://localhost:3000 with your browser to see the result. Pages will auto-update as you edit and save the files.
It is also possible to make a "demo build" where all the data storage is handled in the client via window.localStorage
. This build is meant to serve as a low-cost, low-risk demonstration for how the app works. Mongo is not needed for this build and the API endpoints and auth flows are stripped out. This is driven by the IS_DEMO_MODE
env var, but it's easiest to use the provided demo-specific npm scripts:
- You can run the demo dev server with
npm run dev:demo
. - You can build the demo app with
npm run build:demo
, which can then be started withnpm start
.
TODO blog post?
This project uses Jest for automated testing. Run the tests:
npm test
# or
npm run test:watch
# or yarn or pnpm
See the Create initial user account(s) section above.
- VS Code (TODO extensions?)
- ESLint
- MongoDB Compass
- Postman
Please let us know if you find a bug or have thoughts on what could be improved by sending an email to feedback@lyfeschedule.com.
TODO, I haven't decided yet 😉