Project 1 of ~34

πŸ“š Career Launchpad β€” Architecture

Technical specification for the Career Launchpad micro-course platform. Built on Mac-first, using open-source and local AI where possible.

Mac-native Build Open Source + Local AI Node.js Backend Deno Deploy

πŸ—οΈ Architecture Overview

Career Launchpad is a web application with a heavy async/agentic backend. The frontend is a responsive web app (Mac-native via Electron if needed, but browser-first). The course content pipeline is powered by an AI agent that can run on local models (Ollama/LM Studio on Mac Mini) or cloud APIs.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ USER FACING β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Web App β”‚ β”‚ Mobile PWA β”‚ β”‚ Discord β”‚ β”‚ β”‚ β”‚ (SvelteKit) β”‚ β”‚ (responsive) β”‚ β”‚ Communityβ”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ APPLICATION LAYER β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Course API β”‚ β”‚ Auth Service β”‚ β”‚ Payment β”‚ β”‚ β”‚ β”‚ (Deno Oak) β”‚ β”‚ (JWT/Passkey)β”‚ β”‚ (Stripe) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CONTENT PIPELINE β”‚ β”‚ DATA STORES β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ AI Course Gen β”‚ β”‚ β”‚ β”‚ Supabase (Postgresβ”‚ β”‚ β”‚ β”‚ Agent β”‚ β”‚ β”‚ β”‚ + Auth + Storage)β”‚ β”‚ β”‚ β”‚ (Local Ollama β”‚ │◄────│ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ or Cloud API) β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ Vercel Blob / β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Cloudflare R2 β”‚ β”‚ β”‚ β”‚ Content CMS β”‚ β”‚ β”‚ β”‚ (video storage) β”‚ β”‚ β”‚ β”‚ (Markdown+MDX) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ Upstash Redis β”‚ β”‚ β”‚ β”‚ (sessions, cache)β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ› οΈ Tech Stack

Frontend β€” Browser-First, Mac-Native Ready

ComponentTechnologyWhy
FrameworkSvelteKitFast, minimal JS bundle, great for content-heavy apps. SSR for SEO of course landing pages.
StylingTailwind CSSRapid UI development, consistent design system, dark mode easy
AnimationsMotion (Framer Motion JS)Smooth page transitions, gamification animations (XP pop, badge unlock)
IconsLucideClean, MIT licensed, tree-shakeable
Video PlayerMux or Cloudflare StreamAdaptive bitrate streaming, thumbnail generation, embed codes
PDF Certs@react-pdf/rendererGenerate certificates server-side, downloadable by learners
Desktop (optional)Tauri or ElectronWrap SvelteKit in a native Mac app for offline module access. Not required for launch.

Backend β€” Deno (Deploy Anywhere)

ComponentTechnologyWhy
RuntimeDeno 2TypeScript-first, secure by default, runs on Mac Mini natively, deploys to Cloudflare/Deno Deploy/VPS
FrameworkOak (Deno)Mature middleware framework for Deno, similar to Koa/Express
DatabaseSupabase (PostgreSQL)Postgres with Auth, Realtime, and Storage built-in. Free tier handles 50K users.
Cache / SessionsUpstash RedisServerless Redis for session data, XP counters, rate limiting. $0/day on free tier.
File StorageCloudflare R2S3-compatible object storage for video/content. $0/month for 10GB.
PaymentsStripeCourse purchases, subscriptions, team licenses, coaching bookings
EmailResendDeveloper-friendly email API. Transactional + marketing. $0 for 3K emails/month.
SchedulingUpstash QStashServerless cron jobs for reminder emails, streak calculations

AI β€” Local First, Cloud for Scale

πŸ€– AI Philosophy: Open Source + Local on Mac Mini

The Mac Mini (with Apple Silicon M2/M4) is well-suited for local AI inference:

  • Small models (7B–13B) via Ollama: Good enough for content outline generation, quiz grading, email drafting
  • Medium models (33B–70B) via LM Studio: For higher-quality content generation, syllabus creation
  • Cloud API fallback: MiniMax or OpenAI for content quality that matters most (final course content)
The course generation pipeline uses cloud APIs for the final content polish; local models handle the iterative research and draft work.

