A modern, feature-rich resume builder application built with React, TypeScript, and TanStack Router.
π Live Demo: https://prosperis.github.io/Resumier/
Want to see Resumier in action without creating content? Click "Try Demo Mode" on the welcome screen to explore a fully populated resume with:
- Complete professional profile (John Doe)
- 3 work experiences with detailed descriptions
- Education history, skills, certifications, and links
- All features ready to explore!
Learn more about Demo Mode β
- π Demo Mode - Explore with pre-populated resume data (NEW!)
- π Multiple Templates - Choose from Classic, Modern, and Minimal designs
- π¨ Real-time Preview - See changes instantly as you edit
- πΎ Local Storage - Your data is saved locally in your browser
- π Privacy First - No data sent to servers, everything stays on your device
- π± Responsive Design - Works seamlessly on desktop and mobile
- π Dark Mode - Eye-friendly dark theme support
- π¨οΈ Print & Export - Print-optimized layouts for PDF generation
- βΏ Accessible - Built with accessibility in mind (WCAG 2.1 AA)
- π Fast & Lightweight - Optimized bundle size (< 100KB gzipped)
- π Secure - Comprehensive security headers and input sanitization
- Framework: React 19 + TypeScript 5
- Routing: TanStack Router 1.x
- State Management: Zustand 4.x + TanStack Query
- Styling: Tailwind CSS 4.x
- UI Components: Radix UI + shadcn/ui
- Animations: Framer Motion
- Forms: TanStack Form + React Hook Form + Zod
- Build Tool: Vite 6.x
- Testing: Vitest + Testing Library (83.5% coverage)
- E2E Testing: Playwright
- Linting: Biome
- Package Manager: Bun 1.3.0
- Bun 1.3.0 or later
- Node.js 18+ (for compatibility)
# Clone the repository
git clone https://github.com/Prosperis/Resumier.git
cd Resumier
# Install dependencies
bun install
# Start development server
bun run devThe app will be available at http://localhost:5173/Resumier/
# Development
bun run dev # Start dev server with HMR
bun run build # Build for production
bun run preview # Preview production build
# Testing
bun test # Run unit tests
bun test --coverage # Run tests with coverage
bun test:watch # Run tests in watch mode
bun test:e2e # Run E2E tests with Playwright
bun test:e2e:ui # Run E2E tests with UI
# Code Quality
bun run lint # Check for linting errors
bun run lint:fix # Fix linting errors
bun run format # Format code with Biome
bun run format:check # Check code formatting
# Routing
bun run routes:generate # Generate route types
bun run routes:watch # Watch and generate routesResumier/
βββ .github/
β βββ workflows/
β βββ ci-cd.yml # CI/CD pipeline
βββ public/
β βββ _headers # Netlify security headers
βββ src/
β βββ app/ # App configuration
β β βββ providers.tsx # App providers
β β βββ query-client.ts # TanStack Query setup
β β βββ router.tsx # Router configuration
β βββ components/ # React components
β β βββ features/ # Feature-specific components
β β βββ layout/ # Layout components
β β βββ ui/ # Reusable UI components
β βββ lib/ # Utilities and libraries
β β βββ api/ # API client and mock data
β β βββ security/ # Security utilities
β β βββ store/ # Zustand stores
β β βββ utils/ # Helper functions
β βββ routes/ # Route components
β βββ styles/ # Global styles
β βββ main.tsx # App entry point
βββ public/ # Static assets
β βββ 404.html # GitHub Pages SPA routing
β βββ _headers # Security headers (Netlify/Cloudflare)
βββ vite.config.ts # Vite configuration
βββ vitest.config.ts # Test configuration
βββ tsconfig.json # TypeScript configuration
The project has comprehensive test coverage:
- Unit Tests: 2,444+ tests with 83.5% coverage
- Component Tests: Testing Library + Vitest
- E2E Tests: Playwright
- Security Tests: 36 security utility tests
# Run all tests
bun test --run
# Run with coverage
bun test --coverage
# Run specific test file
bun test src/components/features/resume/resume-builder.test.tsx
# Run E2E tests
bun test:e2eThe application is deployed to GitHub Pages with:
- SPA Routing:
public/404.htmlhandles client-side routing - Security Headers: Configured via
public/_headers(note: GitHub Pages has its own security headers) - Automatic Deployment: Push to
maintriggers CI/CD pipeline
# Build for production
bun run build
# Deploy to GitHub Pages (automatic via CI/CD)
# Or manually:
gh-pages -d distNote: vercel.json has been removed as it's only for Vercel deployments. GitHub Pages uses 404.html for SPA routing instead.
See DEPLOYMENT.md for detailed deployment instructions.
Resumier uses Sentry for error tracking and Web Vitals for performance monitoring.
- β Error Tracking - Automatic error capture with Sentry
- β Performance Monitoring - Core Web Vitals (LCP, FID, INP, CLS)
- β Session Replay - Debug errors with session recordings
- β User Feedback - Built-in feedback widget
- β Error Boundaries - Graceful error handling with fallback UI
For production error tracking:
# 1. Create free Sentry account at https://sentry.io
# 2. Create new React project and copy DSN
# 3. Add to .env file
echo "VITE_SENTRY_DSN=https://xxx@xxx.ingest.sentry.io/xxx" >> .env
# 4. Build and deploy
bun run buildSee MONITORING.md for detailed monitoring setup and usage.
| Metric | Target | Description |
|---|---|---|
| LCP | < 2.0s | Largest Contentful Paint (loading) |
| FID | < 50ms | First Input Delay (interactivity) |
| INP | < 200ms | Interaction to Next Paint (responsiveness) |
| CLS | < 0.05 | Cumulative Layout Shift (visual stability) |
Security is a top priority. The application implements:
- Content Security Policy (CSP) - Prevents XSS attacks
- Security Headers - X-Frame-Options, X-Content-Type-Options, etc.
- Input Sanitization - All user inputs are sanitized
- Rate Limiting - Prevents abuse
- No Data Transmission - All data stays in your browser
See SECURITY.md for security details.
- Lighthouse Score: 90+ across all metrics
- Bundle Size:
- Main bundle: 87KB gzipped
- Total initial load: ~171KB
- Lazy-loaded chunks: 1-4KB each
- First Contentful Paint: < 1.5s
- Time to Interactive: < 3s
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
bun test --run) - Run linting (
bun run lint) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
We follow Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changes (formatting, etc.)refactor:Code refactoringtest:Test changeschore:Build process or tooling changes
This project is licensed under the MIT License - see the LICENSE.txt file for details.
- shadcn/ui - Beautiful UI components
- TanStack - Amazing React tools
- Radix UI - Accessible component primitives
- Framer Motion - Animation library
- Lucide Icons - Beautiful icons
- Deployment Guide - CI/CD and deployment instructions
- Security Guide - Security implementation details
- Phase Summaries - Development phase documentation
Found a bug? Please open an issue with:
- Description of the bug
- Steps to reproduce
- Expected vs actual behavior
- Screenshots (if applicable)
- Browser and OS information
- π§ Email: support@resumier.app
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
Built with β€οΈ by the Prosperis team