A directory-first community portal for RaidGuild that centralizes profiles and curated modules into a single public home.
- Provide one cohesive portal URL with coherent navigation and SEO.
- Make profiles the core artifact (directory + public profiles).
- Let teams ship independently by registering modules (link or embed) with optional summaries.
- Support module-owned data via a simple portal API.
- Next.js App Router + TypeScript + Tailwind CSS.
- Module registry in
modules/registry.json(source of truth for modules). - Module surfaces driven by tags (
start-here,people-tools,profile-tools-public,me-tools). - Supabase auth + profiles + avatar storage + module data API.
/home and start-here modules/peoplepublic directory/people/[handle]public profile/meprofile editor (auth required)/modulesmodule directory/modules/[id]module detail (optional)/modules/announcementsannouncements module/modules/billingbilling module/modules/cohort-applicationcohort application module/modules/cohort-hubcohort hub module/modules/profile-generatorsprofile generators module/modules/skills-explorerskills explorer module/api/modulesregistry JSON/api/healthdeploy/smoke health check (returns ok + git sha)/api/module-datamodule data API/api/announcementsannouncements API/api/cohortscohorts API/api/cohort-applicationscohort applications API/api/me/entitlementsentitlement status API/api/me/rolesroles API/api/profileprofile write API (portal-owned modules)/api/stripe/checkoutStripe Checkout session/api/stripe/portalStripe Customer Portal session/api/stripe/webhookStripe webhook for entitlements
npm install
npm run devnpm run devstart the app locallynpm run buildproduction buildnpm run startrun the production buildnpm run lintlintnpm run sync:modulessync registry intopublic.modules(Supabase)npm run module:keycreate a module key + hash (Supabase)
The portal expects Supabase for profile data, auth, and module data APIs.
Env vars:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYSUPABASE_URLSUPABASE_SERVICE_ROLE_KEYVENICE_API_KEY(profile generators)VENICE_MODEL(profile generators, text)VENICE_IMAGE_MODEL(profile generators, image)VENICE_API_BASE_URL(optional; defaults tohttps://api.venice.ai/api/v1)STRIPE_SECRET_KEY(billing)STRIPE_WEBHOOK_SECRET(billing)STRIPE_PRICE_ID(billing)STRIPE_PORTAL_CONFIG_ID(billing, optional)
Behavior notes:
/peopleand/people/[handle]require Supabase data; configure envs and run migrations./merequires Supabase auth; missing env vars will throw at runtime.
- Module registry:
modules/registry.json - Module authoring guide:
docs/module-authoring.md - Module registry notes:
modules/README.md
- Migrations and seeds live in
supabase/ - Type generation and local auth notes:
supabase/README.md - Entitlements are stored in
public.entitlementsand used for module access gating.
- Product kickoff:
docs/kickoff-spec.md - Architecture overview:
docs/architecture.md - Brand and UI tokens:
RG_BRAND_AGENTS.md - Cohort hub (v1):
docs/cohort-hub.md