Deb Gillis for Islamorada
A Florida municipal campaign site for Islamorada Village Council, Seat 2. Built to Chapter 106 rules, with the seat number, the legal disclaimer, and the donation flow all driven by one config file.

The Challenge
Deb Gillis has lived in the Florida Keys for more than 30 years and served nine of them on the Islamorada Village Council, twice as Mayor and three times as Vice Mayor. Four years on the Land Planning Agency as Chair and Vice Chair. Twelve years with the Islamorada Chamber of Commerce, including President. Six on the Monroe County Tourist Development Council’s District Advisory Committee IV. Running for Seat 2 in the November 3, 2026 election, what she had was a magnet, a stack of cards, a yard sign, and her own writing about water, housing, wastewater, and the Village budget. What she did not have was anywhere online to send a neighbor who asked a real question.
A municipal campaign site is not a brochure. It is a regulated fundraising instrument. Florida Chapter 106 governs how much a person can give, what has to be collected from them when they do, where the money is allowed to land, and what has to appear at the bottom of every single page. Getting it wrong is the candidate’s problem, not the developer’s. And it all had to ship on a campaign clock, for an audience that reads it on a phone, outdoors, in the Keys sun.
The Build
Astro 5 and Tailwind v4, fully static, deployed on Netlify. Seven pages: Home, About Deb, Priorities, My Record, Donate, Get Involved, Contact. No CMS, no database, no server. Nothing to patch, nothing to breach, nothing that goes down the week before an election.
One file runs the campaign. src/config/campaign.ts holds the seat number, contact details, mailing address, election date, treasurer, the Anedot donation URL, and the legal disclaimer text. The seat was the live risk: her printed materials said Seat 2, and a Village page had been read at one point as Seat 3. So the seat number became a single variable, and the nav, the hero, the structured data, the mailing address, and the §106.143 disclaimer all read from it. If the Village Clerk had said something different the day before launch, that was one line to change, not a search and replace across seven pages and a legal notice.
Compliance is in the interface, not bolted on afterward. The “paid political advertisement” disclaimer sits in the footer of every page and again beside the giving controls on Donate. The $1,000 per person, per election limit is enforced in the form itself: no preset above it, and the “Other” field is capped at it, so a supporter cannot type an illegal amount and find out after the fact. The $50 cash cap and the “not tax deductible” line are stated where a donor actually reads them. Donor name, address, occupation, and employer are captured on Anedot, which builds those fields for §106.07 reporting. Every statute the build relies on was re-verified against the 2026 Florida Statutes before launch, and the findings are checked into the repo rather than living in somebody’s memory. That is a web build, not legal advice, and the checklist says so: the treasurer and the Supervisor of Elections have the final word.
Money never touches the site. All giving runs on Anedot, so no card data and no donor PII sit on our infrastructure, and there are no secrets in the repo to leak. Get Involved and Contact post to Netlify Forms with a honeypot, so submissions land in a dashboard instead of a custom backend nobody is going to maintain in October.
The brand came off her signs. Navy, campaign red, white, gold star, and the “Deb Gillis” wordmark, matched to the magnet, cards, and signs already out in the Village, so a voter who sees the sign and then the site knows immediately they are looking at the same campaign. Her tagline carries the whole thing: Together We Can Make a Difference.
Real Islamorada, not stock. The photography is hers and her neighbors’: a drone still of the channel credited to Ray at Coral Bay Marina, a USGS aerial of Upper Matecumbe, local cottages, actual workforce housing. One AI-generated image made it into an early build, got flagged, and was replaced with a real photograph before launch. Every image is logged with its credit in the repo. A campaign about protecting one specific place should not be illustrated with somebody else’s beach.
Details that decide whether it works on a phone. A sticky Donate bar on mobile, so giving is one tap away from anywhere. One primary call to action per page. GA4 that fires only on the real domain and skips localhost and Netlify deploy previews, so the property starts clean instead of needing filters later. Person and WebSite schema in a single graph, with a sameAs array staged for the Facebook page, Ballotpedia, and Vote411 as those go live, so Google reads them as one candidate instead of three unrelated pages. Open Graph tags with explicit image width and height, so Facebook and iMessage draw the card on the first scrape rather than showing a bare link until they refetch.
The same brand system also produced her newspaper ad, a 4.9 by 6.125 inch placement generated at 600 dpi from the same tokens as the website, so the page and the paper cannot drift apart.
It did not go live until it was allowed to. Four things were gated: the confirmed seat number, the treasurer and registered campaign depository, the exact disclaimer wording, and a published Anedot page connected to that account. Until the Anedot page existed, Donate still showed the full amount picker plus a “coming online” state and give-by-check with her real P.O. Box, so a supporter always had a way to give and nothing on the page ever looked broken.
The Result
votedebgillis.com is live for the November 3, 2026 election. A voter gets a fast static site they can read on a phone in full sun. A donor gets a flow that will not accept an illegal contribution. The campaign gets a disclaimer that follows the seat number automatically, a photo set that actually shows Islamorada, and one config file it can change without calling a developer. Deb’s record, thirty years of it, is finally in one place a neighbor can link to.
