A privacy-first, session-only trackside notebook for motorcycle track riders and club racers. Captures tire pressures, suspension settings, lap times, and setup notes — without notifications, accounts, or a server watching over your shoulder.
- No accounts, no database, no analytics, no cookies.
- The current session lives only in your browser tab — refresh and it's gone.
- Saved history (opt-in) stays on your own device via
localStorage. Nothing is sent anywhere. - Backups are plain JSON files you control.
- Session setup — bike, track, session label, ambient/track temp, humidity, general notes.
- Tires — cold / hot PSI front & rear, optional target hot PSI, tire warmer tracking, conservative delta suggestions.
- Suspension — fork & shock preload / compression / rebound, symptom chips (mid-corner push, chatter, brake dive…), plain-English recommendation hints.
- Laps — paste lap times (
mm:ss.sssor plain seconds). Returns best, average, and Δ-from-best per lap. - Review — one-tap summary of the whole session.
- History — save sessions locally, compare two side by side, see per-track trends, export / import JSON backups.
Just open index.html in a browser. No build step, no dependencies, no
npm install.
Recommended host: Cloudflare. The project is genuinely static, and Cloudflare's free tier gives unlimited bandwidth and unlimited requests — the site effectively scales for free no matter how many riders use it.
Cloudflare has merged Pages and Workers under a single "Workers" product;
pure static sites now deploy as a Worker whose only job is to serve a
bundle of static files. This repo is configured for that flow via
wrangler.jsonc at the root.
- Push this repo to GitHub / GitLab.
- Cloudflare dashboard → Workers & Pages → Create → Import a repository → pick the repo.
- Build command: (leave empty).
- Deploy command: (leave empty —
wrangler.jsoncdrives the upload). - Deploy. You get a
*.workers.devURL immediately. Attach a custom domain any time.
Notes:
wrangler.jsoncdeclares an assets-only Worker (assets.directory: "./") — no Worker code, just files..assetsignoreexcludes repo metadata (README.md,LICENSE,SECURITY.md,wrangler.jsoncitself,.git,vercel.json) from the shipped bundle, so they can't be fetched at the production URL._headersis honored under Workers Static Assets exactly as it was under classic Pages, applying the CSP and other hardening headers described in SECURITY.md.- Clean URLs work by default (
/privacyresolves to/privacy.html) via Cloudflare's defaulthtml_handlingbehavior.
Cost at scale. Free for a static site at essentially any realistic traffic level. Free-plan quotas that actually exist: 500 builds/month (we have no build step — each deploy is just a file upload), 20 000 files per deployment, 25 MiB per file. Custom domains are free; the domain name itself (~$10/year) is the only out-of-pocket cost. Hosting only starts costing money if you later add Cloudflare Workers code (paid KV, D1, R2, cron triggers, etc.) — all optional and not needed by this app.
If you prefer the legacy Pages flow, connect the repo the same way and set
the build output directory to /. Both flows serve the same files with
the same _headers.
- Import the repo.
- Framework preset: Other.
- Build command: (leave empty).
- Output directory: root.
- Deploy.
vercel.json is committed and sets the CSP, other security headers, and
cleanUrls (so /privacy works in addition to /privacy.html). Vercel's
free tier has bandwidth caps that Cloudflare Pages does not, which is why
Pages is the default recommendation.
GitHub Pages, Netlify, S3 + CloudFront, nginx, Caddy — drop the files in and
serve. The <meta http-equiv="Content-Security-Policy"> tags in each HTML
file keep the CSP active even when the host does not support custom
headers.
Plain HTML, CSS, and vanilla JavaScript. No framework. No build tooling. No
package.json.
File layout:
index.html— app shell, tab navigation, forms.styles.css— dark, mobile-first stylesheet tuned for paddock use.app.js— interactions, calculations, history UI.storage.js— thinlocalStoragewrapper. If you ever add a backend, this is the one file to replace.privacy.html,terms.html— plain-English policy pages.
See privacy.html. Short version: we do not collect anything.
Nothing is persisted unless you tap Save this session on the Review tab,
and even then it only touches localStorage on your device. Exports and
imports are local file operations on your machine.
MIT — open source, commercial use permitted. Fork it, modify it, deploy it, sell a service built on it. Just keep the copyright notice.