← All work

Skills Boost Next

A prototype Learning Experience Platform with AI-generated learning pathways, SCORM support, and a full admin CMS.

Status
prototype
Period
TODO (James) — confirm start date
Role
Sole developer
Placeholder hero image for Skills Boost Next — TODO: replace with a real screenshot of the course catalogue or the AI pathway hub

What it does

Skills Boost Next lets a learner search and filter a catalogue of free online courses, follow an AI-generated learning pathway that strings several courses together toward a goal, track progress and earn badges, and ask an in-app AI assistant for help navigating what to learn next. On the other side, an administrator gets a CMS for managing providers, courses, categories, skills and pathways, including uploading SCORM packages, without touching the database directly.

How it works

The catalogue, pathways and progress tracking sit on a Prisma/Postgres schema built up in phases — auth first, then courses and providers, then pathways and progress — with all query logic isolated in a services layer so no page component talks to Prisma directly. AI features (pathway generation and the learning assistant) run through OpenRouter rather than a single provider’s SDK, and degrade gracefully rather than erroring when no API key is configured, so the rest of the app works standalone in a demo environment with no keys set up at all.

The interesting problem

The project was originally built against SQLite for local development, which works fine on a developer’s machine but breaks on Vercel: serverless functions there get an ephemeral, largely read-only filesystem, so a committed SQLite database file can be built successfully but not reliably written to at runtime — exactly the kind of failure that only shows up once real users start hitting the deployed app. Migrating to a hosted Postgres database (Vercel Postgres, Neon or Supabase all worked) and running prisma migrate deploy as part of every production build fixed it properly rather than working around it, and is now documented as an ADR so a future contributor doesn’t accidentally reintroduce SQLite for “simplicity.”

Stack and why

Next.js’s App Router and a services layer keep data access out of page components, which made the SQLite-to-Postgres migration a schema and config change rather than a rewrite. OpenRouter was chosen over a single AI provider’s SDK so a model can be swapped via an environment variable rather than a code change — useful for a demo prototype that may need to run cheaply or against whatever model is available at demo time.

What I would do differently

TODO (James) — short, in your own words.

Stack

Next.js (App Router) / React / TypeScript
Application and UI
Prisma + PostgreSQL
Data layer — courses, providers, pathways, progress, badges
Auth.js v5
Learner/admin authentication and role-gated routes
OpenRouter
Provider-agnostic AI layer for pathway generation and the in-app learning assistant
Vitest + Playwright
Unit/service tests plus two end-to-end journeys (learner and admin)

220

seeded courses across 20 real providers

103

catalogued skills

  • Repository — private repository