Removed npm workspace configuration in favor of simple multi-project repository. Each project (web-app, housekeeping) is now completely self-contained. ## Changes - Removed root package.json and package-lock.json - Added VS Code workspace file for better project organization - Updated documentation to reflect independent project structure - Each project manages its own dependencies without workspace linking ## Structure - web-app/: Self-contained Next.js application - housekeeping/: Self-contained DB maintenance scripts - No workspace management or dependency sharing - Monorepo is purely for Git organization 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4.0 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Repository Structure
This is a multi-project repository containing:
- web-app/: Next.js 14 utility bills tracking application
- housekeeping/: Database backup and maintenance scripts
Each project is self-contained with its own dependencies.
Development Commands
All commands should be run from within the respective project directory.
Web App (cd web-app):
npm install- Install dependenciesnpm run dev- Start development servernpm run build- Build production versionnpm start- Start production servernpm run prettier- Format codenpm run seed- Seed database with initial data
Housekeeping (cd housekeeping):
./db-backup--standalone.sh- Run standalone database backup./db-backup--swarm.sh- Run swarm database backup./db-dump--standalone.sh- 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