
Edge Rendering
- 53 installs
- 31 repo stars
- Updated April 12, 2026
- itallstartedwithaidea/agent-skills
Edge Rendering is an agent skill that generates and caches dynamic SEO pages at the network edge from templates and edge data stores.
About
Edge Rendering is an agent skill for solo builders who need programmatic SEO and localized landing pages without maintaining a huge static site or a slow origin render path. It describes generating HTML at the network edge—using Workers-style compute, edge KV for locality data, and D1 or similar stores for service metadata—so each URL in a city × service (or analogous) matrix gets unique copy, structured data, and meta tags on first request, then serves from cache globally. The pattern fits indie SaaS, agencies, and marketplaces that must rank many long-tail location or category URLs without a dedicated content team pre-publishing every combination. Use it when content follows repeatable templates but variants matter per city, segment, or SKU. It pairs with Ship and Operate concerns (cache semantics, data freshness) but primary value is Launch-phase discoverability and crawlable surface area at scale.
- On-demand page generation at the edge from templates plus KV city data and D1 service metadata
- Stale-while-revalidate caching for sub-50ms TTFB while keeping variant content fresh
- JSON-LD and SEO metadata injection in the render pipeline for each matrix cell
- Scales combinatorial patterns (service × city, product × location) without 18k static builds
- Eliminates origin round-trips for segment-specific dynamic HTML
Edge Rendering by the numbers
- 53 all-time installs (skills.sh)
- +3 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #707 of 1,039 Cloud & Infrastructure skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill edge-renderingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 53 |
|---|---|
| repo stars | ★ 31 |
| Security audit | 3 / 3 scanners passed |
| Last updated | April 12, 2026 |
| Repository | itallstartedwithaidea/agent-skills ↗ |
What it does
Serve thousands of city-by-service landing pages from edge templates with fast TTFB and fresh JSON-LD instead of prebuilding static HTML on origin.
Who is it for?
Best when you're shipping location- or catalog-matrix SEO (services × cities, products × regions) on Cloudflare Workers or comparable edge platforms.
Skip if: Skip if you only need a handful of static marketing pages or heavy personalized dashboards that cannot be safely cached at the edge.
When should I use this skill?
Building or scaling combinatorial SEO or localized landing pages that should render at the edge with structured data rather than on a central origin.
What you get
You get an edge render pipeline with template resolution, data injection, JSON-LD, and cache-friendly semantics so matrix pages stay fast and indexable without origin bottlenecks.
- Edge render handler and template pipeline
- Cache and revalidation strategy for matrix URLs
- Per-URL meta tags and JSON-LD output
By the numbers
- 18,000+ pages from 116 services across 155+ cities
- sub-50ms TTFB globally at the edge
Files
Edge Rendering
Part of Agent Skills™ by googleadsagent.ai™
Description
Edge Rendering generates and serves dynamic pages at the network edge, eliminating origin round-trips for content that varies by city, service, or user segment. This skill powers googleadsagent.ai™'s system of 18,000+ pages generated from a matrix of 116 services across 155+ cities, each with unique content, structured data, and SEO metadata—all rendered at the edge with sub-50ms TTFB globally.
The city × service page matrix demonstrates the power of edge rendering at scale. Rather than pre-building 18,000 static pages or routing every request to a centralized origin, Workers generate each page on demand using templates, city-specific data from KV, and service metadata from D1. Rendered pages are cached at the edge with stale-while-revalidate semantics, providing instant responses while keeping content fresh.
This pattern extends beyond SEO landing pages to any content that follows a combinatorial template: product × location pages, event × venue pages, or service × industry pages. The edge rendering pipeline handles template resolution, data injection, structured data generation (JSON-LD), meta tag construction, and cache management as a unified system.
Use When
- Generating pages from a combinatorial matrix (city × service, product × category)
- Serving SEO-critical content that must have fast TTFB globally
- Building landing page systems with thousands of unique URLs
- Replacing static site generation that takes hours to build
- Implementing stale-while-revalidate caching at the edge
- Rendering structured data (JSON-LD) dynamically per page
How It Works
graph TD
A[Request: /google-ads/chicago] --> B[Worker: Parse city + service]
B --> C{Edge Cache Hit?}
C -->|Hit| D[Return Cached HTML]
C -->|Miss| E[Fetch City Data from KV]
E --> F[Fetch Service Data from D1]
F --> G[Render Template]
G --> H[Inject JSON-LD Structured Data]
H --> I[Generate Meta Tags]
I --> J[Cache at Edge]
J --> K[Return Fresh HTML]
D --> L[Background: Revalidate if Stale]Every request resolves to a (city, service) tuple. The Worker checks the edge cache first. On miss, it fetches city and service data in parallel, renders the template, injects structured data, and caches the result. Stale entries trigger background revalidation without blocking the response.
Implementation
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
const url = new URL(request.url);
const [, service, city] = url.pathname.split("/");
const cacheKey = new Request(url.toString());
const cache = caches.default;
let response = await cache.match(cacheKey);
if (response) {
const age = parseInt(response.headers.get("age") ?? "0");
if (age > 3600) {
ctx.waitUntil(revalidate(env, cache, cacheKey, service, city));
}
return response;
}
return revalidate(env, cache, cacheKey, service, city);
},
} satisfies ExportedHandler<Env>;
async function revalidate(
env: Env, cache: Cache, cacheKey: Request, service: string, city: string
): Promise<Response> {
const [cityData, serviceData] = await Promise.all([
env.CITY_KV.get<CityData>(city, "json"),
env.DB.prepare("SELECT * FROM services WHERE slug = ?").bind(service).first<ServiceData>(),
]);
if (!cityData || !serviceData) {
return new Response("Not Found", { status: 404 });
}
const html = renderPage(cityData, serviceData);
const response = new Response(html, {
headers: {
"Content-Type": "text/html;charset=UTF-8",
"Cache-Control": "public, s-maxage=86400, stale-while-revalidate=3600",
},
});
await cache.put(cacheKey, response.clone());
return response;
}
function renderPage(city: CityData, service: ServiceData): string {
const jsonLd = {
"@context": "https://schema.org",
"@type": "LocalBusiness",
name: `${service.name} in ${city.name}`,
address: { "@type": "PostalAddress", addressLocality: city.name, addressRegion: city.state },
geo: { "@type": "GeoCoordinates", latitude: city.lat, longitude: city.lng },
url: `https://googleadsagent.ai/${service.slug}/${city.slug}`,
};
return `<!DOCTYPE html>
<html lang="en">
<head>
<title>${service.name} in ${city.name} | googleadsagent.ai</title>
<meta name="description" content="${service.description} for businesses in ${city.name}, ${city.state}." />
<script type="application/ld+json">${JSON.stringify(jsonLd)}</script>
</head>
<body>${service.template.replace("{{city}}", city.name)}</body>
</html>`;
}Best Practices
- Fetch city and service data in parallel with
Promise.all, never sequentially - Use
stale-while-revalidateto serve cached content while refreshing in the background - Generate JSON-LD structured data for every page to maximize search engine visibility
- Keep KV values under 25MB and D1 queries under 100ms for consistent edge performance
- Implement a sitemap generator that reflects the current city × service matrix
- Monitor cache hit ratios—target above 95% for production traffic
Platform Compatibility
| Platform | Support | Notes |
|---|---|---|
| Cursor | Full | Worker development + deployment |
| VS Code | Full | Wrangler integration |
| Windsurf | Full | Edge-first development |
| Claude Code | Full | Template + Worker generation |
| Cline | Full | Edge architecture support |
| aider | Partial | Template generation only |
Related Skills
- Cloudflare Workers
- CI/CD Pipelines
- Observability
- CodeQL & Semgrep
Keywords
edge-rendering city-service-pages cloudflare-workers seo json-ld stale-while-revalidate dynamic-pages structured-data
---
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License
Related skills
How it compares
Use for programmatic edge HTML and SEO matrices instead of exporting thousands of static files from a CMS on every data change.
FAQ
Who is edge-rendering for?
founders and small teams running edge-hosted sites who must publish large combinatorial SEO surfaces (cities, services, SKUs) with consistent templates and structured data.
When should I use edge-rendering?
At Launch when rolling out geo or category landing grids; during Build when wiring Workers, KV, and D1; and in Operate when tuning stale-while-revalidate and cache keys for fresh local content.
Is edge-rendering safe to install?
Review the Security Audits panel on this Prism page and treat edge data bindings and template code like production paths before enabling wide traffic.