TaskRecommended ModelDeployment
Course topic research (market demand)Local: Llama 3.1 8B / Cloud: MiniMax M2.1Ollama on Mac Mini or API
Syllabus outline generationLocal: Mistral 7B / Cloud: MiniMax M2.1Ollama on Mac Mini
Lesson content writingCloud: MiniMax M2.1 (higher quality)MiniMax API
Quiz / assessment generationLocal: Llama 3.1 8BOllama on Mac Mini
Essay / project feedbackLocal: Mistral 7B or Claude via APIOllama or MiniMax
Community AI TA (Q&A)Local: Llama 3.1 8BOllama on Mac Mini
Landing page copyCloud: MiniMax M2.1MiniMax API
Email drip sequencesLocal: Mistral 7BOllama on Mac Mini

πŸ—„οΈ Data Model

users
id (UUID)uuidPrimary key
emailvarchar(255)Unique, indexed
namevarchar(255)Display name
roleenum('learner','creator','admin')Permission level
xp_totalintegerCumulative XP
streak_daysintegerCurrent streak
created_attimestampSignup date
metadata (JSON)jsonbCareer goals, interests
courses
iduuidPrimary key
slugvarchar(255)URL slug, unique
titlevarchar(255)Course title
taglinevarchar(500)One-liner
descriptiontextFull description
topicvarchar(100)Category tag
duration_weeksinteger4–6 typically
price_centsintegerPrice in cents
creator_iduuid (FK)Ref to users
statusenum('draft','published','archived')
syllabus_jsonjsonbModule structure
landing_page_contentjsonbAI-generated copy
created_attimestamp
published_attimestamp
modules
iduuidPrimary key
course_iduuid (FK)Ref to courses
week_numberintegerWeek 1–6
module_numberinteger1–5 per week
titlevarchar(255)
typeenum('video','reading','quiz','project','challenge')
content_mdtextLesson content (MDX)
video_urlvarchar(500)Mux/Cloudflare URL
worksheet_mdtextExercise sheet
xp_rewardintegerXP for completing
estimated_minutesintegerTime to complete
enrollments
iduuidPrimary key
user_iduuid (FK)Ref to users
course_iduuid (FK)Ref to courses
statusenum('active','completed','paused','refunded')
enrolled_attimestamp
completed_attimestampNULL until done
xp_earnedintegerTotal XP from this course
stripe_payment_idvarchar(255)Payment record
certificate_urlvarchar(500)PDF URL if earned
module_progress
iduuidPrimary key
user_iduuid (FK)Ref to users
module_iduuid (FK)Ref to modules
statusenum('not_started','in_progress','completed')
quiz_scoreinteger0–100 if quiz
project_submission_mdtextLearner's project text
project_feedbacktextAI feedback
completed_attimestamp
badges
iduuidPrimary key
slugvarchar(100)Unique identifier
namevarchar(255)Display name
descriptiontextHow to earn
icon_urlvarchar(500)Badge image
xp_requiredintegerXP threshold
user_badges (junction)
user_iduuid (FK)Ref to users
badge_iduuid (FK)Ref to badges
earned_attimestamp
coaching_sessions
iduuidPrimary key
learner_iduuid (FK)Ref to users
coach_iduuid (FK)Ref to users (creator)
course_iduuid (FK)Ref to courses
scheduled_attimestamp
statusenum('booked','completed','cancelled')
pre_session_answersjsonbGoals, questions
stripe_payment_idvarchar(255)

πŸ”Œ API Design (REST/JSON)

API is a JSON REST API. Auth via JWT (Supabase Auth). All endpoints prefixed with /api/v1/.

Auth

POST /auth/signup
Email + password signup. Returns JWT + user profile.
POST /auth/login
Email + password login. Returns JWT (1hr) + refresh token (30 days).
POST /auth/refresh
Rotate access token using refresh token.

Courses

GET /courses
List published courses. Query: ?topic=&page=&limit=
GET /courses/:slug
Course detail + syllabus preview (first module free).
POST /courses
Create course (creator role required). Triggers AI content pipeline.
GET /courses/:slug/modules
Full syllabus with all modules (enrolled users only).

Enrollments

POST /enrollments
Enroll in course. Creates Stripe checkout session. Returns enrollment on success.
GET /enrollments/mine
Current user's enrollments with progress %.
POST /enrollments/:id/complete
Mark course complete, trigger certificate generation.

Progress

