Stack & convenções
Backend
- Python 3.12 · FastAPI · SQLAlchemy 2 (async, asyncpg) · Alembic · PostgreSQL 16
- Pydantic v2 com
alias_generator=to_camel→ o wire é camelCase (casa 1:1 com o front). - Auth: Argon2 (senha) + JWT access/refresh. RBAC: papéis
admin · analista · gerente_loja · viewer. - Lint ruff, testes pytest (Postgres efêmero).
Frontend
- TanStack Start (SSR) · React 19 · Tailwind v4 (tokens OKLCH) · shadcn/ui — base de tudo.
- Aceternity UI / Magic UI — pontual (login, hero/dashboard, background sutil), não em toda tela.
- React Bits — efeitos de texto e backgrounds animados.
- Motion — transições da aplicação.
- Lucide — ícones (vem com shadcn). React Three Fiber — quando precisar 3D real.
- Cliente HTTP único (
core/services/api) com Bearer token; tipos emcore/services/types.
Identidade visual (oficial Aby's)
- Laranja #FF8B00 (
oklch(0.749 0.18 58)) — único accent + preto/branco. - Texto sobre laranja usa tom escuro (
--primary-strong) para passar contraste WCAG AA. - Fonte Kanit (logo/corpo) + Anton (display). Logo SVG oficial em
abys-logo.tsx.
Convenções
- Contrato camelCase ponta a ponta (back serializa camelCase, front consome direto).
- Gitflow: nunca commit direto em branch protegida; sempre branch → MR → merge. Deploy via branch
dev. - Build no Docker (não no script do job) por causa do limite de RAM do runner.