Skip to content

Abdulbasit219/UPSkaleAI

Repository files navigation

πŸŒ‰ UpSkaleAI

Upscale your skills and bridge the gap between learning and earning.

Typing SVG

Next.js React Tailwind CSS MongoDB License

An AI-powered career growth platform helping students and professionals discover skills, learn efficiently, and land their dream jobs.

πŸš€ Live Demo β€’ πŸ“– Documentation β€’ πŸ› Report Bug β€’ ✨ Request Feature


πŸ“‹ Table of Contents

Click to expand/collapse

✨ Features

🎯 Core Modules

πŸ—ΊοΈ AI Career Path Mapper

Get personalized roadmaps tailored to your dream career with AI-powered recommendations

βœ… Live

πŸ“Š Skill Assessment

AI-powered evaluation of your projects and skills with detailed feedback

βœ… Live

πŸ“š Learning Roadmap

Step-by-step guidance with curated resources

βœ… Live

πŸ“„ AI Resume Builder

Auto-generate ATS-optimized resumes in seconds

βœ… Live

πŸ’Ό Job Matching Engine

AI-matched opportunities based on your profile

βœ… Live

🏒 Company Dashboard

Manage job postings and applications

βœ… Live
πŸ› οΈ Additional Features (Click to expand)
Feature Description Status
βœ… ATS Resume Checker Optimize for Applicant Tracking Systems 🟒 Live
πŸ€– Code Twin AI Your AI-powered coding assistant 🟒 Live
πŸ“Š Progress Tracking Visual insights into your learning journey 🟒 Live
πŸ” Smart Job Search Filter, save, and quick-apply to jobs 🟒 Live
🎯 Goal Milestones Set and track career objectives 🟒 Live
πŸŒ™ Dark Mode Beautiful dark/light theme support 🟒 Live
πŸ“§ Email Verification Secure account verification 🟒 Live
πŸ’Ύ Save Jobs Bookmark jobs for later 🟒 Live
πŸ“± Responsive Design Works on all devices 🟒 Live

🎯 Why UpSkaleAI?

Empowering Every Career Journey

πŸŽ“ Students

  • βœ… Discover in-demand skills
  • βœ… Learn with AI roadmaps
  • βœ… Build verified portfolios
  • βœ… Interview preparation

πŸ’Ό Job Seekers

  • βœ… AI job matching
  • βœ… ATS resume optimization
  • βœ… Application tracking
  • βœ… Career readiness score

πŸš€ Career Changers

  • βœ… Transition path planning
  • βœ… Skill gap analysis
  • βœ… Build relevant projects
  • βœ… Industry connections

🏒 Companies

  • βœ… Post job openings
  • βœ… Manage applications
  • βœ… Find top talent
  • βœ… Track hiring metrics

πŸ› οΈ Tech Stack

Built with Modern Technologies

Next.js
Next.js 15.5.4
React
React 19.1.0
TailwindCSS
Tailwind CSS 4
Node.js
Node.js
MongoDB
MongoDB
Python
Python
FastAPI
FastAPI

πŸ”§ Key Dependencies

NextAuth Mongoose Axios Zod Cloudinary


πŸš€ Quick Start

Get Started in 5 Minutes ⏱️

πŸ“‹ Prerequisites

Before you begin, ensure you have the following installed:

