Quackback - open-source customer feedback platform. Bun monorepo, TanStack Start, PostgreSQL + Drizzle, Tailwind v4 + shadcn/ui.
bun run setup # One-time setup (deps, Docker, migrations, seed)
bun run dev # Dev server at localhost:3000 (login: demo@example.com / password)
bun run build && bun run db:generate && bun run db:migrate
bun run test && bun run test:e2e && bun run lint && bun run typecheck- Entity IDs are branded TypeIDs via
@quackback/ids - Never add co-author trailers to git commits
- When cutting a release, bump
versioninapps/web/package.jsonto match the git tag — this is the source of truth for__APP_VERSION__(injected at build time via Vite) - Tier limits live in
settings.tier_limits(JSON column) and are enforced viagetTierLimits()+ the helpers inapps/web/src/lib/server/domains/settings/tier-enforce.ts. The default (no row) is unlimited. The control-plane writes per-tenant limits via/api/v1/internal/tier-limits(scope-gated). The OSS code is unaware of "cloud" as a concept — limits and their writer are the same mechanism for self-hosters and cloud tenants.