A modern React application built with TypeScript, Vite (Rolldown bundler), and experimental React Compiler optimization. This project features comprehensive testing, automated quality checks, and production-ready error handling.
- React 19 - Latest React with concurrent features
- TypeScript 5.9 - Strict type safety with project references
- Vite (Rolldown) - Next-generation bundler using Rolldown (experimental)
- React Compiler - Automatic optimization (experimental RC)
- Biome - Fast linting and formatting (ESLint/Prettier alternative)
- Vitest - Unit testing with React Testing Library
- Playwright - Cross-browser E2E testing
- pnpm - Fast, efficient package manager
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Run tests
pnpm test
# Run E2E tests
pnpm test:e2e
# Build for production
pnpm buildpnpm dev- Start Vite dev server with HMRpnpm preview- Preview production build locally
pnpm build- Type-check and build for productionpnpm clean- Remove all build artifacts
pnpm lint- Run TypeScript + Biome lintingpnpm lint:tsc- TypeScript type checking onlypnpm lint:biome- Biome linting onlypnpm format- Auto-format code with Biome
pnpm test- Run unit tests oncepnpm test:watch- Run unit tests in watch modepnpm test:coverage- Generate coverage reportpnpm test:e2e- Run E2E testspnpm test:e2e:ui- Run E2E tests with Playwright UIpnpm validate- Full validation (lint + all tests)
The project uses path aliases for cleaner imports:
// Instead of: import { Button } from "../../components/Button"
import { Button } from "@/components/Button"Configured in:
tsconfig.app.json- TypeScript path resolutionvite.config.ts- Vite module resolution
- Indentation: 2 spaces
- Quotes: Single quotes (JS/TS), Double quotes (JSX attributes)
- Semicolons: AsNeeded (omitted where safe)
- Line width: 100 characters
- Formatter: Biome
Pre-commit hooks automatically:
- Run Biome linting and formatting on staged files
- Type-check TypeScript files with tsc-files
- Prevent broken code from being committed
# Run once
pnpm test
# Watch mode
pnpm test:watch
# With coverage
pnpm test:coverageTests use:
- Vitest as test runner
- React Testing Library for component testing
- Happy DOM for lightweight DOM implementation
- jest-dom matchers for better assertions
# Headless mode
pnpm test:e2e
# Interactive UI
pnpm test:e2e:uiTests run across:
- Chromium (Chrome/Edge)
- Firefox
- WebKit (Safari)
The app includes a production-ready ErrorBoundary component:
- Catches React component errors
- Shows user-friendly error message
- Displays detailed error info in development
- Provides reload functionality
- Ready for error logging service integration (Sentry, etc.)
This project uses React Compiler 19.1.0-rc.3 for automatic optimization. The compiler:
- Automatically memoizes components and values
- Reduces need for
useMemoanduseCallback - May impact build performance
- Currently in release candidate stage
See React Compiler docs for more information.
Using rolldown-vite@7.1.14 instead of standard Vite. Rolldown is:
- Next-generation bundler written in Rust
- Faster than traditional bundlers
- Currently experimental
- Drop-in Vite replacement
├── src/
│ ├── components/ # Reusable React components
│ ├── test/ # Test setup and utilities
│ ├── assets/ # Images, fonts, etc.
│ ├── App.tsx # Main application component
│ ├── main.tsx # Application entry point
│ └── index.css # Global styles
├── e2e/ # Playwright E2E tests
├── public/ # Static assets
├── types/ # TypeScript type definitions
├── .github/
│ └── workflows/ # CI/CD pipelines
├── .husky/ # Git hooks
├── biome.json # Biome configuration
├── playwright.config.ts # E2E test configuration
├── tsconfig.*.json # TypeScript configuration
├── vite.config.ts # Vite/build configuration
├── AGENTS.md # Development guidelines
└── TODO.md # Project roadmap
See AGENTS.md for comprehensive development guidelines including:
- Code style conventions
- Testing patterns
- Git workflow
- Error handling
- Component organization
GitHub Actions workflows automatically:
- Run linting and type checking
- Execute unit and E2E tests
- Build production bundles
- Generate coverage reports
- Upload test artifacts
This project uses Biome instead of ESLint for:
- 10-100x faster linting and formatting
- Unified tooling (no separate Prettier)
- Better TypeScript support out of the box
- Simpler configuration
To configure Biome rules, edit biome.json.
- Fork the repository
- Create a feature branch
- Make your changes
- Run
pnpm validateto ensure all checks pass - Commit your changes (pre-commit hooks will run automatically)
- Push and create a pull request
MIT