This is a submission for the GitHub Copilot CLI Challenge
What I Built
JobHunter AI - An AI-powered platform that automates job AND internship searches for professionals and students.
The Problem I Solved
Whether you're a professional looking for a job or a student searching for an internship, the process is exhausting:
- Browse Indeed → LinkedIn → RemoteOK → WTTJ... hours wasted
- Customize your resume/CV for each application manually
- Lose track of where you applied and when
- No idea if you're qualified or wasting time applying
For students: Finding internships is even harder - most platforms focus on full-time jobs, not internships or "stages".
On January 29, 2026, I thought: "What if AI could handle all of this for BOTH job seekers and students?"
The Solution
A complete platform that serves both professionals and students:
✅ Multi-Source Search - Searches 6+ platforms simultaneously for jobs AND internships (Indeed, LinkedIn, RemoteOK, WTTJ, Adzuna, TheMuse)
✅ AI Compatibility Scoring - Uses pgvector + OpenAI embeddings to score each opportunity 0-100%
✅ Smart CV Parsing - Upload your PDF resume, AI extracts experiences, education, skills automatically
✅ AI Document Generation - Personalized resumes and cover letters with GPT-4 + Gemini in 30 seconds
✅ Application Tracking - Manage all your job/internship applications in one dashboard
✅ Fully Responsive - Perfect mobile experience for job hunting on-the-go
The Challenge
Build all of this in less than a week.
Spoiler: With GitHub Copilot CLI, I did it in 6 days.
Tech Stack
Backend: FastAPI, PostgreSQL + pgvector, Redis + Celery, OpenAI GPT-4, Google Gemini
Frontend: Next.js 14, TypeScript, TailwindCSS, shadcn/ui
DevOps: Docker Compose, Caddy reverse proxy, VPS
Stats: 68,214 lines added, 85 commits, 320 files changed, 6 days from idea to production
Demo
🌐 Live Application
URL: https://jobhunter.franckkenfack.works
GitHub Repository: https://github.com/Kenfack-franck/jobHunterAi
video: https://drive.google.com/file/d/1J0qqiPMVR7w7Oo6hbdgwP2S_QtJGNvs-/view?usp=drive_link
🔐 Test Credentials
To test the full experience without creating an account:
| Role | Password | |
|---|---|---|
| User | test@test.com | Test123! |
✨ What You Can Test
- 📄 Upload Your CV - Watch AI parse your resume automatically
- 🔍 Search Jobs/Internships - Try "Python Developer", "Data Analyst Internship", or "Marketing Stage"
- 🎯 View Compatibility Scores - See detailed AI analysis of why you match (or don't) each opportunity
- 📝 Generate Documents - Get a personalized resume tailored to a specific job in 30 seconds
- 📊 Track Applications - Manage all your job and internship applications
- 📱 Mobile Experience - Open on your phone, it's fully responsive
📸 Application Screenshots

Landing page with clear value proposition for both professionals and students
)
Secure authentication system
)
Interactive onboarding guide for new users
)
Main dashboard with real-time search progress and stats
)
Multi-step profile creation: Personal information
)
Profile creation: Skills and experiences
)
Profile creation: Job preferences and expectations
)
Choose which job boards to search (Indeed, LinkedIn, RemoteOK, etc.)
)
Real-time multi-source job/internship search with progress tracking
)
Advanced filters: location, contract type, remote work, salary
)
Search results with AI compatibility scores (0-100%)
)
Detailed job description with compatibility analysis
)
Saved opportunities organized by compatibility score
)
Generate personalized CV and cover letter in 30 seconds
)
Track all applications with status updates and notes
)
User settings and preferences
)
Contact page for user support
)
Comprehensive help documentation
)
Fully responsive mobile interface for job hunting anywhere
My Experience with GitHub Copilot CLI
Let me be brutally honest: Without GitHub Copilot CLI, this would have taken 3-4 weeks. With it, I shipped in 6 days.
Here's exactly how I used it and the real, measurable impact.
📊 The Real Numbers (100% Verifiable!)
I documented everything meticulously. Here are the actual statistics from my Copilot CLI usage logs:
| Metric | Value | Source |
|---|---|---|
| Duration | 6 days (Jan 30 - Feb 4) | Git commit history |
| Copilot Sessions | 5 major sessions | Session state logs |
| My Messages to Copilot | 340+ messages | events.jsonl |
| Copilot Responses | 4,057 responses | Measured from logs |
| Tool Executions | 4,988 commands | bash/view/edit/grep calls |
| Git Commits | 85 commits | git log --oneline |
| Files Changed | 320 files | git diff --stat |
| Lines Added | 68,214 lines | git log --stat |
| Lines Deleted | 32,170 lines | Refactoring + cleanup |
| Feature Commits | 38 commits | Keyword analysis |
| Bug Fixes | 43 commits | Fix/debug commits |
All evidence is public: Check the copilot-evidence/ folder in my GitHub repo for raw data, logs, and session transcripts.
💡 9 Real Examples With Actual Commands
These aren't hypothetical scenarios. These are actual problems I encountered with the exact Copilot CLI commands I used and the real impact.
1️⃣ Docker Build Failing at 3 AM (Feb 1)
Problem: Production Docker build failing with mysterious module errors:
Module not found: Can't resolve '@/lib/applicationsService'
Module not found: Can't resolve '@/lib/auth'
Module not found: Can't resolve '@/components/JobCard'
It's 3 AM. I'm exhausted. The modules exist locally. Spent 30 minutes debugging.
Command I Used:
@github-copilot explain why Docker build can't find modules that exist locally but build works fine in development
Copilot's Response:
"This is a Docker context issue. Your files aren't being copied to the build stage before
npm run buildruns. You need to addCOPY . .before the build command in your Dockerfile."
Result: Added one line to Dockerfile. Build succeeded. Deployed to production.
Time Saved: 1-2 hours of frustration ⏱️
2️⃣ TypeScript Type Mismatch Hell (Feb 1)
Error Flooding Console:
Argument of type 'number' is not assignable to parameter of type 'string'
Property 'work_mode' does not exist on type 'JobOffer'
Type 'undefined' is not assignable to type 'string'
8 different type errors across multiple files.
Command:
@github-copilot check why docId is typed as number when Document.id should be string in the schema
Copilot: Showed me the schema mismatch and suggested the exact type definitions to fix.
Result: Fixed all 8 errors in under an hour.
Time Saved: 2-3 hours 📝
3️⃣ The CORS Mystery That Wasn't CORS (Feb 3)
Problem: Production completely broken. CORS errors everywhere:
Access to XMLHttpRequest blocked by CORS policy
No 'Access-Control-Allow-Origin' header present
But I HAD configured CORS middleware correctly! Spent 30 minutes checking CORS config.
Command:
@github-copilot explain CORS error even though CORS middleware is properly configured in FastAPI
Copilot's Response:
"CORS errors can be misleading. They often appear when the API server crashes before sending headers. Check if your backend is actually running and check the server logs for the real error."
Checked logs. Real issue: Database migrations hadn't been applied! The user.role column didn't exist.
Copilot saved me from: Debugging the wrong thing for hours.
Time Saved: 2+ hours 🎯
4️⃣ Database Migration Crisis (Feb 3)
Production Error:
sqlalchemy.exc.ProgrammingError: column users.role does not exist
Command:
@github-copilot suggest exact command to apply pending Alembic migrations in production Docker container
Copilot:
docker compose -f docker-compose.prod.yml exec backend alembic upgrade head
Ran it. Migrations applied. Production fixed.
Time Saved: 20-30 minutes (no need to look up Alembic docs)
5️⃣ Mobile Responsiveness Nightmare (Feb 3)
Problem: Job search modal was completely unusable on mobile devices. Too wide, cut off, unscrollable.
Command:
@github-copilot suggest how to make this TailwindCSS modal responsive for mobile screens
Copilot's Suggestions:
- Change
md:grid-cols-3tosm:grid-cols-3 - Add
grid-cols-1for mobile-first - Use
p-4 sm:p-8for responsive padding - Add
max-h-screen overflow-y-auto
Result: Changed 10 lines. Perfect mobile experience.
Time Saved: 1 hour of trial-and-error 📱
6️⃣ Async Job Search Architecture (Jan 31)
Problem: Job search was blocking the API for 30-60 seconds while scraping 6 different job boards. Terrible UX - users thought the app was frozen.
Command:
@github-copilot suggest FastAPI endpoint architecture for async job search with real-time progress updates
Copilot's Complete Architecture:
- Create
/jobs/search/asyncendpoint that returns task ID immediately - Use Celery to run scraping in background
- Create
/jobs/search/status/{task_id}endpoint for polling - Return progress states:
pending,processing,completed,failed - Frontend polls every 2 seconds for updates
Implementation: Built the entire async system in 2 hours following this architecture.
Result: Instant response, smooth progress bar, perfect UX.
Time Saved: 3-4 hours of research and trial-and-error 🚀
7️⃣ Git Repository Cleanup (Feb 4)
Problem: My repo had 60+ markdown documentation files polluting the root directory. Looked unprofessional.
Command:
@github-copilot suggest .gitignore pattern to exclude all .md files except README.md
Pattern:
*.md
!README.md
Follow-up Command:
git ls-files "*.md" | grep -v "README.md" | xargs git rm --cached
Result: Clean repository structure in 5 minutes.
Time Saved: 10-15 minutes 🧹
8️⃣ Missing TypeScript Properties (Feb 1)
Error:
Property 'work_mode' does not exist on type 'JobOffer'
Property 'salary_max' does not exist on type 'JobOffer'
Command:
@github-copilot check if work_mode and salary_max exist in backend JobOffer model
Copilot: Found them in backend, missing in frontend TypeScript interface.
Fix: Added 2 lines to interface. Done.
Time Saved: 10 minutes
9️⃣ Admin Panel Mobile Navigation (Feb 4, Today!)
Problem: Admin users couldn't access admin panel on mobile - link was missing from mobile navigation menu.
Command:
@github-copilot add admin dashboard link to mobile navigation menu based on user role
Copilot's Solution:
{user?.role === 'admin' && (
<Link href="/admin" className="flex items-center gap-2">
<Shield className="h-5 w-5" />
<span>Admin</span>
</Link>
)}
Result: Admin link now shows only for admin users on mobile.
Time Saved: 15-20 minutes
⏱️ Time Comparison: Before vs After
| Task Category | With Copilot CLI | Without Copilot CLI |
|---|---|---|
| Docker debugging | 1-2 hours | 4-6 hours |
| TypeScript type errors (8 errors) | 1 hour | 3-4 hours |
| CORS diagnosis & fix | 30 minutes | 2-3 hours |
| Database migrations | 20 minutes | 1-2 hours |
| Responsive UI fixes | 1 hour | 3-4 hours |
| Async architecture design | 2 hours | 6-8 hours |
| Git cleanup | 15 minutes | 1 hour |
| Code refactoring | 2-3 hours | 8-10 hours |
| TOTAL PROJECT | 6 days | 3-4 weeks |
Estimated Time Saved: 60-80 hours ⚡
🎓 Key Learnings From Using Copilot CLI
1. Pair Programming With a Senior Developer
Using Copilot CLI felt like having a senior developer sitting next to me:
- "Why is this failing?" → Instant, context-aware answer
- "How do I configure this?" → Exact command, no docs diving
- "What's best practice here?" → Industry standards explained
The difference? This "senior dev" never gets tired, annoyed, or needs coffee breaks.
2. Debugging Became 10x Faster
Before Copilot CLI:
- Google the error message
- Stack Overflow (top 5 answers)
- Try solution 1 (doesn't work)
- Try solution 2 (doesn't work)
- Page 3 of Google (find the real answer)
- Understand, adapt, implement
With Copilot CLI:
- Ask Copilot the error
- Get context-specific answer
- Implement
- Fixed
Hours became minutes.
3. Learning Best Practices Without Reading Docs
Copilot naturally suggested:
- Proper Alembic migration commands
- Correct TailwindCSS responsive breakpoints
- Git patterns I didn't know existed
- Docker multi-stage build optimizations
- FastAPI async best practices
I learned while building, not by reading documentation first.
4. Context Awareness is Game-Changing
Copilot CLI understood:
- My FastAPI + Next.js stack
- My shadcn/ui component library
- My Docker Compose setup
- My specific file structure
- My database schema
Suggestions weren't generic - they were tailored to my exact project.
5. It's an Accelerator, Not Magic
Important reality check: Copilot CLI doesn't write entire features for you. But it:
- Removes friction - No more "How do I...?" roadblocks
- Saves research time - No documentation diving for syntax
- Catches errors early - Before you waste time debugging
- Points you in the right direction - Architecture suggestions
- Handles boilerplate - Configuration files, type definitions
You still design the architecture and write the logic. But you build much, much faster.
🚧 Honest Challenges & Limitations
Being completely transparent:
Suggestions sometimes need adjustment - Copilot gives you the right direction, but you still need to adapt to your specific needs (~10-15% of the time)
You must understand the code - Don't blindly copy suggestions. Read, understand, then implement.
Not a replacement for thinking - You still design the architecture, plan features, make decisions. Copilot executes your vision faster.
Context limits matter - Very large files or complex multi-file changes require breaking down the problem.
10-15% suggestions aren't relevant - But 85% success rate is still incredible.
Bottom line: Copilot CLI is a superpower, but you're still the superhero.
🎯 The Bottom Line
Six days ago: An idea to help professionals and students find jobs/internships faster.
Today:
- ✅ Production application running on a VPS
- ✅ 15,000+ lines of TypeScript/Python code
- ✅ 40+ React components
- ✅ 28 API endpoints
- ✅ AI-powered features (embeddings, GPT-4, Gemini)
- ✅ Fully responsive design
- ✅ Real users finding real opportunities
Could I have built this without Copilot CLI?
Yes, absolutely.
Would it have taken 3-4 weeks instead of 6 days?
100% yes.
More importantly: Copilot CLI didn't just save time - it made development enjoyable. No frustration. No getting stuck. Just flow state.
Try JobHunter AI Today! 🚀
Live Application: https://jobhunter.franckkenfack.works
Test Credentials:
- Email: test@test.com
- Password: Test123!
GitHub Repository: github.com/Kenfack-franck/jobHunterAi
Perfect for:
- 💼 Professionals searching for their next job
- 🎓 Students looking for internships or "stages"
- 🚀 Anyone tired of manual job hunting across multiple sites
- 🤖 Developers interested in AI-powered applications
Let's Connect! 💬
Have questions? Want to discuss the technical implementation? Found a bug?
Drop a comment below! I'm happy to:
- Explain any technical decisions
- Share more detailed Copilot CLI examples
- Discuss the AI/ML implementation
- Talk about the async architecture
If you found this helpful:
- ⭐ Star the GitHub repo
- 🔄 Share this article with fellow developers
- 💬 Leave your feedback below
- 🐦 Connect with me on social media
Built with passion 🔥, powered by AI 🤖, accelerated by GitHub Copilot CLI ⚡
All statistics are 100% verifiable in the copilot-evidence/ folder of the GitHub repository.
P.S. I even used Copilot CLI to help structure and write parts of this article. Meta! 😄
Technical Implementation Highlights
For the technically curious, here are some interesting implementation details:
AI Compatibility Scoring
- Uses OpenAI
text-embedding-3-smallto vectorize job descriptions and user profiles - Stores vectors in PostgreSQL with pgvector extension
- Calculates cosine similarity for matching (0-100% score)
- Caches results in Redis for performance
Async Job Search
- Celery workers scrape 6 job boards in parallel
- Real-time progress updates via polling
- Results streamed back as they arrive
- Smart caching to avoid duplicate API calls
CV Parsing
- Uses GPT-4 to extract structured data from PDF resumes
- Handles multiple formats and languages
- 95%+ accuracy on standard CVs
- Fallback to Gemini if OpenAI quota exceeded
Document Generation
- Personalized resumes generated in under 30 seconds
- Uses GPT-4 with job-specific prompts
- Formats to single-page PDF automatically
- Cover letters follow French professional standards
Performance Optimizations
- Docker multi-stage builds (image size: 2.1GB → 890MB)
- Redis caching for search results (24h TTL)
- Database connection pooling
- Frontend code splitting with Next.js
- Lazy loading for heavy components
Thank you for reading! 🙏
If you made it this far, you're awesome. Now go try the app and let me know what you think!

Top comments (0)