Modern POS and club management system built with SvelteKit 5, Supabase, and Tailwind CSS v4.
$state, $derived)# Install
bun install
# Environment
cp .env.example .env.local
# Edit .env.local with your Supabase credentials
# Development
bun run dev
# With local Supabase
supabase start
supabase db reset
bun run db:seed
bun run dev # Start dev server
bun run build # Production build
bun run check # Type check + lint + knip
bun run test # Unit tests (vitest)
bun run test:e2e # E2E tests (playwright)
bun run db:seed # Seed demo data
bun run db:reset # Reset and seed database
src/
├── routes/ # SvelteKit pages and API routes
│ ├── (app)/ # Authenticated app routes
│ │ ├── admin/ # Admin pages (products, users, settings)
│ │ ├── staff/ # Staff POS interface
│ │ └── bookings/ # Booking management
│ └── api/ # API endpoints
├── lib/
│ ├── components/ # UI components (shadcn-svelte)
│ ├── services/ # Database service layer
│ ├── state/ # Svelte 5 state modules
│ ├── i18n/ # Translations (en, el)
│ └── types/ # TypeScript types
└── hooks.server.ts # Auth middleware
# Required
PUBLIC_SUPABASE_URL=https://xxx.supabase.co
PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY=eyJ...
# Server-side (for admin operations)
SUPABASE_SECRET_KEY=eyJ...
Core tables: tenants, facilities, users, memberships, products, categories, orders, order_items, bookings, register_sessions, subscriptions
See supabase/migrations/ for schema.
bun run test # Unit tests
bun run test:e2e # E2E tests (requires dev server)
SKIP_DB_TESTS=false bun run test # Include database integration tests
Configured for Vercel with @sveltejs/adapter-vercel. Set environment variables in Vercel dashboard.