AI-Powered Skill Extraction & Tracking Platform
Transform your documents into valuable skills with AI-powered analysis.
Track your professional development effortlessly.
Features β’ Tech Stack β’ Getting Started β’ Project Structure β’ Contributing
| Technology | Description |
|---|---|
| React framework with App Router | |
| UI library | |
| Type-safe JavaScript | |
| Utility-first CSS framework | |
| Accessible UI primitives |
| Technology | Description |
|---|---|
| PostgreSQL database & authentication | |
| AI-powered skill extraction |
| Technology | Description |
|---|---|
| Deployment platform | |
| Usage analytics |
- Node.js 18.17 or later
- pnpm (recommended) or npm
- Supabase account
- OpenAI API key (or compatible API like DeepSeek)
-
Clone the repository
git clone https://github.com/yourusername/skillsync.git cd skillsync -
Install dependencies
pnpm install
-
Set up environment variables
Create a
.envfile in the root directory:# Supabase NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key # OpenAI (or compatible API) OPENAI_API_KEY=your_openai_api_key OPENAI_BASE_URL=https://api.openai.com/v1 # or custom endpoint # App URL NEXT_PUBLIC_APP_URL=http://localhost:3000
-
Set up the database
Run the following SQL in your Supabase SQL editor:
-- Documents table CREATE TABLE documents ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, user_id UUID NOT NULL REFERENCES auth.users(id), filename TEXT NOT NULL, file_url TEXT NOT NULL, status TEXT DEFAULT 'PROCESSING', upload_date TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Extracted skills table CREATE TABLE extracted_skills ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, user_id UUID NOT NULL REFERENCES auth.users(id), document_id UUID REFERENCES documents(id), skill_name TEXT NOT NULL, category TEXT, confidence_score DECIMAL(3,2), evidence_text TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- User goals table CREATE TABLE user_goals ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, user_id UUID NOT NULL REFERENCES auth.users(id) UNIQUE, current_study TEXT, want_to_study TEXT, study_duration TEXT, career_goal TEXT, skill_goal TEXT, onboarding_completed BOOLEAN DEFAULT FALSE, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() );
Optional β Pay-per-upload (Paystack): Add
PAYSTACK_SECRET_KEYandPAYSTACK_PUBLIC_KEY(live keys from Paystack Dashboard) to.env, run migrationscripts/009_upload_payments.sql(viapnpm run db:migrateor Supabase SQL Editor). Set your Paystack webhook URL tohttps://your-domain.com/api/payments/webhookforcharge.successevents.Optional β Skills on Base (wallet + on-chain attestations): Run migrations
scripts/007_wallet_address.sqlandscripts/008_onchain_attestations.sqleither by:- Option A: Adding your Supabase Postgres connection string to
.envasDATABASE_URL(Dashboard β Project Settings β Database β Connection string URI), then running:pnpm run db:migrate
- Option B: Opening the Supabase SQL Editor and running the contents of each file in order. For pay-per-upload, also run
scripts/009_upload_payments.sql.
- Option A: Adding your Supabase Postgres connection string to
-
Run the development server
pnpm dev
-
Open your browser
Navigate to http://localhost:3000
skillsync/
βββ app/ # Next.js App Router
β βββ (dashboard)/ # Protected dashboard routes
β β βββ dashboard/ # Main dashboard
β β βββ documents/ # Document management
β β βββ skills/ # Skills overview
β β βββ goals/ # User goals
β β βββ profile/ # User profile
β βββ api/ # API routes
β β βββ auth/ # Authentication callbacks
β β βββ documents/ # Document CRUD & analysis
β β βββ skills/ # Skills API
β β βββ onboarding/ # Onboarding API
β βββ auth/ # Auth pages (login/register)
β βββ onboarding/ # User onboarding flow
β βββ page.tsx # Landing page
βββ components/ # Reusable components
β βββ auth/ # Auth components
β βββ dashboard/ # Dashboard components
β βββ documents/ # Document components
β βββ skills/ # Skills components
β βββ ui/ # UI primitives (shadcn/ui)
βββ lib/ # Utility functions
β βββ db.ts # Database operations
β βββ openai.ts # OpenAI client
β βββ supabase/ # Supabase clients
β βββ utils.ts # Helper functions
βββ public/ # Static assets
- Upload - Users upload documents (text files, coursework, projects)
- Processing - Documents are sent to AI for analysis
- Extraction - AI extracts skills with categories and confidence scores
- Storage - Skills are stored and linked to user profiles
- Display - Skills appear in the dashboard with evidence text
Users can set and track:
- Career Goals - Ultimate career aspirations
- Current Studies - What they're currently learning
- Skill Goals - Specific skills they want to develop
- Top Priorities - Current focus areas
- Email/Password - Traditional authentication
- Google OAuth - One-click sign-in with Google
- Session Management - Secure, persistent sessions via Supabase
|
Landing Page Modern, responsive landing page |
Dashboard Skill tracking overview |
|
Skills View Categorized skill display |
Goals Career goal tracking |
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Next.js - The React Framework
- Supabase - Open source Firebase alternative
- shadcn/ui - Beautiful UI components
- Lucide Icons - Beautiful icon library
- Tailwind CSS - Utility-first CSS framework
Made with β€οΈ by CodeWithEugene