11 Commits

Author SHA1 Message Date
eeabc6be6f fix: FormData not JSON serializable in validation handler, dashboard log to INFO 2026-07-05 19:55:30 +07:00
539957d9b5 chore: add debug logging to dashboard endpoint 2026-07-05 19:52:16 +07:00
da516418bf fix: add Cache-Control no-store to dashboard to prevent stale data 2026-07-05 19:43:36 +07:00
511e2d5329 fix: handle FileExistsError for loguru file sink on Docker overlay fs 2026-07-05 19:33:28 +07:00
e7aa75b7ba fix: add python-multipart dependency for Form data handling 2026-07-05 19:03:16 +07:00
4b33b883f1 feat: add create forms for servers, tariffs, payments in admin panel 2026-07-05 18:26:31 +07:00
7f12e1d2ce feat: add user creation form in admin panel 2026-07-05 18:18:00 +07:00
1ff473b6c6 fix: bypass Starlette Jinja2Templates, use raw Jinja2 to avoid cache_key hash bug 2026-07-05 18:13:12 +07:00
1ad2afbbd6 fix: pin jinja2 <3.14 to avoid cache_key hash issue with dict globals 2026-07-05 18:06:31 +07:00
e5c97973b2 fix: handle empty ADMIN_GROUP_THREAD_ID in settings validator 2026-07-05 17:58:50 +07:00
7c7c88621d Initial commit: VPN Control Panel
- FastAPI REST API with JWT auth
- aiogram 3 Telegram bot with admin middleware
- APScheduler daily tasks (expiry, reminders, revoke, sync)
- SQLAlchemy 2 async ORM with Alembic migrations
- Jinja2 admin panel (Dashboard, Users, Payments, Servers, Tariffs)
- VPN provider abstraction with MockProvider
- Stats service with revenue/subscription analytics
- Docker Compose (PostgreSQL + Redis + app)
- Healthcheck endpoint
2026-07-05 17:50:11 +07:00