Monorepo for the Symphonic Student Association at UC San Diego:
- @ssaucsd/dashboard - Next.js member/admin dashboard (Clerk + Convex)
- @ssaucsd/web - Astro public site (reads from Convex)
ssaucsd/
├── apps/
│ ├── dashboard/
│ └── web/
├── packages/
│ ├── database/
│ ├── ui/
│ └── typescript-config/
├── convex/
├── scripts/
├── supabase/ # Legacy source schema/data for migration
├── turbo.json
└── package.json
- Clone and install tools
git clone <repo-url>
cd ssaucsd
mise install- Install dependencies
bun install- Configure env files
cp .env.example .env
cp apps/dashboard/.env.example apps/dashboard/.env
cp apps/web/.env.example apps/web/.env- Run apps
bun run dev- Dashboard: http://localhost:3000
- Web: http://localhost:4321
SUPABASE_DB_URL(source DB for migration script)CONVEX_URLCONVEX_DEPLOY_KEYMIGRATION_SECRETCLERK_JWT_ISSUER_DOMAIN
NEXT_PUBLIC_CONVEX_URLCONVEX_URLCONVEX_DEPLOY_KEYCLERK_JWT_ISSUER_DOMAINNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEYNEXT_PUBLIC_POSTHOG_KEYNEXT_PUBLIC_POSTHOG_HOSTNEXT_PUBLIC_SENTRY_DSNSENTRY_AUTH_TOKENUPLOADTHING_TOKEN
PUBLIC_CONVEX_URL
bun run dev
bun run build
bun run lint
bun run typecheck
bun run format:check
bun run check
bun run format# Optional: set CLEAR_EXISTING=true for full replace
# Optional: set MIGRATION_SNAPSHOT_PATH=./snapshot.json to persist export
bun run data:migrateThis script:
- Pulls
profiles/events/resources/tags/resource_tags/rsvpsfromSUPABASE_DB_URL. - Imports them into Convex via
migrations:importSnapshot. - Prints resulting Convex table counts.
- Dashboard deploys from
apps/dashboard. - Web deploys from
apps/web. - Use Bun in CI/CD install/build commands.
- Monorepo: Turborepo + Bun workspaces
- Dashboard: Next.js, Clerk, Convex, Tailwind
- Web: Astro, Convex
- Data migration source: Supabase Postgres
- Monitoring: Sentry, PostHog