Self-contained, no-server web app prototypes. Each app is a single HTML file — open it directly in a browser (file:// works) or use a GitHub Pages link. No build step, no account ever required.
There are currently no active prototypes in this repo. It's a staging shelf: new single-file experiments land here, and the ones that prove themselves graduate into their own repos.
| App | Status |
|---|---|
| PAPTrack | Graduated. Now its own product at eagleadams86.github.io/paptrack (repo), alongside native iOS and Android apps. cpap-tracker.html here is now just a redirect so old bookmarks keep working. |
| ReturnRadar | Retired and removed. It was a return-window & warranty deadline tracker. The last version is still in git history — recover it with git show 6fe221d:returnradar.html > returnradar.html. |
| File | Description |
|---|---|
index.html |
Hand-written landing page. Without it, GitHub Pages renders this README into an index page with no CSP and a third-party script — never delete it (or .nojekyll, which turns that rendering off). |
cpap-tracker.html |
Redirect stub → PAPTrack's new home (eagleadams86.github.io/paptrack) |
favicon.ico |
Shared favicon (same one used across the dashboard and lottery repos) |
theme.css |
The shared four-theme palette, generated in the private claude-theme-pack repo and copied here byte-for-byte. Linked, not inlined, so a palette change reaches this page like every other app |
tests.html |
Checks the files above rather than any app logic: .nojekyll present and empty, index.html real, a CSP on every page, no off-origin subresource, no palette hard-coded locally. Run it on localhost — see below. Opened on the live site it declines to run and shows the latest CI result instead, which is why its own CSP names https://api.github.com; the pages it checks name nothing |
.nojekyll |
Empty file. Its presence turns off Jekyll, which otherwise renders every .md here into a page with no CSP and a third-party script |
GitHub Pages (static hosting, this repo, main branch)
└── one *.html file per prototype — zero dependencies
└── all state ──► browser localStorage (per device)
There is no server of our own. Each prototype must work from a double-clicked file just as well as from GitHub Pages, and any data it holds stays on the device.
There is no app logic here, so the suite checks the things this repo actually exists to hold:
.nojekyll is present and empty, index.html is a real hand-written page rather than a Jekyll
rendering of the README, every page carries a Content-Security-Policy that names no external
host, nothing loads a script or stylesheet from another site, the landing page runs no script
at all (its CSP has no script-src, so one would be silently dead), the redirect stub redirects
all three ways to the same URL, no page hard-codes a colour instead of using a theme token, and
the landing page is a real <main> / <footer> pair with </main> closing before the footer.
That pair went in on 2026-08-21: the closing three paragraphs sat inside <main> as loose
prose, and a <footer> nested in main is not contentinfo at all. The same correction moved
through every public page in the family at once. The middle of those three lines was reworded
in the same pass — it claimed the page "makes no network requests", which is not quite true of
a page that fetches theme.css and favicon.ico; it now says what it actually asks for. This
is the one public page in the family with no privacy policy, deliberately, so that sentence is
standing in for one and has to be exactly right. The suite asserts the claims rather than the
old wording, and fails if the overclaiming sentence comes back.
It runs on localhost only — it reads the repo folder, so it should test a copy you are
serving rather than the published site:
python3 -m http.server 8019 # then open http://localhost:8019/tests.htmlCI runs the same page headlessly in Chromium on every push, and fails if the summary goes red.
- Drop a new self-contained
*.htmlfile in the repo root (linkfavicon.icoin its<head>) - Add it to the list at the top of this README
- Add its filename to
PAGESintests.html— otherwise it ships with no CSP check at all - Push — GitHub Pages serves it at
eagleadams86.github.io/prototypes/<file>.html
New prototypes are designed against the Midnight palette (deep indigo/navy), which is the family's base palette; what a page opens on is auto — the family default since 2026-08-22 — which follows the reader's own system, resolving to Light or Midnight. Canonical source: the private claude-theme-pack repo — copy its generated theme.css or transcribe from its tokens.json. Both pages here carry data-theme="auto" on <html>; they have no picker and save nothing, so that attribute is the whole of their theme.