Skip to content

Why this stack

Every choice here is deliberate. This page explains the reasoning so the team can defend it to clients or evaluate alternatives.


WordPress requires a PHP server, a database, and weekly plugin updates. 90% of WordPress hacks come from outdated plugins. A basic managed WordPress host costs Rs.500-Rs.5,000/month. Getting 90+ PageSpeed requires a developer, caching plugins, CDN setup - hours of work per site.

Next.js is excellent but overkill for a marketing site. It ships a JavaScript runtime to every user for pages that are 100% static content. More complexity, slower cold starts on Vercel serverless.

Astro outputs plain HTML files at build time. No server, no database, no JavaScript unless explicitly added. Every page is a pre-rendered HTML file served directly from Cloudflare’s CDN. 90+ PageSpeed by default, no configuration needed.


Tailwind v4 uses a CSS-native config (@theme in a .css file). No tailwind.config.js, no PostCSS config. It’s faster, fewer files, and the @theme block makes brand colors instantly visible in one place.

v3 still works but v4 is the current standard and what Astro’s official docs recommend.


  • Free tier is genuinely unlimited for static sites (no function invocation limits that matter)
  • Cloudflare’s CDN has 180+ PoPs globally vs Vercel’s ~18 Edge regions
  • Pages Functions run at the edge in all 180+ locations - not just a few regions
  • _headers and _redirects files handle headers and redirects with zero configuration
  • DNS is already on Cloudflare for most clients - adding a custom domain is two clicks, no TTL wait

Cloudflare Pages Functions over the Astro Cloudflare adapter

Section titled “Cloudflare Pages Functions over the Astro Cloudflare adapter”

The @astrojs/cloudflare adapter (v14+) automatically provisions a SESSION KV binding and generates a reserved ASSETS binding in wrangler.json. Both conflict with Cloudflare Pages reserved names and cause build failures that are difficult to debug.

Pages Functions (/functions/api/) are zero-config, read secrets from context.env, and deploy automatically alongside the static files. No adapter, no wrangler.json conflicts.


Stripe supports India but has restrictions on Indian business accounts and requires additional compliance steps. Cashfree is built for India: supports UPI, net banking, all Indian banks, INR, and has straightforward business account onboarding.

For international clients (USD): Stripe is the right choice. The Pages Functions pattern is identical - just swap the API.


Web3Forms over Formspree / EmailJS / custom backend

Section titled “Web3Forms over Formspree / EmailJS / custom backend”

Free, no backend, no server, no database. Submissions go directly to the client’s email. The only configuration needed is an access key from web3forms.com. No monthly cost, no account management for the client.