A free, single-purpose calculator site for gig drivers: true hourly earnings after vehicle costs and self-employment tax, legal pay-floor checks (CA Prop 22, NYC, Seattle, Washington rideshare), and an offer quick-checker.
Pure static site. No build step, no backend, no dependencies, no external requests. System fonts only. All math runs client-side from two files:
calc.js— pure calculation functions + the dated CONSTANTS block (Node-importable for tests)app.js— form handling, validation, and rendering forindex.html
Pages: index.html (the tool), methodology.html, prop-22.html,
nyc-pay.html, irs-mileage.html, about.html, plus styles.css,
favicon.svg, robots.txt, sitemap.xml.
- Create a free Cloudflare account and verify your email.
- Dashboard → Workers & Pages → Create → Pages → Upload assets.
- Name the project, then upload this whole
site/folder (or a ZIP of it). - Deploy. Your site is live at
https://<project>.pages.dev. - (Optional) Attach a custom domain later under the project's Custom domains tab.
- Push this folder's contents to a GitHub repository (see below).
- Cloudflare Dashboard → Workers & Pages → Create → Pages → Connect to Git.
- Select the repo. Build settings: Framework preset: None, Build command: (empty), Build output directory:
/(or the folder containingindex.htmlif the repo root is higher). - Deploy. Every push to the production branch redeploys automatically.
- Create a GitHub repository and push the contents of this
site/folder to it.- For a user/organization site (
<username>.github.io), files must be at the repo root. - For a project site, files can be at the root or in
/docs.
- For a user/organization site (
- Repo Settings → Pages → Source: Deploy from a branch → pick the branch and folder.
- Save. The site publishes at the URL shown on that settings page.
- Replace the placeholder domain
https://truegigpay.example.cominrobots.txtandsitemap.xmlwith the real domain. - Visit every page on the live URL and re-run one calculator example by hand
against
tests/tests.jsexpectations. - Submit
sitemap.xmlin Google Search Console and Bing Webmaster Tools.
All rates live in one place: the CONSTANTS block at the top of calc.js.
Each constant names its source and effective period in a comment.
Update calendar:
| What | When it changes | Source to check |
|---|---|---|
| IRS standard mileage | Each December for the next year; rarely mid-year | IRS "Standard mileage rates" page / annual notice (+ mid-year IR if issued) |
| Social Security wage base | Each fall for the next year | SSA wage-base announcement |
| CA minimum wage / Prop 22 per-mile | January 1 | CA DIR; CA State Treasurer Prop 22 figures |
| NYC delivery minimum pay | April 1 | NYC DCWP |
| Seattle per-minute / per-mile / per-offer | January 1 | Seattle Office of Labor Standards |
| WA TNC (rideshare) rates | January 1 | WA L&I "Getting Paid" page |
Procedure:
- Verify the new figure on the official source (never a blog or another calculator).
- Edit the constant(s) in
calc.js, and update the comment with the new source/effective date. - Set
RATES_VERIFIED_ONto today's date, and update the "rates verified" dates in the page footers, the constants strip onindex.html, andmethodology.html. - Update the worked examples in
tests/tests.jsif a constant you changed is used in one, then run:node ../tests/tests.js(must be all-pass). - Add a
CHANGELOG.mdentry (in the project root, one level up from this folder). - Redeploy (Git push, or re-upload the folder).
Calculation tests live outside this folder at ../tests/tests.js and run with
plain Node — no packages to install:
node ../tests/tests.js
They cover the mileage split-rate boundary, SE tax including the Social Security wage-base cap, all five pay floors, the offer quick-check, and NaN/Infinity edge cases, each with the hand-computed math in comments.