Welcome! This assessment is designed to evaluate your skills in React, TypeScript, TailwindCSS, and FastAPI.
1 hour and 30 minutes. We understand this is limited time, so focus on:
- Core functionality working correctly
- Clean component structure
- Visual accuracy to the design
You'll be building a candidate management interface inspired by Greenhouse's "All Candidates" page. This assessment focuses on:
- Translating designs into well-organized React components
- Implementing interactive filtering and pagination
- Creating FastAPI endpoints with query parameters
- Styling with TailwindCSS to match the provided design
A candidate listing page with:
- Left Sidebar: Search input, filters (dropdown + collapsible sections), reset button
- Main Content: Candidate list with name, position, job, status, and interview stages
- Pagination: Navigate through 4 pages of candidates
- Backend: FastAPI endpoint that handles search filtering
- ✅ Sidebar component with search input, toggle, dropdown, reset button
- ✅ SearchInput component with 300ms debounce
- 🔶 CollapsibleSection skeleton (needs state management)
- ✅ Configured React + TypeScript + TailwindCSS project
- ✅ Configured FastAPI starter with CORS and data loading
- ✅ Mock data JSON with 20 candidates
- ✅ Design specifications (colors, spacing, typography)
- ✅ TypeScript type definitions for all data structures
- Complete the CollapsibleSection component (add state + expand/collapse logic)
- 8 filter sections using CollapsibleSection in the sidebar (visual only)
- Action buttons (Generate Report, Add Candidate, Bulk Actions - visual only)
- Candidate card components matching the design exactly
- Pagination component with working navigation (client-side)
- FastAPI endpoint with search filtering
cd frontend
npm install
npm run devThe app will run on http://localhost:5173
cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
uvicorn main:app --reloadThe API will run on http://localhost:8000
See REQUIREMENTS.md for detailed step-by-step requirements.
-
Filter Sections in Sidebar
- Complete the
CollapsibleSection.tsxcomponent (add state, toggle, conditional rendering) - Add 8 CollapsibleSection components to the Sidebar's filter area
- Sections: Application Type, Jobs, CRM, Profile Details, Source, Responsibility, Pipeline Tasks, Education
- Chevron should rotate 90deg (point right when collapsed, down when expanded)
- Note: Filters are visual only for core requirements
- Complete the
-
Candidate List - Main Focus
- Build CandidateCard component matching the design exactly
- Display: name (link), position, company, job title, status
- Include interview stages section for candidates with interviews
- Match spacing, colors, and typography from Figma precisely
- Display 5 candidates per page
-
Action Buttons
- "Generate Report", "+ Add Candidate", "Bulk Actions" buttons
- Visual only, no functionality needed
-
Pagination
- Build Pagination component showing pages 1, 2, 3, 4
- Highlight current page
- Navigate between pages (MUST WORK - updates candidate list)
- Use client-side pagination (slice array in frontend)
-
FastAPI Backend
GET /api/candidatesendpoint- Support
searchquery parameter - Implement search filtering (name, position, company)
- Return all matching candidates (pagination handled client-side)
- Working dropdown sort functionality
- Loading states when fetching data
- Working filter sections (expand/collapse + filtering)
- Filter tags that show active filters
- Hover animations and transitions
- Mobile responsive layout
- Reference Design (Figma): View Figma File
- This is the exact design you should replicate
- Focus on the "All Candidates Page" section
- Design Specs: See
designs/specs.mdfor colors, spacing, typography - Screenshots: See
designs/folder for exported screenshots
Your submission will be evaluated on:
- CandidateCard matches design spacing, colors, and typography (15 pts)
- Filter sections styled correctly with expand/collapse functionality (7 pts)
- Pagination matches design (3 pts)
- Proper use of TailwindCSS utilities
- Note: We evaluate designs visually. Your implementation should closely approximate the Figma reference - exact pixel perfection is not required
- Bonus: All 8 filter sections implemented (+2 pts)
- Well-organized, modular components
- Logical component hierarchy for CandidateCard
- Reusable components where appropriate
- Clean file structure
- Search filtering works correctly (debounced)
- Pagination works (correct page changes, correct candidates shown)
- Backend endpoint implements search and pagination correctly
- Candidates display with all required information
- Interview stages display for applicable candidates
- Proper type definitions for all props
- No use of
anytype (explicit or implicit) - Correct typing for API responses
- Good use of interfaces/types
- Clean, readable code
- Helpful comments where needed
- Good error handling
- Accessibility considerations
When complete:
-
Test your code
- Ensure both frontend and backend run without errors
- Test all filter and pagination functionality
-
Document any incomplete features in
NOTES.md- What you completed
- What you would do with more time
- Any libraries you added and why
-
Zip the project
- Delete
node_modules/andvenv/before zipping - Keep
.gitfolder if you used git
- Delete
-
Email it back to us
- You may use any additional packages if needed (just explain why in NOTES.md)
- Focus on the provided stack (React, TypeScript, TailwindCSS, FastAPI)
- We're not expecting perfection - show us your problem-solving approach
- If you use AI tools, that's fine! Just note which tools and how you used them
If you have questions during the assessment, please reach out to [your-email@company.com].
Good luck! We're excited to see what you build.