Welcome! This is a Next.js application for the Curo EV charging platform. This codebase serves as the foundation for design engineer interview exercises, where you'll be asked to identify issues, implement improvements, and demonstrate your technical and design skills.
Curo is an EV charging platform that helps electric vehicle drivers find, access, and manage charging sessions at various charging stations. The application provides real-time information about charger availability, different charging speeds, and session management.
- Framework: Next.js 15.3.4 with App Router
- Language: TypeScript
- Styling: Tailwind CSS v4 with custom design tokens
- UI Components: Radix UI primitives with custom styling
- Maps: Google Maps API with Advanced Markers
- Real-time: Server-Sent Events (SSE) for live updates
- Icons: Lucide React
- Notifications: Sonner (toast notifications)
- Node.js 18+
- npm or yarn
- Google Maps API key
-
Clone and install dependencies:
cd founding-design-engineer npm install -
Set up environment variables: Create a
.env.localfile:NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
-
Run the development server:
npm run dev
-
Open the application: Visit http://localhost:3000
- Users enter an activation code to access the platform
- Demo Mode: Any passcode works (this is intentional for the demo)
- Includes accessibility features and responsive design
- Interactive Map: Shows EV charging locations with Google Maps
- Pin Types:
- π’ Green: Available fast chargers
- π΅ Blue: Currently charging
- π Orange: Occupied chargers
- β« Gray: Unknown status or slow chargers
- Grouping: Multiple chargers at the same location are grouped
- Real-time Updates: Live status updates via Server-Sent Events
- Bottom Sheet UI: Swipeable panel showing location information
- Tabs: Overview, individual chargers, and charging history
- Charger Selection: Choose specific EVSE units for charging
- Session Management: Start and monitor charging sessions
src/
βββ app/ # Next.js App Router pages
β βββ discover/ # Main map and discovery features
β β βββ page.tsx # Main discover page component
β β βββ ChargersMap.tsx # Google Maps integration
β βββ home/ # Activation/home page
β β βββ page.tsx # Route handler
β β βββ Home.tsx # Home page component
β βββ history/ # Charging session history
β βββ scan/ # QR code scanning
β βββ layout.tsx # Root layout
β βββ globals.css # Global styles and design tokens
β βββ page.tsx # Root page redirect
βββ components/
β βββ ui/ # Radix UI component library
β βββ GoogleMapsLoader.ts # Maps API utility
βββ hooks/
β βββ use-mobile.tsx # Mobile detection hook
βββ lib/
βββ utils.ts # Utility functions
The application uses a custom color palette defined in globals.css:
- Primary:
#181e2c(Curo Deep Blue) - Accent:
#e1fe8d(Curo Green) - Background:
#fefdfb(Curo Tan) - Text:
#181e2c(Curo Font)
- Headings: Clash Grotesk (custom font)
- Body: Public Sans
- Responsive: Scales from mobile to desktop
- Built on Radix UI primitives
- Custom styled with Tailwind CSS
- Consistent spacing and interaction patterns
- Full dark mode support (toggle available)
- Custom SVG pins with dynamic colors based on charger status
- Grouped locations show aggregated charger counts
- Individual chargers display when zoomed in or selected
- User location with accuracy circle
const statusColors = {
available: '#4FE115', // Green
charging: '#2196F3', // Blue
occupied: '#FF9800', // Orange
faulted: '#F44336', // Red
unknown: '#9E9E9E' // Gray
}- Location Pins: Circular pins with charger count
- EVSE Pins: Square pins for individual chargers
- Grouped Pins: Larger pins representing multiple locations
- Select Location: Tap a pin on the map
- View Details: Bottom sheet opens with location info
- Choose Charger: Switch to "Chargers" tab, select specific EVSE
- Start Session: Tap "Start Session" button
- Monitor Progress: Real-time updates via SSE (in production)
Important: This application runs in demo mode with mock data:
- β Simulated API responses with realistic delays
- β Sample charging locations in San Francisco
- β Mock charging session data
- β Fake real-time updates
- β No actual API calls to real charging networks
- β No real payment processing
- π Bug Identification: Find and fix issues in the codebase
- π¨ UI/UX Improvements: Enhance the user experience
- βΏ Accessibility: Improve accessibility compliance
- π± Responsive Design: Fix mobile/desktop layout issues
- β‘ Performance: Optimize rendering and API calls
- π‘ TypeScript: Add proper type definitions
- π§Ή Code Quality: Refactor and clean up code
- Map Integration:
src/app/discover/ChargersMap.tsx - Main Application Logic:
src/app/discover/page.tsx - Design System:
src/app/globals.css - UI Components:
src/components/ui/ - State Management: React hooks and state in discover page
- Console logs in production code
- Missing TypeScript types (
anyusage) - Accessibility issues (missing ARIA labels, focus management)
- Performance problems (unnecessary re-renders, missing memoization)
- Error handling gaps
- Responsive design breaks
- Inconsistent spacing/styling
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLintDuring the interview, you'll be evaluated on:
- Problem-solving approach: How you identify and tackle issues
- Code quality: Clean, readable, maintainable solutions
- User experience thinking: Considering end-user needs
- Technical skills: React, TypeScript, CSS, accessibility
- Communication: Explaining your thought process
- Attention to detail: Catching subtle issues
During the interview, feel free to:
- β Ask questions about requirements or expected behavior
- β Explain your thought process out loud
- β Look up documentation (this is encouraged!)
- β Take time to understand the codebase before diving in
Good luck! We're excited to see how you approach improving this codebase. π