User-centric HTTP reverse proxy with logging, analytics, and multi-channel alerts — built as a Bachelor's thesis project at Ukrainian Catholic University.
Put the proxy between your client and any HTTP API. Get a public URL, full request/response capture, latency and error metrics, and alerts in Telegram, Slack, or emailll — without changing the upstream service.
- Reverse proxy with unique slug URL per endpoint (
/r/{slug}or{slug}.domain) - Multi-tenant — every user owns their endpoints, logs, alert rules, and integrations
- Full request/response logging with sensitive header masking
- Analytics — summary, time-series (
date_truncbuckets), method/status breakdowns - Alerts — Telegram, Slack, email; declarative rules; Slack interactive
Mute 1h - Rate limiting — sliding window on Redis sorted sets with in-memory fallback
- Transform pipeline —
REWRITE_PATH,ADD_HEADER,REMOVE_HEADER,SET_BODY - SSE streaming for AI / chat APIs (chunk-by-chunk, no buffering)
- Auth — JWT access + refresh cookie, email OTP verification, bcrypt
- Scheduled digests — daily / weekly reports through any channel
- Backend: NestJS, Prisma, PostgreSQL, Redis
- Frontend: React 19, Vite, TanStack Query, Tailwind, Recharts
- Shared: TypeScript monorepo (
libs/sharedfor DTOs) - Deploy: Docker Compose (local / stage), AWS EC2
Requirements: Node 22.22.0, npm 10.9.4, Docker.
# 1. Install
npm ci
# 2. Bring up PostgreSQL + Redis locally
npm run docker:local:up
# 3. Run migrations
npm run prisma:migrate -w apps/backend
# 4. Start backend (port 3000)
npm run start:dev -w apps/backend
# 5. Start frontend (port 5173)
npm run dev -w apps/webOpen http://localhost:5173 → register → verify email → create your first endpoint.
Proxy URL format:
http://localhost:3000/r/{slug}
apps/
backend/ NestJS API + proxy middleware
web/ React dashboard
libs/
shared/ Shared DTO types
docs/ Thesis presentation, assets
scripts/ Utilities (figure extraction, etc.)
docker-compose.local.yml Local dev stack
docker-compose.stage.yml Staging build with API + Web + data
npm run docker:local:up # PostgreSQL + Redis + RedisInsight
npm run docker:stage:up # Full app + data on .env.stage
npm run lint:check # Biome lint
npm run lint:format:fix # Biome format- Full thesis:
Bachelor Kutsenko Maksym.pdf - Presentation script:
docs/bachelor-defense-presentation.md - Benchmark figures:
docs/presentation-assets/figures-clean/
Maksym Kutsenko · UCU, Faculty of Applied Sciences, 2026
Supervisor: Dmytro Pryimak, Senior Data Engineer, MEGOGO Ukraine
ISC