Restructured the repository into a monorepo to better organize application code and maintenance scripts. ## Workspace Structure - web-app: Next.js application (all app code moved from root) - housekeeping: Database backup and maintenance scripts ## Key Changes - Moved all application code to web-app/ using git mv - Moved database scripts to housekeeping/ workspace - Updated Dockerfile for monorepo build process - Updated docker-compose files (volume paths: ./web-app/etc/hosts/) - Updated .gitignore for workspace-level node_modules - Updated documentation (README.md, CLAUDE.md, CHANGELOG.md) ## Migration Impact - Root package.json now manages workspaces - Build commands delegate to web-app workspace - All file history preserved via git mv - Docker build process updated for workspace structure 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4.2 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Monorepo Structure
This is a monorepo with the following workspaces:
- web-app: Next.js 14 utility bills tracking application
- housekeeping: Database backup and maintenance scripts
Development Commands
From the monorepo root:
npm run dev- Start development server (runs web-app workspace)npm run build- Build production version (builds web-app workspace)npm start- Start production server (runs web-app workspace)npm run prettier- Format code with Prettier (entire monorepo)npm run prettier:check- Check code formatting (entire monorepo)
From the web-app workspace (cd web-app):
npm run dev- Start development servernpm run build- Build production versionnpm start- Start production servernpm run seed- Seed database with initial data
From the housekeeping workspace (cd housekeeping):
npm run backup:standalone- Run standalone database backupnpm run backup:swarm- Run swarm database backupnpm run dump:standalone- Run standalone database dump- See housekeeping/README.md for more details
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 web-app/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 web-app/app/lib/actions/ and follow the pattern:
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 web-app/messages/ directory. The middleware handles both auth and i18n routing.
Key Files & Responsibilities
web-app/middleware.ts- Handles authentication and i18n routing, defines public pagesweb-app/app/lib/auth.ts- NextAuth configuration,withUserHOF for user contextweb-app/app/lib/dbClient.ts- MongoDB connection with development/production handlingweb-app/app/lib/actions/- Server actions for data mutations (locations, bills, months)web-app/app/i18n.ts- Internationalization configuration (Croatian default)web-app/next.config.js- Standalone build config withserverActions.allowedOriginsfor Docker deploymenthousekeeping/- Database backup and maintenance scripts
Database Schema
- Collections: Locations, Bills, Months (year-month periods)
- User Association: All documents include
userIdfield 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.0withserverActions.allowedOriginsconfig to handle reverse proxy headers- Environment variables:
MONGODB_URI,GOOGLE_ID,GOOGLE_SECRET,AUTH_SECRET
Barcode/QR Code Feature
- Uses
@zxing/libraryand@zxing/browserfor PDF document scanning - Heavy barcode decoding operations should be moved to background threads if performance issues arise
- PDF processing with
pdfjs-distfor 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