diff --git a/appstores/casaos/ModelWorkshopManager/docker-compose.yml b/appstores/casaos/ModelWorkshopManager/docker-compose.yml new file mode 100644 index 0000000..01e6fa1 --- /dev/null +++ b/appstores/casaos/ModelWorkshopManager/docker-compose.yml @@ -0,0 +1,111 @@ +name: model-workshop-manager +services: + model-workshop-manager: + image: lucifix/model-workshop-manager:1.0.0 + container_name: model-workshop-manager + restart: unless-stopped + deploy: + resources: + reservations: + memory: 128M + ports: + - target: 3000 + published: "13080" + protocol: tcp + environment: + SESSION_COOKIE_SECURE: "false" + TRUST_PROXY: "" + volumes: + - type: bind + source: /DATA/AppData/$AppID/data + target: /data + - type: bind + source: /DATA/AppData/$AppID/backups + target: /backups + healthcheck: + test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/api/health"] + interval: 30s + timeout: 10s + retries: 3 + x-casaos: + envs: + - container: SESSION_COOKIE_SECURE + description: + en_US: Set to true only once the app is served over HTTPS (e.g. behind a reverse proxy with TLS). Over plain HTTP, true makes the browser drop the login cookie and login silently fails. + - container: TRUST_PROXY + description: + en_US: Number of reverse proxies in front of the app (usually 1) so the login rate limiter sees real client IPs. Leave empty without a proxy. "true" is refused and the app won't start. + ports: + - container: "3000" + description: + en_US: Web UI HTTP port + volumes: + - container: /data + description: + en_US: Database, uploaded photos and the auto-generated session secret + - container: /backups + description: + en_US: In-app backups (manual backup, download and restore) +x-casaos: + id: org.icewhale.modelworkshopmanager + main: model-workshop-manager + index: / + port_map: "13080" + scheme: http + icon: https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/ModelWorkshopManager/icon.svg + thumbnail: https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/ModelWorkshopManager/thumbnail.png + screenshot_link: + - https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/ModelWorkshopManager/screenshot-1.png + - https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/ModelWorkshopManager/screenshot-2.png + - https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/ModelWorkshopManager/screenshot-3.png + title: + en_US: Model Workshop Manager + tagline: + en_US: Track your model kit stash, paint shelf and builds + description: + en_US: | + No more guessing whether you already own that kit, digging through drawers for the right shade of paint, or losing track of build progress. Model Workshop Manager keeps your scale-model catalog, inventory and builds in one place, on your own hardware. + + **Key Features:** + - Searchable catalog of kits and paints, kept separate from what you own and what's on your wishlist + - One-click starter catalog of 10,000+ paints from 30+ brands (Tamiya, Vallejo, Citadel, Mr. Hobby, AK, Mission Models and more) + - Barcode scanning to check whether you already own a kit, with optional UPCitemdb lookup + - Builds with a timestamped progress log, photos and "required vs. owned" paint matching + - One-tap shopping list for a build's missing paints, plus a wishlist + - Supplies (brushes, cement, masking tape) with low-stock alerts + - CSV/JSON import and export, and backup/restore from the UI + - Installable as an app on phone and desktop (PWA) + - Single-user and private: one SQLite file, photos on your own disk, no cloud, no tracking + + **Learn More:** + - [Website](https://lucifix.github.io/model-workshop-manager/) + - [GitHub repository](https://github.com/Lucifix/model-workshop-manager) + tips: + before_install: + en_US: | + ## Getting Started + + Open the Web UI and create your username and password on the one-time setup screen. Nothing else needs configuring. + + To start with a full paint catalog, open **Import & Export → Import starter catalog**. + + ## HTTPS and reverse proxies + + This is a single-user app meant for your LAN or a VPN, not the open internet. If you serve it over HTTPS behind a reverse proxy, set `SESSION_COOKIE_SECURE` to `true` and `TRUST_PROXY` to `1`. + author: Lucifix + developer: Lucifix + category: Productivity + architectures: + - amd64 + - arm64 + version: "1.0.0" + update_at: "2026-10-17" + release_notes: + en_US: |- + - First tagged release: kit, paint and supply catalog and inventory, barcode scanning, builds with photo progress logs, shopping list and wishlist. + - One-click starter catalog of 10,000+ paints from 30+ brands. + - First-run setup screen, auto-generated session secret and in-app backups. + website: "https://lucifix.github.io/model-workshop-manager/" + repo: "https://github.com/Lucifix/model-workshop-manager" + support: "https://github.com/Lucifix/model-workshop-manager/issues" + docs: "https://github.com/Lucifix/model-workshop-manager#readme" diff --git a/appstores/casaos/README.md b/appstores/casaos/README.md new file mode 100644 index 0000000..bb40425 --- /dev/null +++ b/appstores/casaos/README.md @@ -0,0 +1,63 @@ +# CasaOS / ZimaOS App Store manifest + +`ModelWorkshopManager/docker-compose.yml` is an app definition for the official +[CasaOS App Store](https://github.com/IceWhaleTech/CasaOS-AppStore), written in +its v2 format: standard Compose plus a top-level `x-casaos` block (see +[Compose and x-casaos](https://github.com/IceWhaleTech/CasaOS-AppStore/blob/main/docs/specs/compose-and-x-casaos.md)). + +Notes on the choices: + +- **Pinned image tag** (`1.0.0`, not `latest`). That's what the store's other + apps do, and it ties `x-casaos.version` to what actually runs. Bump both + (and `update_at`/`release_notes`) in a follow-up PR to the store for each + release. +- **Host port 13080.** Store apps use high ports to stay clear of CasaOS itself + and other apps. +- **Runs as the image's default uid 1000**, with no `user:` override. CasaOS + creates missing `/DATA/AppData/...` folders with mode 0777 before starting + the app, so the unprivileged process can write to them. +- **`x-casaos.id` is `org.icewhale.modelworkshopmanager`**, the format the + store's validator suggests. If the maintainers ask for a different id, + change it. +- The store's app assets (`icon.svg`, `thumbnail.png`, `screenshot-*.png`) are + copied from this repo when you submit, not stored here twice. +- **The `cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/ModelWorkshopManager/...` + URLs return 404 until the store PR is merged.** Every app in the store points at + its own folder this way. The store build doesn't download them: it maps + `Apps/ModelWorkshopManager/` to the copied local file, then rewrites the + URL to the published asset. If the files aren't copied in (step 2 below), the + build fails on those URLs. + +## Submitting + +1. Fork [IceWhaleTech/CasaOS-AppStore](https://github.com/IceWhaleTech/CasaOS-AppStore) + and clone your fork. +2. From the fork's root, with this repo checked out at `../model-workshop-manager`: + + ```bash + mkdir -p Apps/ModelWorkshopManager + cp ../model-workshop-manager/appstores/casaos/ModelWorkshopManager/docker-compose.yml Apps/ModelWorkshopManager/ + cp ../model-workshop-manager/public/favicon.svg Apps/ModelWorkshopManager/icon.svg + cp ../model-workshop-manager/public/icon-512.png Apps/ModelWorkshopManager/icon.png + cp ../model-workshop-manager/docs/screenshots/readme-hero.png Apps/ModelWorkshopManager/thumbnail.png + cp ../model-workshop-manager/docs/screenshots/mobile-dashboard.png Apps/ModelWorkshopManager/screenshot-1.png + cp ../model-workshop-manager/docs/screenshots/mobile-models.png Apps/ModelWorkshopManager/screenshot-2.png + cp ../model-workshop-manager/docs/screenshots/mobile-build.png Apps/ModelWorkshopManager/screenshot-3.png + ``` + +3. Validate locally: + + ```bash + docker compose -f Apps/ModelWorkshopManager/docker-compose.yml config -q + ./scripts/build_dist.sh + ``` + + The build should finish without errors and produce + `dist/apps/org.icewhale.modelworkshopmanager/`. + +4. Optional: install it on a CasaOS box first. In the App Store, use + **Custom Install → Import** and paste the compose file. +5. Commit on a branch, push, and open a PR against `main` titled e.g. + "Add Model Workshop Manager". Say in the description that it adds a new + app, what the app does, and how you validated it (step 3, plus step 4 if + you did it). The store's `Validate Compose And Build` check runs on the PR. diff --git a/appstores/unraid/README.md b/appstores/unraid/README.md new file mode 100644 index 0000000..780330c --- /dev/null +++ b/appstores/unraid/README.md @@ -0,0 +1,50 @@ +# Unraid Community Apps template + +Community Apps template for [Model Workshop Manager](https://github.com/Lucifix/model-workshop-manager). + +This folder is laid out as the root of a **separate** templates repository +(`Lucifix/unraid-templates`), following the Community Apps +[builder guide](https://ca.unraid.net/submit/help/builders) and its +[starter repository](https://github.com/unraid/unraid-community-apps-starter): +Community Apps expects `ca_profile.xml` at the repository root and scans the +whole repository, so it gets its own small repo instead of living in the app's +root. The template pulls the published image, so it doesn't need anything else +from this repo. + +```text +ca_profile.xml repository profile shown in Community Apps +templates/model-workshop-manager.xml the Docker template +``` + +`TemplateURL` and `WebPage` assume the repo is named `unraid-templates`. Both +return 404 until that repo exists. Pick a different name and you'll need to +update both. + +## Unraid-specific defaults + +- **Runs as `99:100`** (`--user 99:100` under _Extra Parameters_). This replaces + `APP_UID`/`APP_GID` from `docker-compose.yml`, which are Compose-only and + have no effect as container variables. Unraid creates missing appdata paths + owned by `nobody:users`, so the image's default uid 1000 couldn't write there. +- **Data and backups are sibling folders** under + `/mnt/user/appdata/model-workshop-manager/`. Nesting the backups folder + inside the data folder would make every backup include the previous ones. +- **Host port 8080 → container port 3000**, same as the docs. + +## Submitting + +1. Create a public repo `Lucifix/unraid-templates`. Copy this folder's + contents to its root, along with this project's `LICENSE` (CA requires an + OSI-approved license at the repo root). Push to `main`. +2. Check that + `https://raw.githubusercontent.com/Lucifix/unraid-templates/main/templates/model-workshop-manager.xml` + loads. +3. Optional but common: open a support thread in the Unraid forums' + _Docker Containers_ section. Add its URL as `` in `ca_profile.xml` + and as `` in the template. +4. Sign in at , enter the repo URL, then run + **Validate** and **Scan**. Fix anything they report, push, and run them again. +5. Submit for review once every check passes. + +Once the templates repo is live, edit the template there. Either delete this +folder or keep the two in sync. diff --git a/appstores/unraid/ca_profile.xml b/appstores/unraid/ca_profile.xml new file mode 100644 index 0000000..60ea783 --- /dev/null +++ b/appstores/unraid/ca_profile.xml @@ -0,0 +1,6 @@ + + + Unraid templates for Model Workshop Manager, a self-hosted, single-user app for tracking your model kit stash, paint shelf, supplies and builds. For questions and bug reports, use GitHub Discussions or issues on the main project: https://github.com/Lucifix/model-workshop-manager + https://raw.githubusercontent.com/Lucifix/model-workshop-manager/main/public/icon-512.png + https://github.com/Lucifix/unraid-templates + diff --git a/appstores/unraid/templates/model-workshop-manager.xml b/appstores/unraid/templates/model-workshop-manager.xml new file mode 100644 index 0000000..76b976b --- /dev/null +++ b/appstores/unraid/templates/model-workshop-manager.xml @@ -0,0 +1,38 @@ + + + model-workshop-manager + lucifix/model-workshop-manager:latest + https://hub.docker.com/r/lucifix/model-workshop-manager + bridge + sh + false + https://github.com/Lucifix/model-workshop-manager/discussions + https://github.com/Lucifix/model-workshop-manager + https://github.com/Lucifix/model-workshop-manager#readme + Model Workshop Manager keeps your scale-model hobby in one place: a searchable catalog of kits and paints kept separate from what you actually own, barcode scanning to check whether you already have a kit, a one-click starter catalog of 10,000+ paints from 30+ brands (Tamiya, Vallejo, Citadel, Mr. Hobby, AK and more), builds with progress photos and "required vs. owned" paint matching, a shopping list and wishlist, supplies with low-stock alerts, CSV/JSON import and export, and in-app backups. Installable as a PWA on phone and desktop. + +Single-user and private by default: one SQLite file and your photos on your own disk, no accounts, no cloud, no tracking. + +First run: open the WebUI and create your username and password on the one-time setup screen. Nothing else needs configuring. + +Meant for your LAN or a VPN, not the open internet. If you put it behind a reverse proxy with HTTPS, set SESSION_COOKIE_SECURE to true and TRUST_PROXY to 1. + Productivity: Tools:Utilities + http://[IP]:[PORT:3000]/ + https://raw.githubusercontent.com/Lucifix/unraid-templates/main/templates/model-workshop-manager.xml + https://raw.githubusercontent.com/Lucifix/model-workshop-manager/main/public/icon-512.png + + --user 99:100 + scale model kits miniatures paints hobby modelling inventory warhammer gunpla collection + MIT + https://raw.githubusercontent.com/Lucifix/model-workshop-manager/main/docs/screenshots/mobile-dashboard.png + https://raw.githubusercontent.com/Lucifix/model-workshop-manager/main/docs/screenshots/mobile-models.png + https://raw.githubusercontent.com/Lucifix/model-workshop-manager/main/docs/screenshots/mobile-build.png + 8080 + /mnt/user/appdata/model-workshop-manager/data + /mnt/user/appdata/model-workshop-manager/backups + false + +