01 /
Project
QuicKards is a production-focused SaaS starter for colleges, festivals, events, and orgs that need fast, branded ID card generation at scale.
Design and generate ID cards in bulk with a Canva-style editor, CSV automation, and server-side rendering.
QuicKards is a production-focused SaaS starter for colleges, festivals, events, and orgs that need fast, branded ID card generation at scale.
Status: v2 rebuild in progress. The backend is being migrated off Appwrite to Neon (Postgres) + Better Auth + Cloudflare R2, and the editor is being rebuilt around a single shared SVG renderer. See
docs/APPWRITE-REMOVAL.mdfor the decommission plan. Some legacy Appwrite routes under/api/v1still exist and are removed phase by phase as their v2 replacements land.
card_id field matchingcard_id@resvg/resvg-js (SVG → PNG), sharp, pdf-lib, archiver, qrcodenpm install
docs/SETUP.md for where each value comes from (Neon, R2,
Inngest, Stripe).cp .env.example .env.local
npx drizzle-kit migrate
npm run dev
App runs at http://localhost:3000. Verify the database connection at
http://localhost:3000/api/health.
See .env.example for the full list and
docs/SETUP.md for where each value comes from. In brief:
DATABASE_URL (Neon pooled connection string)BETTER_AUTH_SECRET, BETTER_AUTH_URL, NEXT_PUBLIC_APP_URLR2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_NAMEINNGEST_EVENT_KEY, INNGEST_SIGNING_KEYSTRIPE_SECRET_KEY, NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEYsrc/lib/design) so on-screen and printed output cannot diverge.organizationId; queries go through the
lint-enforced scoped repository in src/lib/db/scope.ts.src/lib/db/schema, then npx drizzle-kit generate
and npx drizzle-kit migrate.npm run dev – local dev servernpm run lint – lintingnpm run build – production buildnpm run start – run production build