Full-stack трекер привычек: Node.js + Express + MongoDB на бэкенде и React + Vite на фронтенде.
- Регистрация/логин (JWT)
- CRUD привычек с частотой (daily/weekly) и категориями
- Отметка выполнения, фильтры и базовая статистика
- CRUD категорий
/— публичный лендинг/login,/register— формы авторизации/app— дашборд (защищённая зона)
- Клонировать:
git clone https://github.com/ALEVOLDON/habit-tracker.git
cd habit-tracker- Бэкенд:
cd habit-tracker-backend
npm install
cp .env.example .env # заполните MONGO_URI, JWT_SECRET, при необходимости FRONTEND_URL
npm run dev- Фронтенд (новое окно):
cd habit-tracker-frontend
npm install
cp .env.example .env # для локалки оставьте VITE_API_URL=http://localhost:5000/api
npm run dev- Открыть http://localhost:5173
PORT=5000
MONGO_URI=mongodb://localhost:27017/habittracker # или ваш Atlas URI
JWT_SECRET=your_jwt_secret
FRONTEND_URL=http://localhost:5173 # прод: https://your-frontend.com
VITE_API_URL=http://localhost:5000/api # прод: https://your-backend.com/api
- npm run dev — dev-сервер (nodemon)
- npm test — Jest + mongodb-memory-server
- npm run dev — Vite dev server
- npm run build — прод сборка
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register | Регистрация |
| POST | /api/auth/login | Логин (JWT) |
| GET | /api/habits | Список привычек |
| POST | /api/habits | Создать привычку |
| PATCH | /api/habits/:id | Обновить привычку |
| PATCH | /api/habits/:id/check | Отметить выполнение |
| DELETE | /api/habits/:id | Удалить привычку |
| GET | /api/categories | Список категорий |
| POST | /api/categories | Создать категорию |
| PATCH | /api/categories/:id | Обновить категорию |
| DELETE | /api/categories/:id | Удалить категорию |
habit-tracker/
├─ habit-tracker-backend/ # Express + MongoDB API
└─ habit-tracker-frontend/ # React + Vite SPA
- Frontend: Netlify (base
habit-tracker-frontend, buildnpm run build, publishhabit-tracker-frontend/dist). Env:VITE_API_URL=https://<render-app>.onrender.com/api. - Backend: Render (Node service). Env:
MONGO_URI=<Atlas URI>,JWT_SECRET=<секрет>,FRONTEND_URL=https://<netlify-site>.netlify.app. PORT не задаём — Render прокидывает сам.
MIT