A peer-to-peer file transfer application built with modern web technologies.
git clone https://github.com/kern/filepizza.git
cd filepizza
pnpm install
pnpm devpnpm dev- Start development serverpnpm dev:full- Start with Redis and COTURN for full WebRTC testing
pnpm build- Build for productionpnpm test- Run unit tests with Vitestpnpm test:watch- Run tests in watch modepnpm test:e2e- Run E2E tests with Playwright
pnpm lint:check- Check ESLint rulespnpm lint:fix- Fix ESLint issuespnpm format- Format code with Prettierpnpm format:check- Check code formattingpnpm type:check- TypeScript type checking
pnpm docker:build- Build Docker imagepnpm docker:up- Start containerspnpm docker:down- Stop containers
pnpm ci- Run full CI pipeline (lint, format, type-check, test, build, e2e, docker)
- Framework: Next.js 15 with App Router
- UI: React 19 + Tailwind CSS v4
- Language: TypeScript
- Testing: Vitest (unit) + Playwright (E2E)
- WebRTC: PeerJS
- State Management: TanStack Query
- Themes: next-themes with View Transitions
- Storage: Redis (optional)
src/
├── app/ # Next.js App Router pages
├── components/ # React components
├── hooks/ # Custom React hooks
├── utils/ # Utility functions
└── types.ts # TypeScript definitions
This project uses pnpm as the package manager. Benefits include:
- Faster installs and smaller disk usage
- Strict dependency resolution
- Built-in workspace support
Always use pnpm instead of npm or yarn:
pnpm install package-name
pnpm remove package-name
pnpm update- ESLint + TypeScript ESLint for linting
- Prettier for formatting
- Husky + lint-staged for pre-commit hooks
- Prefer TypeScript over JavaScript
- Use kebab-case for files, PascalCase for components
- Unit tests for components and utilities (
tests/unit/) - E2E tests for critical user flows (
tests/e2e/) - Test files follow
*.test.ts[x]naming convention
For full WebRTC testing with TURN/STUN:
pnpm dev:fullThis starts Redis and COTURN containers for testing peer connections behind NAT.
next- React frameworktailwindcss- CSS framework@tanstack/react-query- Server state managementpeerjs- WebRTC abstractionnext-themes- Theme switchingzod- Schema validationvitest- Testing frameworkplaywright- E2E testing
Run pnpm ci before submitting PRs to ensure all checks pass.