diff --git a/.claude/skills/release-screenshot/SKILL.md b/.claude/skills/release-screenshot/SKILL.md new file mode 100644 index 0000000..b97e019 --- /dev/null +++ b/.claude/skills/release-screenshot/SKILL.md @@ -0,0 +1,60 @@ +--- +name: release-screenshot +description: Use when cutting a FeedZero landing-page release (the /release flow, or any time `screenshot.png` needs to be refreshed) to regenerate the marketing hero image with the latest app build. +--- + +# Release Screenshot + +## When to use + +- Cutting a new release in `feedzero-landing` (typically as part of `/release`). +- The hero `screenshot.png` looks stale because the app's UI has shifted (sidebar layout, reader pane, etc.). +- Manually requested ("retake the screenshot"). + +If the only change is copy or release notes, you don't need to regenerate the screenshot. + +## What it produces + +`/home/DeadEye3164/builder/feedzero-landing/screenshot.png`, a 1440×900 capture of the app showing: + +- A populated sidebar: 4 folders (News, Technology, Design, Science) + 2 unfiled feeds, 20 feeds total. +- A populated article list pane (Ars Technica selected). +- A featured article ("Inside the quiet revolution rewriting silicon") in the reader pane with an Unsplash hero image, figcaption, and body copy. +- No "feeds stored locally" warning, no changelog dialog, no onboarding banner. + +## How to run + +From `/home/DeadEye3164/builder/feedzero-landing`: + +```sh +node take-screenshot.mjs --scene landing +``` + +That auto-starts a Vite dev server on `:3001` against the sister repo at `../feedzero`, seeds the encrypted IndexedDB directly via `initFresh()` + `db.addFolder/addFeed/addArticles`, opens the featured article URL, and writes `screenshot.png`. + +If a dev server is already running, pass `--url http://localhost:PORT` to skip the spawn step. + +## Verification (before claiming done) + +1. Confirm the file changed: `git diff --stat screenshot.png` should show a modification. +2. **Look at the image.** Use the Read tool on `screenshot.png` to view it. The hero image must have rendered (Unsplash CDN occasionally times out — re-run if the right pane looks blank). +3. Confirm there's no amber "Your feeds are stored locally" banner in the bottom-left of the sidebar. + +## Things that commonly go wrong + +| Symptom | Cause / fix | +|---------|-------------| +| Screenshot taken before the hero image decoded | The script waits 2.5s after `figure img` appears; bump the timeout in `screenshotLanding` if Unsplash is slow that day | +| `initFresh failed` / module import error | The sister repo `../feedzero` is missing or out of date. Check `ls ../feedzero/src/core/storage/key-manager.ts` exists | +| Sidebar layout shifted, screenshot looks wrong | The app's component structure changed. Update the seed data or selectors in `screenshotLanding` | +| Cloud-sync warning re-appears | `feedzero:local-warning-dismissed` localStorage key was renamed in the app — search `app-sidebar.tsx` for the new key and update the seed | + +## After regenerating + +The screenshot lives in the landing repo and ships with the deploy. Commit it alongside the release-notes update for the cut: + +```sh +git add screenshot.png releases.mjs releases.xml releases/index.html +``` + +(`releases.xml` and `releases/index.html` come from `node build-releases.mjs` — the regular release flow handles those.) diff --git a/docs/self-hosting/index.html b/docs/self-hosting/index.html index 1ddec6b..20d9166 100644 --- a/docs/self-hosting/index.html +++ b/docs/self-hosting/index.html @@ -38,11 +38,15 @@

Self-hosting FeedZero

-

Last updated: 2026-05-16

+

Last updated: 2026-05-17

+
+ HTTPS is non-negotiable. FeedZero encrypts your data at rest with the browser's Web Crypto API, which browsers gate behind a secure context: HTTPS, or http://localhost. Plain http://<lan-ip>:3000 will refuse to start with a clear error pointing here. Put Caddy or nginx with a TLS cert in front of the server before opening it. The app detects this and tells you what to do — but save yourself the round-trip and set up TLS first. +
+

What you get

FeedZero is MIT-licensed. A self-hosted deployment unlocks every shipped feature. There is no license check, no kill switch, no telemetry. Features still in development stay locked until they ship, and they reach self-hosters the same day they reach hosted users.