Most small contractors' websites are a page builder theme with a contact form: slow, hard to update and generic. A renovation company's site has a few specific jobs. It has to show finished work, especially the before and after. It has to rank in the neighborhoods the company serves, and it has to turn a visit into a quote request.
I built Sill & Gable, a concept design-build company in San Diego, to show how I'd build that site for a client on WordPress: a custom block theme the owner can edit, with no page builder. The company, its projects, reviews and photos are all invented, and the site says so.
A Theme Built From Scratch - A block theme with its own theme.json style system: the brand's colors, fonts, type sizes and spacing are the only options in the editor, so pages stay on brand. The homepage is built from patterns the owner can rearrange, edit or reuse on other pages.
Structured Content - Services, service areas, projects and reviews are their own content types, with fields edited in a sidebar panel: starting prices and timelines, neighborhoods, a project's service, location, budget and photos. Pages fill themselves in from that content, and project pages link to their service and area.
Before and After Slider - A custom block that compares each project's photos. It works with a mouse, a finger or the arrow keys, announces its position to screen readers, and shows the photos side by side without JavaScript.
Local Search Pages - Every service area gets its own page, titled "Home renovation in" that area, listing its neighborhoods, nearby projects and neighbors' reviews. Structured data tells search engines the business's hours, services and the areas it serves.
A Quote Form That Works Without JavaScript - It saves each request as a private lead in wp-admin and emails the business. Errors show as a linked summary and a message on each field, and spam is stopped by a hidden decoy field, a time check and a rate limit instead of a captcha.
Business Details in One Place - Phone, email, hours and service area are set on one settings screen, and the footer, contact blocks and structured data all read from it.
AI-Generated Photography - I generated every project photo with AI image models. Each "before" photo is an edit of its "after", asking for the same room from the same angle with dated finishes, so the two line up in the slider.
The theme handles presentation and a companion plugin holds the content types, blocks, quote form and settings, so a client could change themes without losing their content. The custom blocks are dynamic, rendered in PHP, and the editor scripts run on WordPress's own components with no build step. Text passes WCAG AA contrast on every background, and images are resized, served as WebP and lazy-loaded below the first screen.
The whole site can be rebuilt from one JSON file: a WP-CLI script loads the services, areas, projects, reviews, photos, pages, menu and settings, and updates them in place when rerun. The demo is a static copy, crawled from WordPress and hosted on Vercel, so the quote form there explains that it's a concept site instead of sending anything.
This project shows the WordPress side of what I offer clients: custom themes built on the block editor, content structured around how the business works, and sites the owner can keep up to date themselves.









WordPress
Block Theme (theme.json)
Custom Blocks
Custom Post Types
PHP
JavaScript
CSS
WP-CLI
Structured Data (JSON-LD)
AI Image Generation (fal.ai)
Vercel
I would love the opportunity to work with you on your next project! If you're interested and want to start a conversation, reach out below.
Contact