Service Astro

Static sites that load before users notice.

Astro frontends with sub-second LCP, content collections, and zero JavaScript by default. Same stack we run our own store on.

store.wbcomdesigns.com runs on this exact stack
store.wbcomdesigns.com
astro.config.mjs js
    
      
          
          // astro.config.mjs
        
          
          import { defineConfig } from 'astro/config';
        
          
          import cloudflare from '@astrojs/cloudflare';
        
          
          import sitemap from '@astrojs/sitemap';
        
          
          import tailwind from '@tailwindcss/vite';
        
          
           
        
          
          export default defineConfig({
        
          
            site: 'https://store.wbcomdesigns.com',
        
          
            output: 'static',
        
          
            trailingSlash: 'always',
        
          
            adapter: cloudflare({ imageService: 'compile' }),
        
          
            integrations: [sitemap()],
        
          
            vite: {
        
          
              plugins: [tailwind()],
        
          
            },
        
          
          });
        
    
  

Why Astro

Page weight is back on the budget. Astro keeps it there.

The frontend got heavy. Bundles grew, hydration costs ballooned, and PageSpeed scores quietly slid into the seventies even on agency-built sites. Astro reverses that drift. Pages render to HTML at build time. JavaScript only ships for the components that actually need to be interactive. Everything else is plain HTML and CSS, served from the edge.

The result is a site that holds Core Web Vitals at scale, indexes cleanly, and survives traffic spikes without rebuilding the cache layer. Editors keep writing in whatever CMS they already use. Visitors get the fastest version of the same content.

What we build

Astro that ships fast and stays fast.

Marketing sites, docs portals, ecommerce frontends, headless CMS surfaces. We pick the right Astro pattern, the right CMS bridge, and the right deploy target. Then we ship.

01

Sub-second LCP, by default

Astro ships zero JavaScript by default. Pages render server-side at build time, hydrate only the islands that need interactivity. Google PageSpeed scores above 95 are the floor, not the goal.

Core Web Vitals pass on every page out of the box.

02

Content collections with type safety

Markdown, MDX, JSON, or remote CMS data flows through Zod validated collections. TypeScript catches every typo. Authors stop shipping broken pages because the build fails first.

Content errors caught before deploy.

03

Islands for the interactive parts

React, Vue, Svelte, Solid components load only on the pages that need them. The rest of the site stays pure HTML. No framework lock-in, no bundle size creep.

Marketing site ships under 50KB JavaScript.

04

Headless WordPress or any CMS

Astro reads from WordPress, Sanity, Contentful, Storyblok, or just Markdown in the repo. Same content collection schema, different loader. Switch CMS without rewriting pages.

CMS choice is reversible.

05

Deployed to Cloudflare Workers Assets

Same platform store.wbcomdesigns.com runs on. Edge cached worldwide, 5ms TTFB, no Vercel egress bills. CI deploys on push to main.

Hosting on Cloudflare Workers Assets stays free at most traffic levels.

06

SEO and schema baked in

Sitemap, robots, OG, JSON-LD structured data, canonical tags. Search Console verified. Schema validates against schema.org. Metadata pulled from frontmatter or CMS automatically.

Site indexes cleanly from launch day.

0.6s

LCP on store.wbcomdesigns.com, our own Astro production site

60+ products, full search, edge cached worldwide. PageSpeed verifiable.

Content collections

Type-safe content that builds before broken pages ship.

Every page is a Markdown or MDX file with frontmatter validated by Zod. Authors get autocomplete, the build fails on missing fields, and the runtime gets typed objects. No more 'oh this field was a string yesterday' bugs.

src/content/config.ts ts
    
      
          
          // src/content/config.ts
        
          
          import { defineCollection, z } from 'astro:content';
        
          
          import { glob } from 'astro/loaders';
        
          
           
        
          
          export const collections = {
        
          
            services: defineCollection({
        
          
              loader: glob({ pattern: '**/*.md', base: './src/content/services' }),
        
          
              schema: z.object({
        
          
                title: z.string(),
        
          
                h1: z.string(),
        
          
                description: z.string().min(140).max(160),
        
          
                pricing_anchor: z.string(),
        
          
                hero_variant: z.enum(['demo', 'statement', 'metric']),
        
          
                published: z.boolean().default(false),
        
          
                related_services: z.array(z.string()).optional(),
        
          
              }),
        
          
            }),
        
          
          };
        
    
  

Process

How an Astro project runs.

01

Discovery

One to two weeks. Site map, content sources, CMS integration choice, deploy target, performance budget. Output is a fixed price quote and a component plan.

No surprise scope.

02

Build

Three to six weeks. Component system shipped first, then page templates, then content migration. Staging URL within seven days. Editors can review before launch.

Working preview at every stage.

03

Cutover and monitor

One week. DNS or edge routing flip, sitemap submission, Search Console verified, Core Web Vitals monitored for thirty days. Documented handover.

Site indexes cleanly from day one.

Common questions

Frequently asked

  1. When does Astro beat Next.js?

    When the site is content-heavy and visitors do not need a full SPA. Marketing sites, docs, blogs, ecommerce frontends, agency sites, portfolios. Anywhere page weight matters more than client-side state. We build both Astro and Next.js, but most marketing surfaces land on Astro.

  2. Can Astro handle ecommerce?

    Yes. The store.wbcomdesigns.com site is Astro on Cloudflare Workers Assets serving 60+ products. Cart and checkout still happen on the WordPress backend through EDD. Astro handles the catalog, product pages, search, and content. Pattern works for headless WooCommerce too.

  3. Where do you deploy Astro?

    Default is Cloudflare Workers Assets. Same platform we run our own store on. Edge cached, 5ms TTFB worldwide, no egress fees. Vercel, Netlify, and self-hosted Node also work, but Cloudflare gives the best price-performance for static and SSR-light Astro sites.

  4. Can Astro pull from our existing WordPress?

    Yes. Astro reads WordPress through GraphQL or REST and renders the content statically at build time, with optional on-demand revalidation for editor updates. Same pattern we ship in the headless WordPress service.

  5. How do you handle search?

    Fuse.js for client-side search on smaller catalogs, Pagefind for static full-text search, or Algolia for larger sites. We pick based on dataset size and search complexity. All three deploy on the same Astro stack.

  6. What does it cost?

    Astro builds are scope-dependent for marketing sites under 20 pages. Larger sites with custom CMS integration, search, and ecommerce surfaces are scoped after discovery. Discovery call is free, fixed-price quote within 48 hours.

Ready to ship a faster site?

Tell us what you want to build.

Discovery call is free. Fixed-price quote within 48 hours. Projects are scope-dependent.