Frontend Engineer Code Challenge - KYC Verification System
Overview
Design and implement a complete KYC (Know Your Customer) verification flow using React. This challenge evaluates your ability to build a production-ready, user-friendly application with clean architecture and best practices.
Challenge Requirements
Functional Requirements
Build a multi-step KYC verification form with the following steps:
Step 1: Personal Information
- Full Name (required)
- Email Address (required, with email validation)
- Phone Number (required, with format validation)
- Date of Birth (required, must be 18+)
- Country of Residence (required, dropdown/autocomplete)
Step 2: Address Verification
- Street Address (required)
- City (required)
- State/Province (required)
- Postal Code (required)
- Address proof document upload (PDF, JPG, PNG - max 5MB)
Step 3: Identity Verification
- ID Type selection (Passport, Driver's License, RG)
- ID Number/ CPF (required)
- ID document upload (front side)
- ID document upload (back side, if applicable)
Step 4: Selfie Verification
- Live selfie capture
- Instructions for proper selfie (face clearly visible, good lighting)
Step 5: Review & Submit
- Summary of all entered information
- Ability to edit any previous step
- Terms and conditions acceptance
- Final submission
Evaluation Criteria
1. Componentization
What we're looking for:
- Reusable Components: Create generic, reusable components (Button, Input, Select, FileUpload, etc.)
- Composition: Components should be composable and follow single responsibility principle
- Props Interface: Clear and well-typed props with proper defaults
- Component Structure: Logical folder organization (e.g.,
/components/ui,/components/kyc) - Avoid Duplication: DRY principle - no repeated code patterns
Example Structure:
/components
/ui
Button.tsx
Input.tsx
Select.tsx
FileUpload.tsx
Card.tsx
/kyc
PersonalInfoStep.tsx
AddressStep.tsx
IdentityStep.tsx
2. Theme Creation
What we're looking for:
- Centralized Theme System: Create a theme configuration object or use a theming library
- Design Tokens: Define colors, typography, spacing, shadows, border radius
- Consistency: All components should reference the theme
- Theme Provider: Implement context-based theming (bonus: light/dark mode toggle)
- Scalability: Easy to modify and extend the theme
Requirements:
- Define at least 3 color palettes: primary, secondary, neutral
- Include semantic colors: success, warning, error, info
- Typography scale (heading sizes, body text, labels)
- Spacing system (margins, paddings)
- Shadow/elevation levels
3. UX (User Experience)
What we're looking for:
- Visual Feedback: Loading states, success/error messages, hover effects
- Progress Indication: Clear progress tracking across steps
- Form Validation: Real-time validation with helpful error messages
- Accessibility: Keyboard navigation, ARIA labels, focus management
- Micro-interactions: Smooth transitions, animations (subtle, not distracting)
- Error Handling: Graceful error states with recovery options
- Mobile-First: Touch-friendly targets, proper spacing
- Help Text: Tooltips, placeholder examples, inline guidance
UX Principles to Apply:
- Progressive disclosure (don't overwhelm users)
- Clear call-to-actions
- Confirmation before destructive actions
- Back button functionality
- Auto-save draft (optional bonus)
4. React Hooks
What we're looking for use, but carefully:
- useState: Proper state management for form data, UI states
- useEffect: Data fetching, side effects, cleanup
- useContext: Theme context, form context for step navigation
- Custom Hooks: Extract reusable logic (useForm, useValidation, useFileUpload)
- useReducer: Complex state management
- useMemo/useCallback: Performance optimization where appropriate
- useRef: Form field references, file inputs
Custom Hook Examples to Implement:
useFormValidation() // Handle validation logic
useMultiStepForm() // Manage step navigation
useFileUpload() // Handle file uploads with preview
5. React Form Management
What we're looking for:
- Form Library: Use a form library (React Hook Form, Formik) OR build custom solution
- Validation: Client-side validation with clear rules
- Error Handling: Field-level and form-level error messages
- Conditional Fields: Show/hide fields based on selections
- Form State Persistence: Maintain state when navigating between steps
- Submit Handling: Proper form submission with loading states
- Reset/Clear: Ability to reset form or individual steps
Validation Rules:
- Email format validation
- Phone number format (international or specific format)
- Verify CPF/CNPJ
- Age verification (18+ calculation)
- File size and type validation
- Required field checks
- Custom async validation (e.g., check if email exists)
6. Responsivity
What we're looking for:
- Mobile First: Design for mobile, enhance for desktop
- Breakpoints: Handle at least 3 breakpoints (mobile, tablet, desktop)
- Flexible Layouts: Use flexbox/grid for responsive layouts
- Touch Targets: Minimum 44px × 44px for interactive elements on mobile
- Typography: Responsive font sizes
- Images/Files: Responsive file upload areas
- Navigation: Mobile-friendly step navigation (e.g., stepper vs. tabs)
- Testing: Should work flawlessly on 320px to 1920px+ screens
Breakpoint Guidelines:
- Mobile: 320px - 767px
- Tablet: 768px - 1023px
- Desktop: 1024px+
Technical Requirements
Must Use:
- React functional components only
- React Hooks
- CSS-in-JS, or components with Tailwind (your choice)
- Form management library OR custom implementation
- File upload handling
Nice to Have:
- TypeScript
- Storybook for component documentation
- Unit tests (Jest, React Testing Library)
- Animation library (Framer Motion, React Spring)
- Accessibility testing tools
Deliverables
-
Source Code
- Well-organized, clean code
- Comments where necessary
- README with setup instructions
-
Documentation
- Component API documentation
- Theme configuration guide
- Form validation rules
- Setup and installation guide
-
Demo
- Working deployed version (Vercel, Netlify, etc.)
- OR screen recording demonstrating all features
Bonus Points (10+
- Dark Mode: Implement theme switching
- Animations: Smooth step transitions, loading animations
- Internationalization: Multi-language support
- Camera Integration: Live selfie capture using device camera
- Drag & Drop: Enhanced file upload with drag-and-drop
- Progressive Web App: Make it installable
- Form Auto-save: Save draft to localStorage
- Advanced Validation: Real-time validation with debouncing
- Accessibility Score: 90+ on Lighthouse accessibility audit
- Unit Tests: 70%+ code coverage
Evaluation Process
Your submission will be evaluated on:
- Code Quality (Organization, readability, best practices)
- Functionality (Does everything work as expected?)
- Design (Visual appeal, consistency, polish)
- Performance (Load time, rendering efficiency)
- Accessibility (WCAG compliance)
- Documentation (Clear, comprehensive)
Submission Guidelines
Submit:
- GitHub repository link (public or provide access)
- Live demo URL
- Brief README explaining:
- Your approach and decisions
- Libraries/tools used and why
- Time spent
- Challenges faced
- What you'd improve with more time
Code Standards:
- No console errors or warnings
- Proper error boundaries
- Clean commit history
- Follow JavaScript/React best practices
Success Criteria
A successful submission will demonstrate:
- ✅ Professional, production-ready code quality
- ✅ Thoughtful user experience design
- ✅ Clean component architecture
- ✅ Robust form handling and validation
- ✅ Responsive design that works on all devices
- ✅ Attention to accessibility and performance