🕒 Timer Monorepo
Timer Monorepo — это легковесное Fullstack-приложение для персонального учета времени труда с поддержкой многопользовательского режима через URL-идентификацию. Проект построен на современном стеке 2026 года с акцентом на скорость работы и простоту деплоя. 🚀 Основные возможности
Многопользовательский режим без регистрации: Просто добавьте любой ID в конец URL (например, /777), и система создаст отдельный профиль.
Персональный таймер: Отслеживание времени в реальном времени с сохранением в базу данных.
Автоматическая агрегация: Данные сохраняются с привязкой к дате, что позволяет видеть общую статистику за все время.
Docker-ready: Полная конфигурация для мгновенного развертывания в изолированной среде.
🛠 Технологический стек Frontend (/packages/frontend)
React 19 + TypeScript
Vite: Сверхбыстрая сборка и Hot Module Replacement (HMR).
SPA Routing: Автоматический захват User ID из адресной строки.
Backend (/packages/backend)
Node.js 22 + Express 5.x
Better-SQLite3: Высокопроизводительная синхронная работа с SQLite в режиме WAL (Write-Ahead Logging).
TSX: Запуск TypeScript напрямую в dev-среде без предварительной компиляции.
💻 Локальная разработка (Dev)
Для запуска проекта вам понадобится pnpm.
Установка зависимостей:
Bash
pnpm install
Запуск в режиме разработки:
Bash
pnpm dev
Фронтенд: http://localhost:5173
Бэкенд (API): http://localhost:3001
Примечание: В режиме разработки запросы к API проксируются через Vite. 🐳 Развертывание в Docker (Production)
Проект оптимизирован для работы в одном контейнере, где Express обслуживает и API, и статические файлы фронтенда.
Сборка и запуск:
Bash
docker compose up --build -d
Доступ к приложению:
Откройте http://localhost в браузере.
Структура папок в Docker:
/app/packages/backend/database.sqlite — файл базы данных.
/app/packages/frontend/dist — собранный фронтенд.
Важно: База данных монтируется в локальную папку ./data на вашем хосте. Ваши данные не пропадут при обновлении или остановке контейнера.
🔌 API Эндпоинты Метод Путь Описание GET /api/timer/:userId/total Получить общее количество секунд пользователя за всё время. PATCH /api/timer/:userId Добавить указанное количество секунд в текущую дату.
Пример запроса (PATCH): JSON
{ "add": 3600 }
📂 Структура проекта Plaintext
timer-monorepo/ ├── packages/ │ ├── frontend/ # React + Vite приложение │ └── backend/ # Express API + SQLite логика ├── data/ # (Создается автоматически) Хранилище БД ├── docker-compose.yaml # Конфигурация оркестрации └── Dockerfile # Multi-stage сборка проекта
📝 Лицензия
MIT. Сделано для личного использования и продуктивной работы.