Skills Boost Next
A prototype Learning Experience Platform with AI-generated learning pathways, SCORM support, and a full admin CMS.
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