Linux Society's portal for managing subcommittee applications.
- zID email OTP authentication
- applicant-facing application flow and status timeline
- admin dashboard for cycles, subcommittees, and applicant management
- Cloudflare Worker deployment with Hyperdrive, KV, and rate limit bindings
- SvelteKit + Svelte 5
- Better Auth (email OTP)
- Drizzle ORM + PostgreSQL (Neon Serverless)
- Cloudflare Workers + Wrangler
- Tailwind CSS 4
- Shadcn-Svelte UI components
- Install dependencies:
pnpm install- Create local environment variables:
cp .env.example .env-
Fill in required values in
.env(at minimumDATABASE_URL, auth secrets, and app origin). -
Start the dev server:
pnpm run devRun a preview against the development environment. This provides a simulated Cloudflare Worker runtime and local bindings (miniflare):
pnpm run preview:mode:devDrizzle reads DATABASE_URL from the environment (.env), so ensure it targets the correct database before running commands. For now, Neon branch management is done through environment variables. In development, the DB connection fallback also uses DATABASE_URL, so it can point to either local Postgres or a Neon dev branch.
# create migration files from schema changes
pnpm run db:generate
# apply migrations
pnpm run db:migrate
# push schema directly (use with care)
pnpm run db:push
# open Drizzle Studio
pnpm run db:studio- Prepare production environment values:
cp .env .env.production- Build:
pnpm run build- Preview production worker locally:
pnpm run previewAfter confirming production env values and database state:
pnpm run deploy