POST /progress/:moduleId
Update module progress. Body: {status, quiz_score?, project_submission?}. Triggers XP update.
GET /progress/dashboard
User's full progress: XP, streak, badges, course progress, recommendations.

Badges

GET /badges
All available badges with earned status for current user.

Coaching

POST /coaching/book
Book coaching session. Body: {course_id, preferred_times}. Creates Stripe payment.
GET /coaching/sessions
List user's coaching sessions.

AI Content Pipeline (Internal)

POST /internal/generate-course
Trigger AI course generation. Body: {topic, target_audience, duration_weeks}. Returns job ID.
GET /internal/generate-course/:jobId
Check generation job status.

πŸ€– AI Course Generation Pipeline

When a creator starts a new course, the AI pipeline generates the full curriculum. Runs async via a background job queue (Upstash QStash).

Step 1: Topic Research
AI analyzes job market data (Burning Glass, LinkedIn, BLS) to validate topic demand and identify the 3 most valuable career outcomes for someone who completes this course. Output: 1-page market brief.
Step 2: Syllabus Design
Generate week-by-week structure with module titles, learning objectives, and the "throughline" narrative connecting week 1 to week 6. Uses local Ollama (Mistral 7B) for iterative drafts, MiniMax API for final polish.
Step 3: Module Content Generation
For each module: write lesson text (800–1200 words), create quiz (5 questions with explanations), design worksheet with 3 exercises, write the capstone challenge. Content stored as Markdown in Supabase.
Step 4: Landing Page Copy
Generate the course landing page: headline, subheadline, 5 transforming outcomes, student persona description, syllabus overview, pricing copy, FAQ. Ready to paste into Webflow/Framer.
Step 5: Human Review & Publish
Creator reviews generated content in a UI, edits any sections, approves for publishing. Only publishes when creator explicitly approves.

Mac Mini Setup (Local AI)

Ollama on Mac Mini (Apple Silicon)
Run ollama serve on the Mac Mini. Models stored locally in ~/.ollama/models/. API endpoint: http://localhost:11434/api/generate. For a Mac Mini M4 with 24GB RAM, run Mistral 7B (5GB) + Llama 3.1 8B (5GB) simultaneously.
LM Studio (Alternative Local)
LM Studio provides a chat UI and a local server with OpenAI-compatible API. Better for iterative content generation. Supports GGUF quantized models up to 70B on Apple Silicon.
Cloud Fallback
If Mac Mini is offline or underpowered for a task, API calls fall back to MiniMax M2.1. This is transparent to the pipeline β€” a simple config flag switches between local and cloud.

πŸš€ Deployment

ComponentWhere to DeployWhy
Frontend (SvelteKit)Cloudflare Pages (free)Fast CDN, automatic deployments from Git
Backend API (Deno)Deno Deploy or Cloudflare WorkersEdge runtime, Deno-native, generous free tier
DatabaseSupabase (free tier: 500MB, 2GB transfer)All-in-one Postgres + Auth + Storage
RedisUpstash (free: 10K commands/day)Serverless, pay-per-use beyond free
VideoCloudflare Stream or MuxStream at $0.005/GB watched
Files (certificates, worksheets)Cloudflare R2 (free: 10GB egress/month)S3-compatible, no egress fees within Cloudflare
AI (Local)Mac Mini (Ollama)Private, no API costs, good for drafts
AI (Cloud)MiniMax API or OpenAI APIHigh-quality final output
EmailResend (free: 3K/month)Developer-friendly, React Email templates
PaymentsStripe (2.9% + 30Β’ per transaction)Industry standard

Mac Mini as Development + Local AI Server

For local development and testing: run everything on Mac Mini. Ollama for AI, Supabase local for database (via Docker or Supabase CLI), Redis via Upstash (works locally too). Push to cloud for production.

# Mac Mini Local Dev Setup # 1. Install Deno curl -fsSL https://deno.land/install.sh | sh # 2. Install Ollama brew install ollama ollama pull mistral:7b ollama pull llama3.1:8b # 3. Start services ollama serve # AI on :11434 deno task dev # Backend on :8000 npm run dev # Frontend on :5173 # 4. Environment variables # SUPABASE_URL, SUPABASE_ANON_KEY, STRIPE_SECRET_KEY # MINIMAX_API_KEY (or use local Ollama via OLLAMA_BASE_URL)

πŸ”’ Security

← Requirements  |  All Projects  |  Presentation β†’