βœ… Node.js 18+ (Download from https://nodejs.org/)
βœ… npm, yarn, or pnpm package manager
βœ… MongoDB (Local installation or MongoDB Atlas account)
βœ… Git (For version control)

🎯 Installation Steps

Step 1: Clone the Repository
# HTTPS
git clone https://github.com/Abdulbasit219/Ai-Coding-Assistant-FYP.git

# SSH
git clone git@github.com:Abdulbasit219/Ai-Coding-Assistant-FYP.git

# GitHub CLI
gh repo clone Abdulbasit219/Ai-Coding-Assistant-FYP

cd Ai-Coding-Assistant-FYP
Step 2: Install Dependencies
# Using npm
npm install

# Using yarn
yarn install

# Using pnpm
pnpm install
Step 3: Environment Configuration

Create a .env.local file in the root directory:

# πŸ—„οΈ Database Configuration
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/upskaleai
# Alternative: For local MongoDB
# MONGODB_URI=mongodb://localhost:27017/upskaleai

# πŸ” Authentication
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-super-secret-key-here-min-32-chars

# πŸ€– Google AI Configuration (for AI features)
GOOGLE_API_KEY=your-google-ai-api-key-here

# πŸ“§ Email Service (Nodemailer)
EMAIL_USER=your_email@gmail.com
EMAIL_PASSWORD=your_app_specific_password

# πŸ“§ Alternative: Resend (Optional)
RESEND_API_KEY=your-resend-api-key

# ☁️ Cloudinary (for file uploads)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret

# 🌐 API Configuration
NEXT_PUBLIC_API_URL=http://localhost:3000/api

πŸ’‘ Pro Tips:

Step 4: Start Development Server
# Development mode
npm run dev

# Development with Turbopack (faster)
npm run dev -- --turbopack

# Production build
npm run build
npm run start

πŸŽ‰ Success! Navigate to http://localhost:3000

Step 5: Setup Python Microservices (Optional/Recommender)
# Navigate to the recommender service
cd python-services/recommender_service

# Create and activate virtual environment
python -m venv venv
# Windows:
.\venv\Scripts\activate
# Linux/Mac:
# source venv/bin/activate

# Install requirements
pip install -r requirements.txt

# Start the service
uvicorn main:app --reload --port 8000

πŸŽ‰ Success! Navigate to http://localhost:3000 for the main app and http://localhost:8000/docs for the AI API docs.


πŸ“ Project Structure

Click to view detailed structure
Ai-Coding-Assistant-FYP/
β”‚
β”œβ”€β”€ πŸ“‚ src/
β”‚   β”œβ”€β”€ πŸ“‚ app/                          # Next.js App Router (UI & Auth)
β”‚   β”œβ”€β”€ πŸ“‚ api/                          # Next.js Serverless Functions
β”‚   β”œβ”€β”€ πŸ“‚ components/                   # React UI Components (Shadcn/UI)
β”‚   β”œβ”€β”€ πŸ“‚ lib/                          # Database & API Configs
β”‚   β”œβ”€β”€ πŸ“‚ models/                       # Mongoose User/Job Models
β”‚   └── πŸ“‚ store/                         # Redux State Management
β”‚
β”œβ”€β”€ πŸ“‚ python-services/                  # Python Microservices
β”‚   β”œβ”€β”€ πŸ“‚ recommender_service/          # AI Job Matching (FastAPI)
β”‚   β”œβ”€β”€ πŸ“‚ resume_service/               # PDF Parsing Logic
β”‚   └── πŸ“‚ ai_service/                    # LLM Integration Helpers
β”‚
β”œβ”€β”€ πŸ“‚ public/                            # Static assets
β”œβ”€β”€ πŸ“‚ emails/                            # Nodemailer Templates
β”œβ”€β”€ βš™οΈ .env.local                         # Environment variables
β”œβ”€β”€ 🎨 tailwind.config.js                # Tailwind configuration
└── πŸ“„ README.md                         # This file

πŸ”§ Configuration

Database Models

AuthUser Model
{
  username: String (unique, required),
  email: String (unique, required),
  password: String (hashed, required),
  isAdmin: Boolean (default: false),
  isVerified: Boolean (default: false),
  verifyCode: String,
  verifyCodeExpiry: Date,
  timestamps: true
}
Job Model
{
  title: String (required),
  company: String (required),
  logo: String (default: "πŸ’Ό"),
  location: String (required),
  remote: Boolean (default: false),
  type: Enum ["Full-time", "Part-time", "Contract", "Internship"],
  experience: String (required),
  salary: String (required),
  description: String (required),
  requirements: [String],
  responsibilities: [String],
  skills: [String] (required),
  featured: Boolean (default: false),
  urgent: Boolean (default: false),
  category: Enum ["tech", "intern", "remote", "design", "marketing", "sales", "other"],
  status: Enum ["active", "closed", "draft"],
  applicants: Number (default: 0),
  postedBy: ObjectId (ref: AuthUser),
  companyWebsite: String,
  applicationDeadline: Date,
  benefits: [String],
  timestamps: true
}

Indexes:

  • Text search: title, company, description
  • Compound: category + status, remote, createdAt
JobApplication Model
{
  job: ObjectId (ref: Job, required),
  user: ObjectId (ref: AuthUser, required),
  coverLetter: String (required),
  resume: String (URL, required),
  status: Enum ["pending", "reviewing", "shortlisted", "rejected", "accepted"],
  answers: Map<String, String>,
  notes: String,
  appliedAt: Date (default: now),
  timestamps: true
}

Indexes:

  • Unique: job + user (prevent duplicate applications)
  • Compound: user + status, job + status

API Routes

Authentication Endpoints
Method Endpoint Description Auth Required
POST /api/user/signup Create new account No
POST /api/auth/[...nextauth] Sign in (NextAuth) No
POST /api/verify-code Verify email code No
POST /api/resend-code Resend verification No
GET /api/check-username-unique Check username availability No
Job Endpoints
Method Endpoint Description Auth Required
GET /api/jobs Get all jobs (filtered) No
GET /api/jobs/[id] Get single job No
POST /api/jobs/create Create job (admin) Yes (Admin)
PUT /api/jobs/update/[id] Update job (admin) Yes (Admin)
DELETE /api/jobs/update/[id] Delete job (admin) Yes (Admin)
POST /api/jobs/apply Apply to job Yes
GET /api/jobs/applications Get user's applications Yes
GET /api/jobs/match Get matched jobs Yes
GET /api/jobs/saved Get saved jobs Yes
POST /api/jobs/saved Save a job Yes
DELETE /api/jobs/saved/[id] Unsave a job Yes
Company Endpoints
Method Endpoint Description Auth Required
GET /api/company/jobs Get company's posted jobs Yes (Admin)
GET /api/company/applications Get applications for company Yes (Admin)
AI & Utility Endpoints
Method Endpoint Description Auth Required
POST /api/analyze-resume AI resume analysis Yes
POST /api/upload File upload Yes

πŸ“Š API Documentation

Example: Get Jobs

GET /api/jobs - Fetch jobs with filtering

Query Parameters:

{
  search: string,          // Search in title, company, description
  category: string,        // "tech" | "intern" | "remote" | "design" | "marketing" | "sales" | "other"
  type: string,           // "Full-time" | "Part-time" | "Contract" | "Internship"
  remote: boolean,        // true | false
  featured: boolean,      // true | false
  page: number,           // Default: 1
  limit: number,          // Default: 10, Max: 100
  sortBy: string          // "recent" | "salary" | "match"
}

Response:

{
  "success": true,
  "data": {
    "jobs": [
      {
        "id": "6501234567890abcdef12345",
        "title": "Senior Full Stack Developer",
        "company": "TechCorp",
        "logo": "πŸ’Ό",
        "location": "San Francisco, CA",
        "remote": true,
        "type": "Full-time",
        "experience": "5+ years",
        "salary": "$120k - $180k",
        "description": "We are looking for...",
        "skills": ["React", "Node.js", "MongoDB"],
        "featured": true,
        "urgent": false,
        "category": "tech",
        "status": "active",
        "applicants": 42,
        "match": 85,
        "posted": "2 days ago",
        "createdAt": "2024-11-28T10:00:00.000Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 156,
      "totalPages": 16
    }
  }
}

Example: Apply to Job

POST /api/jobs/apply - Submit job application

Headers:

Authorization: Bearer <session-token>
Content-Type: application/json

Request Body:

{
  "jobId": "6501234567890abcdef12345",
  "coverLetter": "I am excited to apply...",
  "resume": "https://cloudinary.com/resume.pdf",
  "answers": {
    "Why do you want to work here?": "Because...",
    "What is your expected salary?": "$150k"
  },
  "notes": "Available to start immediately"
}

Response:

{
  "success": true,
  "message": "Application submitted successfully",
  "data": {
    "_id": "6501234567890abcdef67890",
    "job": "6501234567890abcdef12345",
    "user": "6501234567890abcdef11111",
    "status": "pending",
    "appliedAt": "2024-11-30T12:00:00.000Z"
  }
}


🚒 Deployment

Vercel Deployment (Recommended)

Deploy to Vercel
  1. Push to GitHub:

    git add .
    git commit -m "Ready for deployment"
    git push origin main
  2. Import to Vercel:

    • Go to vercel.com
    • Click "New Project"
    • Import your GitHub repository
    • Configure environment variables
    • Deploy!
  3. Environment Variables: Add all variables from .env.local to Vercel:

    • Go to Project Settings β†’ Environment Variables
    • Add each variable
  4. Custom Domain (Optional):

    • Go to Project Settings β†’ Domains
    • Add your custom domain

MongoDB Atlas Setup

Setup MongoDB Atlas
  1. Create Account:

  2. Create Cluster:

    • Choose free tier (M0)
    • Select region closest to your users
    • Create cluster
  3. Setup Database Access:

    • Database Access β†’ Add New Database User
    • Create username and password
    • Grant read/write permissions
  4. Setup Network Access:

    • Network Access β†’ Add IP Address
    • Allow access from anywhere: 0.0.0.0/0
  5. Get Connection String:

    • Clusters β†’ Connect β†’ Connect your application
    • Copy connection string
    • Replace <password> with your password
    • Add to MONGODB_URI in Vercel

Environment Variables Checklist

  • MONGODB_URI - MongoDB connection string
  • NEXTAUTH_URL - Your production URL
  • NEXTAUTH_SECRET - Random secret (32+ chars)
  • GOOGLE_API_KEY - Google AI API key
  • EMAIL_USER - Email for sending verification
  • EMAIL_PASSWORD - Email app password
  • CLOUDINARY_CLOUD_NAME - Cloudinary cloud name
  • CLOUDINARY_API_KEY - Cloudinary API key
  • CLOUDINARY_API_SECRET - Cloudinary API secret

🀝 Contributing

We love contributions! Here's how you can help:

Development Workflow

  1. Fork the repository
  2. Create a feature branch:
    git checkout -b feature/amazing-feature
  3. Make your changes
  4. Commit your changes:
    git commit -m "Add amazing feature"
  5. Push to your fork:
    git push origin feature/amazing-feature
  6. Open a Pull Request

Code Style

  • Use ESLint for code linting
  • Follow existing code patterns
  • Write meaningful commit messages
  • Add comments for complex logic
  • Update documentation as needed

Reporting Bugs

Found a bug? Please open an issue with:

  • Clear description
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)
  • Environment details

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™ Acknowledgments

Built with ❀️ by the UpSkaleAI Team

Special thanks to:


πŸ“ž Contact & Support

Email Discord Twitter


⭐ Star us on GitHub!

If you find this project helpful, please give it a ⭐️

GitHub stars


Made with πŸ’œ and β˜• by the UpSkaleAI Team


About

UP SKale AI APP for students (learner) and (Earners) (FYP Project)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors