Files
cardy/README.md
T
2026-09-29 13:50:01 +03:00

1.6 KiB

Cardy

Discount card storage. Specification: development specification-v2.md.

Package Port Public URL Proxy auth
server-fe — admin UI (Vite) 10001 https://dev.aggtaa.com/ Authelia
server-be — admin API 10002 https://dev.aggtaa.com/api/admin/* → /admin/* Authelia, passes Remote-Email
server-be — client API 10002 https://dev.aggtaa.com/api/* → /* none
mobile-client — PWA 10003 https://dev.aggtaa.com/m/* → /* none

The proxy strips /api and /m and passes them in X-Forwarded-Prefix.

Setup

pnpm install
cp server-be/.env.example server-be/.env   # fill in KEY_ENCRYPTION_SECRET, SUPERADMIN_EMAIL
cp server-fe/.env.example server-fe/.env

Run

pnpm --filter @cardy/server-be dev     # API on 127.0.0.1:10002 (tsx watch)
pnpm --filter @cardy/server-fe dev     # admin UI on :10001

Production-like: pnpm --filter @cardy/server-be build && pnpm --filter @cardy/server-be start, pnpm --filter @cardy/server-fe start (build + vite preview on :10001).

server-be listens on 127.0.0.1 by default because /admin/* trusts Remote-Email. If the proxy runs on another machine, set HOST and ADMIN_PROXY_SECRET, and make the proxy add X-Cardy-Proxy-Secret on the /api/admin route.

Without the proxy (local development), server-fe emulates it: forwards /api/* to server-be with /api stripped; DEV_REMOTE_EMAIL in server-fe/.env fakes the Authelia user.

Tests

pnpm test
pnpm typecheck