I understand that this is a fast-paced project, and since the goal is to showcase my skills, I dedicated extra time to improving usability and implementing the best possible features.
A modern, interactive React component for visualizing and managing career progression in a horizontal timeline with dark mode design and advanced usability features.
- React 18 with TypeScript
- Vite for build and development
- Tailwind CSS for styling
- Shadcn UI for base components
- Material UI Icons for icons
- Radix UI for accessible components
- Emotion for Material UI styling
# Install dependencies
npm install
# Run in development mode
npm start
# Alternative development command
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewThe project will run at http://localhost:5173
- ✅ Horizontal timeline with compact lanes layout
- ✅ Optimized assignLanes algorithm for vertical space efficiency
- ✅ Different experience types visualization (work, education, projects, certifications)
- ✅ Real career data with work experiences, academic formations, and certifications
- ✅ Dark mode design with modern glassmorphism effects
- ✅ Dynamic zoom system (25% to 300% with 100% as baseline)
- ✅ Modal-based editing for adding and updating experiences
- ✅ Smart tooltips with mouse tracking and viewport boundary detection
- ✅ Z-index hover effects - hovered items appear above others
- ✅ Company-specific color coding with gradient backgrounds
- ✅ Responsive design with fixed header and scrollable timeline
- ✅ Temporal markers by year
- ✅ Action buttons on hover with glassmorphism styling
- ✅ Smooth transitions and micro-interactions
- ✅ Visual hierarchy with dynamic z-index on hover
- ✅ Tooltip follows mouse on X-axis with fixed width
- ✅ Harmonious action buttons that appear only on hover
- ✅ Company legend showing color associations
- ✅ Separated journey section from scrollable timeline
- GitHub Contribution Graph: For horizontal lanes concept
- Linear Timeline: For minimalist and clean design
- Figma Timeline: For dark mode aesthetics
- Notion Database: For type system and categorization
- Dark theme: Modern, professional appearance
- Horizontal timeline: Better for visualizing temporal progression
- Compact lanes: Maximizes vertical space usage
- Dynamic hover effects: Items elevate above others when hovered
- Smart tooltips: Fixed width with boundary detection using React Portals
- Modal editing: Better UX than inline editing for complex forms
- Glassmorphism: Subtle transparency effects for modern look
- Company color coding: Visual association with different organizations
src/
├── components/
│ ├── Timeline/
│ │ ├── Timeline.tsx # Main component with state management
│ │ ├── TimelineItem.tsx # Individual timeline item with hover effects
│ │ └── AddExperienceDialog.tsx # Modal for adding/editing experiences
│ └── ui/ # Shadcn UI components
├── data/
│ └── timelineItems.ts # Real career data and types
├── utils/
│ └── assignLanes.ts # Compact lanes algorithm (TypeScript)
└── lib/
└── utils.ts # General utilities (cn function)
- Global application state management
- Zoom controls with adjusted levels (25%-300%)
- Modal management for add/edit operations
- Company legend rendering
- Fixed header with scrollable timeline content
- Individual experience rendering with company-specific colors
- Smart tooltip with React Portal and boundary detection
- Dynamic z-index on hover for visual hierarchy
- Glassmorphism action buttons (edit/delete) on hover
- Mouse tracking for tooltip positioning
- Optimized algorithm for lane distribution
- Minimizes vertical overlap
- TypeScript implementation with proper typing
// assignLanes.test.ts
describe('assignLanes', () => {
test('should assign non-overlapping items to same lane', () => {
const items = [
{ startDate: '2023-01-01', endDate: '2023-06-30' },
{ startDate: '2023-07-01', endDate: '2023-12-31' }
];
const result = assignLanes(items);
expect(result[0].lane).toBe(result[1].lane);
});
test('should assign overlapping items to different lanes', () => {
const items = [
{ startDate: '2023-01-01', endDate: '2023-12-31' },
{ startDate: '2023-06-01', endDate: '2023-12-31' }
];
const result = assignLanes(items);
expect(result[0].lane).not.toBe(result[1].lane);
});
});
// TimelineItem.test.tsx
describe('TimelineItem tooltip', () => {
test('should adjust tooltip position within viewport boundaries', () => {
// Test boundary detection logic
});
test('should show/hide tooltip on mouse enter/leave', () => {
// Test tooltip visibility
});
});- Modal add/edit functionality tests
- Zoom controls behavior
- Tooltip positioning and boundary detection
- Z-index hover effects
- Complete experience addition/editing flow
- Timeline navigation with zoom
- Tooltip behavior across different screen sizes
- Performance with large datasets
- Rendering time with 50+ items
- Memory usage during interactions
- Tooltip performance with frequent mouse movements
- Smart Tooltip System: Uses React Portals with boundary detection
- Dynamic Visual Hierarchy: Z-index changes on hover for better UX
- Company-Specific Theming: Meaningful color associations
- Dark Mode Design: Modern, professional appearance
- Glassmorphism Effects: Subtle, elegant visual enhancements
- Strong TypeScript: Complete typing reduces bugs
- Performance Optimizations: useMemo for expensive calculations
- Accessibility: Radix UI components ensure accessibility
- Clean Code Architecture: Well-separated concerns and reusable components
- Virtualization: For supporting hundreds of items efficiently
- Undo/Redo System: Complete change history management
- Data Persistence: Backend integration or advanced localStorage
- Test Coverage: Comprehensive unit and integration tests
- Performance: Web Workers for heavy lane calculations
- Advanced Filtering: By company, type, date range, skills
- Search Functionality: Quick find specific experiences
- Export Features: PDF timeline, JSON data, PNG images
- Keyboard Navigation: Full accessibility with keyboard shortcuts
- Bulk Operations: Multi-select and batch editing
- Light Mode Toggle: Theme switching capability
- Custom Color Themes: User-customizable company colors
- Mobile Optimization: Touch-friendly interactions
- Advanced Animations: More sophisticated micro-interactions
- Timeline Templates: Pre-defined career path templates
interface TimelineItem {
id: string;
name: string;
startDate: string; // YYYY-MM-DD
endDate: string; // YYYY-MM-DD
description?: string;
company?: string;
position?: string;
type: 'education' | 'work' | 'project' | 'certification';
}
interface TimelineItemWithLane extends TimelineItem {
lane: number;
startDateObj: Date;
endDateObj: Date;
}- Horizontal timeline with compact lanes
- Dark mode design with glassmorphism
- Smart tooltips with boundary detection
- Dynamic z-index hover effects
- Modal-based add/edit functionality
- Company-specific color coding
- Zoom controls (25%-300%)
- Real career data integration
- Clone the repository
- Run
npm installto install dependencies - Run
npm startto start the development server - Open
http://localhost:5173in your browser - Explore the timeline and try adding/editing experiences
Developed as a technical test demonstrating: Modern React Patterns, TypeScript Excellence, Advanced UX/UI Design, Performance Optimization, Clean Architecture, and Professional Code Quality.