<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ahsan Mahmood</title>
    <link>https://aoneahsan.com</link>
    <description><![CDATA[The RSS feed for new posts. Copy one address into any reader and new writing arrives without an account, an algorithm or an email.]]></description>
    <language>en-us</language>
    <lastBuildDate>Tue, 03 Nov 2026 12:00:00 GMT</lastBuildDate>
    <atom:link href="https://aoneahsan.com/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title><![CDATA[What does zero-cost infrastructure cost you?]]></title>
      <link>https://aoneahsan.com/blog/what-zero-cost-infrastructure-costs-you</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/what-zero-cost-infrastructure-costs-you</guid>
      <pubDate>Fri, 04 Sep 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Nothing paid sits in the critical path, so the product costs nothing to run. What that takes off your bill, what it forbids, and where a free tier ends.]]></description>
      <category>zero-cost</category>
      <category>free-tier</category>
      <category>running-costs</category>
      <category>handover</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[How long does a web app, an MVP or a full product take?]]></title>
      <link>https://aoneahsan.com/blog/how-long-a-web-app-mvp-or-full-product-takes</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/how-long-a-web-app-mvp-or-full-product-takes</guid>
      <pubDate>Fri, 04 Sep 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Small features 1–2 weeks, an MVP 4–8, a full production app 8–16. Where those ranges come from, how each is delivered, and what makes one of them slip.]]></description>
      <category>timelines</category>
      <category>mvp</category>
      <category>estimation</category>
      <category>delivery</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Can I hire a full-stack developer remotely?]]></title>
      <link>https://aoneahsan.com/blog/hire-a-remote-full-stack-developer-across-time-zones</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/hire-a-remote-full-stack-developer-across-time-zones</guid>
      <pubDate>Fri, 04 Sep 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Yes. Pakistan Standard Time, UTC+5, asynchronous by default, with calls across US, UK, EU and Australian hours, and a first reply within one business day.]]></description>
      <category>remote work</category>
      <category>hiring</category>
      <category>time zones</category>
      <category>full-stack</category>
      <category>career</category>
    </item>
    <item>
      <title><![CDATA[How much does custom software cost, and what is in a quote?]]></title>
      <link>https://aoneahsan.com/blog/how-much-custom-software-costs-and-what-a-quote-includes</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/how-much-custom-software-costs-and-what-a-quote-includes</guid>
      <pubDate>Fri, 04 Sep 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[$800 is the floor for a small, well-defined feature. Everything above it comes from a scoping call, in writing. What that quote contains, and what it omits.]]></description>
      <category>cost</category>
      <category>quotes</category>
      <category>scoping</category>
      <category>retainers</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Can one codebase ship web, Android and a browser extension?]]></title>
      <link>https://aoneahsan.com/blog/one-codebase-web-android-and-a-browser-extension</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/one-codebase-web-android-and-a-browser-extension</guid>
      <pubDate>Fri, 04 Sep 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Yes. One React and TypeScript repository becomes a web app, a Capacitor Android app, and a Manifest V3 extension, packaged three times for three stores.]]></description>
      <category>one-codebase</category>
      <category>manifest-v3</category>
      <category>browser-extension</category>
      <category>capacitor</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[What is actually changing in web development]]></title>
      <link>https://aoneahsan.com/blog/future-of-web-development-2026</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/future-of-web-development-2026</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Not predictions. Four shifts I have already had to design around: crawlers that do not run JavaScript, the platform absorbing dependencies, types as the…]]></description>
      <category>web</category>
      <category>architecture</category>
      <category>aeo</category>
      <category>platform</category>
      <category>opinion</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Pricing and plans without a payment processor]]></title>
      <link>https://aoneahsan.com/blog/saas-pricing-stripe-custom-redirects</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/saas-pricing-stripe-custom-redirects</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>pricing</category>
      <category>entitlements</category>
      <category>saas</category>
      <category>architecture</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[How this site is built, and what I rebuilt to fix]]></title>
      <link>https://aoneahsan.com/blog/portfolio-architecture-react-19-vite-7</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/portfolio-architecture-react-19-vite-7</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>architecture</category>
      <category>react</category>
      <category>vite</category>
      <category>supabase</category>
      <category>rebuild</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[The JavaScript features I actually reach for now]]></title>
      <link>https://aoneahsan.com/blog/modern-javascript-2026-updates</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/modern-javascript-2026-updates</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Intl for anything a person reads, structuredClone, at(), Object.groupBy, and the platform APIs that replaced dependencies. Plus the number formatting that…]]></description>
      <category>javascript</category>
      <category>intl</category>
      <category>platform</category>
      <category>dependencies</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Micro-animation: the 100ms rule, and everything else is…]]></title>
      <link>https://aoneahsan.com/blog/micro-animations-framer-motion-tips</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/micro-animations-framer-motion-tips</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>motion</category>
      <category>ux</category>
      <category>css</category>
      <category>accessibility</category>
      <category>performance</category>
      <category>design</category>
    </item>
    <item>
      <title><![CDATA[From junior to senior: what actually changed]]></title>
      <link>https://aoneahsan.com/blog/junior-to-senior-developer-journey</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/junior-to-senior-developer-journey</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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.]]></description>
      <category>career</category>
      <category>growth</category>
      <category>engineering</category>
      <category>reflection</category>
      <category>career</category>
    </item>
    <item>
      <title><![CDATA[A feature-request board on Firestore, and the rules that…]]></title>
      <link>https://aoneahsan.com/blog/feature-request-system-firestore</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/feature-request-system-firestore</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>firestore</category>
      <category>security-rules</category>
      <category>product</category>
      <category>community</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Reflectify 3-3-1: a journaling app that deliberately has…]]></title>
      <link>https://aoneahsan.com/blog/reflectify-ai-journaling-project</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/reflectify-ai-journaling-project</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>case-study</category>
      <category>android</category>
      <category>privacy</category>
      <category>product</category>
      <category>journaling</category>
      <category>case-study</category>
    </item>
    <item>
      <title><![CDATA[PregnancyPal: building health software when the data is…]]></title>
      <link>https://aoneahsan.com/blog/project-pregnancypal-health-tech</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/project-pregnancypal-health-tech</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Week-by-week tracking, vitals, fertility and a community — on a free tier, with no cloud functions. What health data changes about every architectural…]]></description>
      <category>case-study</category>
      <category>health</category>
      <category>privacy</category>
      <category>firebase</category>
      <category>capacitor</category>
      <category>case-study</category>
    </item>
    <item>
      <title><![CDATA[FilesHub: building the storage backend instead of paying…]]></title>
      <link>https://aoneahsan.com/blog/fileshub-storage-utility-case-study</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/fileshub-storage-utility-case-study</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[A self-hosted Laravel platform that replaced Firebase Storage and every transactional-email vendor across an entire portfolio. What it took, and the…]]></description>
      <category>case-study</category>
      <category>laravel</category>
      <category>storage</category>
      <category>api</category>
      <category>infrastructure</category>
      <category>case-study</category>
    </item>
    <item>
      <title><![CDATA[Trizlink: one React codebase as a web app and an Android app]]></title>
      <link>https://aoneahsan.com/blog/case-study-trizlink</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/case-study-trizlink</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Two surfaces from one repository, with a third planned. What actually got shared, what could not be, and the free-tier limits that shaped the data model.]]></description>
      <category>case-study</category>
      <category>react</category>
      <category>capacitor</category>
      <category>wxt</category>
      <category>firebase</category>
      <category>case-study</category>
    </item>
    <item>
      <title><![CDATA[Refactoring a monolith you cannot stop shipping]]></title>
      <link>https://aoneahsan.com/blog/clean-code-refactoring-monoliths</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/clean-code-refactoring-monoliths</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>refactoring</category>
      <category>architecture</category>
      <category>legacy</category>
      <category>maintenance</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Firebase Auth and social sign-in: the parts that are…]]></title>
      <link>https://aoneahsan.com/blog/firebase-auth-social-logins-security</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/firebase-auth-social-logins-security</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>firebase</category>
      <category>auth</category>
      <category>security</category>
      <category>oauth</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Accessible design systems: what React Aria gives you…]]></title>
      <link>https://aoneahsan.com/blog/accessible-design-systems-radix-ui</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/accessible-design-systems-radix-ui</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>accessibility</category>
      <category>react-aria</category>
      <category>design-system</category>
      <category>tailwind</category>
      <category>design</category>
    </item>
    <item>
      <title><![CDATA[Admin panels: four failures that ship looking complete]]></title>
      <link>https://aoneahsan.com/blog/designing-perfect-admin-dashboards</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/designing-perfect-admin-dashboards</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>admin</category>
      <category>ux</category>
      <category>security</category>
      <category>design</category>
      <category>design</category>
    </item>
    <item>
      <title><![CDATA[One codebase, web and Android: what Capacitor actually costs]]></title>
      <link>https://aoneahsan.com/blog/capacitor-8-web-to-native</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/capacitor-8-web-to-native</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>capacitor</category>
      <category>android</category>
      <category>mobile</category>
      <category>react</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[TypeScript patterns I actually use, and one that cost me…]]></title>
      <link>https://aoneahsan.com/blog/advanced-typescript-patterns-2026</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/advanced-typescript-patterns-2026</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>typescript</category>
      <category>performance</category>
      <category>types</category>
      <category>tooling</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[SEO for a single-page app, without pretending to have a…]]></title>
      <link>https://aoneahsan.com/blog/seo-pwa-without-ssr-hacks</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/seo-pwa-without-ssr-hacks</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>seo</category>
      <category>aeo</category>
      <category>prerender</category>
      <category>spa</category>
      <category>vite</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[Why I reach for TanStack Router]]></title>
      <link>https://aoneahsan.com/blog/why-tanstack-router-is-the-best</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/why-tanstack-router-is-the-best</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>react</category>
      <category>routing</category>
      <category>typescript</category>
      <category>tanstack</category>
      <category>engineering</category>
    </item>
    <item>
      <title><![CDATA[A zero-cost backend architecture that actually holds]]></title>
      <link>https://aoneahsan.com/blog/zero-cost-backend-architecture</link>
      <guid isPermaLink="true">https://aoneahsan.com/blog/zero-cost-backend-architecture</guid>
      <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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…]]></description>
      <category>architecture</category>
      <category>firebase</category>
      <category>supabase</category>
      <category>free-tier</category>
      <category>cloudflare</category>
      <category>engineering</category>
    </item>
  </channel>
</rss>
