- Problem Statement
- Tech Stack
- Architecture
- File System
- Frontend Setup
- Backend Setup
- Contributors / Authors
KAIRO Software Company aims to develop an Internship Exploration Application that provides a unified platform for managing the entire internship lifecycle. The application will enable students to create digital profiles, explore and apply for opportunities that match their skills and preferences.
On the recruiter side, the system will allow companies to post internship openings, review candidate applications, manage shortlisting and interviews, and access analytics to evaluate trends in applications and selections.
The platform will focus on secure data handling, transparent communication, and efficient matching between students and recruiters.
This project will deliver a scalable and interactive solution that streamlines internship exploration, supports better decision-making for both students and recruiters, and enhances the overall internship experience.
- Typescript + Next.js
- FastAPI + OpenRouter
- Prisma + Supabase
- ShadcnUI
- Tailwind CSS
- UploadCare
- Cloudinary
- Nodemailer
- Knip
.
βββ πbackend # Python FastAPI Backend
β βββ πapi # Main API source code
β β βββ πconfig # Configuration settings
β β β βββ config.py # App configuration loader
β β βββ πmodels # Pydantic models for validation
β β β βββ resume_parser_models.py # Schemas for parsed resume data
β β β βββ shortlister_models.py # Schemas for AI ranking logic
β β β βββ skill_verifier_models.py # Schemas for skill verification
β β βββ πrouters # API route controllers
β β β βββ ai_shortlister.py # AI candidate ranking endpoints
β β β βββ resume_parser.py # Resume parsing endpoints
β β β βββ skill_verifier.py # Skill verification endpoints
β β βββ πutils # Helper logic and utilities
β β β βββ github_url_parser.py # GitHub data extraction logic
β β β βββ pdf_utils.py # PDF text extraction utilities
β β β βββ shortlister_utils.py # Ranking algorithms
β β βββ main.py # Server entry point
β βββ .env # Backend environment variables
β βββ requirements.txt # Python dependencies
β βββ run.py # Script to start Uvicorn server
β βββ vercel.json # Backend deployment config
βββ πfrontend # Next.js + TypeScript Frontend
β βββ πapp # Next.js App Router
β β βββ πapi # Server-side API Routes
β β β βββ πauth # Auth & Core Logic
β β β β βββ πapplied # Internship application status logic
β β β β βββ πapplyInternship # Logic for submitting applications
β β β β βββ πcompany # Company data fetching
β β β β βββ πcompanyLogin # Company specific auth
β β β β βββ πcontrollCompany # Admin control for companies
β β β β βββ πfindInternship # Search/Filter internships
β β β β βββ πprofile # Profile CRUD Operations
β β β β β βββ πabout # Update 'About' section
β β β β β βββ πadd-education # Add education entry
β β β β β βββ πadd-experience # Add work experience
β β β β β βββ πadd-project # Add portfolio project
β β β β β βββ πaddskill # Add manual skills
β β β β β βββ πCodeforcesAttach # Link Codeforces account
β β β β β βββ πdelete-education # Remove education
β β β β β βββ πdelete-experience # Remove experience
β β β β β βββ πdelete-github-link # Unlink GitHub
β β β β β βββ πdelete-leetcode-link # Unlink LeetCode
β β β β β βββ πdelete-linkedin-link # Unlink LinkedIn
β β β β β βββ πdelete-profilepicture # Remove avatar
β β β β β βββ πdelete-project # Remove project
β β β β β βββ πdelete-resume # Remove resume file
β β β β β βββ πdelete-skill # Remove skill
β β β β β βββ πedit-github-link # Update GitHub URL
β β β β β βββ πedit-linkedin-link # Update LinkedIn URL
β β β β β βββ πexperience # Fetch experience data
β β β β β βββ πget-resume # Fetch resume for application
β β β β β βββ πGitHubAttach # Link GitHub account
β β β β β βββ πleetcode # Fetch LeetCode stats
β β β β β βββ πLeetCodeAttach # Link LeetCode account
β β β β β βββ πLinkedinAttach # Link LinkedIn account
β β β β β βββ πupdate-contact # Update phone/email
β β β β β βββ πupdate-name # Update display name
β β β β β βββ πupdate-profilepicture # Update avatar
β β β β β βββ πupdate-project # Edit project details
β β β β β βββ πupload # Resume upload handler
β β β β βββ πrecruiter # Recruiter Logic
β β β β β βββ πanalytics # Dashboard analytics
β β β β β βββ πapplicant # Manage applicants
β β β β β βββ πcompany # Company profile management
β β β β β βββ πcompanyInternship # Manage posted internships
β β β β β βββ πhiringFunnel # ATS funnel logic
β β β β β βββ πinternshipData # Single internship stats
β β β β β βββ πinterviewSchedule # Scheduling logic
β β β β β βββ πmyAllInternship # List all posts
β β β β β βββ πmyInternship # List specific post
β β β β β βββ πrecentApplicant # Recent applications feed
β β β β βββ πregisterCompany # Company registration
β β β β βββ πsignin # Login handler
β β β β βββ πsignup # Registration handler
β β β β β βββ πverify # Email verification
β β β β βββ πuploadFile # General file upload (S3/CDN)
β β β β βββ πuploadInternship # Post new internship
β β β β βββ πverify # General verification
β β βββ πcompany # Company Public Pages
β β β βββ π[companyId] # Dynamic Company Profile
β β βββ πcompany-login # Company Portal Login
β β βββ πdelete-codeforces-link # Route helper
β β βββ πemail-test # Email service testing
β β βββ πprofile # Student Profile
β β β βββ π[Id] # Dynamic User Profile
β β βββ πrecruiter_dashboard # Recruiter Area
β β β βββ π[id] # Dynamic Dashboard
β β βββ πregister-company # Company Signup Page
β β βββ πsignin # Login Page
β β βββ πsignup # Signup Page
β β βββ πstudent_dashboard # Student Area
β β β βββ π[id] # Dynamic Dashboard
β β β βββ πappliedInternship # List of applied jobs
β β βββ πterms_and_conditions # Legal pages
β β βββ πverify-email # Verification landing page
β β βββ globals.css # Global styles
β β βββ layout.tsx # Root layout
β β βββ loading.tsx # Loading state
β β βββ page.tsx # Homepage
β βββ πcomponents # Reusable UI Components
β β βββ πprofile # Profile Page Sections
β β β βββ CodeforcesSection.tsx # CP stats display
β β β βββ ContactSection.tsx # Contact info display
β β β βββ ExperienceSection.tsx # Work timeline
β β β βββ GitHubSection.tsx # GitHub repos/stats
β β β βββ LeetCodeSection.tsx # LeetCode stats
β β β βββ LinkedInSection.tsx # LinkedIn integration
β β β βββ ProfileCard.tsx # Main user card
β β β βββ ProfileForm.tsx # Edit profile form
β β β βββ ProfileHeader.tsx # Header with banner
β β β βββ ProjectsSection.tsx # Portfolio grid
β β β βββ ResumeSection.tsx # Resume view/upload
β β β βββ SkillsSection.tsx # Skills badges
β β βββ πui # Shadcn UI Library
β β β βββ button.tsx # Button component
β β β βββ card.tsx # Card component
β β β βββ dialog.tsx # Modal component
β β β βββ input.tsx # Input field
β β β βββ label.tsx # Label text
β β β βββ select.tsx # Dropdown menu
β β β βββ sonner.tsx # Toast notifications
β β β βββ tabs.tsx # Tabbed interface
β β β βββ textarea.tsx # Text area input
β β βββ AddAboutButton.tsx # Modal trigger: Edit About
β β βββ AddEducationButton.tsx # Modal trigger: Add Edu
β β βββ AddExperienceButton.tsx # Modal trigger: Add Exp
β β βββ AddProjectButton.tsx # Modal trigger: Add Project
β β βββ AddSkillButton.tsx # Modal trigger: Add Skill
β β βββ auth-provider.tsx # NextAuth Provider
β β βββ CodeforcesButton.tsx # Connect Codeforces
β β βββ CodeforcesDeleteButton.tsx # Disconnect Codeforces
β β βββ CompanyRecruiters.tsx # Recruiter management list
β β βββ ContactButton.tsx # Edit Contact Info
β β βββ DeleteEducationButton.tsx # Remove Edu entry
β β βββ DeleteExperienceButton.tsx # Remove Exp entry
β β βββ DeleteProjectButton.tsx # Remove Project
β β βββ DeleteResumeButton.tsx # Remove Resume
β β βββ DeleteSkill.tsx # Remove Skill
β β βββ EditGitHubLink.tsx # Update GitHub URL
β β βββ EditLinkedInLink.tsx # Update LinkedIn URL
β β βββ EditNameButton.tsx # Update Display Name
β β βββ EditProjectButton.tsx # Update Project details
β β βββ FileUpload.tsx # Drag & Drop component
β β βββ GithubButton.tsx # Connect GitHub
β β βββ GitHubDeleteButton.tsx # Disconnect GitHub
β β βββ GitHubProjectButton.tsx # Import from GitHub
β β βββ GoBackButton.tsx # Navigation helper
β β βββ ImageManager.tsx # Avatar upload/crop
β β βββ interview.tsx # Interview scheduler
β β βββ Kairo_logo.jpg # App Logo
β β βββ LeetCodeButton.tsx # Connect LeetCode
β β βββ LeetCodeDeleteButton.tsx # Disconnect LeetCode
β β βββ LinkedinButton.tsx # Connect LinkedIn
β β βββ LinkedInDeleteButton.tsx # Disconnect LinkedIn
β β βββ RecruiterDashboard.tsx # Dashboard Main View
β β βββ Recruiter_PostInternshipModel.tsx # Post Job Modal
β β βββ UpdateInternship.tsx # Edit Job Modal
β β βββ UploadProfileForm.tsx # Profile Setup Form
β βββ πhooks # Custom React Hooks
β βββ πlib # Utilities & Config
β β βββ auth.ts # Auth configuration
β β βββ codeforces_api.ts # CP Platform helpers
β β βββ github_api.ts # GitHub API helpers
β β βββ leetcode_api.ts # LeetCode API helpers
β β βββ prisma.ts # Database client
β β βββ utils.ts # CSS/General utils
β βββ πprisma # DB Config
β β βββ πmigrations # SQL Migrations
β β βββ schema.prisma # Data Models
β βββ πpublic # Static Assets
β β βββ πcompanies # Partner Company Logos
β β βββ πhomepage # Landing Page Assets
β β βββ placeholder-logo.png # Fallback images
β β βββ placeholder-user.jpg # Default avatar
β βββ πstyles # CSS Files
β β βββ globals.css # Global styles
β βββ middleware.ts # Route Protection
β βββ next.config.mjs # Next.js Config
β βββ package.json # Dependencies
β βββ postcss.config.mjs # PostCSS Config
β βββ tailwind.config.js # Tailwind Config
β βββ tsconfig.json # TypeScript Config
βββ .gitignore # Ignored filesTo run frontend
- move to frontend
cd ./frontend- install dependencies
npm i- setup .env file (format given below)
NODE_ENV="development"
# NextAuth Configuration
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=
# Connect to Supabase via connection pooling
DATABASE_URL=
# Direct connection to the database. Used for migrations
DIRECT_URL=
EMAIL_USER=
EMAIL_PASSWORD=
NEXT_PUBLIC_URL=http://localhost:3000
GITHUB_TOKEN=
CLOUDINARY_CLOUD_NAME=
CLOUDINARY_API_KEY=
CLOUDINARY_API_SECRET=
UPLOADCARE_PUBLIC_KEY=
UPLOADCARE_SECRET_KEY=
LINKEDIN_CLIENT_ID=
LINKEDIN_CLIENT_SECRET=
- generate a prisma client
npx prisma generate- push the db tables generated to supabase
npx prisma db push- start a local server at 3000 port
npm run devTo run backend
- move to backend
cd ./backend- create a venv
python3 -m venv .venv- activate venv (Linux)
source .venv/bin/activate- activate venv (Windows)
source .venv/Scripts/activate- install dependecies
pip install -r requirements.txt- start a local server at 8000 port
pyhton run.py- after development to close the venv
deactivate- Jevik Rakholiya - 202301276
- Shobhitchadra Chauhari - 202301403
- Dhyey Patel - 202301415
- Jiten Bharga - 202301466
- Visha Sitapara - 202301414
- Dhruv Jain - 202301272
- Rajan Chauhan - 202301427
- Jaimeen Chauhan - 202301467
- Patel Het Jitendrakumar - 202301421

