A full-stack Todo app with React Native (Expo) frontend and a Node/Express + MongoDB backend. Includes basic auth (register/login) and a Todo list with priority, category, and deadline.
- Authentication: Register + Login (JWT returned by backend)
- Todos: List, add, delete
- Task metadata: priority, category, deadline
- UI: Bottom tabs (Home + Tasks), category cards, modal create-task flow
- Frontend: React Native (Expo), TypeScript, React Navigation, Zustand,
tailwind-react-native-classnames - Backend: Node.js, Express, MongoDB (Mongoose), JWT, CORS, dotenv
frontend/— Expo appbackend/— Express API server
From backend/:
npm installCreate backend/.env:
MONGO_URI=mongodb://127.0.0.1:27017/todo_app
JWT_SECRET=change-me
PORT=5000Run in dev:
npm run devIf you prefer production mode:
npm run build
npm startFrom frontend/:
npm install
npx expo startThen run on:
- Expo Go (scan QR)
- Android Emulator / iOS Simulator
- Web via
npm run web
The frontend currently calls a deployed backend URL (Railway) via hardcoded constants:
frontend/src/api/auth.api.tsfrontend/src/api/todo.api.ts
To use your local backend, change the base URLs to:
- Auth:
http://<YOUR_IP>:5000/auth/api - Todo:
http://<YOUR_IP>:5000/todo
Notes:
- If testing on a physical phone,
localhostwon’t work—use your machine’s LAN IP (e.g.192.168.1.10). - If using Android emulator, you can typically use
http://10.0.2.2:5000.
Base paths:
- Auth:
/auth/api - Todos:
/todo
Auth:
POST /auth/api/register—{ name, email, password, retypePassword }POST /auth/api/login—{ email, password }
Todos:
GET /todo/listPOST /todo/add—{ title, description, priority, category, deadline }DELETE /todo/delete/:id
- Password storage: passwords are stored/compared as plain text in the current backend model (no hashing).
- Todo completion: completion is toggled in the app state; there’s currently no backend endpoint to persist completion updates.
npm run start— start Expo dev servernpm run android— run Android buildnpm run ios— run iOS buildnpm run web— run for web
npm run dev— dev server (ts-node + nodemon)npm run build— compile TypeScriptnpm run start— run compiled server