Сайт-хаб с инструментами: обработка изображений, конвертеры, финансовый трекер и простой CMS.
- Frontend: React 19, Vite, TypeScript, Tailwind CSS, Shadcn UI (Base UI + CVA), Aceternity UI (Aurora Background, Card Hover Effect, Sparkles)
- Backend: Express.js, SQLite (better-sqlite3)
- API: REST для финансов и CMS
Опционально: веб-аналитика GA4 — переменная VITE_GA_MEASUREMENT_ID в .env (см. .env.example и docs/practical-web-analytics.md).
npm install
npm run devОткройте http://localhost:5173
В одном терминале:
npm run dev:apiВ другом:
npm run devИли одной командой:
npm run dev:allТогда запросы к /api проксируются на http://localhost:3003.
| Путь | Описание |
|---|---|
/ |
Главная — карточки сервисов |
/images |
Обработка изображений: изменение размера, конвертация PNG/JPEG/WebP, сжатие (в браузере) |
/converters |
Конвертеры: длина (м, км, мили, футы…), вес (кг, г, фунты, унции) |
/apis |
Справка по API |
/forum |
Список тем форума |
/forum/t/:id |
Тема и ответы |
/u/:id |
Публичный профиль пользователя |
/finance |
Финансовый трекер (нужен вход) |
/cms |
CMS: ключ–значение (нужен вход) |
/settings/profile |
Настройки профиля (нужен вход) |
/admin |
Админка: пользователи, их финансы/CMS/форум (роль admin) |
/auth/login, /auth/register, /auth/forgot |
Авторизация |
После входа с защищённой страницы выполняется возврат на неё (например /cms → логин → снова /cms).
GET /api/entries— список записей финансовPOST /api/entries— добавить запись (type,amount,category,note?,date?)DELETE /api/entries/:id— удалить записьGET /api/cms— все ключи CMSGET /api/cms/:key— значение по ключуPUT /api/cms/:key— сохранить значение (body:{ "value": "..." })
База SQLite создаётся автоматически в server/data.db при первом запуске API.
npm run buildСтатика в dist/. API разворачивается отдельно.
- Frontend (tools.ne-nas.ru): Vercel или любой хостинг статики
- API (api.ne-nas.ru): папка
backendApi/— деплой на Railway, Render, VPS
В Vercel добавь переменную окружения:
VITE_API_URL=https://api.ne-nas.ru
Для cookies между tools и api: COOKIE_DOMAIN=.ne-nas.ru в backendApi.
- Импортируй репозиторий в Vercel.
- Root Directory:
app(обязательно — не корень монорепо). - Framework Preset: Vite (или оставь автоопределение).
- Build:
npm run build, Output:dist(уже задано вvercel.json). - Environment Variables:
VITE_API_URL= URL твоего API (без завершающего/). Опционально:VITE_GA_MEASUREMENT_IDдля GA4.
Файлы из dist отдаются как статика; rewrites в vercel.json отправляют несуществующие пути на index.html, чтобы работал React Router (/forum/t/..., /u/... и т.д.).