Technical specification for Skill Quests โ B2B gamification layer for corporate learning. Integrates with LinkedIn Learning, LMS platforms. Runs on Mac Mini + cloud.
| Component | Technology | Why |
|---|---|---|
| Frontend | SvelteKit | Web app for employees + managers. SSR for SEO of public quest pages. |
| Backend | Deno 2 + Oak or Node.js + Fastify | Deno for Mac Mini deployment; Node.js if using more npm packages for LMS integrations. |
| Database | Supabase (PostgreSQL) | User data, XP ledger, badge definitions, quest progress. RLS for data isolation between enterprise clients. |
| Cache | Upstash Redis | Real-time XP updates, leaderboard rankings, session cache. |
| Auth | Supabase Auth + SAML (enterprise) | Email/password for SMB; SAML/OIDC for enterprise SSO. |
| AI | Ollama (Mac Mini) + MiniMax API | Skill gap analysis, learning path generation, assessment question generation. |
| Open Badges | Badgr (open source) or Canopy | Badge issuance and verification. Open Badges standard = portable across platforms. |
| Resend | Weekly digests, badge earned notifications, manager alerts. | |
| SMS (optional) | Twilio | Slack alerts for top performers who opt in. |
| Hosting | Cloudflare Pages (frontend) + Deno Deploy (API) | Edge deployment, generous free tier. |
| organizations | ||
|---|---|---|
| id | uuid | Primary key (tenant) |
| name | varchar(255) | Company name |
| slug | varchar(100) | Subdomain slug |
| plan | enum('growth','enterprise') | |
| skill_framework_json | jsonb | Company's target skills (for gap analysis) |
| brand_config_json | jsonb | Colors, logo, white-label settings |
| users | ||
|---|---|---|
| id | uuid | Primary key |
| org_id | uuid (FK) | Ref organizations (tenant) |
| varchar(255) | ||
| name | varchar(255) | |
| department | varchar(100) | For team leaderboards |
| xp_total | integer | Cumulative XP |
| level | integer | Calculated from XP thresholds |
| skills_json | jsonb | Current skill profile {skill_name: proficiency} |
| quests | ||
|---|---|---|
| id | uuid | Primary key |
| org_id | uuid (FK) | NULL = global; otherwise org-specific |
| title | varchar(255) | "Help the PM close a $2M deal" |
| type | enum('course','quiz','project','external') | Type of activity |
| external_id | varchar(255) | LinkedIn Learning course ID if external |
| skills_tested | varchar[] | Skills this quest develops |
| xp_reward | integer | XP awarded on completion |
| estimated_minutes | integer | |
| content_md | text | Challenge instructions |
| is_mandatory | boolean | Company-assigned mandatory quest |
| deadline | timestamp | Due date if mandatory |
| quest_completions | ||
|---|---|---|
| id | uuid | Primary key |
| user_id | uuid (FK) | Ref users |
| quest_id | uuid (FK) | Ref quests |
| score | integer | 0โ100 if assessed |
| xp_earned | integer | Actual XP (can differ from reward) |
| completed_at | timestamp | |
| badges | ||
|---|---|---|
| id | uuid | Primary key |
| slug | varchar(100) | Unique identifier |
| name | varchar(255) | Display name |
| description | text | How to earn |
| criteria_json | jsonb | Rules for earning badge |
| skill_tags | varchar[] | Linked skills |
| icon_url | varchar(500) | Badge image |
| issuer | uuid (FK) | Organization or global |
| user_badges (junction) | ||
|---|---|---|
| user_id | uuid (FK) | Ref users |
| badge_id | uuid (FK) | Ref badges |
| earned_at | timestamp | |
| badge_url | varchar(500) | Open Badge assertion URL |
GET /learningActivities. Map course content to Skill Quest skills taxonomy. Award XP on completion. Store completion record.Agent takes: employee's current skills, target role/skill framework, available quests. Uses Ollama Mistral 7B on Mac Mini to draft a personalized learning path. Path = ordered sequence of quests with weekly milestones. MiniMax API for final polish and formatting.
โ Requirements | All Projects | Presentation โ