A career exploration and ranking app that maps your skills, interests, and traits against a dynamic hierarchical job database to surface the best-fit roles.
Ranker helps users discover career paths through structured self-assessment and data-driven matching:
- Skill Spider Chart — A live radar visualization of your rated skills, interests, and personal traits.
- Career Tree Explorer — Browse an unlimited-depth hierarchy of industries, categories, subcategories, and jobs stored in a dynamic adjacency-list database.
- Interactive Quizzes — Rate yourself across dimensions; results feed the matching engine.
- Smart Job Matching — Algorithmic scoring against job-specific skill requirements. Shows match percentage and gap analysis.
- User Authentication — Supabase-powered auth with email/password, Google OAuth, and Apple OAuth. (Currently mocked for development.)
The career hierarchy system is fully dynamic — categories, subcategories, and jobs can be added without code changes. Parent nodes automatically aggregate stats from their children via PostgreSQL triggers.
| Layer | Technology |
|---|---|
| Framework | React 18 + Vite 6 |
| Language | TypeScript |
| UI | Tailwind CSS v4 + shadcn/ui primitives + Radix UI |
| Icons | Lucide React |
| State | React Context (Auth) + local component state |
| Charts | Recharts (spider chart) |
| Backend | Supabase (PostgreSQL + Auth) |
| Local Cache | IndexedDB (quiz data persistence) |
# Install dependencies
npm install
# Start the dev server
npm run dev
# Open http://localhost:5173src/
app/
App.tsx # Main router / auth gate
components/
HomePage.tsx # Dashboard (spider chart + career explorer)
CareerMatchesPage.tsx # Job match results with scores
CareerPathExplorer.tsx # Visual tree browser
QuizzesPage.tsx # Self-assessment quizzes
ProfilePage.tsx # User profile
LoginPage.tsx # Auth screens
Navigation.tsx # Sidebar navigation
SkillSpiderChart.tsx # Radar chart component
contexts/
AuthContext.tsx # Auth, quiz data, profile state
data/
careerHierarchy.ts # Static fallback hierarchy
careerSchema.sql # PostgreSQL schema for Supabase
sampleCareerData.sql # Seed data
types/
career.ts # Shared TypeScript types
utils/
careerApi.ts # Supabase CRUD + matching logic
careerTreeBuilder.ts # Adjacency list → tree builder
indexedDB.ts # Local quiz data cache
supabase/client.ts # Supabase client singleton
supabase/
functions/server/ # Edge function stubs (optional)
guidelines/
Guidelines.md # Project design guidelines
docs (top-level markdown)
CAREER_SYSTEM_ARCHITECTURE.md # Schema & trigger architecture
MOBILE_MIGRATION_PLAN.md # React Native migration notes
PLATFORM_COMPATIBILITY_SUMMARY.md # Browser / platform compatibility
SUPABASE_QUICK_START.md # Database setup steps
The career hierarchy uses a dynamic adjacency list with automatic aggregation via triggers:
career_nodes— Self-referencing table for root → category → subcategory → job.career_skill_requirements— Minimum ratings (0–10) per skill for each job.career_aggregated_stats— Auto-cached averages/medians for parent categories (updated by trigger).
See CAREER_SYSTEM_ARCHITECTURE.md for the full data-flow diagram and trigger logic.
- Create a Supabase project.
- Run
src/data/careerSchema.sqlin the SQL editor. - Run
src/data/sampleCareerData.sqlto seed demo data. - Add your Supabase URL + anon key to
src/utils/supabase/client.ts.
The app ships with a mock user (demo-user-123) to bypass login during development.
To enable real auth, uncomment the session-check block in AuthContext.tsx.
- Dynamic Tree Rendering — Categories can nest arbitrarily deep; the tree builder handles it.
- Skill Matching Algorithm —
findMatchingJobs()normalizes user ratings against job requirements and returns ranked matches with gap lists. - Mobile Migration Plan — Documented path to a React Native port (
MOBILE_MIGRATION_PLAN.md).
No explicit LICENSE file. Assume all rights reserved unless otherwise stated.
Designed & built by Reuben Roy.