Welcome to the Employee Data Challenge! This is a technical interview project designed to test your ability to work with large datasets, implement performance optimizations, and create a great user experience.
Your task is to implement a high-performance data table that can efficiently handle 10,000 employee records with the following features:
- Virtualized List/Table - Handle 10,000+ items efficiently without performance degradation
- Real-time Search - Search across multiple fields (name, email, company, etc.)
- Filtering - Filter by department, status, and other criteria
- Sorting - Sort by any column (name, salary, start date, etc.)
- Responsive Design - Works well on different screen sizes
- ✅ Smooth scrolling through large datasets
- ✅ Responsive search and filtering (< 100ms)
- ✅ Efficient memory usage
- ✅ No UI blocking during data operations
- Node.js 18+
- npm or yarn
-
Clone this repository
-
Install dependencies:
npm install # or yarn install -
Start the development server:
npm run dev # or yarn dev -
Open http://localhost:3000 in your browser
The mock API endpoint provides 10,000 employee records with the following structure:
GET /api/items
| Parameter | Type | Description | Example |
|---|---|---|---|
page |
number | Page number (1-based) | 1 |
limit |
number | Items per page | 50 |
search |
string | Search term | "john" |
sortBy |
string | Sort field | "name", "salary", "startDate" |
sortOrder |
string | Sort direction | "asc", "desc" |
department |
string | Filter by department | "Engineering" |
status |
string | Filter by status | "active", "inactive", "pending" |
GET /api/items?page=1&limit=100&search=john&sortBy=salary&sortOrder=desc&department=Engineering&status=active
{
"data": [
{
"id": 1,
"name": "John Doe",
"email": "john.doe@company.com",
"company": "TechCorp",
"department": "Engineering",
"position": "Software Engineer",
"salary": 95000,
"location": "San Francisco, CA",
"startDate": "2023-01-15",
"status": "active",
"experience": 5
}
],
"pagination": {
"page": 1,
"limit": 100,
"total": 1250,
"totalPages": 13,
"hasNext": true,
"hasPrev": false
},
"filters": {
"search": "john",
"department": "Engineering",
"status": "active",
"sortBy": "salary",
"sortOrder": "desc"
}
}-
Virtualization Libraries
react-windoworreact-virtualizedfor efficient list rendering@tanstack/react-virtualfor modern virtualization
-
State Management
- React hooks (useState, useEffect, useMemo, useCallback)
- Consider useReducer for complex state
- Optional: Zustand, Redux Toolkit, or Jotai
-
Data Fetching
- Built-in
fetchAPI - SWR or React Query for caching and synchronization
- Debounce search inputs
- Built-in
-
UI Components
- Tailwind CSS (already included)
- Headless UI components
- Custom components for table/list
- Use
useMemoanduseCallbackto prevent unnecessary re-renders - Implement proper debouncing for search inputs
- Consider windowing/virtualization for large lists
- Optimize API calls with proper caching strategies
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Runtime: Node.js
You'll be evaluated on:
-
Performance (30%)
- Efficient handling of large datasets
- Smooth user interactions
- Proper virtualization implementation
-
Code Quality (25%)
- Clean, readable code structure
- Proper TypeScript usage
- Component organization
-
User Experience (25%)
- Intuitive interface design
- Responsive behavior
- Error handling
-
Feature Completeness (20%)
- All required features implemented
- Edge cases handled
- Bonus features
Implement any of these for extra credit:
- Column resizing and reordering
- Export functionality (CSV, Excel)
- Advanced filters (date ranges, salary ranges)
- Bulk actions (select multiple items)
- Dark mode toggle
- Keyboard navigation
- Accessibility features (ARIA labels, screen reader support)
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run type-check- Run TypeScript checker
When you're ready to present:
- Ensure the app runs without errors
- Test all features work correctly
- Be prepared to explain your implementation choices
- Discuss any tradeoffs or optimizations you made
Feel free to ask questions during the interview! We're here to help and want to see you succeed.
Good luck! 🚀