Ahsan Mahmood Portfolio
com.aoneahsan.app
Ahsan Mahmood Portfolio is a production personal-brand platform โ not a one-page bio โ that showcases live projects, services, blog, testimonials, and contact/payment surfaces across web and a now-live Google Play Android app, backed by a Supabase admin CMS and engineered to be cited by AI search assistants through prerendered per-route JSON-LD and machine-readable agent files.
At a glance
- Category
- web-app
- Status
- Live
- Started
- Dec 2024
- Last updated
- 8 days ago
Identifier
com.aoneahsan.appPreview
Take a look before you go
The still below is painted first, then the running site loads behind it โ so the dialog is never an empty rectangle waiting on a network round trip. Where a site allows framing the live app takes over; where it refuses, the still stays and says so. Nothing is requested until you press.
About
What this actually is
This is the site you are on, and that makes this page an unusual one to write.
Every other entry in this catalogue asks you to take something on trust, or to follow a link and check. This one does not. If a sentence here is wrong, you can find out without leaving the page, which is a good discipline for a writer and a bad place to be vague.
So what follows is only what this repository proves.
It is a portfolio product rather than a portfolio page. That distinction is the whole design: projects, services, a blog, testimonials, feature requests, contact and payment surfaces and the legal pages are all content managed through an admin panel built into the application, not markup edited in a file and redeployed.
The reason is unglamorous and it is the right reason.
Content that requires a build to change is content that stops changing. It gets stale first and then quietly wrong. Eventually nobody edits it at all, because editing it is a deployment. Putting it behind an admin panel is what keeps it accurate a year later.
The design came first. It was approved in full before any of this existed.
Every page was built first as a static click dummy. Only then was it rebuilt as an application. The application is held to it by a test that compares approved copy unit by unit and fails the build when a sentence drifts. That is a strange amount of machinery for a personal site and it exists because approved words drift silently, which no ordinary gate can see.
The other half is what a crawler gets.
A single-page application renders nothing until its JavaScript runs, so anything that fetches the page without executing it sees an empty shell. Most assistants and several search crawlers do exactly that. So the build emits per-route static HTML carrying the real content with JSON-LD inline, and machine-readable files sit beside it for readers that want the structured version rather than the page.
It runs on Supabase's free tier, and that is a constraint rather than a footnote.
There is no server of mine to keep alive, no function billing by invocation, and no vendor whose pricing can move underneath this. Every list read carries an explicit limit and the database does the filtering and counting, which is the habit that a free-tier quota teaches once and permanently.
A theme customiser is available to everyone, signed in or not.
That one is a preference rather than an achievement, and it is here because a site telling people what I build should let them change how it looks while they read it.
What it cost is the machinery.
A personal site does not need a parity gate, an admin panel, a prerender step or an approval artefact. Most of the work here is not the pages; it is the apparatus that keeps the pages honest as they change. That is a disproportionate amount of engineering for one person's portfolio, and it is the same apparatus that makes the claims on it worth reading.
There is one more thing the page should say about itself, since it is the only entry that can.
The copy you are reading was drafted, reviewed and held before it was published. It was checked against the record it describes, and the claims that could not be sourced were removed rather than softened. That process is why this page is shorter than it could be and why the sentences in it are duller than a marketing page would allow.
Which is the argument, really.
Worth knowing
- It's a content platform, not a static bio page โ admin CMS, blog, feature requests, service detail pages, conversations.
- The build emits per-route static-HTML pages with JSON-LD `Person` / `WebPage` / `Service` / `BlogPosting` / `SoftwareApplication` / `BreadcrumbList` schemas inlined โ AI crawlers don't need JS to parse content.
- `pricing.md` + `services.md` + `llms.txt` at site root are designed for AI buying agents and ChatGPT-style discovery โ most portfolios ship none of these.
- Lean Android permission footprint: no camera/geolocation plugins, lowering Play Console review risk.
- Strict zero-cost architecture: Supabase free-tier only, FilesHub for file storage, no paid compute.
Built with
- React 19
- TypeScript
- Vite 8
- Radix UI Themes
- TanStack Router
- TanStack Query
- Firebase
- CapacitorJS
Key features
What it does, and what that costs to build
Each of these is a capability the stack genuinely provides. None of them is an outcome nobody measured โ there is no "cut onboarding by 40%" on this page, because no one measured onboarding.
- Firestore-backed projects catalog + admin CMS
- Service detail pages with Service JSON-LD
- Public blog with BlogPosting schema
- Testimonials with AggregateRating schema
- 87 per-route static HTML pages for AI crawlers
- Agent-readable pricing.md / services.md / llms.txt
- Full Radix theme customizer for all visitors
Screenshots
5 slots, 2 of them filled in
These are designed frames, not pictures. Each one records what belongs in the slot and at what width; the capture itself is taken from the running app. Drawing a fake screenshot here would put an image on the site that no build has ever produced.
Timeline
Still being worked on
Dec 2024
Work started
The earliest month on record for Ahsan Mahmood Portfolio.
Oct 2026
Last change
Status is completed โ 8 days ago. Ongoing, so this row moves whenever something lands.
Questions
Common questions
The questions that actually arrive, answered in the first sentence.
- Who built this site?
- Ahsan Mahmood built it alone, and you are reading the result. The same person designed the pages, wrote the admin panel that manages their content, built the static-HTML generator that feeds crawlers, packaged the Android build and wrote the copy on this page. It is unusual to have a portfolio entry a reader can verify in a single click, and that is the point of naming it: every claim below is checkable from where you are already standing.
- Is any of this page written by hand or is it all from a database?
- Both, and the split is deliberate. The layout, the wording of every heading and the shape of every section were fixed in a static click dummy before a line of application code existed, and the application is checked against that dummy by a test that compares the approved text unit by unit. What comes from the database is the content: this description, the questions below it, the tags. The design is approved copy and the content is data.
- Why does it emit static HTML when it is a React application?
- Because the crawlers that matter most do not run JavaScript. A single-page application renders nothing until its bundle executes, so an assistant fetching the page sees an empty shell and reports that there is nothing here. The build emits a per-route static HTML page carrying the real content and inline JSON-LD, which is what a non-executing crawler reads. The alternative is a site that looks fine to a person and is invisible to everything else.
- What runs the admin side?
- An in-application admin panel, built as part of the product rather than bolted on. Projects, services, blog posts, testimonials and the site's own settings are managed there rather than by editing code and redeploying, which is the difference between a portfolio and a portfolio product. Editing content should not require a build, and anything that does require a build eventually stops being edited at all.
- Does this site have an iPhone app?
- No. It ships as a web application and as an Android build through Capacitor, and there is no iOS release, because there is no Apple Developer account here and nothing I build has shipped to the App Store. An iPhone opens the site in a browser and gets the whole thing, since everything here is a web page first. The Android build exists because packaging one was cheap once the web application was already correct.
Keep looking
More web apps
- ZT
ZTools
com.zaions.ztools
A privacy-first developer and power-user toolbox covering 20 categories, where the work happens in your browser rather than on someone's server.
- TA
TaxEase
com.aoneahsan.taxease
Tax compliance workflows for filers, with an admin side for staff.
- LI
LifeWell
com.aoneahsan.lifewell
Health and wellness tracking across web and Android.