# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Development Commands - `npm run dev` - Start development server (Next.js) - `npm run build` - Build production version - `npm start` - Start production server - `npm run prettier` - Format code with Prettier - `npm run prettier:check` - Check code formatting - `npm run seed` - Seed database with initial data ## Deployment Commands - `./build.sh` - Build Docker image for deployment - `./deploy.sh` - Deploy Docker service to production - `./debug-deploy.sh` - Deploy with debug configuration ## Architecture Overview This is a Next.js 14 utility bills tracking application ("Evidencija Režija") with the following key components: ### Tech Stack - **Framework**: Next.js 14 with App Router and standalone output for Docker - **Authentication**: NextAuth v5 with Google OAuth - **Database**: MongoDB with connection pooling - **Internationalization**: next-intl (Croatian/English) - **Styling**: Tailwind CSS with DaisyUI components - **Deployment**: Docker with MongoDB 4.4.27 (AVX compatibility) ### Core Architecture Patterns **Multi-user Data Isolation**: All database operations use the `withUser` higher-order function from `app/lib/auth.ts:102` to automatically inject authenticated user ID into queries, ensuring data isolation between users. **Server Actions Pattern**: Form handling uses Next.js Server Actions with Zod validation. Actions are defined in `app/lib/actions/` and follow the pattern: ```typescript export const actionName = withUser(async (user: AuthenticatedUser, ...args) => { // Server action implementation with automatic user context }); ``` **Internationalization**: Uses next-intl with locale-based routing. Messages are in `messages/` directory. The middleware handles both auth and i18n routing. ### Key Files & Responsibilities - `middleware.ts` - Handles authentication and i18n routing, defines public pages - `app/lib/auth.ts` - NextAuth configuration, `withUser` HOF for user context - `app/lib/dbClient.ts` - MongoDB connection with development/production handling - `app/lib/actions/` - Server actions for data mutations (locations, bills, months) - `app/i18n.ts` - Internationalization configuration (Croatian default) - `next.config.js` - Standalone build config with `serverActions.allowedOrigins` for Docker deployment ### Database Schema - **Collections**: Locations, Bills, Months (year-month periods) - **User Association**: All documents include `userId` field for multi-tenant isolation - **Database Name**: "utility-bills" ### Docker Deployment Notes - Uses standalone Next.js build for Docker optimization - MongoDB 4.4.27 required for older CPU compatibility (no AVX instructions) - `HOSTNAME=0.0.0.0` with `serverActions.allowedOrigins` config to handle reverse proxy headers - Environment variables: `MONGODB_URI`, `GOOGLE_ID`, `GOOGLE_SECRET`, `AUTH_SECRET` ### Barcode/QR Code Feature - Uses `@zxing/library` and `@zxing/browser` for PDF document scanning - Heavy barcode decoding operations should be moved to background threads if performance issues arise - PDF processing with `pdfjs-dist` for utility bill scanning ### Testing & Code Quality - ESLint with Next.js and Prettier configurations - No specific test framework configured - check with user before assuming testing approach