Job Board System
System design for job board with search, filters, applications, and matching
Design a job board system (LinkedIn Jobs, Indeed) with job search, filters, applications, and matching.
R - Requirements
Key Questions:
- How many jobs? (thousands, millions)
- Search functionality? (keywords, location, salary)
- Filters? (job type, experience level, company, salary range)
- Applications? (apply directly, save jobs, track status)
- Matching algorithm? (recommend jobs based on profile)
- Company profiles? (company pages, job listings)
Common Answers:
- Thousands to millions of jobs
- Full-text search (keywords, location)
- Multiple filters (type, level, company, salary)
- Application system (apply, save, track)
- Job recommendations (based on profile)
- Company profiles with job listings
A - Architecture
Job Search Flow:
Job Board Architecture:
Architecture Decisions:
- SSR/ISR for job pages (SEO critical) - Pre-render for search engines
- Client-side for search and filters (interactive) - Fast filtering, debounced search
- Real-time for application status updates - WebSocket/SSE for status changes
- Search indexing (server-side, Elasticsearch-like) - Full-text search, faceted search
Relevant Content:
- Pre-rendering - SSR/ISR
- Data Fetching Strategies - Search patterns
D - Data Model
Talking Points:
- Job search and filtering - Keywords, location, filters, pagination
- Application system - Apply, save jobs, track status, resume upload
- Job matching - Recommendations based on profile, skills, experience
State Management:
- Job listings (paginated, filtered)
- Search query (keywords, location, filters)
- Saved jobs (user's saved jobs)
- Applications (applied jobs, status tracking)
- User profile (skills, experience, preferences)
Caching:
- Job cache (normalized, by job ID)
- Search results cache (cache popular searches)
- Saved jobs cache (user's saved jobs)
Relevant Content:
- Autocomplete Search - Job search
- Caching Patterns - Search cache
- File Upload Component - Resume upload
I - Interface
Talking Points:
- Job search interface - Search bar, location autocomplete, filters sidebar
- Job listings - List/grid view, job cards, pagination
- Job detail page - Full description, apply button, save job, company info
- Application tracking - Applied jobs, status, updates
Features:
- Job search (keywords, location autocomplete)
- Filters sidebar (type, level, company, salary)
- Job listings (list/grid view, pagination)
- Job detail page (description, apply, save, company)
- Application tracking (applied jobs, status)
- Saved jobs (bookmarked jobs)
- Company profiles (company info, job listings)
Relevant Content:
- Autocomplete Search - Location search
- Data Table Component - Job listings table
- Pagination Component - Job pagination
O - Optimizations
Performance:
- Search debounce (don't search on every keystroke)
- Virtualized listings (for large result sets)
- Prefetch job details (on hover)
- Image optimization (company logos)
UX:
- Optimistic UI (show saved/applied immediately)
- Filter persistence (remember user preferences)
- Real-time updates (application status changes)
Relevant Content:
- Virtualized List - Job listings
- Optimistic Updates - Instant feedback
- Prefetching Strategies - Job details
Implementation Checklist
- Job search (keywords, location autocomplete)
- Filters sidebar (type, level, company, salary)
- Job listings (list/grid view, pagination)
- Job detail page (description, apply, save)
- Application system (apply, track status)
- Saved jobs (bookmark, manage)
- Company profiles (company info, listings)
- Search debounce (300-500ms)
- Virtualized listings (large result sets)
- Image optimization (company logos)
- Real-time updates (application status)
Common Pitfalls
❌ Search on every keystroke → Too many requests
✅ Debounce search (300-500ms), minimum query length
❌ Rendering all jobs → Performance issues
✅ Virtualize listings, paginate or infinite scroll
❌ No filter persistence → Users lose preferences
✅ Save filters to localStorage, restore on page load
❌ No real-time updates → Stale application status
✅ WebSocket/SSE for status updates, optimistic UI