Empowering 1M+ Pakistani Students to Never Miss a University Deadline
π Live Demo | π Documentation | π Report Bug | β¨ Request Feature
- Overview
- Problem Statement
- Features
- Tech Stack
- Architecture
- Getting Started
- API Documentation
- Database Schema
- Deployment
- Contributing
- License
- Contact
NUCAP (National University Admission Platform) is a comprehensive web application designed to solve the critical problem of students missing university admission deadlines in Pakistan. Every year, thousands of talented students lose opportunities because admission information is scattered across multiple university websites, frequently changes, and is difficult to track.
- π Target Users: 1M+ Intermediate (12th grade) students
- π« Universities Covered: NUST, FAST, COMSATS, Punjab University (expandable)
- β° Automated Tracking: Real-time deadline monitoring and alerts
- π Smart Matching: AI-powered university recommendations based on academic profile
Pakistani students face several challenges during university admissions:
-
Scattered Information π
- Each university has its own website with different layouts
- Admission criteria changes frequently
- Merit lists published at different times
-
Missed Deadlines β°
- No centralized platform for deadline tracking
- Manual checking of multiple websites is time-consuming
- Last-minute announcements go unnoticed
-
Uncertainty β
- Students don't know their admission chances
- Comparing merit across universities is difficult
- No guidance on which universities to apply to
NUCAP solves these problems by:
β
Centralizing all university information in one place
β
Automating deadline tracking and notifications
β
Calculating merit and matching students with universities
β
Providing real-time updates and announcements
β
Simplifying the entire admission process
- Create comprehensive academic profile
- Store Matric and Inter marks
- Add test scores (NUST, FAST, NTS)
- Set preferences (cities, fields, budget)
- Calculate merit for multiple universities instantly
- University-specific formulas (NUST, FAST, COMSATS, Punjab)
- Real-time percentage calculation
- Estimated vs. required merit comparison
- AI-powered recommendations based on profile
- Match score algorithm (0-100)
- Admission chances (High/Good/Medium/Low)
- Merit gap analysis
- Department-wise breakdown
- Upcoming deadlines dashboard
- Countdown timers
- Multi-university tracking
- Important date reminders
- Latest announcements from universities
- Merit list publications
- Deadline extensions
- Important notices
- Browse all universities
- Filter by city, test type, field
- Department details
- Historical merit data
- Direct application links
- System statistics overview
- User analytics
- Scraping activity monitoring
- Manual data entry forms
- Automated data collection from university websites
- Custom scrapers for each university
- Scraping logs and error tracking
- Manual trigger for on-demand updates
- Add/edit university information
- Update admission timelines
- Publish announcements
- Manage merit lists
- Framework: Next.js 15.5 (App Router)
- Language: TypeScript 5.0
- Styling: Tailwind CSS 4.0
- UI Components: Shadcn/ui
- Icons: Lucide React
- Forms: React Hook Form + Zod validation
- Runtime: Node.js 22
- API: Next.js API Routes
- Authentication: Clerk
- Database: PostgreSQL 16
- ORM: Prisma 6.17
- Hosting: Vercel
- Database Hosting: Vercel Postgres / Supabase / Neon
- Cron Jobs: Vercel Cron
- Web Scraping: Jina AI API + Cheerio
- Package Manager: npm
- Linting: ESLint
- Type Checking: TypeScript
- Database GUI: Prisma Studio
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT (Browser) β
β Next.js 15 Frontend β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Landing β βDashboard β βUniversitiesβ β Profile β β
β β Page β β β β Explorer β β Creation β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β HTTP/HTTPS
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β API LAYER (Next.js) β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
β β Student API β βUniversities APIβ β Admin API β β
β β - Profile β β - List β β - Manage Data β β
β β - Merit Calc β β - Details β β - Scraping β β
β β - Matches β β - Filter β β - Analytics β β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
ββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
β Authentication β β Database β β Web Scraping β
β (Clerk) β β (PostgreSQL) β β (Jina AI) β
β β β β β β
β - User Mgmt β β - Users β β - NUST β
β - Sessions β β - Universities β β - FAST β
β - Protected β β - Departments β β - COMSATS β
β Routes β β - Merit Lists β β - Punjab β
ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ
Student Creates Profile
β
ββ> Save to Database (PostgreSQL)
β
ββ> Calculate Merit (All Universities)
β
ββ> Generate Matches (Algorithm)
β
ββ> Display Results (Dashboard)
Automated Scraping (Every 12 hours)
β
ββ> Jina AI fetches university websites
β
ββ> Custom scrapers extract data
β
ββ> Parse deadlines, merit lists, announcements
β
ββ> Save to database
β
ββ> Students see updated information
For each university:
Student Merit = (Matric% Γ W1) + (Inter% Γ W2) + (Test Score Γ W3)
Where weights differ by university:
NUST: W1=10%, W2=15%, W3=75% (Test out of 200)
FAST: W1=10%, W2=40%, W3=50% (Test out of 100)
COMSATS: W1=15%, W2=35%, W3=50% (Test out of 100)
Punjab: W1=20%, W2=50%, W3=30% (Test out of 100)Match Score (0-100) = Merit Compatibility (50%)
+ Location Preference (25%)
+ Field Preference (25%)
Admission Chance:
- Merit Gap β₯ 5%: HIGH
- Merit Gap β₯ 0%: GOOD
- Merit Gap β₯ -3%: MEDIUM
- Merit Gap < -3%: LOWFirst, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000 with your browser to see the result.
The application includes an admin panel for managing university data, merit lists, and admission timelines.
- Create a
.envfile based on.env.example - Set your admin credentials:
ADMIN_USERNAME=your_admin_username ADMIN_PASSWORD=your_admin_password
- Navigate to http://localhost:3000/admin
- You'll be redirected to the login page if not authenticated
- Enter your admin credentials to access the panel
- University Management: Add, edit, and manage universities and their departments
- Merit Lists: Create and update merit lists for university departments
- Admission Timelines: Set important dates for admission processes
- System Monitoring: View system statistics and scraping logs
# Development
npm run dev # Start dev server
npm run build # Build for production
npm run start # Start production server
# Database
npm run db:generate # Generate Prisma Client
npm run db:migrate # Run migrations
npm run db:seed # Seed database
npm run db:studio # Open Prisma Studio
# Testing
npm run lint # Run ESLint
npx tsx scripts/test-scraper.ts NUST # Test scraperπ For detailed setup instructions, see SETUP.md
π For quick deployment, see QUICKSTART.md
POST /api/student/profile
Content-Type: application/json
{
"matricTotalMarks": 1100,
"matricObtainedMarks": 950,
"matricBoard": "Federal",
"matricYear": 2022,
"interTotalMarks": 1100,
"interObtainedMarks": 900,
"interBoard": "Federal",
"interGroup": "Pre-Eng",
"interYear": 2024,
"nustTestScore": 140,
"fastTestScore": 75,
"preferredCities": ["Islamabad", "Lahore"],
"preferredFields": ["Computer Science", "Engineering"]
}POST /api/student/calculate-merit
Content-Type: application/json
{
"matricPercentage": 86.4,
"interPercentage": 81.8,
"testScores": {
"NUST": 140,
"FAST": 75
}
}POST /api/student/generate-matchesGET /api/universities
GET /api/universities?city=Islamabad
GET /api/universities?testType=NUST
GET /api/universities?category=EngineeringGET /api/universities/{id}POST /api/cron/scrape-universities
Authorization: Bearer {CRON_SECRET}POST /api/admin/add-deadline
Content-Type: application/json
{
"universityId": "...",
"year": 2025,
"cycle": "Fall 2025",
"applicationDeadline": "2025-03-15",
"testDate": "2025-04-20"
}- User: Authentication and basic info
- StudentProfile: Academic credentials and preferences
- University: University information
- Department: Program details
- MeritList: Historical merit data
- AdmissionTimeline: Deadline tracking
- UniversityUpdate: News and announcements
- StudentMatch: University recommendations
- ScrapingLog: Scraping activity logs
User (1) ββββββββββββββ> (1) StudentProfile
β
β (1)
βΌ
StudentMatch (N)
β
ββββββββββββββββββββββββ΄βββββββββββββββββββββββ
β β
β (1) (1) β
βΌ βΌ
University (1) βββββββββββββββββββββ> (N) Department
β β
βββββββ> (N) MeritList β
βββββββ> (N) AdmissionTimeline β
βββββββ> (N) UniversityUpdate β
βββββββ> (N) ScrapingLog β
β
βββββββββββββββββββββββββ
β
βΌ
MeritList (N)
π For complete schema details, see prisma/schema.prisma
-
Push to GitHub
git add . git commit -m "Ready for deployment" git push origin main
-
Connect to Vercel
- Go to vercel.com
- Import repository
- Configure environment variables
- Deploy
-
Set up Database
- Use Vercel Postgres, Supabase, or Neon
- Run migrations:
npx prisma migrate deploy - Seed data:
npx prisma db seed
-
Configure Clerk
- Update allowed domains in Clerk dashboard
- Set production redirect URLs
π For detailed deployment guide, see DEPLOYMENT.md
The application includes a comprehensive test suite to ensure reliability and correctness.
- Unit Tests: Located in
__tests__directory - Integration Tests: API route tests
- Authentication Tests: Admin and user authentication flows
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage report
npm run test:coverage
# Run specific test file
npx jest __tests__/adminAuth.test.ts- Admin authentication system
- Student profile API endpoints
- University management API endpoints
- Core application functionality
We welcome contributions from the community! Here's how you can help:
- π Report Bugs: Open an issue
- β¨ Request Features: Suggest enhancements
- π» Submit Code: Create a pull request
- π Improve Docs: Help us improve documentation
- π¨ Design: Contribute UI/UX improvements
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Test thoroughly
- Commit (
git commit -m 'Add amazing feature') - Push (
git push origin feature/amazing-feature) - Open a Pull Request
- Use TypeScript for all new code
- Follow existing code patterns
- Add comments for complex logic
- Write meaningful commit messages
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
Saad Khan Tareen
- GitHub: @saadkhantareen
- Project: pak-institutioner
- Jina AI for web scraping capabilities
- Clerk for authentication services
- Vercel for hosting platform
- Shadcn/ui for beautiful UI components
- All contributors and supporters
- GitHub Issues: Report a problem
- Discussions: Ask questions
- Email: support@nucap.pk
Made with β€οΈ for Pakistani Students
β Star us on GitHub if you find this project helpful!
Thank You!