mirror of https://github.com/kern/filepizza
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.0 KiB
3.0 KiB
FilePizza Development Guide
A peer-to-peer file transfer application built with modern web technologies.
Prerequisites
Quick Start
git clone https://github.com/kern/filepizza.git
cd filepizza
pnpm install
pnpm dev
Available Commands
Development
pnpm dev- Start development serverpnpm dev:full- Start with Redis and COTURN for full WebRTC testing
Building & 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
Code Quality
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
Docker
pnpm docker:build- Build Docker imagepnpm docker:up- Start containerspnpm docker:down- Stop containers
CI Pipeline
pnpm ci- Run full CI pipeline (lint, format, type-check, test, build, e2e, docker)
Tech Stack
- 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)
Project Structure
src/
├── app/ # Next.js App Router pages
├── components/ # React components
├── hooks/ # Custom React hooks
├── utils/ # Utility functions
└── types.ts # TypeScript definitions
Development Tips
Using pnpm
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
Code Style
- 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
Testing Strategy
- Unit tests for components and utilities (
tests/unit/) - E2E tests for critical user flows (
tests/e2e/) - Test files follow
*.test.ts[x]naming convention
WebRTC Development
For full WebRTC testing with TURN/STUN:
pnpm dev:full
This starts Redis and COTURN containers for testing peer connections behind NAT.
Key Dependencies
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.