Awesome Backyard
My family's tent and party rental company in New Jersey, and the place I learned programmatic SEO by doing it. One template, a list of locations, and the internal linking that decides whether any of it gets found.
Awesome Backyard Parties is an event vendor marketplace connecting homeowners planning backyard parties with local rental vendors — tents, tables, bounce houses, and more.
How it is built
Technical Architecture
Database: Supabase
Built on PostgreSQL with pgvector extension for semantic search capabilities.
-- Example: Products table with vector embeddings CREATE TABLE products ( id UUID PRIMARY KEY, name TEXT, category TEXT, location GEOGRAPHY(POINT), embedding VECTOR(1536) ); -- Enable pgvector for similarity search CREATE INDEX ON products USING ivfflat (embedding vector_cosine_ops);
Frontend: Next.js 14 (App Router)
Renders on the server so the page is there when a crawler asks and Static Site Generation (SSG) for performance.
- Dynamic route generation for 1000+ equipment pages
- Automatic metadata optimization per location
- Image optimization with Next.js Image component
- Incremental Static Regeneration (ISR) for real-time updates
Internal Linking Lattice
The system uses the Haversine formula in PostgreSQL to calculate geographic proximity and automatically generate contextual internal links.
How It Works:
- Every city page stores latitude/longitude coordinates
- Haversine formula calculates distance between cities in real-time
- System identifies the 5 nearest cities dynamically
- Related equipment pages are cross-linked automatically
- Links update on their own when a location gets added
-- Haversine formula in PostgreSQL
SELECT
city_name,
( 6371 * acos(
cos(radians($1)) *
cos(radians(latitude)) *
cos(radians(longitude) - radians($2)) +
sin(radians($1)) *
sin(radians(latitude))
)
) AS distance_km
FROM cities
ORDER BY distance_km
LIMIT 5;Architecture Flow
Data Ingestion
Product data + location coordinates stored in Supabase PostgreSQL
Route Generation
Next.js dynamically generates pages for each product × city combination
Link Calculation
Haversine formula identifies 5 nearest cities at build time
SEO Optimization
Metadata, schema markup, and internal links auto-generated per page
Continuous Updates
Pages rebuild when the data changes, with no deploy
Why it is built this way
Hiring it out means 50 writers producing city pages by hand, linking them by hand, and checking them by hand. Every new town costs the same as the last one.
Building it once means a template, a data source and linking that updates itself. A new town costs almost nothing, and that is the only real difference.
Result:
95% reduction in content production cost. 100% consistency. Infinite scalability.
A person writes a better page than my template does. The template just does not get tired on page four hundred, and that is the whole trade.
If you want to try this
This works anywhere the pages vary by something you already have a list of, usually a place or a product.