Local setup
Get the platform running
Seven steps. Public pages come up after step five; the Passport and BEAT matching need Clerk.
Convex
Provisions the database and deploys the functions. Leave it running while you work. It hot-reloads the backend.
npx convex dev
Clerk
Create an application at dashboard.clerk.com, then add a JWT template named exactly `convex`. Copy the Frontend API URL it shows you.
# .env.local NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_... CLERK_SECRET_KEY=sk_test_...
Tell Convex which Clerk instance to trust
Convex verifies the Clerk JWT against this issuer. Without it, every authenticated call fails.
npx convex env set CLERK_JWT_ISSUER_DOMAIN https://your-instance.clerk.accounts.dev
Anthropic
Powers résumé parsing, match explanations, action plans, and analyst drafts. Everything else works without it.
npx convex env set ANTHROPIC_API_KEY sk-ant-...
Seed the taxonomy and launch data
Loads the Creative Economy taxonomy, career pathways, seed opportunities, data sources, sector outlooks, and industry signals.
npx convex run seed:run
Grant yourself analyst access
Sign in through the app first so your user record exists, then run this. Privileged roles are never self-assignable through the UI.
npx convex run seed:setRole '{"email":"you@example.com","role":"analyst"}' npx convex run seed:run # re-run to attach seeded interpretationsStart the app
The public pages work as soon as Convex is seeded. The member area needs Clerk.
npm run dev
Reference
Where things live
- convex/schema.ts
- The canonical data model: every object in the spec
- convex/lib/beat.ts
- The BEAT scoring engine. Pure functions, no I/O
- convex/matching.ts
- Builds candidate profiles and runs matching
- convex/ai.ts
- Anthropic calls, all recorded in aiInvocations
- convex/seed.ts
- Taxonomy, pathways, opportunities, signals
- Grilled.md
- Goal, scope, stack decisions, and open questions