From 132dac0a2e882d5d5d8139cf4a1da4472d87d50c Mon Sep 17 00:00:00 2001 From: Julian Tabel Date: Tue, 10 Feb 2026 12:37:43 +0100 Subject: [PATCH 1/2] Update deployment docs, complete Deployment Strategy epic Rewrite DEPLOYMENT.md to reflect current state (CI/CD, backups, merge strategy). Expand CI paths-ignore to skip docs, license, gitignore, and deploy workflow changes. Add merge strategy to CLAUDE.md. Co-Authored-By: Claude Opus 4.6 --- ...locke-tracker-ahza--deployment-strategy.md | 10 +- ...--implement-gitea-actions-cicd-pipeline.md | 10 +- ...-re0m--document-the-deployment-workflow.md | 4 +- .github/workflows/ci.yml | 8 + CLAUDE.md | 2 + DEPLOYMENT.md | 228 +++++++++--------- 6 files changed, 138 insertions(+), 124 deletions(-) diff --git a/.beans/nuzlocke-tracker-ahza--deployment-strategy.md b/.beans/nuzlocke-tracker-ahza--deployment-strategy.md index 36b5766..0b039d6 100644 --- a/.beans/nuzlocke-tracker-ahza--deployment-strategy.md +++ b/.beans/nuzlocke-tracker-ahza--deployment-strategy.md @@ -1,11 +1,11 @@ --- # nuzlocke-tracker-ahza title: Deployment Strategy -status: in-progress +status: completed type: epic priority: normal created_at: 2026-02-09T14:03:53Z -updated_at: 2026-02-10T08:16:36Z +updated_at: 2026-02-10T11:36:07Z --- Define and implement a deployment strategy for running the nuzlocke-tracker in production on a local Unraid server while keeping laptop/PC as the development environment. @@ -47,12 +47,12 @@ Define and implement a deployment strategy for running the nuzlocke-tracker in p - [x] **Set up branching structure** — create `develop` branch from `main`, establish the `main`/`develop`/`feature/*` workflow - [x] **Update CLAUDE.md with branching rules** — once the branching structure is in place, add instructions to CLAUDE.md that the branching strategy must be adhered to (always work on feature branches, never commit directly to `main`, merge flow is `feature/*` → `develop` → `main`) -- [ ] **Configure Gitea container registry** — create an access token with `read:package` and `write:package` scopes, verify `docker login gitea.nerdboden.de` works, test pushing and pulling an image as a user-level package +- [x] **Configure Gitea container registry** — create an access token with `read:package` and `write:package` scopes, verify `docker login gitea.nerdboden.de` works, test pushing and pulling an image as a user-level package - [x] **Create production docker-compose file** (`docker-compose.prod.yml`) — uses images from the Gitea container registry, production env vars, no source volume mounts, proper restart policies - [x] **Create production Dockerfiles (or multi-stage builds)** — ensure frontend is built and served statically (e.g., via the API or a lightweight nginx container), API runs without debug mode - [x] **Create deploy script** — `./deploy.sh` builds images (podman/docker, linux/amd64), pushes to Gitea registry, SCPs compose file, generates `.env` if needed, pulls and starts containers via SSH - [x] **Configure Nginx Proxy Manager** — add proxy host entries for Gitea and the nuzlocke-tracker frontend/API on the appropriate ports - [x] **Environment & secrets management** — deploy script auto-generates `.env` with `POSTGRES_PASSWORD` on Unraid if missing; file lives at `/mnt/user/appdata/nuzlocke-tracker/.env` -- [ ] **Implement Gitea Actions CI/CD pipeline** — set up Gitea Actions runner on Unraid, create CI workflow (lint/test on `develop`) and deploy workflow (build/push/deploy on `main`); uses GitHub Actions-compatible syntax for portability +- [x] **Implement Gitea Actions CI/CD pipeline** — set up Gitea Actions runner on Unraid, create CI workflow (lint/test on `develop`) and deploy workflow (build/push/deploy on `main`); uses GitHub Actions-compatible syntax for portability - [x] **Database backup strategy** — set up a simple scheduled backup for the PostgreSQL data (e.g., cron + `pg_dump` script on Unraid) -- [ ] **Document the deployment workflow** — README or docs covering how to deploy, redeploy, rollback, and manage the production instance \ No newline at end of file +- [x] **Document the deployment workflow** — README or docs covering how to deploy, redeploy, rollback, and manage the production instance \ No newline at end of file diff --git a/.beans/nuzlocke-tracker-jlzs--implement-gitea-actions-cicd-pipeline.md b/.beans/nuzlocke-tracker-jlzs--implement-gitea-actions-cicd-pipeline.md index af3b02a..89e2b73 100644 --- a/.beans/nuzlocke-tracker-jlzs--implement-gitea-actions-cicd-pipeline.md +++ b/.beans/nuzlocke-tracker-jlzs--implement-gitea-actions-cicd-pipeline.md @@ -1,11 +1,11 @@ --- # nuzlocke-tracker-jlzs title: Implement Gitea Actions CI/CD pipeline -status: in-progress +status: completed type: task priority: normal created_at: 2026-02-10T09:38:15Z -updated_at: 2026-02-10T11:12:32Z +updated_at: 2026-02-10T11:34:52Z parent: nuzlocke-tracker-ahza --- @@ -24,6 +24,6 @@ Set up Gitea Actions as the CI/CD pipeline for the nuzlocke-tracker. Gitea Actio - [x] **Set up a Gitea Actions runner** — `act_runner` is deployed on Unraid and registered with Gitea - [x] **Create CI workflow** (`.github/workflows/ci.yml`) — on push to `develop` and PRs: run `ruff check` + `ruff format --check` for backend, `eslint` + `tsc` for frontend. Tests can be added later when they exist. - [x] **Create deploy workflow** (`.github/workflows/deploy.yml`) — triggered via `workflow_dispatch` on `main`: build Docker images (linux/amd64), push to the Gitea container registry, deploy to Unraid via SSH (`docker compose pull && docker compose up -d`) -- [ ] **Configure secrets in Gitea** — generate a new SSH keypair, add the public key to Unraid root user's `authorized_keys`, add the private key as a Gitea repo secret (`DEPLOY_SSH_KEY`). Also add any registry credentials or other sensitive values the workflows need. -- [ ] **Test the full pipeline** — push a change through `feature/*` → `develop` (verify CI runs), then merge `develop` → `main` and trigger the deploy workflow via `workflow_dispatch` to verify end-to-end -- [ ] **Update deployment docs** — document the Gitea Actions setup, how to manage the runner, and how CI/CD fits into the deployment workflow \ No newline at end of file +- [x] **Configure secrets in Gitea** — generate a new SSH keypair, add the public key to Unraid root user's `authorized_keys`, add the private key as a Gitea repo secret (`DEPLOY_SSH_KEY`). Also add any registry credentials or other sensitive values the workflows need. +- [x] **Test the full pipeline** — push a change through `feature/*` → `develop` (verify CI runs), then merge `develop` → `main` and trigger the deploy workflow via `workflow_dispatch` to verify end-to-end +- [x] **Update deployment docs** — document the Gitea Actions setup, how to manage the runner, and how CI/CD fits into the deployment workflow \ No newline at end of file diff --git a/.beans/nuzlocke-tracker-re0m--document-the-deployment-workflow.md b/.beans/nuzlocke-tracker-re0m--document-the-deployment-workflow.md index 784999f..72ba486 100644 --- a/.beans/nuzlocke-tracker-re0m--document-the-deployment-workflow.md +++ b/.beans/nuzlocke-tracker-re0m--document-the-deployment-workflow.md @@ -1,11 +1,11 @@ --- # nuzlocke-tracker-re0m title: Document the deployment workflow -status: in-progress +status: completed type: task priority: normal created_at: 2026-02-09T15:30:57Z -updated_at: 2026-02-10T08:44:29Z +updated_at: 2026-02-10T11:35:41Z parent: nuzlocke-tracker-ahza blocking: - nuzlocke-tracker-aiw6 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f59f746..5ce6a35 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,10 +5,18 @@ on: branches: [develop] paths-ignore: - ".beans/**" + - "*.md" + - "LICENSE" + - ".gitignore" + - ".github/workflows/deploy.yml" pull_request: branches: [develop] paths-ignore: - ".beans/**" + - "*.md" + - "LICENSE" + - ".gitignore" + - ".github/workflows/deploy.yml" jobs: backend-lint: diff --git a/CLAUDE.md b/CLAUDE.md index c3d2249..28ab3bd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,6 +4,8 @@ - Day-to-day work happens on `develop`. - New work is done on `feature/*` branches off `develop`. - Merge flow: `feature/*` → `develop` → `main`. +- **Squash merge** `feature/*` into `develop` (one clean commit per feature). +- **Merge commit** `develop` into `main` (marks deploy points). # Instructions diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 236d6a6..da81873 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -1,31 +1,95 @@ # Deployment -This document describes the deployment architecture and workflows for the nuzlocke-tracker. It is a living document — sections marked with **TODO** are planned but not yet implemented. +This document describes the deployment architecture and workflows for the nuzlocke-tracker. ## Architecture Overview | Component | Dev (Laptop/PC) | Production (Unraid) | |---|---|---| | API | `docker-compose.yml` (hot reload) | `docker-compose.prod.yml` (built image) | -| Frontend | `docker-compose.yml` (Vite dev server) | `docker-compose.prod.yml` (built image) | -| Database | PostgreSQL 16 (Docker volume) | PostgreSQL 16 (Docker volume) | +| Frontend | `docker-compose.yml` (Vite dev server) | `docker-compose.prod.yml` (nginx, static build) | +| Database | PostgreSQL 16 (Docker volume) | PostgreSQL 16 (bind mount) | | Container Registry | — | Gitea (user-level packages) | -| Container Management | — | Portainer CE | | Reverse Proxy | — | Nginx Proxy Manager | +| CI/CD | — | Gitea Actions | ### Services -- **Gitea** — self-hosted Git server, container registry, and (future) CI/CD. Accessible at `gitea.nerdboden.de` via SSL. -- **Portainer** — Docker management UI. Accessible at `portainer.nerdboden.de` via SSL. Manages the production stack and provides webhook-triggered redeployments. +- **Gitea** — self-hosted Git server, container registry, and CI/CD runner. Accessible at `gitea.nerdboden.de` via SSL. - **Nginx Proxy Manager** — reverse proxy with SSL termination for all services on the Unraid server. +## Branching Strategy + +| Branch | Purpose | Merge strategy | +|---|---|---| +| `main` | Always production-ready. Deploy workflow builds from here. | Merge commit from `develop` | +| `develop` | Integration branch for day-to-day work. CI runs on push. | Squash merge from `feature/*` | +| `feature/*` | Short-lived branches off `develop` for individual features/fixes. | — | + +### Workflow + +1. Create `feature/xyz` from `develop` +2. Work on the feature, commit, squash merge into `develop` +3. CI runs automatically on `develop` (lint checks) +4. When ready to deploy: merge `develop` into `main` (merge commit) +5. Trigger the deploy workflow via `workflow_dispatch` in Gitea Actions + +## CI/CD (Gitea Actions) + +The project uses two Gitea Actions workflows (GitHub Actions-compatible syntax): + +### CI (`.github/workflows/ci.yml`) + +**Triggers:** Push to `develop`, PRs targeting `develop` (skips bean-only changes) + +**Jobs:** +- `backend-lint` — `ruff check` + `ruff format --check` +- `frontend-lint` — `eslint` + `tsc -b` + +### Deploy (`.github/workflows/deploy.yml`) + +**Triggers:** Manual via `workflow_dispatch` (must be on `main`) + +**Steps:** +1. Login to Gitea container registry +2. Build Docker images (linux/amd64) for API and frontend +3. Push images to the Gitea registry +4. SCP compose file and backup script to Unraid +5. SSH into Unraid and run `docker compose pull && docker compose up -d` + +### Secrets (configured in Gitea repo settings) + +| Secret | Purpose | +|---|---| +| `REGISTRY_USERNAME` | Gitea username for pushing images | +| `REGISTRY_PASSWORD` | Gitea access token (`read:package` + `write:package` scopes) | +| `DEPLOY_SSH_KEY` | SSH private key for `root@192.168.1.10` | + +### Runner + +An `act_runner` container runs on Unraid with the Docker socket mounted, registered with the Gitea instance. + +## Manual Deployment + +The `./deploy.sh` script can also be used to deploy from the dev machine: + +```bash +# Ensure you're on main with latest changes +git checkout main +./deploy.sh +``` + +The script: +1. Checks you're on `main` with no uncommitted changes +2. Builds Docker images (podman or docker, linux/amd64) +3. Pushes to the Gitea container registry +4. SCPs `docker-compose.prod.yml` and `backup.sh` to Unraid +5. Generates `.env` with a random `POSTGRES_PASSWORD` if missing +6. Pulls images and restarts containers on Unraid via SSH + ## Container Registry -Docker images are hosted on Gitea's built-in container registry as **user-level packages**. - -### Image naming - -Images use the format `gitea.nerdboden.de//:`: +Images are hosted on Gitea's built-in container registry as user-level packages: ``` gitea.nerdboden.de/thefurya/nuzlocke-tracker-api:latest @@ -35,118 +99,58 @@ gitea.nerdboden.de/thefurya/nuzlocke-tracker-frontend:latest ### Authentication 1. Create a Gitea access token at **Settings > Applications** with `read:package` and `write:package` scopes. -2. Log in from the dev machine: - ```bash - docker login gitea.nerdboden.de - ``` - Use your Gitea username and the access token as password. +2. Log in: `docker login gitea.nerdboden.de` (username + token as password). -### Pushing images +## Production Environment -```bash -# Build and tag -docker build -t gitea.nerdboden.de/thefurya/nuzlocke-tracker-api:latest ./backend -docker build -t gitea.nerdboden.de/thefurya/nuzlocke-tracker-frontend:latest ./frontend +### File layout on Unraid -# Push -docker push gitea.nerdboden.de/thefurya/nuzlocke-tracker-api:latest -docker push gitea.nerdboden.de/thefurya/nuzlocke-tracker-frontend:latest +``` +/mnt/user/appdata/nuzlocke-tracker/ +├── docker-compose.yml # production compose (synced from repo) +├── .env # POSTGRES_PASSWORD (auto-generated) +├── backup.sh # database backup script (synced from repo) +├── backups/ # pg_dump backups (daily, 7-day retention) +│ └── cron.log +└── data/ + └── postgres/ # PostgreSQL data (bind mount) ``` -Pushed images are visible under the **Packages** tab on your Gitea user profile. +### Environment variables -## Branching Strategy - -The project uses a `main` / `develop` / `feature/*` branching model. - -| Branch | Purpose | -|---|---| -| `main` | Always production-ready. Deploy script builds from here. | -| `develop` | Integration branch for day-to-day work. | -| `feature/*` | Short-lived branches off `develop` for individual features/fixes. | - -### Workflow - -1. Create `feature/xyz` from `develop` -2. Work on the feature, commit, merge into `develop` -3. When ready to deploy: merge `develop` into `main` -4. Run the deploy script (see below) - -## Deploying - -> **TODO** — deploy script (`./deploy.sh`) not yet created. - -The deploy script will automate: - -1. Build Docker images from `main` -2. Tag and push to the Gitea container registry -3. Trigger the Portainer webhook to pull new images and restart the stack - -### Manual deployment - -Until the deploy script is in place, deploy manually: - -```bash -# 1. Ensure you're on main with latest changes -git checkout main - -# 2. Build and push images -docker build -t gitea.nerdboden.de/thefurya/nuzlocke-tracker-api:latest ./backend -docker build -t gitea.nerdboden.de/thefurya/nuzlocke-tracker-frontend:latest ./frontend -docker push gitea.nerdboden.de/thefurya/nuzlocke-tracker-api:latest -docker push gitea.nerdboden.de/thefurya/nuzlocke-tracker-frontend:latest - -# 3. On Unraid (or via Portainer): pull and restart -docker compose -f docker-compose.prod.yml pull -docker compose -f docker-compose.prod.yml up -d -``` - -## Production Compose - -> **TODO** — `docker-compose.prod.yml` not yet created. - -The production compose file will differ from the dev compose in: - -- Uses pre-built images from the Gitea registry (no source volume mounts) -- No hot reload / debug mode -- Production environment variables -- Proper restart policies -- Frontend served as a static build (not Vite dev server) - -## Portainer - -Portainer CE is running on Unraid at `portainer.nerdboden.de`. - -- Manages the production Docker stack -- **TODO**: Configure a webhook for automated redeployment (pull latest images + restart on trigger) - -## Nginx Proxy Manager - -NPM runs on Unraid and handles SSL termination and routing for: - -- `gitea.nerdboden.de` → Gitea -- `portainer.nerdboden.de` → Portainer -- **TODO**: `nuzlocke.nerdboden.de` (or similar) → nuzlocke-tracker frontend/API - -## Environment & Secrets - -> **TODO** — `.env.prod` template not yet created. - -Production environment variables to configure: - -- `DATABASE_URL` — PostgreSQL connection string -- `DEBUG` — must be `false` in production -- Additional secrets TBD +The `.env` file is auto-generated on first deploy with a random `POSTGRES_PASSWORD`. The compose file references it for both the database and API connection string. ## Database -PostgreSQL 16 with data stored in a named Docker volume. +PostgreSQL 16 with data persisted via bind mount at `./data/postgres/`. -- Migrations run automatically on API container startup (Alembic) -- **TODO**: Set up scheduled backups (`pg_dump` cron job on Unraid) +- Migrations run automatically on API container startup (`alembic upgrade head`) +- Daily backups via `pg_dump` scheduled through the Unraid User Scripts plugin (03:00, 7-day retention) + +### Backup + +Backups are created by `backup.sh` and stored in `/mnt/user/appdata/nuzlocke-tracker/backups/`. The script is scheduled via the Unraid User Scripts plugin. + +### Restore + +```bash +cd /mnt/user/appdata/nuzlocke-tracker +gunzip -c backups/nuzlocke-YYYYMMDD-HHMMSS.sql.gz | \ + docker compose exec -T db psql -U postgres nuzlocke +``` ## Rollback -> **TODO** — rollback procedure to be documented once image tagging strategy is finalized. +Currently images are tagged as `latest` only. To roll back: -General approach: tag images with version/commit hash in addition to `latest`, so rolling back means redeploying a previous tag. +1. Revert the merge commit on `main` +2. Trigger the deploy workflow (or run `./deploy.sh`) to rebuild and push + +For more granular rollback, consider adding commit-hash tags to images in the future. + +## Nginx Proxy Manager + +NPM runs on Unraid and handles SSL termination and routing: + +- `nuzlocke.nerdboden.de` → nuzlocke-tracker frontend (port 9080) +- `gitea.nerdboden.de` → Gitea From 03b557242971f0c89cd78d9729d3c9ccb783fe18 Mon Sep 17 00:00:00 2001 From: Julian Tabel Date: Tue, 10 Feb 2026 12:44:09 +0100 Subject: [PATCH 2/2] Clean up frontend branding and metadata Replace Vite defaults with Nuzlocke Tracker branding: custom pokeball- skull favicon (SVG + PNG + ICO), page title, meta description, Open Graph tags, theme-color, web manifest, and package.json name. Co-Authored-By: Claude Opus 4.6 --- ...clean-up-frontend-branding-and-metadata.md | 25 ++++++++-------- frontend/index.html | 14 +++++++-- frontend/package.json | 2 +- frontend/public/apple-touch-icon.png | Bin 0 -> 15066 bytes frontend/public/favicon-16x16.png | Bin 0 -> 1238 bytes frontend/public/favicon-32x32.png | Bin 0 -> 2277 bytes frontend/public/favicon.ico | Bin 0 -> 2426 bytes frontend/public/favicon.svg | 27 ++++++++++++++++++ frontend/public/icon-192.png | Bin 0 -> 16117 bytes frontend/public/icon-512.png | Bin 0 -> 31425 bytes frontend/public/site.webmanifest | 11 +++++++ frontend/public/vite.svg | 1 - frontend/src/assets/react.svg | 1 - 13 files changed, 64 insertions(+), 17 deletions(-) create mode 100644 frontend/public/apple-touch-icon.png create mode 100644 frontend/public/favicon-16x16.png create mode 100644 frontend/public/favicon-32x32.png create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/favicon.svg create mode 100644 frontend/public/icon-192.png create mode 100644 frontend/public/icon-512.png create mode 100644 frontend/public/site.webmanifest delete mode 100644 frontend/public/vite.svg delete mode 100644 frontend/src/assets/react.svg diff --git a/.beans/nuzlocke-tracker-xvaw--clean-up-frontend-branding-and-metadata.md b/.beans/nuzlocke-tracker-xvaw--clean-up-frontend-branding-and-metadata.md index 81c425c..85815e6 100644 --- a/.beans/nuzlocke-tracker-xvaw--clean-up-frontend-branding-and-metadata.md +++ b/.beans/nuzlocke-tracker-xvaw--clean-up-frontend-branding-and-metadata.md @@ -1,10 +1,11 @@ --- # nuzlocke-tracker-xvaw title: Clean up frontend branding and metadata -status: todo +status: in-progress type: task +priority: normal created_at: 2026-02-10T09:36:24Z -updated_at: 2026-02-10T09:36:24Z +updated_at: 2026-02-10T11:40:29Z --- The frontend currently uses all Vite defaults — generic title, Vite favicon, no manifest, no meta tags. Clean it up so it looks polished and professional as "Nuzlocke Tracker". @@ -21,14 +22,14 @@ The frontend currently uses all Vite defaults — generic title, Vite favicon, n ## Checklist -- [ ] Design or source a proper favicon (Pokeball-themed or similar, in SVG + PNG formats) -- [ ] Add favicon files to `public/` (favicon.ico, favicon.svg, apple-touch-icon.png, favicon-16x16.png, favicon-32x32.png) -- [ ] Update `index.html` title from "frontend" to "Nuzlocke Tracker" -- [ ] Add meta description tag (e.g. "Track your Nuzlocke challenge runs across all Pokemon games") -- [ ] Add theme-color meta tag matching the app's primary color -- [ ] Add Open Graph meta tags (og:title, og:description, og:type) for link previews -- [ ] Create a `site.webmanifest` with app name, short_name, icons, theme_color, background_color -- [ ] Link the manifest in `index.html` -- [ ] Remove unused default assets (`public/vite.svg`, `src/assets/react.svg`) -- [ ] Update `package.json` name from "frontend" to "nuzlocke-tracker" (or "nuzlocke-tracker-frontend") +- [x] Design or source a proper favicon (Pokeball with skull, in SVG + PNG formats) +- [x] Add favicon files to `public/` (favicon.ico, favicon.svg, apple-touch-icon.png, favicon-16x16.png, favicon-32x32.png, icon-192.png, icon-512.png) +- [x] Update `index.html` title from "frontend" to "Nuzlocke Tracker" +- [x] Add meta description tag +- [x] Add theme-color meta tag (#DC2626, Pokeball red) +- [x] Add Open Graph meta tags (og:title, og:description, og:type) +- [x] Create a `site.webmanifest` with app name, short_name, icons, theme_color, background_color +- [x] Link the manifest in `index.html` +- [x] Remove unused default assets (`public/vite.svg`, `src/assets/react.svg`) +- [x] Update `package.json` name to "nuzlocke-tracker-frontend" - [ ] Consider adding dynamic page titles per route (e.g. "Runs | Nuzlocke Tracker") — optional stretch goal \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html index 072a57e..02eb0db 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,9 +2,19 @@ - - frontend + Nuzlocke Tracker + + + + + + + + + + +
diff --git a/frontend/package.json b/frontend/package.json index acfd726..e64fb30 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,5 +1,5 @@ { - "name": "frontend", + "name": "nuzlocke-tracker-frontend", "private": true, "version": "0.0.0", "type": "module", diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c6746d1f5e90ce7f1d6ac8226dea602c47a81dce GIT binary patch literal 15066 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 NE2$(=`Ozrw{{ft%u!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBDB+SC;hE;^%b*2hb1*Qr zXELw=S&Tp|1;h*t%nKM9n1M7SNNfQUTvlKKGlC6LXcAiZ38-vtW=KRygs+cPa(=E} zVoH8es$NBI0Z0LZO@$SZnVVXYs8ErclUHn2VXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO| zi&7QL^bGV2l1AfjnEKjFOT9D}DX)@^Za$W4-*MbbUihOG|wN zBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o3raHc^AtelCMM;Vme?vOfh>Xph&xj& zG7&cA6+^uR^q@XSM&D4+Kp$>4P^%3{)G8peA~h$%B{MfQuNY{DovERb4Ol&f48lev zosl?oBFR8?+USEkfaD=aXn{q6!DYu~qYn>yJFXr29^niOOc|aojv*F;r9s{q!hs^T zlYKrL=Bkt`vuxGdwOK;?f>U&N_coP`i3=Van%lJQPG`W{Cfz2ErUyU9J{}s6Y6a zbAaJXz4cR7=Hz5yjc4-@&zl{bn{U$fY~5cEwcQsZZU8$|wScsO}^VbVW#v)`{baIJMqdf0qmy{K@x za`ePq#ol~3*Zw-yblfj~&zd8O`}wtlV$@l;Wv)u`?Xi`b;LYpIdm?TA!qQ)ROTHac z(|G^2^UEIb?BJ8LB&wePWe*<~6)CPfV*34<^QE^dA0K_Q@v%kC%6Qf6q&J2qmbT^Z z(hWEL{MMSwk73tJ=Qyr?SK2S`FXumIyv}?1n)N*W3fs3ZEX>>>!&|pD-&j?J-#rTkR+6>&NXon32X5E1TPKJW7DiT;SNDLrPr1mrwZb zJGRip-0Jps%{l$0%p6lreLm6i{KL!7*X^UHt8~84xwY=yi}l7kd;YWS*zkKz$f{Kw fY|PmYOTXqj=%!8j?Z5p!s0i?M^>bP0l+XkKY`f4e literal 0 HcmV?d00001 diff --git a/frontend/public/favicon-32x32.png b/frontend/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffe58cbd90d071e12411d4a7f8301e99aa02699 GIT binary patch literal 2277 zcmZ`*3p7*<7d{>%hG--e$rzF6j8`&akjKbt&>)J+7?W|mh8c`kS9v82?hR8BNkUzW z^0;~AIfT63Vsa~2(vW_{4Rg6O)nBdkum7yI&)#Q$-`@Lt`>b=;Np*HSz7s451^{5E zt&J6q=b?NP72%yJ(a|4yPT0>JYYqU+OmQwA#0LpBI4l4}s{%lLA^>dgQt@*D5Uv9N z9B%+XF#upMIsefKG!L*Mdf1-FVgU_aED8vu_yfYcNPuT@JOcosA^|{%=LPt=BEfGc zv`FZC%qQMY_F3W43jAF?s2*4c6d@!Cj`t1mA;M`vWIh2v(@?xHh)BglX+eR(6co(_ z_L+g=#r!k^2K`K-2AIG+u+C7+kT4?D5UvB)ftiA#P$)Xg_dE(`W&O3BcVz-2QK@7U z0udP*36Io=hlKedbdg9TLPrmwr>D(hXj7tssd$=pFh%)GlmGUyB2oxp{$#3uNHCP& z7w;1iPBnqS_=CP3U+$Ag^Z!06nDSK?PauMiAavn6h;O}lrD%Q@rg2LO>s zTPt%{53w%yfIwG_%+_LXBRgqCqZ}$T36{%Agw{bUFunKCf~>NPWEqSmOpOFlxn%3_ zDxt9qc8a>PTx}tmi349{^Aaz7}j^O)<#>}PI2QhiUr;4Ddhp#nL{07!r z^!)~|O$4YxxS7(Sh!^gh%Hq;BMX$!QRZrQNdW_fRj-_LP{bxFACoe8v(O7ulnO^)0 zp-ijln9CUjiF(i76+Jf3eF)jlwZ#%}o8DtX22^`HQjR{Wpsr{+@W`z8xs<8(nBiM> zBIUA(=u;ORlP%;s28W?HXy*Hk-hu35PjbgiC6%ouF>8sTHVbk;dmay-Z!P`JID2!| z;*gh7iq;K_n%7A};C3NJ3I7Yso(|Yw(|hyvE_j_{Ry;Z8c9%92YXGWhG14fCT2a0) z)ZaI;lIzp;OAhTBS*c^%ykwVw*rx)$Tyth>t|xUR7UFS#ffh63$;dW=Btt|`>6^9B zwl1vOGoy#~`fHJaK0M^?ify*hD!532aKe?~cIq2_mOd*@Eh?^%TW?8meWZ8aI54B9!bmh;JD7!fobKD`?$=oEZ7SBU z@yWX85wu2oBzdh{Q@!~k)qld)!I-?SV``P5>efMGsQffJnoD$$48sn{-Mf29Qbqx( znv(AHEUKZ|uk0-h3<@GJV;v=}OQrOfx}h)j&Fq!Mw}157w=RZH;Bb(L?E|u{&7% z13tgruHj1b*bYO=)*EG4!`cqiJ`c6aoz#nk2u3(Z==S0}M3Han1N*wUpgxE^+cBYf zP&to6$*W|^Re|0lyMePp8Kzr~^21Ea1F*!I=(q%tTPE&<$R))% zTr}Z%mH>H2Ol4bX)BBI;+1fGUD(N0$9+#wWhLsO(=Z5(gVY*_fu zMk&;?a(q?3u62TBxtO=|YIQ@ISbN&HAC%XZ^o-Rc%rP|hbek}_GQoNcAQ{#CRd^4@ zy9TmP#4r5Knh$Wv9|g~5I@J;XI6Q$eHVm0aB@hq$%5!HAR_&mxrKk=<6gYJCcC6l zYgw^vyd-5I0vQ_zu2kJ_EcY}0J-RNP`Jrf2IhC>PR*Bpb9T{sx6m%@8Y@JkGc}0Gq zmQxf_WLa!ILD?3&McqC*W1u9fn~J6H!mAqQJv9q)Pjy;5f$2KVU{$oVY?&SL`SLbP ztYVkf^Fb9cgRYNvOM5<bYqg|}bopRs{8@zOdUF`6p!ct(hrJMK zmpsFVDk99w`yJa+-WtLE?9!WaCdV?O*TZY;=d$R6mYk)AoUx{#0;wF{1MJtn4G$vO zr?YKs_9PxU{^|~{cZH34iLd9T&W)_&B^>QBy`#-TDlIPmF?y5j6}KqZd%>)HzG;Jt z`F;NmAI{8@jl@+?qd@x9u)t_m;d$ek`La20v5JA4qi@lJ!r=Lve`7A?lhH%geeT0? zn+Ey{q^&Wlq;xNzj1BL9!T7UO7D IY2kh8U!d{p_5c6? literal 0 HcmV?d00001 diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1f04aa64d1c8caad421f8e4054e8d4bfa7149dcb GIT binary patch literal 2426 zcmV-=35E6m0096301yxW0000W0Q&*}044wc03aX$0000W09ghA03iba0EtjeM-2)Z z3IG5A4M|8uQUCw|5C8xG5C{eU001BJ|6u?C0>Vi|K~#90Wm9WN6j2oZ?#%42yX~5f ze1Vi!Mno8d7KKGn5LjVB55&?W3PGqSqaT$lB~f4{VIV!QK$El|DkM}=kq@xkKM`UU zY)Iffa@E~&S7&$T#<|sEdEhV~=X~GCxp(eioO6yp!3_gUk_7gIBk=ks1J)OV zW|(AIkfOQ{cSJ*{JsH_GH8@{Y88>0Nu5(F}&~X0=LRT)MIw=8R#e}fIp)e*4Vw}S! zG1y{J+?$?*<60fgo~nRBCY*CV_<0oVB?nO}&*P`8Kr#&2VZftCgh8g=3KbFzNy0Kc zhO4>-hr6C*>-x122kB{PL&#(PPvJ&5yR$Gb{vEQ(3?7vc@&-`upM(NUgOalXmQ96V;NoV#3=F~T z9!F(GsW9k%@ftpL7TNpuireR4i1>UUEhao(UU#!W{7pToiSM1p2i%^%hM&1mE0QqP z7IH{KS|u|h9rIcYBco%;Ta}Bjs-pU2Ib=z~)Amj=!FA_FRGl~qRaIfJSTH&|CN!i4 zx%CZx;Fp{?gmW+$E+i!yKi}HIix8Fgf*2jju}iiYz96+aj
ouF;v4E8D_&uw7Ia)O zA+Km3PE=H5Tu(O)q6^a$zyyI|jNtaMGT<5$(Bc9bWCi{h8-~;c$uKUv#yf(9bkPYF82TY#q#a8|QG>w&0j07M+nEM$t#}jbjmsejo|28U2R3af z!0v5@*sOLU0Z!N)u zqdBJ(L$Sm`T*OJ-cWl8G(^aITXX5qlE}lIR+z-&c`A$}0PgpprO7~(?#KgcA__}B> zBCncw&#COgfqJX~;~q3t8VqDpf&9N}h?Aw|yS}U`b_$E+ut_cQF=KTuPds^8HEh>ZbD9X*o zf|S_x(SYH|_|msMa(ei8Kg5N@YAUAbi2T(BE^Tq4>81)P4Bq+i=D0+w67 zTvHz!;!dEi&jQKeK#8aW0^C+qJ|$z&2!PY&!rWQUA|oRmsVTF#y|t}_uaQkH02c)n zei77x&kKUDts3R%D^1cq^`7zrpP^C*<$g z1)I$dQK10iZ_1%O{5sZZ2UQn9aL^cNH5z1Qq+|R;VQ|U5O;D*+IC-ibjXyPG*S-T7 zKQ0VPg#vvRE4=aa>&ZsfT72Ae%$u7Chv#+eg+df@<7PJwmLBCXo{BJb%WP&(CCp=W zXB+8}$+F955NhiiSomYHY~rJ_Y)WhrJKxmIPM)gcgXXkGHu53g;dn@cv`CY{E1(Yz z<(ueSUTc}`t>x@m%NS1k3?b17dZnqaj@eDtCrzXYdiLSUkaV>pQGXr z60+N=LX;rm^Wnq^#6_IMO&UI6emL~wQ5N-NJgccYN86ZLES7&Yh=aI@leqnXAuEir zPjmCx@RtM#6RDTZQ+gSdz@5D;ilmSy%yZa&Ytu=rbMv)P!_>Ab5%$cKC> zhGL0>xQO$v6Y%0dX&HNBdLm1E=`~heb7r8VPN#!OlEmzG8y_^MHE+wvmtrWEIPL_2 z{@n4yq|=12w|#>X)wPJ2_%P-q84&mMG(?0?7`RU9N;Y*}L-VgK{G6MvUPo&3EUaF+ z6j7ezHXMYJ5*YkxcC4ZrHT4bXywb(*dAbt_bnfYW5jiQGUuX*#B;UVJGXwztIPLDi s?Y=(#91 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/public/icon-192.png b/frontend/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..0020910bbb80be9ac5314b0680725482ab82008a GIT binary patch literal 16117 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 LAXY7682tYLyFOJd literal 0 HcmV?d00001 diff --git a/frontend/public/icon-512.png b/frontend/public/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..686487adcade2d3325c0aee266936156022dbb39 GIT binary patch literal 31425 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 P4Ft(PReDk`VeJ1uo1@{T literal 0 HcmV?d00001 diff --git a/frontend/public/site.webmanifest b/frontend/public/site.webmanifest new file mode 100644 index 0000000..ecb7b2b --- /dev/null +++ b/frontend/public/site.webmanifest @@ -0,0 +1,11 @@ +{ + "name": "Nuzlocke Tracker", + "short_name": "Nuzlocke", + "icons": [ + { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" }, + { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" } + ], + "theme_color": "#DC2626", + "background_color": "#111827", + "display": "standalone" +} diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/frontend/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/frontend/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file