A full-stack application built with a Node.js Express API and React frontend, organized as a monorepo using pnpm and Turborepo.
/
├── packages/
│ ├── api/ # Express.js API server
│ │ ├── src/
│ │ ├── db/
│ │ └── package.json
│ └── client/ # React frontend application
│ ├── src/
│ └── package.json
├── package.json # Root package.json
├── pnpm-workspace.yaml # pnpm workspace configuration
├── turbo.json # Turborepo configuration
├── biome.json # Biome linting/formatting config
├── docker-compose.yml # Docker compose configuration
└── .vscode/ # VS Code settings
- Node.js (v18 or higher)
- pnpm (v8 or higher)
- Docker (v24 or higher)
- Clone the repository
- Start up the MongoDB container with Docker:
docker-compose up -d mongo
- Install dependencies:
pnpm install
Start both the API and client in development mode:
pnpm devThis will start:
- API Server: http://localhost:3001
- Client App: http://localhost:3000
- MongoDB: mongodb://localhost:27017
Start only the API:
cd packages/api
pnpm devStart only the client:
cd packages/client
pnpm devStart only the database:
docker-compose up -d technical-challenge-mongodbpnpm dev- Start all services in development modepnpm build- Build all packagespnpm lint- Run Biome lintingpnpm format- Format code with Biomepnpm check- Run both linting and formatting checks
pnpm dev- Start API server with hot reloadpnpm build- Build TypeScript to JavaScriptpnpm start- Start production server
pnpm dev- Start Vite development serverpnpm build- Build for productionpnpm preview- Preview production build
- Modern UI: Built with React 18 and TypeScript
- Routing: React Router for navigation
- Styling: Custom CSS with Source Sans Pro font
- Icons: Font Awesome icons
- Responsive: Mobile-friendly design
- Interactive Accordion: Collapsible task sections with progress tracking
- RESTful API: Express.js server with TypeScript
- Database: Pre seeded MongoDB database running in a Docker container
- CORS: Cross-origin resource sharing enabled
- Room Data:
/rooms/:roomCodeendpoint
- Monorepo: pnpm workspaces + Turborepo
- Code Quality: Biome for linting and formatting
- Type Safety: Full TypeScript support
- Hot Reload: Fast development experience
- Header: Shared navigation component
- Home: Landing page with main title section
- About: Project information page
- Room: Interactive room page with accordion
- Accordion: Collapsible task display with progress tracking
GET /rooms/:roomCode- Get room data with tasks and questions
The project uses a custom CSS approach with:
- Color Scheme: Dark theme with green/red progress indicators
- Typography: Source Sans Pro font family
- Layout: Flexbox and CSS Grid
- Responsive: Mobile-first design approach
- Animations: Smooth transitions and hover effects
- Indentation: 2 spaces (no tabs)
- Line Width: 100 characters
- Linting: Recommended rules enabled
- Formatting: Automatic on save (VS Code)
- Strict Mode: Enabled
- Module Resolution: Node.js style
- Target: ES2020
pnpm buildCreate a .env file in the API package:
DATABASE_URL=mongodb://localhost:27017/technical-challenge?directConnection=true
PORT=3001
- The project uses pnpm for fast, efficient package management
- Turborepo provides intelligent caching and parallel execution
- Biome ensures consistent code formatting and catches common issues
- The API uses MongoDB with a pre seeded database running in a Docker container for development
- All components are built with accessibility in mind
- Follow the existing code style (2 spaces, Biome formatting)
- Use TypeScript for all new code
- Add proper type definitions
- Test your changes locally with
pnpm dev - Run
pnpm checkbefore committing
This project is part of a technical challenge.