Tech stack · What we ship with ↗
The tools we ship with.
An opinionated stack across WordPress, Laravel, Astro, and edge. Pinned versions for production stability. The same stack runs on our store, our roadmap, our docs, and the SaaS we operate.
Same stack across every property we operate
An opinionated stack saves time. Same patterns, same gotchas, same
deployment pipeline across every project. The defaults below are what
we reach for first. We adapt when the project requires, but we usually
do not have to.
01
WordPress 6 plus PHP 8.2 plus
WordPress 6.7 minimum, PHP 8.2 minimum for new projects. WPCS WordPress-Extra ruleset, PHPStan level 5 with WordPress stubs, PHPUnit matrix across PHP and WordPress versions. Composer for dependencies.
→ Modern WordPress development, not legacy patterns.
02
Laravel 11 plus Pest
Laravel 11 for SaaS and API work. Pest for tests, Horizon for queues, Sanctum for auth tokens, Stripe for billing. PostgreSQL or MySQL depending on customer preference. Standard Laravel stack with no clever overrides.
→ Battle-tested SaaS infrastructure.
03
Astro 6 plus Tailwind v4
Astro 6.0.4 pinned for the marketing and content surface. Tailwind v4.2.1 pinned with @theme block for design tokens. @astrojs/sitemap for sitemaps, marked for Markdown, fuse.js for client-side search.
→ Sub-second pages with no client-side JS framework overhead.
04
Cloudflare Workers for edge
Cloudflare Workers Assets for static deploy. Cloudflare Workers for API routing, lead form receivers, edge cache logic. Wrangler for deploys. Same edge for store, roadmap, docs, and services.
→ One edge platform across every property we operate.
05
Inter plus JetBrains Mono
Inter for sans serif, JetBrains Mono for monospace. Both via Google Fonts with preconnect hints. Tabular numerals on every number. Refined letter spacing per heading scale.
→ Typography is the design system, not an afterthought.
06
GitHub plus Actions
GitHub for source, GitHub Actions for CI. Test matrix runs PHP 8.1 to 8.4 and WordPress 6.7 to latest on every push. PHPStan, WPCS, lint all gated. Branch protection enforces the two-reviewer rule.
→ CI runs in under five minutes, blocks merge until green.
stack.txt text
1
// stacks we ship with, by project type
2
WordPress PHP 8.2+, WP 6.7+
3
WPCS, PHPStan level 5, PHPUnit
4
Composer, Webpack or Vite for JS
5
Tailwind v4 for new themes
6
7
Laravel PHP 8.2+, Laravel 11
8
Pest for tests, Horizon for queues
9
Sanctum for auth, Stripe for billing
10
PostgreSQL or MySQL
11
12
Astro Astro 6.0.4 (pinned)
13
Tailwind v4.2.1 (pinned)
14
@astrojs/sitemap, marked, fuse.js
15
Node 22.12+
16
17
Edge Cloudflare Workers (preferred)
18
Vercel or Netlify when customer requires
19
Wrangler for deploys
20
21
Tooling GitHub for source + CI
22
GitHub Actions for the matrix
23
MCP servers for AI workflows
What we do not use
No GraphQL gateway in front of REST when REST works. No Kubernetes when
Cloudflare Workers ship the workload. No MongoDB for relational data.
No Next.js App Router when static Astro hits the same numbers with less
complexity. The stack is opinionated about what we leave out, not just
what we include.
How we choose stack for a customer
Discovery surfaces the constraints. Existing infrastructure, customer
team comfort with the stack, hiring market for ongoing maintenance,
compliance requirements. The stack call is part of discovery, not a
pre-decided default applied universally.
What we run for ourselves
store.wbcomdesigns.com, roadmap.wbcomdesigns.com, docs.wbcomdesigns.com
all run on Astro plus Cloudflare Workers with WordPress for editorial
where applicable. wpvanguard.com runs on Laravel plus Python plus
Docker plus Stripe. The five blog properties run on standard WordPress
with our wp-blog publishing pipeline.
-
Can you work in our existing stack?
Yes. The defaults above are our preferences. We adapt to your existing stack when the project requires. Pro tip from twelve years of agency work: switching stacks rarely makes a project go faster, so we usually recommend keeping what works.
-
Why pin Astro to 6.0.4 specifically?
Astro 6.3 plus has a Vite 8 plus rolldown bug that broke our store deploy. We pinned 6.0.4 across all our Astro properties until the upstream issue resolves. Standard practice for production-critical version pinning.
-
Why Cloudflare Workers over Vercel or Netlify?
Lower cost at scale, same DX, no vendor-specific framework features in our code. We deploy to Vercel or Netlify when customer preference requires. The Astro app is portable across all three.
-
Do you use any AI in your stack?
Yes. Claude API for content drafting, MCP servers for AI workflows, internal tooling that uses AI for support triage and code review. AI is part of the stack, not a sidecar.
Want to discuss the stack for your project?
Discovery covers stack decisions.
The stack call is part of discovery. We adapt to your existing infrastructure or recommend the stack we would default to.