Skip to content
Sites & brand craftLive2026

Charles Cove

A 27-page independent community hub for a Florida neighborhood, self-maintaining via two scheduled AI jobs that fetch official sources and keep events, news, and amenity status…

Charles Cove interface

Problem

Charles Cove, a Davenport, FL neighborhood, had no independent online hub for residents — no single place for storm-prep info, HOA/CDD explainers, local events, school zoning, or a vetted vendor directory. Any real-estate-adjacent presence built by a licensed agent immediately triggers Florida licensee-advertising rules once a name and a sales offer appear together, which would force brokerage disclosure and turn a community resource into regulated advertising. The site had to be genuinely useful to residents first, stay factually accurate on a rolling basis (events, meeting schedules, amenity status), and never cross into named real-estate solicitation — with no ongoing labor budget to hand-maintain that currency.

What was built

A static 27-page site — no framework, no build step — covering a community hub cluster (home, events calendar with .ics feed, news, directory, HOA/CDD guide, resident resources) and a 6-page Davenport-area SEO cluster (living guide, things to do, dining, schools, healthcare, cost of living with a savings estimator). It runs a live weather widget and Polk County severe-weather alert bar off the National Weather Service API, has offline/PWA support via service worker so storm-prep content stays reachable without a network connection, and ships in English, Spanish, Brazilian Portuguese, and Haitian Creole. A lead-capture pipeline routes contact-form submissions to email and a Resend newsletter audience with a welcome-email step. The site publicly presents as "owned and operated by a Charles Cove resident" with no brokerage, licensee, or agent name anywhere on it — a deliberate compliance decision, reversed once mid-build after a brokerage name was briefly added and then pulled.

Technical approach

No CMS, no JS framework, no build pipeline: public/ is the deployed artifact and Cloudflare Pages serves it directly, with one Pages Function handling lead-form POSTs and another handling hostname redirects and analytics injection (_redirects isn't used because it can't match hostnames). Cache discipline is load-bearing: /assets/* ships with a one-year immutable cache header, so any changed asset must ship under a new filename or query-string version, and the service worker's cache-name constant has to be bumped in lockstep whenever CSS/JS versions change or stale precached assets silently persist for returning visitors. The interesting engineering is the two scheduled autonomous content jobs, both launchd-triggered headless claude -p runs on the Mac Mini: a Monday weekly-recheck job fetches CDD, city, and county sources, updates the events/news calendar, and commits+pushes only when content actually changed (silent no-op otherwise); a monthly-digest job runs a two-phase design — Claude composes the digest HTML to a temp file with a restricted Read/Glob/Grep/Write tool scope (no network/API access), then a separate shell script validates the output and makes the actual Resend broadcast API calls, so the model never touches send credentials directly. A live discovered gotcha: Resend's API rejected the Python urllib-based client with 403s, fixed by switching the send path. The lead pipeline always returns success to the visitor even when Resend isn't configured, so a misconfiguration never surfaces as a broken form. The 4-language guide/storm-prep pages are hand-synced translations (not machine-translated at request time) with hreflang tags and a language switcher; adding a language means adding a new file and wiring it into the switcher, not a runtime i18n layer.

Creative approach

Craft

The design brief was trust and utility over polish: aerial drone video on the homepage hero, WebP images (~41% lighter) and re-encoded H.264 video (62% lighter homepage hero) chosen explicitly for LCP performance on a site residents check during a storm on a spotty connection. Content is organized as two clear clusters — the community hub (events, news, HOA/CDD, directory) and a Davenport-area SEO pillar-and-spoke cluster (living guide as pillar, five topic spokes — things to do, dining, schools, healthcare, cost of living) — with an explicit hard rule against adding more SEO pages once the cluster was judged complete, resisting scope creep for its own sake; any future area content is directed into the news or community pages instead of a new standalone URL. The spoke pages carry their own compliance guardrails baked into the content itself: the schools page links to the county's official zone-lookup tool rather than hard-coding zone assignments that go stale between school years, and the cost-of-living page labels any price figure "representative" with a source note rather than presenting it as a live listing. Every SEO page ships Article and BreadcrumbList JSON-LD with the publisher fixed to "Charles Cove Residents" — never a named author — so the structured data stays consistent with the site's anonymous framing.

Reframe

The non-obvious move was solving a legal constraint with an identity decision rather than a copy tweak: Florida licensee-advertising rules only trigger when a named licensee and a real-estate offer appear together, so the fix wasn't softer real-estate language — it was removing the name entirely. The site is framed as neighbor-built rather than agent-built, which lets it carry soft "thinking of selling?" and "thinking of buying?" contact-form options without ever becoming regulated advertising, since the site never states that whoever receives those leads is a licensee. That decision was tested mid-build (a brokerage name was added, then explicitly reversed) rather than assumed correct from the start. The framing also set an explicit goal order rather than treating trust and lead-generation as equally weighted: be genuinely useful to residents first, let that use build an "authority halo" second, and only then capture relationships softly through stay-connected and event-suggestion forms — with the ordering treated as causal, not a list of equal priorities, on the reasoning that a site chasing the halo without being genuinely useful first would read as hollow to residents who'd notice.

Process and what failed

The build went through a real identity reversal: the June 2026 build briefly added brokerage branding, then pulled it once the compliance implication was reasoned through, landing on the permanent unnamed-resident framing. Separately, the site went through a full pivot from a seller-funnel framing to a community-hub framing mid-build, which left behind stale seller-funnel URLs that Cloudflare's Pages asset cache kept serving after the pivot — fixed with a 301 middleware redirect rather than deleting and hoping. Cache versioning bit twice: an OG image 404 from a www→apex redirect gap, and an HTML cache-control fix (must-revalidate) after old copy kept being served post-deploy.

Outcome

Live at charlescove.us with weekly and monthly content-maintenance jobs running unattended since June 2026, evidenced by an ongoing series of Monday "weekly sweep" commits (Davenport meeting schedule shifts, road work, community event additions) through early August 2026 with no human edits required when nothing changed. The August 3 sweep is a representative run: it landed one commit adding a Davenport Planning Commission meeting, a Reverse Raffle date, a Haines City Commission meeting, and a September budget-season schedule shift, while leaving CDD amenity status unchanged because the official source hadn't posted a new closure notice. The full 27-page site and its sitemap were submitted to Google Search Console on 2026-06-13 for indexing. The compliance framing (no named brokerage/agent) has held as the permanent, settled state since the mid-build reversal, and the weekly job has occasionally hit its session usage limit on heavy-fetch weeks — observed once, on 2026-07-20 — but the commit and push had already completed before the limit landed, so no sweep has yet failed to ship.