Case 08 — Keramičar KGV: tradesman portfolio with gallery & dual CTA
Portfolio site for a family-run tiling business in Karavukovo/Vojvodina. Curated gallery built from Instagram material, Schema.org LocalBusiness for regional SERPs, dual CTA to both owners. Astro SSG on Cloudflare Pages — €0 hosting at sub-second delivery.
The challenge
A family-run tiling business in Karavukovo wanted an online presence that wins regional Google queries ("keramičar Vojvodina", "pločice Odžaci") and routes callers directly to the right owner. Requirements: small budget, photo material only from Instagram (1080 px compressed), two direct contacts for different job types, mobile-first on rural mobile networks, near-zero maintenance.
Architecture
Astro 5 as the static site generator, deployed to Cloudflare Pages — global edge delivery for free. Component tree: Header · Hero · Usluge · Galerija · ONama · Pitanja · Kontakt · Footer · StickyCTA. Schema.org LocalBusiness in `Layout.astro` for structured local snippets. Content lives in typed data modules (`site.ts` + `gallery.ts`) — editable without JSX know-how. Gallery assets sit directly under `/public/{gallery,videos}/` for direct edge caching.
Pipeline
Astro-SSG-to-edge pipeline (zero-cost)
- 01Content (phone numbers, services, gallery items) typed and version-controlled in `src/data/{site,gallery}.ts` — maintainable without JSX knowledge.
- 02Astro builds the static `dist/` tree with Schema.org + sitemap generated automatically.
- 03`wrangler pages deploy dist --project-name=kgv` ships straight to the Cloudflare edge network — no git push needed.
- 04Cloudflare Pages serves globally cached; `_headers` sets security headers for the static delivery.
- 05Gallery photos served directly from `/public/gallery/pXX.jpg` — Cloudflare transcoding optional, original-resolution photos can be plumbed in later.
Technology stack
Outcome
Live at kgv.rs. Astro static output with a minimal initial bundle, Cloudflare edge delivers Vojvodina visitors in under 300 ms. Schema.org LocalBusiness signals Google location + service area directly, lifting regional discoverability for "keramičar Vojvodina" / "pločice Odžaci". The dual sticky CTA lowers the barrier — every visitor immediately finds the right number for their region. Content updates (prices, new gallery items) are pure `src/data/` edits, no marketing-team workflow needed.