- Node.js 22+
- pnpm
- Docker and Docker Compose
- Git
- Clone the repository
git clone https://github.com/doomedramen/crackhouse.git
cd crackhouse- Install dependencies
pnpm install- Start services
docker compose up -d- Run database migrations
cd apps/api
pnpm db:push- Start development servers
# Terminal 1 - API
cd apps/api && pnpm dev
# Terminal 2 - Web
cd apps/web && pnpm dev
# Terminal 3 - Worker
cd apps/api && pnpm workerAccess the application at http://localhost:3000
crackhouse/
├── apps/
│ ├── api/
│ │ ├── src/
│ │ │ ├── routes/ # API endpoints
│ │ │ ├── workers/ # Background jobs
│ │ │ ├── db/ # Database schema & migrations
│ │ │ └── lib/ # Utilities
│ │ └── __tests__/ # API tests
│ └── web/
│ ├── app/ # Next.js app router
│ ├── components/ # React components
│ └── tests/ # E2E tests
├── packages/
│ ├── ui/ # Shared UI components
│ ├── typescript-config/
│ └── eslint-config/
└── docs/
Frontend
- Next.js 16 (App Router)
- React 19
- Tailwind CSS
- shadcn/ui components
- TanStack Query
- React Hook Form + Zod
Backend
- Hono (HTTP framework)
- PostgreSQL 16
- Drizzle ORM
- Redis + BullMQ
- Better Auth
- Hashcat integration
- Create a branch
git checkout -b feature/your-feature-name-
Make your changes
-
Run tests and checks
pnpm lint
pnpm typecheck
pnpm test- Commit following conventional commits
git commit -m "feat: add new feature"
git commit -m "fix: resolve bug"- Push and create PR
git push origin feature/your-feature-namecd apps/api
pnpm test # Run with watch
pnpm test:run # Run once
pnpm test:coverage # Coverage report# From repo root
pnpm test:e2e # Run E2E tests in DockerSee testing/README.md for more details.
- Use TypeScript strict mode
- Follow ESLint rules
- Write tests for new features
- Use functional React components
- Prefer Server Components in Next.js
- Use Zod for validation
cd apps/api
pnpm db:generate # Generate migration
pnpm db:push # Apply schema changesdocker compose down -v
docker compose up -d
pnpm db:pushlsof -i :3000
kill -9 <PID>rm -rf node_modules .next dist
pnpm installdocker compose restart db
pnpm db:push