MoneyMate Web — product site and legal surface
The product site for MoneyMate — a hand-written landing page plus the four legal and support pages that Google Play requires an app to have. It is not a template and not a framework build: the landing page is one hand-authored HTML file with inline CSS, inline SVG artwork and no JavaScript library of any kind, served straight off disk by the same FastAPI service that runs the MoneyMate API, so the marketing site and the product API share one domain, one deploy and one TLS certificate. Five pages cover the landing page, a privacy policy written to be readable rather than legally defensive, terms of service, support and troubleshooting, and an account and data deletion request flow. The illustration in the hero is not a screenshot — it is a phone mock built from live HTML and CSS, down to the status bar, balance card, budget bar and transaction rows, so it restyles itself for light and dark mode and stays sharp at any pixel density. Themes follow the OS preference and persist in localStorage, JSON-LD resolves the app entity to the Play listing and makes the FAQ eligible for rich results, social previews run from Open Graph through to Microsoft tiles, keywords cover both English and Bengali, and Google Analytics sits behind a Consent Mode v2 banner with advertising signals denied outright.

A tour of the build.
Swipe or click through the screens.





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.