MoneyMate Web — product site and legal surface
Selected screens

A tour of the build.

Swipe or click through the screens.

5
pages, every one hand-written HTML
0
JS frameworks, and no build step
1
deploy ships the site and the API together
390px
narrowest layout, with no horizontal scroll

Google Play requires an account-deletion route a user can complete on the web, without installing or reinstalling the app.

Google Play requires an account-deletion route a user can complete on the web, without installing or reinstalling the app. That is more than a form: the page has to explain exactly what is erased and what is kept, what happens to data that only ever existed on the device, and the 30-day completion window. The app's other selling point is a negative claim — local-only mode never uploads a thing — and a privacy policy has to make that credible without sounding evasive. The mechanics carried their own traps: the four legal and support pages share one stylesheet served with a seven-day max-age, so any change to a shared rule is invisible to returning visitors until the cache expires; and the CSS-built phone mock in the hero set its own background but inherited its text colour from the hero, which is white — correct in dark mode, invisible white-on-white in light mode, and invisible to a developer whose desktop is always dark.

What we did

The deletion page spells out the scope and the 30-day window up front, and submissions feed an operator queue in the admin console where a human can act on them. The privacy policy is written around what each storage mode actually transmits, table by table, including the awkward parts: that uninstalling the app destroys a local-only database, and that widget data is cached by the platform outside the app's control. The shared stylesheet is versioned by query string and the version is bumped in the same commit as the CSS, or the new markup renders against an old stylesheet. The hero mock bug was caught by rendering the page in a forced light theme, and the mock now sets its own colour instead of inheriting one. Deploys are selected by tag rather than by push: CI runs on a semver tag, a webhook tells the VPS to check out the highest tag it can find, and the workflow polls the live /version endpoint until the running commit matches — a strict pipeline, because the server always resolves to the greatest version, not the newest push.

What changed after

Live at moneymate.texion.tech, carrying the Play Store listing, the legal surface the app store requires, and the deletion flow — shipped from the same deployment as the API it documents. Responsive from 1440px down to 390px with no horizontal scroll.

Ready when you are.

One business day to first reply. Always.