Blog — working notes on shipping software alone · Ahsan Mahmood
Working notes from building and maintaining a catalogue of products alone — architecture, mobile, security and the trade-offs behind them. Filter by topic, search by title.
All posts
Newest first. Pick a topic, or search by title.
Everything, by year
The full run in one place — no filter, no pages.
Most of what is written here came out of a real project with a real deadline. If you are making the same decisions, the first call is 30 minutes and free.
Building something like this?
Notes go up as the work happens. Nothing is here to read at the moment.
No posts published yet
The request timed out. Nothing was lost — your topic and search are still set.
Could not load posts
Working notes
Not tutorials. These are the decisions I had to make anyway, written down while they were still fresh — what the zero-cost constraint removes, where a free tier stops being free, and the failures that passed every automated check on the way to production.
- Published
- Most recent
- Topics
What building twenty-three products alone actually teaches you.
A topic and a search are both narrowing this list. Widen one, or clear them both.
- Try a different word, or browse every topic.
- Next page
- Previous page
Full-stack developer in Lahore, Pakistan. One React and TypeScript codebase becomes a web app, an Android app and a browser extension — twenty-three of them are live. Everything written here came out of building and maintaining them alone.
- GitHub
- Ahsan Mahmood
- About the work
- Copy this snippet
- Loading the post
- Browse all posts
That post does not exist
Post not found · Ahsan Mahmood
Read next
- Email
- Facebook
- Hacker News
- LinkedIn
- Reddit
- Telegram
- WhatsApp
- Close
- Copy the link to this post
Share this post
On this page
- Updated
- Search posts by title, summary or body
- Everything
- Filter by topic
In the feed right now
- What is actually changing in web development — Not predictions. Four shifts I have already had to design around: crawlers that do not run JavaScript, the platform absorbing dependencies, types as the…
- Pricing and plans without a payment processor — Why my products take payment through a redirect and an admin grant instead of a checkout integration, what that costs, and the entitlement bugs that bite…
- How this site is built, and what I rebuilt to fix — React 19, Vite, TanStack Router, Supabase and a click dummy that is the visual specification. Including the outlet bug that made nine service pages render…
- The JavaScript features I actually reach for now — Intl for anything a person reads, structuredClone, at(), Object.groupBy, and the platform APIs that replaced dependencies. Plus the number formatting that…
- Micro-animation: the 100ms rule, and everything else is… — Motion that earns its place versus motion that is decoration. Why acknowledgement beats a toast, why the browser gives you two free properties, and the…
- From junior to senior: what actually changed — Eight years from a frontend job in Lahore to running twenty-three products alone. The three shifts that mattered, and the one I was slowest to make.
- A feature-request board on Firestore, and the rules that… — Vote counts that cannot be forged, a status workflow that means something, and the security-rule subtlety that makes a list query fail while the…
- Reflectify 3-3-1: a journaling app that deliberately has… — Three gratitudes, three wins, one focus. Why the entries never leave the phone, why there is no model reading them, and what a constraint does to a product…
- PregnancyPal: building health software when the data is… — Week-by-week tracking, vitals, fertility and a community — on a free tier, with no cloud functions. What health data changes about every architectural…
- FilesHub: building the storage backend instead of paying… — A self-hosted Laravel platform that replaced Firebase Storage and every transactional-email vendor across an entire portfolio. What it took, and the…
- TrizLink: one React codebase as a web app, an Android… — A link manager that ships to three surfaces from one repository. What actually got shared, what could not be, and the free-tier limits that shaped the data…
- Refactoring a monolith you cannot stop shipping — The rewrite that loses a third of your features, the seams worth finding first, and why "delete the dead code" is the highest-value refactor nobody…
- Firebase Auth and social sign-in: the parts that are… — Social login is easy to add and easy to get subtly wrong. Custom claims that lie, rules that trust the client, and why an extension cannot use the Auth SDK…
- Accessible design systems: what React Aria gives you… — Moving from a styled component library to headless primitives plus Tailwind. What accessibility work is genuinely free, what is not, and the rich-text rule…
- Admin panels: four failures that ship looking complete — Every one of these was found in a live admin panel, and none is visible in a code review or a green build. Plus why the screen list should be derived from…
- One codebase, web and Android: what Capacitor actually costs — Shipping the same React app to the browser and to Google Play. The parts that are genuinely free, the parts that are not, and the config bug that ships…
- TypeScript patterns I actually use, and one that cost me… — Typed translation keys, satisfies, discriminated state and branded ids — plus the conditional type that took my typecheck from 14 seconds to 170 and how I…
- SEO for a single-page app, without pretending to have a… — AI crawlers do not run JavaScript. Neither, reliably, does anything else you care about. Here is how I get real content into static HTML without adopting…
- Why I reach for TanStack Router — Typed routes turn a whole category of navigation bug into a build error. Here is the one that shipped to production in my own app before I moved, and what…
- A zero-cost backend architecture that actually holds — Twenty-three products, no servers, no monthly bill. Here is what the constraint removes, what it forces you to design properly, and the day a free tier…
https://aoneahsan.com/blog