diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 3f9cead..c9c85dd 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -20,7 +20,10 @@ "mcp__context7__resolve-library-id", "mcp__context7__get-library-docs", "mcp__serena__create_text_file", - "Bash(curl:*)" + "Bash(curl:*)", + "Bash(git mv:*)", + "Bash(rmdir:*)", + "Bash(mkdir:*)" ] }, "enableAllProjectMcpServers": true, diff --git a/.gitignore b/.gitignore index 2f2e78b..aa3a3b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,16 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules +node_modules /.pnp .pnp.js # testing /coverage -# next.js +# next.js (in web-app workspace) +web-app/.next/ +web-app/out/ /.next/ /out/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 3996f0f..d7cb7d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Changed +- **Repository Structure**: Converted to multi-project monorepo + - `web-app/` - Main Next.js application (formerly root directory) + - `housekeeping/` - Database backup and maintenance scripts +- **Docker Configuration**: Updated Dockerfile and docker-compose files for new directory structure +- **Documentation**: Updated README.md and CLAUDE.md to reflect new structure + +### Migration Notes +- All application code moved to `web-app/` directory using `git mv` to preserve history +- All database backup scripts moved to `housekeeping/` directory +- Each project is self-contained with its own package.json and dependencies +- Docker builds install dependencies from `web-app/` directory +- Volume mounts in docker-compose updated to reference `web-app/etc/hosts/` +- `.gitignore` updated to handle `node_modules` at any directory level +- No workspace management - each project is completely independent + ## [2.17.0] - 2025-12-21 ### Changed diff --git a/CLAUDE.md b/CLAUDE.md index bcaa9d7..0e824de 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,20 +2,41 @@ 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 +- **docker-stack/**: Docker Compose configurations and deployment scripts +- **housekeeping/**: Database backup and maintenance scripts + +Each project is self-contained with its own dependencies. + ## Development Commands -- `npm run dev` - Start development server (Next.js) -- `npm run build` - Build production version +All commands should be run from within the respective project directory. + +**Web App** (`cd web-app`): +- `npm install` - Install dependencies +- `npm run dev` - Start development server +- `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 prettier` - Format code - `npm 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 +**Building Docker Image** (`cd web-app`): +- `./build.sh ` - Build Docker image + +**Deploying** (`cd docker-stack`): +- `./deploy-standalone.sh ` - Deploy with docker-compose (standalone) +- `./deploy-swarm.sh ` - Deploy with Docker Swarm ## Architecture Overview @@ -31,25 +52,26 @@ This is a Next.js 14 utility bills tracking application ("Evidencija Režija") w ### 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. +**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 `app/lib/actions/` and follow the pattern: +**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: ```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. +**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 -- `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 +- `web-app/middleware.ts` - Handles authentication and i18n routing, defines public pages +- `web-app/app/lib/auth.ts` - NextAuth configuration, `withUser` HOF for user context +- `web-app/app/lib/dbClient.ts` - MongoDB connection with development/production handling +- `web-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 with `serverActions.allowedOrigins` for Docker deployment +- `housekeeping/` - Database backup and maintenance scripts ### Database Schema - **Collections**: Locations, Bills, Months (year-month periods) diff --git a/README.md b/README.md index e1e7312..905b94f 100644 --- a/README.md +++ b/README.md @@ -17,46 +17,74 @@ Each location record is marked with a user ID. All the actions user `withUser` to fetch user ID, which is then used in all the DB operations. +# Repository Structure + +This repository contains multiple independent projects: + +- **web-app/**: Next.js application for tracking utility bills +- **docker-stack/**: Docker Compose configurations and deployment scripts +- **housekeeping/**: Database backup and maintenance scripts + +Each project is self-contained with its own dependencies and configuration. + +## Working with Projects + +```bash +# Web app +cd web-app +npm install +npm run dev + +# Deploy with Docker +cd docker-stack +./deploy-standalone.sh 2.20.0 + +# Housekeeping scripts +cd housekeeping +./db-backup--standalone.sh +``` + # Database Backup & Restore The project includes multiple backup strategies for different deployment scenarios and requirements. +All backup scripts are located in the `housekeeping/` workspace. ## Backup Scripts Overview ### Standalone Docker Deployments **Online Backups (No Downtime):** -- `db-dump--standalone.sh` - Creates online backup of the 'utility-bills' database using mongodump +- `housekeeping/db-dump--standalone.sh` - Creates online backup of the 'utility-bills' database using mongodump - Database stays running during backup - Only backs up the database content, not the full volume - Output: `./mongo-backup/utility-bills-dump-YYYY-MM-DD_HH-MM.tar.gz` - Default retention: 7 backups (configurable via `KEEP` env var) - - Usage: `./db-dump--standalone.sh` or `KEEP=10 ./db-dump--standalone.sh` + - Usage: `cd housekeeping && ./db-dump--standalone.sh` or `KEEP=10 ./db-dump--standalone.sh` -- `db-restore-from-dump--standalone.sh` - Restores from mongodump archives +- `housekeeping/db-restore-from-dump--standalone.sh` - Restores from mongodump archives - Database stays running during restore - **WARNING**: Drops existing collections before restore - - Usage: `./db-restore-from-dump--standalone.sh utility-bills-dump-2025-11-26_14-30.tar.gz` + - Usage: `cd housekeeping && ./db-restore-from-dump--standalone.sh utility-bills-dump-2025-11-26_14-30.tar.gz` **Offline Backups (With Downtime):** -- `db-backup--standalone.sh` - Creates offline backup of the complete mongo-volume directory +- `housekeeping/db-backup--standalone.sh` - Creates offline backup of the complete mongo-volume directory - Database container is stopped during backup for consistency - Backs up the entire MongoDB data directory - Output: `./mongo-backup/mongo-volume-backup-YYYY-MM-DD-HH-MM.tar.gz` - Default retention: 7 backups (configurable via `KEEP` env var) - - Usage: `./db-backup--standalone.sh` or `KEEP=2 ./db-backup--standalone.sh` + - Usage: `cd housekeeping && ./db-backup--standalone.sh` or `KEEP=2 ./db-backup--standalone.sh` ### Docker Swarm Deployments -- `db-backup--swarm.sh` - Creates offline backup by scaling down the MongoDB service +- `housekeeping/db-backup--swarm.sh` - Creates offline backup by scaling down the MongoDB service - Service is scaled to 0 during backup - Output: `./mongo-backup/mongo-volume-backup-YYYY-MM-DD-HH-MM.tar.gz` - - Usage: `./db-backup--swarm.sh` + - Usage: `cd housekeeping && ./db-backup--swarm.sh` -- `db-restore-from-backup--swarm.sh` - Restores volume backup by scaling down the service +- `housekeeping/db-restore-from-backup--swarm.sh` - Restores volume backup by scaling down the service - Service is scaled to 0 during restore - Optional `--pre-backup` flag for safety backup before restore - - Usage: `./db-restore-from-backup--swarm.sh mongo-volume-backup-2025-11-26-14-30.tar.gz` + - Usage: `cd housekeeping && ./db-restore-from-backup--swarm.sh mongo-volume-backup-2025-11-26-14-30.tar.gz` ## Automated Backup Schedule @@ -64,10 +92,10 @@ Backups run automatically via cron at 04:00 every day: ```cron # Sunday: Full volume backup (offline), keep 2 backups -0 4 * * 0 cd /home/knee-cola/web-pro/evidencija-rezija && KEEP=2 ./db-backup--standalone.sh +0 4 * * 0 cd /home/knee-cola/web-pro/evidencija-rezija/housekeeping && KEEP=2 ./db-backup--standalone.sh # Monday-Saturday: Database dump (online), keep 6 backups -0 4 * * 1-6 cd /home/knee-cola/web-pro/evidencija-rezija && KEEP=6 ./db-dump--standalone.sh +0 4 * * 1-6 cd /home/knee-cola/web-pro/evidencija-rezija/housekeeping && KEEP=6 ./db-dump--standalone.sh ``` **Backup Strategy:** @@ -89,21 +117,32 @@ All backups are stored in `./mongo-backup/`: This directory is excluded from git via `.gitignore`. # Deploying -The deployment is done via Docker: -* build docker image -* deploy Docker service -## Building Docker image -Run the following command: +The deployment is done via Docker. + +## Building Docker Image + +From the `web-app/` directory: + ```bash -build.sh +cd web-app +./build.sh 2.20.0 ``` + The image will be stored in the local Docker instance. -## Deploying Docker service -Run the following command: +## Deploying Docker Service + +From the `docker-stack/` directory: + ```bash -deploy.sh +cd docker-stack + +# Standalone deployment +./deploy-standalone.sh 2.20.0 + +# Or Swarm deployment +./deploy-swarm.sh 2.20.0 ``` # Implementation details diff --git a/docker-stack/README.md b/docker-stack/README.md new file mode 100644 index 0000000..483d45b --- /dev/null +++ b/docker-stack/README.md @@ -0,0 +1,46 @@ +# Docker Stack + +Docker Compose configurations and deployment scripts for the Evidencija Režija application. + +## Files + +### Docker Compose Configurations + +- `docker-compose-standalone.yaml` - Standalone deployment with docker-compose +- `docker-compose-swarm.yml` - Docker Swarm deployment +- `docker-compose-debug.yml` - Debug/development deployment + +### Deployment Scripts + +- `deploy-standalone.sh` - Deploy standalone configuration +- `deploy-swarm.sh` - Deploy swarm configuration + +## Usage + +### Deploying Standalone + +```bash +cd docker-stack +./deploy-standalone.sh 2.20.0 +``` + +### Deploying to Swarm + +```bash +cd docker-stack +./deploy-swarm.sh 2.20.0 +``` + +## Prerequisites + +- Docker image must be built first: `cd ../web-app && ./build.sh 2.20.0` +- MongoDB data directory: `../mongo-volume/` +- MongoDB backup directory: `../mongo-backup/` + +## Configuration + +All compose files reference: +- Web app image: `utility-bills-tracker:${IMAGE_VERSION}` +- Volume mounts: `../web-app/etc/hosts/` +- MongoDB data: `../mongo-volume/` +- MongoDB backups: `../mongo-backup/` diff --git a/deploy-standalone.sh b/docker-stack/deploy-standalone.sh similarity index 100% rename from deploy-standalone.sh rename to docker-stack/deploy-standalone.sh diff --git a/deploy-swarm.sh b/docker-stack/deploy-swarm.sh similarity index 100% rename from deploy-swarm.sh rename to docker-stack/deploy-swarm.sh diff --git a/docker-compose-standalone.yaml b/docker-stack/docker-compose-standalone.yaml similarity index 98% rename from docker-compose-standalone.yaml rename to docker-stack/docker-compose-standalone.yaml index 55bfd31..38d7610 100644 --- a/docker-compose-standalone.yaml +++ b/docker-stack/docker-compose-standalone.yaml @@ -18,7 +18,7 @@ services: - traefik-network - util-bills-mongo-network volumes: - - ./etc/hosts/:/etc/hosts + - ./web-app/etc/hosts/:/etc/hosts environment: MONGODB_URI: mongodb://rezije.app:w4z4piJBgCdAm4tpawqB@mongo:27017/utility-bills GOOGLE_ID: 355397364527-adjrokm6hromcaaar0qfhk050mfr35ou.apps.googleusercontent.com diff --git a/docker-compose-swarm.yml b/docker-stack/docker-compose-swarm.yml similarity index 98% rename from docker-compose-swarm.yml rename to docker-stack/docker-compose-swarm.yml index bd6d34f..a212af8 100644 --- a/docker-compose-swarm.yml +++ b/docker-stack/docker-compose-swarm.yml @@ -18,7 +18,7 @@ services: - traefik-network - util-bills-mongo-network volumes: - - ./etc/hosts/:/etc/hosts + - ./web-app/etc/hosts/:/etc/hosts environment: MONGODB_URI: mongodb://rezije.app:w4z4piJBgCdAm4tpawqB@mongo:27017/utility-bills GOOGLE_ID: 355397364527-adjrokm6hromcaaar0qfhk050mfr35ou.apps.googleusercontent.com diff --git a/docker-stack/package.json b/docker-stack/package.json new file mode 100644 index 0000000..866b77e --- /dev/null +++ b/docker-stack/package.json @@ -0,0 +1,10 @@ +{ + "name": "docker-stack", + "version": "2.20.0", + "private": true, + "description": "Docker deployment configurations and scripts", + "scripts": { + "deploy:standalone": "./deploy-standalone.sh", + "deploy:swarm": "./deploy-swarm.sh" + } +} diff --git a/evidencija-rezija.code-workspace b/evidencija-rezija.code-workspace new file mode 100644 index 0000000..21699eb --- /dev/null +++ b/evidencija-rezija.code-workspace @@ -0,0 +1,43 @@ +{ + "folders": [ + { + "name": "🌐 web-app", + "path": "web-app" + }, + { + "name": "🐳 docker-stack", + "path": "docker-stack" + }, + { + "name": "🔧 housekeeping", + "path": "housekeeping" + }, + { + "name": "📦 root", + "path": "." + } + ], + "settings": { + "files.exclude": { + "**/node_modules": true, + "**/.next": true, + "**/.git": false + }, + "search.exclude": { + "**/node_modules": true, + "**/.next": true, + "**/package-lock.json": true + }, + "typescript.tsdk": "web-app/node_modules/typescript/lib", + "eslint.workingDirectories": [ + "web-app" + ] + }, + "extensions": { + "recommendations": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "bradlc.vscode-tailwindcss" + ] + } +} diff --git a/housekeeping/README.md b/housekeeping/README.md new file mode 100644 index 0000000..f762553 --- /dev/null +++ b/housekeeping/README.md @@ -0,0 +1,20 @@ +# Housekeeping + +Database backup and maintenance scripts for the Evidencija Režija application. + +## Scripts + +- `db-backup--standalone.sh` - Backup database in standalone deployment +- `db-backup--swarm.sh` - Backup database in Docker Swarm deployment +- `db-dump--standalone.sh` - Dump database in standalone deployment +- `db-restore-from-dump--standalone.sh` - Restore from dump in standalone deployment +- `db-restore-from-backup--swarm.sh` - Restore from backup in Docker Swarm deployment + +## Usage + +From the housekeeping directory: + +```bash +cd housekeeping +./db-backup--standalone.sh +``` diff --git a/db-backup--standalone.sh b/housekeeping/db-backup--standalone.sh similarity index 100% rename from db-backup--standalone.sh rename to housekeeping/db-backup--standalone.sh diff --git a/db-backup--swarm.sh b/housekeeping/db-backup--swarm.sh similarity index 100% rename from db-backup--swarm.sh rename to housekeeping/db-backup--swarm.sh diff --git a/db-dump--standalone.sh b/housekeeping/db-dump--standalone.sh similarity index 100% rename from db-dump--standalone.sh rename to housekeeping/db-dump--standalone.sh diff --git a/db-restore-from-backup--swarm.sh b/housekeeping/db-restore-from-backup--swarm.sh similarity index 100% rename from db-restore-from-backup--swarm.sh rename to housekeeping/db-restore-from-backup--swarm.sh diff --git a/db-restore-from-dump--standalone.sh b/housekeeping/db-restore-from-dump--standalone.sh similarity index 100% rename from db-restore-from-dump--standalone.sh rename to housekeeping/db-restore-from-dump--standalone.sh diff --git a/housekeeping/package.json b/housekeeping/package.json new file mode 100644 index 0000000..fcfee20 --- /dev/null +++ b/housekeeping/package.json @@ -0,0 +1,13 @@ +{ + "name": "housekeeping", + "version": "2.20.0", + "private": true, + "description": "Database backup and maintenance scripts", + "scripts": { + "backup:standalone": "./db-backup--standalone.sh", + "backup:swarm": "./db-backup--swarm.sh", + "dump:standalone": "./db-dump--standalone.sh", + "restore:standalone": "./db-restore-from-dump--standalone.sh", + "restore:swarm": "./db-restore-from-backup--swarm.sh" + } +} diff --git a/.dockerignore b/web-app/.dockerignore similarity index 100% rename from .dockerignore rename to web-app/.dockerignore diff --git a/.env b/web-app/.env similarity index 100% rename from .env rename to web-app/.env diff --git a/.eslintrc.json b/web-app/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to web-app/.eslintrc.json diff --git a/.nvmrc b/web-app/.nvmrc similarity index 100% rename from .nvmrc rename to web-app/.nvmrc diff --git a/.vscode/launch.json b/web-app/.vscode/launch.json similarity index 88% rename from .vscode/launch.json rename to web-app/.vscode/launch.json index 2772a38..d3ddab6 100644 --- a/.vscode/launch.json +++ b/web-app/.vscode/launch.json @@ -8,7 +8,7 @@ "name": "Debug", "type": "node", "request": "launch", - "envFile": "${workspaceFolder}/.env", + "envFile": "${workspaceFolder:🌐 web-app}/.env", "env": { "USE_MOCK_AUTH": "true", "MOCK_USER_ID": "109754742613069927799", @@ -19,8 +19,8 @@ "dev" // this is `dev` from `npm run dev` ], "runtimeExecutable": "npm", - "cwd": "${workspaceFolder}/", - "localRoot": "${workspaceFolder}/", + "cwd": "${workspaceFolder:🌐 web-app}/", + "localRoot": "${workspaceFolder:🌐 web-app}/", "remoteRoot": "/app/", "skipFiles": [ "/**", diff --git a/.vscode/tasks.json b/web-app/.vscode/tasks.json similarity index 84% rename from .vscode/tasks.json rename to web-app/.vscode/tasks.json index b24ef6c..8d09f9e 100644 --- a/.vscode/tasks.json +++ b/web-app/.vscode/tasks.json @@ -13,7 +13,7 @@ "build": true, }, "files": [ - "${workspaceFolder}/docker-compose-debug.yml" + "${workspaceFolder:🌐 web-app}/docker-compose-debug.yml" ], "isBackground": true, "problemMatcher": "Terminal will be reused by tasks, press any key to close it" @@ -25,7 +25,7 @@ "dockerCompose": { "down": {}, "files": [ - "${workspaceFolder}/docker-compose-debug.yml" + "${workspaceFolder:🌐 web-app}/docker-compose-debug.yml" ], } }, diff --git a/Dockerfile b/web-app/Dockerfile similarity index 93% rename from Dockerfile rename to web-app/Dockerfile index acc464f..a83f43e 100644 --- a/Dockerfile +++ b/web-app/Dockerfile @@ -12,16 +12,16 @@ RUN apk add --no-cache libc6-compat WORKDIR /app -# package.json and package-lock.json +# Copy package files COPY ./package.json ./package-lock.json ./ -# installing dependencies +# Install dependencies RUN npm i && npm cache clean --force -# copy all the soruce code +# Copy application source code COPY . . -# building app +# Build application RUN npm run build #----------------------------------------- diff --git a/app/[locale]/attachment/[id]/not-found.tsx b/web-app/app/[locale]/attachment/[id]/not-found.tsx similarity index 100% rename from app/[locale]/attachment/[id]/not-found.tsx rename to web-app/app/[locale]/attachment/[id]/not-found.tsx diff --git a/app/[locale]/attachment/[id]/route.tsx b/web-app/app/[locale]/attachment/[id]/route.tsx similarity index 100% rename from app/[locale]/attachment/[id]/route.tsx rename to web-app/app/[locale]/attachment/[id]/route.tsx diff --git a/app/[locale]/home/account/LogoutButton.tsx b/web-app/app/[locale]/home/account/LogoutButton.tsx similarity index 100% rename from app/[locale]/home/account/LogoutButton.tsx rename to web-app/app/[locale]/home/account/LogoutButton.tsx diff --git a/app/[locale]/home/account/page.tsx b/web-app/app/[locale]/home/account/page.tsx similarity index 100% rename from app/[locale]/home/account/page.tsx rename to web-app/app/[locale]/home/account/page.tsx diff --git a/app/[locale]/home/account/settings/page.tsx b/web-app/app/[locale]/home/account/settings/page.tsx similarity index 100% rename from app/[locale]/home/account/settings/page.tsx rename to web-app/app/[locale]/home/account/settings/page.tsx diff --git a/app/[locale]/home/bill/[id]/add/not-found.tsx b/web-app/app/[locale]/home/bill/[id]/add/not-found.tsx similarity index 100% rename from app/[locale]/home/bill/[id]/add/not-found.tsx rename to web-app/app/[locale]/home/bill/[id]/add/not-found.tsx diff --git a/app/[locale]/home/bill/[id]/add/page.tsx b/web-app/app/[locale]/home/bill/[id]/add/page.tsx similarity index 100% rename from app/[locale]/home/bill/[id]/add/page.tsx rename to web-app/app/[locale]/home/bill/[id]/add/page.tsx diff --git a/app/[locale]/home/bill/[id]/delete/not-found.tsx b/web-app/app/[locale]/home/bill/[id]/delete/not-found.tsx similarity index 100% rename from app/[locale]/home/bill/[id]/delete/not-found.tsx rename to web-app/app/[locale]/home/bill/[id]/delete/not-found.tsx diff --git a/app/[locale]/home/bill/[id]/delete/page.tsx b/web-app/app/[locale]/home/bill/[id]/delete/page.tsx similarity index 100% rename from app/[locale]/home/bill/[id]/delete/page.tsx rename to web-app/app/[locale]/home/bill/[id]/delete/page.tsx diff --git a/app/[locale]/home/bill/[id]/edit/not-found.tsx b/web-app/app/[locale]/home/bill/[id]/edit/not-found.tsx similarity index 100% rename from app/[locale]/home/bill/[id]/edit/not-found.tsx rename to web-app/app/[locale]/home/bill/[id]/edit/not-found.tsx diff --git a/app/[locale]/home/bill/[id]/edit/page.tsx b/web-app/app/[locale]/home/bill/[id]/edit/page.tsx similarity index 100% rename from app/[locale]/home/bill/[id]/edit/page.tsx rename to web-app/app/[locale]/home/bill/[id]/edit/page.tsx diff --git a/app/[locale]/home/location/[id]/add/LocationAddPage.tsx b/web-app/app/[locale]/home/location/[id]/add/LocationAddPage.tsx similarity index 100% rename from app/[locale]/home/location/[id]/add/LocationAddPage.tsx rename to web-app/app/[locale]/home/location/[id]/add/LocationAddPage.tsx diff --git a/app/[locale]/home/location/[id]/add/page.tsx b/web-app/app/[locale]/home/location/[id]/add/page.tsx similarity index 100% rename from app/[locale]/home/location/[id]/add/page.tsx rename to web-app/app/[locale]/home/location/[id]/add/page.tsx diff --git a/app/[locale]/home/location/[id]/delete/LocationDeletePage.tsx b/web-app/app/[locale]/home/location/[id]/delete/LocationDeletePage.tsx similarity index 100% rename from app/[locale]/home/location/[id]/delete/LocationDeletePage.tsx rename to web-app/app/[locale]/home/location/[id]/delete/LocationDeletePage.tsx diff --git a/app/[locale]/home/location/[id]/delete/not-found.tsx b/web-app/app/[locale]/home/location/[id]/delete/not-found.tsx similarity index 100% rename from app/[locale]/home/location/[id]/delete/not-found.tsx rename to web-app/app/[locale]/home/location/[id]/delete/not-found.tsx diff --git a/app/[locale]/home/location/[id]/delete/page.tsx b/web-app/app/[locale]/home/location/[id]/delete/page.tsx similarity index 100% rename from app/[locale]/home/location/[id]/delete/page.tsx rename to web-app/app/[locale]/home/location/[id]/delete/page.tsx diff --git a/app/[locale]/home/location/[id]/edit/LocationEditPage.tsx b/web-app/app/[locale]/home/location/[id]/edit/LocationEditPage.tsx similarity index 100% rename from app/[locale]/home/location/[id]/edit/LocationEditPage.tsx rename to web-app/app/[locale]/home/location/[id]/edit/LocationEditPage.tsx diff --git a/app/[locale]/home/location/[id]/edit/not-found.tsx b/web-app/app/[locale]/home/location/[id]/edit/not-found.tsx similarity index 100% rename from app/[locale]/home/location/[id]/edit/not-found.tsx rename to web-app/app/[locale]/home/location/[id]/edit/not-found.tsx diff --git a/app/[locale]/home/location/[id]/edit/page.tsx b/web-app/app/[locale]/home/location/[id]/edit/page.tsx similarity index 100% rename from app/[locale]/home/location/[id]/edit/page.tsx rename to web-app/app/[locale]/home/location/[id]/edit/page.tsx diff --git a/app/[locale]/home/multi-bill-edit/[year]/[month]/BillToggleBadge.tsx b/web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/BillToggleBadge.tsx similarity index 100% rename from app/[locale]/home/multi-bill-edit/[year]/[month]/BillToggleBadge.tsx rename to web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/BillToggleBadge.tsx diff --git a/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEdit.tsx b/web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEdit.tsx similarity index 100% rename from app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEdit.tsx rename to web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEdit.tsx diff --git a/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditButton.tsx b/web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditButton.tsx similarity index 100% rename from app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditButton.tsx rename to web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditButton.tsx diff --git a/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditPage.tsx b/web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditPage.tsx similarity index 100% rename from app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditPage.tsx rename to web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditPage.tsx diff --git a/app/[locale]/home/multi-bill-edit/[year]/[month]/not-found.tsx b/web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/not-found.tsx similarity index 100% rename from app/[locale]/home/multi-bill-edit/[year]/[month]/not-found.tsx rename to web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/not-found.tsx diff --git a/app/[locale]/home/multi-bill-edit/[year]/[month]/page.tsx b/web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/page.tsx similarity index 100% rename from app/[locale]/home/multi-bill-edit/[year]/[month]/page.tsx rename to web-app/app/[locale]/home/multi-bill-edit/[year]/[month]/page.tsx diff --git a/app/[locale]/home/page.tsx b/web-app/app/[locale]/home/page.tsx similarity index 100% rename from app/[locale]/home/page.tsx rename to web-app/app/[locale]/home/page.tsx diff --git a/app/[locale]/home/print/[year]/[month]/not-found.tsx b/web-app/app/[locale]/home/print/[year]/[month]/not-found.tsx similarity index 100% rename from app/[locale]/home/print/[year]/[month]/not-found.tsx rename to web-app/app/[locale]/home/print/[year]/[month]/not-found.tsx diff --git a/app/[locale]/home/print/[year]/[month]/page.tsx b/web-app/app/[locale]/home/print/[year]/[month]/page.tsx similarity index 100% rename from app/[locale]/home/print/[year]/[month]/page.tsx rename to web-app/app/[locale]/home/print/[year]/[month]/page.tsx diff --git a/app/[locale]/home/year-month/[id]/add/page.tsx b/web-app/app/[locale]/home/year-month/[id]/add/page.tsx similarity index 100% rename from app/[locale]/home/year-month/[id]/add/page.tsx rename to web-app/app/[locale]/home/year-month/[id]/add/page.tsx diff --git a/app/[locale]/layout.tsx b/web-app/app/[locale]/layout.tsx similarity index 100% rename from app/[locale]/layout.tsx rename to web-app/app/[locale]/layout.tsx diff --git a/app/[locale]/page.tsx b/web-app/app/[locale]/page.tsx similarity index 100% rename from app/[locale]/page.tsx rename to web-app/app/[locale]/page.tsx diff --git a/app/[locale]/privacy-policy/page.tsx b/web-app/app/[locale]/privacy-policy/page.tsx similarity index 100% rename from app/[locale]/privacy-policy/page.tsx rename to web-app/app/[locale]/privacy-policy/page.tsx diff --git a/app/[locale]/share/attachment/[id]/not-found.tsx b/web-app/app/[locale]/share/attachment/[id]/not-found.tsx similarity index 100% rename from app/[locale]/share/attachment/[id]/not-found.tsx rename to web-app/app/[locale]/share/attachment/[id]/not-found.tsx diff --git a/app/[locale]/share/attachment/[id]/route.tsx b/web-app/app/[locale]/share/attachment/[id]/route.tsx similarity index 100% rename from app/[locale]/share/attachment/[id]/route.tsx rename to web-app/app/[locale]/share/attachment/[id]/route.tsx diff --git a/app/[locale]/share/bill/[id]/not-found.tsx b/web-app/app/[locale]/share/bill/[id]/not-found.tsx similarity index 100% rename from app/[locale]/share/bill/[id]/not-found.tsx rename to web-app/app/[locale]/share/bill/[id]/not-found.tsx diff --git a/app/[locale]/share/bill/[id]/page.tsx b/web-app/app/[locale]/share/bill/[id]/page.tsx similarity index 100% rename from app/[locale]/share/bill/[id]/page.tsx rename to web-app/app/[locale]/share/bill/[id]/page.tsx diff --git a/app/[locale]/share/location/[id]/LocationViewPage.tsx b/web-app/app/[locale]/share/location/[id]/LocationViewPage.tsx similarity index 100% rename from app/[locale]/share/location/[id]/LocationViewPage.tsx rename to web-app/app/[locale]/share/location/[id]/LocationViewPage.tsx diff --git a/app/[locale]/share/location/[id]/page.tsx b/web-app/app/[locale]/share/location/[id]/page.tsx similarity index 100% rename from app/[locale]/share/location/[id]/page.tsx rename to web-app/app/[locale]/share/location/[id]/page.tsx diff --git a/app/[locale]/share/proof-of-payment/combined/[id]/not-found.tsx b/web-app/app/[locale]/share/proof-of-payment/combined/[id]/not-found.tsx similarity index 100% rename from app/[locale]/share/proof-of-payment/combined/[id]/not-found.tsx rename to web-app/app/[locale]/share/proof-of-payment/combined/[id]/not-found.tsx diff --git a/app/[locale]/share/proof-of-payment/combined/[id]/route.tsx b/web-app/app/[locale]/share/proof-of-payment/combined/[id]/route.tsx similarity index 100% rename from app/[locale]/share/proof-of-payment/combined/[id]/route.tsx rename to web-app/app/[locale]/share/proof-of-payment/combined/[id]/route.tsx diff --git a/app/[locale]/share/proof-of-payment/per-bill/[id]/not-found.tsx b/web-app/app/[locale]/share/proof-of-payment/per-bill/[id]/not-found.tsx similarity index 100% rename from app/[locale]/share/proof-of-payment/per-bill/[id]/not-found.tsx rename to web-app/app/[locale]/share/proof-of-payment/per-bill/[id]/not-found.tsx diff --git a/app/[locale]/share/proof-of-payment/per-bill/[id]/route.tsx b/web-app/app/[locale]/share/proof-of-payment/per-bill/[id]/route.tsx similarity index 100% rename from app/[locale]/share/proof-of-payment/per-bill/[id]/route.tsx rename to web-app/app/[locale]/share/proof-of-payment/per-bill/[id]/route.tsx diff --git a/app/[locale]/terms-of-service/page.tsx b/web-app/app/[locale]/terms-of-service/page.tsx similarity index 100% rename from app/[locale]/terms-of-service/page.tsx rename to web-app/app/[locale]/terms-of-service/page.tsx diff --git a/app/api/auth/[...nextauth]/route.ts b/web-app/app/api/auth/[...nextauth]/route.ts similarity index 100% rename from app/api/auth/[...nextauth]/route.ts rename to web-app/app/api/auth/[...nextauth]/route.ts diff --git a/app/apple-icon.png b/web-app/app/apple-icon.png similarity index 100% rename from app/apple-icon.png rename to web-app/app/apple-icon.png diff --git a/app/favicon.png b/web-app/app/favicon.png similarity index 100% rename from app/favicon.png rename to web-app/app/favicon.png diff --git a/app/i18n.ts b/web-app/app/i18n.ts similarity index 100% rename from app/i18n.ts rename to web-app/app/i18n.ts diff --git a/app/icon1.png b/web-app/app/icon1.png similarity index 100% rename from app/icon1.png rename to web-app/app/icon1.png diff --git a/app/icon2.png b/web-app/app/icon2.png similarity index 100% rename from app/icon2.png rename to web-app/app/icon2.png diff --git a/app/icon3.png b/web-app/app/icon3.png similarity index 100% rename from app/icon3.png rename to web-app/app/icon3.png diff --git a/app/icon4.png b/web-app/app/icon4.png similarity index 100% rename from app/icon4.png rename to web-app/app/icon4.png diff --git a/app/icon5.png b/web-app/app/icon5.png similarity index 100% rename from app/icon5.png rename to web-app/app/icon5.png diff --git a/app/icon6.png b/web-app/app/icon6.png similarity index 100% rename from app/icon6.png rename to web-app/app/icon6.png diff --git a/app/lib/actions/billActions.ts b/web-app/app/lib/actions/billActions.ts similarity index 100% rename from app/lib/actions/billActions.ts rename to web-app/app/lib/actions/billActions.ts diff --git a/app/lib/actions/locationActions.ts b/web-app/app/lib/actions/locationActions.ts similarity index 100% rename from app/lib/actions/locationActions.ts rename to web-app/app/lib/actions/locationActions.ts diff --git a/app/lib/actions/monthActions.ts b/web-app/app/lib/actions/monthActions.ts similarity index 100% rename from app/lib/actions/monthActions.ts rename to web-app/app/lib/actions/monthActions.ts diff --git a/app/lib/actions/navigationActions.ts b/web-app/app/lib/actions/navigationActions.ts similarity index 100% rename from app/lib/actions/navigationActions.ts rename to web-app/app/lib/actions/navigationActions.ts diff --git a/app/lib/actions/printActions.ts b/web-app/app/lib/actions/printActions.ts similarity index 100% rename from app/lib/actions/printActions.ts rename to web-app/app/lib/actions/printActions.ts diff --git a/app/lib/actions/userSettingsActions.ts b/web-app/app/lib/actions/userSettingsActions.ts similarity index 100% rename from app/lib/actions/userSettingsActions.ts rename to web-app/app/lib/actions/userSettingsActions.ts diff --git a/app/lib/asyncTimeout.ts b/web-app/app/lib/asyncTimeout.ts similarity index 100% rename from app/lib/asyncTimeout.ts rename to web-app/app/lib/asyncTimeout.ts diff --git a/app/lib/auth.ts b/web-app/app/lib/auth.ts similarity index 100% rename from app/lib/auth.ts rename to web-app/app/lib/auth.ts diff --git a/app/lib/db-types.ts b/web-app/app/lib/db-types.ts similarity index 100% rename from app/lib/db-types.ts rename to web-app/app/lib/db-types.ts diff --git a/app/lib/dbClient.ts b/web-app/app/lib/dbClient.ts similarity index 100% rename from app/lib/dbClient.ts rename to web-app/app/lib/dbClient.ts diff --git a/app/lib/format.ts b/web-app/app/lib/format.ts similarity index 100% rename from app/lib/format.ts rename to web-app/app/lib/format.ts diff --git a/app/lib/formatStrings.ts b/web-app/app/lib/formatStrings.ts similarity index 100% rename from app/lib/formatStrings.ts rename to web-app/app/lib/formatStrings.ts diff --git a/app/lib/getProviders.ts b/web-app/app/lib/getProviders.ts similarity index 100% rename from app/lib/getProviders.ts rename to web-app/app/lib/getProviders.ts diff --git a/app/lib/global.d.ts b/web-app/app/lib/global.d.ts similarity index 100% rename from app/lib/global.d.ts rename to web-app/app/lib/global.d.ts diff --git a/app/lib/paragraphFormatFactory.tsx b/web-app/app/lib/paragraphFormatFactory.tsx similarity index 100% rename from app/lib/paragraphFormatFactory.tsx rename to web-app/app/lib/paragraphFormatFactory.tsx diff --git a/app/lib/pdf/barcodeDecoderWasm.ts b/web-app/app/lib/pdf/barcodeDecoderWasm.ts similarity index 100% rename from app/lib/pdf/barcodeDecoderWasm.ts rename to web-app/app/lib/pdf/barcodeDecoderWasm.ts diff --git a/app/lib/pdf/bcmath.ts b/web-app/app/lib/pdf/bcmath.ts similarity index 100% rename from app/lib/pdf/bcmath.ts rename to web-app/app/lib/pdf/bcmath.ts diff --git a/app/lib/pdf/pdf417.ts b/web-app/app/lib/pdf/pdf417.ts similarity index 100% rename from app/lib/pdf/pdf417.ts rename to web-app/app/lib/pdf/pdf417.ts diff --git a/app/lib/pdf/pdf417LookupTables.ts b/web-app/app/lib/pdf/pdf417LookupTables.ts similarity index 100% rename from app/lib/pdf/pdf417LookupTables.ts rename to web-app/app/lib/pdf/pdf417LookupTables.ts diff --git a/app/lib/pdf/renderBarcode.ts b/web-app/app/lib/pdf/renderBarcode.ts similarity index 100% rename from app/lib/pdf/renderBarcode.ts rename to web-app/app/lib/pdf/renderBarcode.ts diff --git a/app/lib/shareChecksum.ts b/web-app/app/lib/shareChecksum.ts similarity index 100% rename from app/lib/shareChecksum.ts rename to web-app/app/lib/shareChecksum.ts diff --git a/app/lib/types/next-auth.d.ts b/web-app/app/lib/types/next-auth.d.ts similarity index 100% rename from app/lib/types/next-auth.d.ts rename to web-app/app/lib/types/next-auth.d.ts diff --git a/app/lib/uploadRateLimiter.ts b/web-app/app/lib/uploadRateLimiter.ts similarity index 100% rename from app/lib/uploadRateLimiter.ts rename to web-app/app/lib/uploadRateLimiter.ts diff --git a/app/lib/validators/pdfValidator.ts b/web-app/app/lib/validators/pdfValidator.ts similarity index 100% rename from app/lib/validators/pdfValidator.ts rename to web-app/app/lib/validators/pdfValidator.ts diff --git a/app/manifest.webmanifest b/web-app/app/manifest.webmanifest similarity index 100% rename from app/manifest.webmanifest rename to web-app/app/manifest.webmanifest diff --git a/app/ui/AddLocationButton.tsx b/web-app/app/ui/AddLocationButton.tsx similarity index 100% rename from app/ui/AddLocationButton.tsx rename to web-app/app/ui/AddLocationButton.tsx diff --git a/app/ui/AddMonthButton.tsx b/web-app/app/ui/AddMonthButton.tsx similarity index 100% rename from app/ui/AddMonthButton.tsx rename to web-app/app/ui/AddMonthButton.tsx diff --git a/app/ui/BillBadge.tsx b/web-app/app/ui/BillBadge.tsx similarity index 100% rename from app/ui/BillBadge.tsx rename to web-app/app/ui/BillBadge.tsx diff --git a/app/ui/BillDeleteForm.tsx b/web-app/app/ui/BillDeleteForm.tsx similarity index 100% rename from app/ui/BillDeleteForm.tsx rename to web-app/app/ui/BillDeleteForm.tsx diff --git a/app/ui/BillEditForm.tsx b/web-app/app/ui/BillEditForm.tsx similarity index 100% rename from app/ui/BillEditForm.tsx rename to web-app/app/ui/BillEditForm.tsx diff --git a/app/ui/EnterOrSignInButton.tsx b/web-app/app/ui/EnterOrSignInButton.tsx similarity index 100% rename from app/ui/EnterOrSignInButton.tsx rename to web-app/app/ui/EnterOrSignInButton.tsx diff --git a/app/ui/HomePage.tsx b/web-app/app/ui/HomePage.tsx similarity index 100% rename from app/ui/HomePage.tsx rename to web-app/app/ui/HomePage.tsx diff --git a/app/ui/InfoBox.tsx b/web-app/app/ui/InfoBox.tsx similarity index 100% rename from app/ui/InfoBox.tsx rename to web-app/app/ui/InfoBox.tsx diff --git a/app/ui/LocationCard.tsx b/web-app/app/ui/LocationCard.tsx similarity index 100% rename from app/ui/LocationCard.tsx rename to web-app/app/ui/LocationCard.tsx diff --git a/app/ui/LocationDeleteForm.tsx b/web-app/app/ui/LocationDeleteForm.tsx similarity index 100% rename from app/ui/LocationDeleteForm.tsx rename to web-app/app/ui/LocationDeleteForm.tsx diff --git a/app/ui/LocationEditForm.tsx b/web-app/app/ui/LocationEditForm.tsx similarity index 100% rename from app/ui/LocationEditForm.tsx rename to web-app/app/ui/LocationEditForm.tsx diff --git a/app/ui/Main.tsx b/web-app/app/ui/Main.tsx similarity index 100% rename from app/ui/Main.tsx rename to web-app/app/ui/Main.tsx diff --git a/app/ui/MonthCard.tsx b/web-app/app/ui/MonthCard.tsx similarity index 100% rename from app/ui/MonthCard.tsx rename to web-app/app/ui/MonthCard.tsx diff --git a/app/ui/MonthCardSkeleton.tsx b/web-app/app/ui/MonthCardSkeleton.tsx similarity index 100% rename from app/ui/MonthCardSkeleton.tsx rename to web-app/app/ui/MonthCardSkeleton.tsx diff --git a/app/ui/MonthLocationList.tsx b/web-app/app/ui/MonthLocationList.tsx similarity index 100% rename from app/ui/MonthLocationList.tsx rename to web-app/app/ui/MonthLocationList.tsx diff --git a/app/ui/MultiParagrpahText.tsx b/web-app/app/ui/MultiParagrpahText.tsx similarity index 100% rename from app/ui/MultiParagrpahText.tsx rename to web-app/app/ui/MultiParagrpahText.tsx diff --git a/app/ui/NotFoundPage.tsx b/web-app/app/ui/NotFoundPage.tsx similarity index 100% rename from app/ui/NotFoundPage.tsx rename to web-app/app/ui/NotFoundPage.tsx diff --git a/app/ui/NoteBox.tsx b/web-app/app/ui/NoteBox.tsx similarity index 100% rename from app/ui/NoteBox.tsx rename to web-app/app/ui/NoteBox.tsx diff --git a/app/ui/PageFooter.tsx b/web-app/app/ui/PageFooter.tsx similarity index 100% rename from app/ui/PageFooter.tsx rename to web-app/app/ui/PageFooter.tsx diff --git a/app/ui/PageHeader.tsx b/web-app/app/ui/PageHeader.tsx similarity index 100% rename from app/ui/PageHeader.tsx rename to web-app/app/ui/PageHeader.tsx diff --git a/app/ui/Pagination.tsx b/web-app/app/ui/Pagination.tsx similarity index 100% rename from app/ui/Pagination.tsx rename to web-app/app/ui/Pagination.tsx diff --git a/app/ui/Pdf417Barcode.tsx b/web-app/app/ui/Pdf417Barcode.tsx similarity index 100% rename from app/ui/Pdf417Barcode.tsx rename to web-app/app/ui/Pdf417Barcode.tsx diff --git a/app/ui/Pdf417BarcodeWasm.tsx b/web-app/app/ui/Pdf417BarcodeWasm.tsx similarity index 100% rename from app/ui/Pdf417BarcodeWasm.tsx rename to web-app/app/ui/Pdf417BarcodeWasm.tsx diff --git a/app/ui/PrintButton.tsx b/web-app/app/ui/PrintButton.tsx similarity index 100% rename from app/ui/PrintButton.tsx rename to web-app/app/ui/PrintButton.tsx diff --git a/app/ui/PrintPreview.tsx b/web-app/app/ui/PrintPreview.tsx similarity index 100% rename from app/ui/PrintPreview.tsx rename to web-app/app/ui/PrintPreview.tsx diff --git a/app/ui/SelectLanguage.tsx b/web-app/app/ui/SelectLanguage.tsx similarity index 100% rename from app/ui/SelectLanguage.tsx rename to web-app/app/ui/SelectLanguage.tsx diff --git a/app/ui/SignInButton.tsx b/web-app/app/ui/SignInButton.tsx similarity index 100% rename from app/ui/SignInButton.tsx rename to web-app/app/ui/SignInButton.tsx diff --git a/app/ui/UserSettingsForm.tsx b/web-app/app/ui/UserSettingsForm.tsx similarity index 100% rename from app/ui/UserSettingsForm.tsx rename to web-app/app/ui/UserSettingsForm.tsx diff --git a/app/ui/ViewBillBadge.tsx b/web-app/app/ui/ViewBillBadge.tsx similarity index 100% rename from app/ui/ViewBillBadge.tsx rename to web-app/app/ui/ViewBillBadge.tsx diff --git a/app/ui/ViewBillCard.tsx b/web-app/app/ui/ViewBillCard.tsx similarity index 100% rename from app/ui/ViewBillCard.tsx rename to web-app/app/ui/ViewBillCard.tsx diff --git a/app/ui/ViewLocationCard.tsx b/web-app/app/ui/ViewLocationCard.tsx similarity index 100% rename from app/ui/ViewLocationCard.tsx rename to web-app/app/ui/ViewLocationCard.tsx diff --git a/app/ui/button.tsx b/web-app/app/ui/button.tsx similarity index 100% rename from app/ui/button.tsx rename to web-app/app/ui/button.tsx diff --git a/app/ui/fonts.ts b/web-app/app/ui/fonts.ts similarity index 100% rename from app/ui/fonts.ts rename to web-app/app/ui/fonts.ts diff --git a/app/ui/global.css b/web-app/app/ui/global.css similarity index 100% rename from app/ui/global.css rename to web-app/app/ui/global.css diff --git a/app/ui/home.module.css b/web-app/app/ui/home.module.css similarity index 100% rename from app/ui/home.module.css rename to web-app/app/ui/home.module.css diff --git a/build.sh b/web-app/build.sh similarity index 100% rename from build.sh rename to web-app/build.sh diff --git a/client_secret.apps.googleusercontent.com.json b/web-app/client_secret.apps.googleusercontent.com.json similarity index 100% rename from client_secret.apps.googleusercontent.com.json rename to web-app/client_secret.apps.googleusercontent.com.json diff --git a/docker-compose-debug.yml b/web-app/docker-compose-debug.yml similarity index 100% rename from docker-compose-debug.yml rename to web-app/docker-compose-debug.yml diff --git a/docs/framework/how-to-use-sprint-playbook-template-improved.md b/web-app/docs/framework/how-to-use-sprint-playbook-template-improved.md similarity index 100% rename from docs/framework/how-to-use-sprint-playbook-template-improved.md rename to web-app/docs/framework/how-to-use-sprint-playbook-template-improved.md diff --git a/docs/framework/how-to-use-sprint-playbook-template.md b/web-app/docs/framework/how-to-use-sprint-playbook-template.md similarity index 100% rename from docs/framework/how-to-use-sprint-playbook-template.md rename to web-app/docs/framework/how-to-use-sprint-playbook-template.md diff --git a/docs/framework/sprint-implementation-guidelines-improved.md b/web-app/docs/framework/sprint-implementation-guidelines-improved.md similarity index 100% rename from docs/framework/sprint-implementation-guidelines-improved.md rename to web-app/docs/framework/sprint-implementation-guidelines-improved.md diff --git a/docs/framework/sprint-implementation-guidelines.md b/web-app/docs/framework/sprint-implementation-guidelines.md similarity index 100% rename from docs/framework/sprint-implementation-guidelines.md rename to web-app/docs/framework/sprint-implementation-guidelines.md diff --git a/docs/framework/sprint-playbook-template-improved.md b/web-app/docs/framework/sprint-playbook-template-improved.md similarity index 100% rename from docs/framework/sprint-playbook-template-improved.md rename to web-app/docs/framework/sprint-playbook-template-improved.md diff --git a/docs/framework/sprint-playbook-template.md b/web-app/docs/framework/sprint-playbook-template.md similarity index 100% rename from docs/framework/sprint-playbook-template.md rename to web-app/docs/framework/sprint-playbook-template.md diff --git a/docs/sprints/sprint-01-barcode-print.md b/web-app/docs/sprints/sprint-01-barcode-print.md similarity index 100% rename from docs/sprints/sprint-01-barcode-print.md rename to web-app/docs/sprints/sprint-01-barcode-print.md diff --git a/docs/sprints/sprint-description-n-prompt.md b/web-app/docs/sprints/sprint-description-n-prompt.md similarity index 100% rename from docs/sprints/sprint-description-n-prompt.md rename to web-app/docs/sprints/sprint-description-n-prompt.md diff --git a/etc/hosts b/web-app/etc/hosts similarity index 100% rename from etc/hosts rename to web-app/etc/hosts diff --git a/messages/en.json b/web-app/messages/en.json similarity index 100% rename from messages/en.json rename to web-app/messages/en.json diff --git a/messages/hr.json b/web-app/messages/hr.json similarity index 100% rename from messages/hr.json rename to web-app/messages/hr.json diff --git a/middleware.ts b/web-app/middleware.ts similarity index 100% rename from middleware.ts rename to web-app/middleware.ts diff --git a/next.config.js b/web-app/next.config.js similarity index 100% rename from next.config.js rename to web-app/next.config.js diff --git a/package-lock.json b/web-app/package-lock.json similarity index 100% rename from package-lock.json rename to web-app/package-lock.json diff --git a/package.json b/web-app/package.json similarity index 100% rename from package.json rename to web-app/package.json diff --git a/postcss.config.js b/web-app/postcss.config.js similarity index 100% rename from postcss.config.js rename to web-app/postcss.config.js diff --git a/prettier.config.js b/web-app/prettier.config.js similarity index 100% rename from prettier.config.js rename to web-app/prettier.config.js diff --git a/public/bar-code-demo.png b/web-app/public/bar-code-demo.png similarity index 100% rename from public/bar-code-demo.png rename to web-app/public/bar-code-demo.png diff --git a/public/bar-code-demo.webm b/web-app/public/bar-code-demo.webm similarity index 100% rename from public/bar-code-demo.webm rename to web-app/public/bar-code-demo.webm diff --git a/public/favicon.xcf b/web-app/public/favicon.xcf similarity index 100% rename from public/favicon.xcf rename to web-app/public/favicon.xcf diff --git a/public/hero.png b/web-app/public/hero.png similarity index 100% rename from public/hero.png rename to web-app/public/hero.png diff --git a/public/kopiranje-mjeseca-demo.png b/web-app/public/kopiranje-mjeseca-demo.png similarity index 100% rename from public/kopiranje-mjeseca-demo.png rename to web-app/public/kopiranje-mjeseca-demo.png diff --git a/public/kopiranje-mjeseca-demo.webm b/web-app/public/kopiranje-mjeseca-demo.webm similarity index 100% rename from public/kopiranje-mjeseca-demo.webm rename to web-app/public/kopiranje-mjeseca-demo.webm diff --git a/public/man-burried-under-paper-400.png b/web-app/public/man-burried-under-paper-400.png similarity index 100% rename from public/man-burried-under-paper-400.png rename to web-app/public/man-burried-under-paper-400.png diff --git a/public/man-burried-under-paper.png b/web-app/public/man-burried-under-paper.png similarity index 100% rename from public/man-burried-under-paper.png rename to web-app/public/man-burried-under-paper.png diff --git a/public/opengraph-image.png b/web-app/public/opengraph-image.png similarity index 100% rename from public/opengraph-image.png rename to web-app/public/opengraph-image.png diff --git a/public/pdf.sandbox.mjs.map b/web-app/public/pdf.sandbox.mjs.map similarity index 100% rename from public/pdf.sandbox.mjs.map rename to web-app/public/pdf.sandbox.mjs.map diff --git a/public/pdf.worker.min.mjs b/web-app/public/pdf.worker.min.mjs similarity index 100% rename from public/pdf.worker.min.mjs rename to web-app/public/pdf.worker.min.mjs diff --git a/public/robot-sorting-papers-400.png b/web-app/public/robot-sorting-papers-400.png similarity index 100% rename from public/robot-sorting-papers-400.png rename to web-app/public/robot-sorting-papers-400.png diff --git a/public/robot-sorting-papers.png b/web-app/public/robot-sorting-papers.png similarity index 100% rename from public/robot-sorting-papers.png rename to web-app/public/robot-sorting-papers.png diff --git a/public/status-color-demo.png b/web-app/public/status-color-demo.png similarity index 100% rename from public/status-color-demo.png rename to web-app/public/status-color-demo.png diff --git a/public/welcome-demo-vp9-25fps-1500bps.webm b/web-app/public/welcome-demo-vp9-25fps-1500bps.webm similarity index 100% rename from public/welcome-demo-vp9-25fps-1500bps.webm rename to web-app/public/welcome-demo-vp9-25fps-1500bps.webm diff --git a/public/zxing_reader.wasm b/web-app/public/zxing_reader.wasm similarity index 100% rename from public/zxing_reader.wasm rename to web-app/public/zxing_reader.wasm diff --git a/public/zxing_writer.wasm b/web-app/public/zxing_writer.wasm similarity index 100% rename from public/zxing_writer.wasm rename to web-app/public/zxing_writer.wasm diff --git a/tailwind.config.ts b/web-app/tailwind.config.ts similarity index 100% rename from tailwind.config.ts rename to web-app/tailwind.config.ts diff --git a/tsconfig.json b/web-app/tsconfig.json similarity index 100% rename from tsconfig.json rename to web-app/tsconfig.json