Our Tech Stack: One Set of Tools Across Every App and Site
Every Anvil Road marketing site runs Next.js on Vercel with DNS at Cloudflare. Every app runs React Native and Expo, targeting iOS and Android from one codebase. Here is why we picked it and what it costs.
The full stack at a glance
Marketing sites: Next.js App Router, TypeScript, Tailwind CSS v4, shadcn/ui components, deployed on Vercel.
Native apps: React Native, Expo SDK, targeting iOS and Android. EAS for builds and submissions.
Databases: Supabase for app data. Vercel KV for site-level caching.
DNS: Cloudflare for every domain. Vercel's automatic SSL provisions Let's Encrypt certificates.
Email: Google Workspace at anvilroad.com plus Cloudflare email routing for sub-brand domains.
Analytics: Google Analytics 4, Google Search Console, Microsoft Clarity, Plausible on selected properties.
Why Next.js for every marketing site
Next.js gives us static generation by default, server-side rendering when we need it, file-based routing, and image optimization that just works. Page Speed and Core Web Vitals are strong out of the box.
We have over 30 marketing sites across the portfolio. Stylece dot com, trainerce dot com, dronelog107 dot com, rubce dot com, myagentce dot com, insureceu dot com, inspectce dot com, arborce dot com, weightlossshotguide dot com, anvilroad dot com, plus a dozen log-book sites and affiliate properties. Same stack, same deployment pipeline, same quality bar.
When we add a blog article, it becomes a static page at build time. When we add a state requirements page, it pre-renders and indexes by Google in days.
Why Tailwind CSS v4
We tried CSS Modules. We tried styled-components. We tried plain CSS. Tailwind wins on three axes: speed of iteration, consistency across sites, and shipping a small final CSS bundle. Tailwind v4 specifically has the import-based config, OKLCH color support, and removed the legacy postcss pain.
Every site shares the same component conventions. Bringing a new site online takes hours instead of days because the design system is already there.
Why Vercel for hosting
Vercel ships the build output to a global edge network. First page load anywhere on earth is fast. No CDN configuration to manage.
Their git integration triggers deploys on every push to main. Five-minute build cycles for a 30-route site. Zero configuration for SSL, headers, or caching.
Cost: 20 dollars a month for the Pro plan. Covers all 30 plus projects in our team account. No per-project pricing.
Why Cloudflare for DNS
Cloudflare's DNS is free and fast. Anycast network. DNS propagation is near instant.
Per-domain configuration is one A record at the apex pointing to 76 dot 76 dot 21 dot 21 (Vercel's anycast IP), and one CNAME at www pointing to cname dot vercel-dns dot com. Set proxy mode to DNS only (gray cloud) so Vercel handles SSL.
Free SSL through Vercel's Let's Encrypt integration. Free DDoS protection through Cloudflare. Free email routing for any sub-brand that does not need full Workspace.
Why React Native and Expo for apps
One codebase for both iOS and Android. The 80 percent of features that look the same on both platforms cost the same to build once.
Expo handles the build pipeline. EAS Build runs the iOS and Android builds in the cloud. EAS Submit pushes to App Store Connect and Google Play. No Xcode machine required.
We ship one app to both stores in a single working session once the codebase is ready. Try doing that with separate Swift and Kotlin codebases.
Why Supabase for app data
Postgres database, auth, storage, and edge functions, all under one roof. Free tier covers most apps until they have real revenue. The paid tier starts at 25 dollars a month per project.
Database migrations are git-tracked. Each app's schema lives in the repo. Reproducible deploys across staging and production.
What the stack costs us per month
Vercel Pro: 20 dollars.
Cloudflare: free for DNS. Domains cost 8 to 12 dollars a year each.
Google Workspace: 7 dollars per user, currently one user.
Supabase: free tier for most apps. 25 dollars per paid project.
Apple Developer: 99 dollars a year. Google Play Console: 25 dollars one-time.
Year-one total to operate the entire portfolio of 30 plus sites and a growing app catalog: under 1,000 dollars. Most of that is Apple's annual fee plus domains.
What we will probably change
Edge runtimes for some API routes that currently run in Node. Vercel Edge Functions are faster but have a smaller standard library. We will move read-heavy endpoints first.
More aggressive use of Supabase edge functions for app-specific server logic. Currently we host that on Vercel too. Same Postgres backend, but the latency on a colocated edge function will be lower.
Beyond that, this stack is the one we recommend to any indie founder asking. Boring, proven, cheap, and fast.