SkillRoute is a hackathon prototype for converting informal, real-life experience into structured skill profiles and practical opportunity matches.
Built for the UNMAPPED challenge, it helps surface skills that may not be represented by certificates, formal employment history, or a traditional CV.
This repository contains the product prototype, supporting data pipeline, and pitch materials:
web/: main Next.js application for the SkillRoute experiencepitch/: separate Next.js pitch deckscripts/: ESCO/ISCO import, cleanup, seed, and search utilitiessupabase/: Postgres schema, pgvector setup, tables, indexes, and RPCsESCO dataset - v1.2.1 - classification - en - csv/: source ESCO/ISCO CSVs05 - World Bank - Unmapped.docx - Google Docs.pdf: challenge reference doc
The main app lives in web/ and includes:
- chat-based skill discovery with Milo
- skill profile generation from user intake conversations
- ESCO semantic skill search
- ISCO occupation mapping
- opportunity matching for jobs, training, and self-employment pathways
- youth-facing profile and opportunity views
- admin/program-facing protocol and aggregate views
- econometric and labor-market dashboards
- Next.js 16
- React 19
- TypeScript
- OpenAI models and embeddings
- Supabase Postgres with pgvector
- ESCO taxonomy data
- ISCO occupation classification data
- Tailwind CSS and shadcn-style UI components
Root-level scripts load and query the ESCO/ISCO dataset:
scripts/setup-db.js: appliessupabase/schema.sqlscripts/import-skills.js: imports ESCO skills and OpenAI embeddingsscripts/import-occupations.js: imports occupations and skill relationsscripts/search-skills.js: runs semantic skill search from the CLIscripts/seed-demo-data.js: inserts demo application datascripts/filter_isco_rows.py: filters ISCO labor-market rowsscripts/clean_isco_occupation_csv.py: cleans ISCO occupation CSV data
The data flow is:
- A user talks to Milo about their background, experience, education, country, language, work authorization, and confidence.
- The backend extracts skills and evidence from the conversation.
- Extracted skills are embedded and matched against ESCO skills in Supabase.
- Related occupations are mapped through ISCO data.
- The app generates a skill profile and suggests relevant local pathways.
Install root dependencies:
npm installCreate the root environment file:
cp .env.example .envSet the required values:
OPENAI_API_KEYDATABASE_URLESCO_CSV_PATHSUPABASE_URLandSUPABASE_SERVICE_ROLE_KEYif using Supabase writes from scripts
Create the Supabase schema:
npm run db:setupImport ESCO skills and occupation data:
npm run import:skills
npm run import:occupationsRun a semantic search from the CLI:
npm run search -- "repair bicycle brakes and talk to customers"Install and run the Next.js app:
cd web
npm install
cp .env.example .env.local
npm run devOpen http://localhost:3000.
Required web environment variables:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYOPENAI_API_KEY



