# 07 — Folder Structure Two different structures matter here: the **source repository** (this working directory, developed on Windows, deployed to Unraid) and the **Unraid runtime directory** the user specified. They're linked by the compose file and the built Docker image, not by being the same directory. ## Source repository (`Y:\notizarr`, this directory) ``` notizarr/ ├── apps/ │ ├── server/ # Node.js + TypeScript backend (Fastify) │ │ ├── src/ │ │ │ ├── modules/ │ │ │ │ ├── auth/ │ │ │ │ ├── users/ │ │ │ │ ├── topics/ │ │ │ │ ├── notifications/ │ │ │ │ ├── tokens/ │ │ │ │ ├── push/ │ │ │ │ ├── admin/ │ │ │ │ ├── audit/ │ │ │ │ └── rate-limit/ │ │ │ ├── db/ │ │ │ │ ├── schema.ts │ │ │ │ └── migrations/ │ │ │ ├── plugins/ # fastify plugins: auth, csrf, cors, logging, metrics │ │ │ ├── listeners/ # web.ts (8080), ingest.ts (8081) │ │ │ └── index.ts │ │ ├── healthcheck.js │ │ ├── Dockerfile │ │ └── package.json │ └── web/ # React + TypeScript + Vite frontend │ ├── src/ │ │ ├── routes/ │ │ ├── components/ │ │ ├── hooks/ │ │ ├── lib/ │ │ └── service-worker/ # custom push/notificationclick handlers (injectManifest) │ ├── public/ │ │ └── icons/ │ ├── vite.config.ts │ └── package.json ├── packages/ │ └── shared/ # types shared between server and web (API request/response shapes) ├── docker/ │ ├── docker-compose.yml # dev-oriented compose (hot reload) │ └── docker-compose.prod.yml # reference for the Unraid deployment ├── docs/ │ ├── phase1/ # this design package │ ├── migration-ntfy.md # written in Phase 9 │ └── home-assistant.md # written in Phase 9 ├── .env.example ├── package.json # npm/pnpm workspaces root └── README.md ``` ## Unraid deployment directory (`/mnt/tank/appdata/notizarr`) This is runtime state + the deployment compose file, not the source tree: ``` /mnt/tank/appdata/notizarr/ ├── docker-compose.yml # copy of docker/docker-compose.prod.yml (or generated by a deploy step) ├── .env # real secrets — never committed to the repo ├── app/ # bind mount → /data in the notizarr container (reserved, unused in v1) ├── postgres/ # bind mount → Postgres data directory ├── backups/ # pg_dump output lands here └── logs/ # optional, only used if file logging is enabled ``` Deploying an update is: build/pull the `notizarr` image, `git pull` (or copy) the updated `docker-compose.yml` into this directory if it changed, then `docker compose up -d` from here.