Easy Access QR is an organization-first QR code platform for creating branded QR codes, routing traffic with weighted destinations, and tracking view analytics.
- Organization-scoped QR code management
- Dynamic short links (
/r/:organizationSlug/:qrSlug) with scan/view tracking - Weighted destination routing (A/B and multi-destination splits)
- QR design studio (styles, colors, logo support, export to PNG/SVG/JPEG)
- iPhone-safe QR constraints enforced in the builder
- Public QR pages for shareable, non-auth QR previews
- Analytics dashboards:
- Total views, views today, active codes
- Daily trend charts
- Top codes and destination hit breakdowns
- Onboarding flow for new organizations
- People management and billing settings
API keysis intentionally disabled in the app UI for now./app/settings/api-keysredirects to/app/settings- API key screens can be re-enabled later
- TanStack Start + TanStack Router
- tRPC
- Drizzle ORM + PostgreSQL
- Better Auth
- Tailwind CSS + Radix UI primitives
- Bun runtime + toolchain
qr_codeorganizationId,createdByUserIdname,slug,destinationUrldestinations(weighted routing rules)isActive,isPublicscanCount,lastScannedAt, timestamps
qr_scan_eventqrCodeId,organizationId,scannedAt- destination attribution (
selectedDestinationId,selectedDestinationUrl) - request metadata (
referrer,userAgent,ipHash,country,city,deviceType)
- Install dependencies
bun install- Create env file
cp .env.example .env.local- Set required environment values in
.env.local
DATABASE_URL(for this app, typically.../easyaccessqr)BETTER_AUTH_URLBETTER_AUTH_SECRET(32+ chars recommended)
- Prepare the database
bun run db:push- Seed development data (resets all public tables first)
bun run db:seedDefault seed users:
owner@easyaccessqr.comanalyst@easyaccessqr.com- Password:
EasyAccessQR!123(override withSEED_PASSWORD)
- Start the app
bun run devbun run dev- start local dev serverbun run build- production buildbun run start- run built server outputbun run lint- Biome lint checksbun run typecheck- TypeScript type checkbun run test/bun run test:unit- Vitest suitebun run test:e2e- Playwright suitebun run db:generate- generate Drizzle migrationsbun run db:migrate- apply migrationsbun run db:push- push schema to databasebun run db:seed- reset and seed development data
- Hitting a short link (
/r/:org/:slug) records a view and redirects to the selected destination. - If a code is paused, a styled status page is shown.
- If a code is public,
?view=1renders a public QR preview page without auth.
