# Project Ops — Prepared Plan (awaiting token refresh + approval) > Status: **ASSESSMENT + PREPARATION COMPLETE — NOT BUILT.** > Blocked on: valid Vikunja API token + Outline API key in `~/.config/environment.d/10-secrets.conf` on `.27` > (Current tokens reject: Vikunja `invalid token`, Outline `unable to decode token` — stale/wrong values; AI extraction bug fixed.) ## The project (what we're setting up) **Website hosting migration**: retire InMotion VPS → local `.13` hosting + AWS S3 offsite + email. (Everything already done/planned in Obsidian: migration plan, AWS offsite backup, email PurelyMail+SES, Garage, restore runbook.) ## 1. Vikunja — Project + tasks (kanban stages) **Project:** `Website Host Migration` (in Vikunja) **Stages/buckets:** `Backlog` → `In Progress` → `Blocked/Waiting` → `Done` **Tasks (initial set, matching what's real):** | Task | Stage | Notes | |---|---|---| | 1. AWS offsite backup (S3 + Glacier) | Done | nightly sync, monitor page, alerts live | | 2. Email: audasmedia + where-woof (PurelyMail + SES) | In Progress | DNS done; SES prod access pending | | 3. Garage v2 upgrade + web UI | Done | buckets visible | | 4. Backup gap closure (borg coverage + s3 add) | Done | reordered sync, restore runbook | | 5. audasmedia.com.au infra on .13 | Backlog | awaiting specs | | 6. where-woof.com website build (other AI) | In Progress* | tracked externally | | 7. SES production access (both domains) | Waiting | AWS approval | | 8. Decommission InMotion VPS | Backlog | after sites live | ## 2. Outline — Collection + docs (for AI bots) **Collection: `Website Host Migration`** Docs to create (draft): - `Overview` — what/why (one-pager) - `Architecture` — target stack, diagrams (Caddy, Docker, Garage, AWS) - `AWS Offsite Backup` — bucket, lifecycle, sync, restore runbook - `Email Setup (PurelyMail + SES)` — config, DNS records, handoff - `Garage v2` — upgrade + admin UI usage - `Decommission InMotion` — checklist - `Handoffs for AI` — SES SMTP creds reference (no secrets: point to local file) ## 3. Obsidian consolidation (human - Create `000 MIGRATION — OVERVIEW.md` in `220 Web Host Migration/`: summary status table (what's live/done/pending), links. - Point it (and the flat phase notes) at **Outline** for AI-facing docs + **Vikunja** for tasks via links in frontmatter/body. - Keep Obsidian = human narrative + configs; Outline = AI/bot docs; Vikunja = tasks. (Overlap OK: Obsidian links to both.) ## Auth needed to build - Valid `VIKUNJA_TOKEN` + `OL_API_KEY` on `.27` (regenerate in apps, or confirm current location). ## Rollout order (after approval + tokens) 1. Vikunja: create project + buckets + tasks (verifiable) 2. Outline: create collection + draft docs (verifiable) 3. Obsidian: write overview + link to both 4. Report outcomes with ids/urls for your visual check --- ## BUILD LOG — Vikunja + Outline (2026-09-05) ### Access resolution - `project-ops` skill found; secrets file `~/.config/environment.d/10-secrets.conf`. - **Extraction bug:** tokens quoted in file → naive grep dropped/kept quotes → 401s. Fixed: `cut -d= -f2- | sed 's/^"//;s/"$//'`. - **Vikunja intermittent 401:** real (user confirmed). Retries needed. **Working base: `http://vikunja.home.lab/api/v1`** (https via Caddy 401s on round-trip; http works). - **Outline:** works via `https://outline.lab.audasmedia.com.au/api`; key valid (auth.info → admin user Sam Rolfe). ### Vikunja — DONE - Project **Website Host Migration (id 6)**, kanban buckets: 6 Backlog · 9 In Progress · 7 Waiting · 8 Done. - 8 tasks created (ids 39–46). done flags: **39/41/42 confirmed done**; others open. - ⚠️ Bucket (stage) placement via API flaky on v0.24.5 — tasks verified present + done flags; **stage drag = 2-min visual** if needed. ### Outline — in progress (built after this log)