osead-demo started as a memory exercise: rebuild the feel of an old Outer Banks / Jersey Shore rental site from 2017 β the one that lived on jQuery and hope β as a modern, forkable template. The public pitch is blunt: high-end coastal inventory for weekly rentals and second-home sales, without looking like Zillow or Airbnb.
Repo: github.com/jjheffernan/osead-demo. Also listed on Demos.
What it is (and is not)
North star from docs/PLAN.md: a brokerage or property-management demo can fork the repo, replace brand + seed listings, and deploy to Cloudflare Pages without standing up a database or CMS.
Audience from docs/VISION.md:
- Primary β portfolio demo
- Secondary β white-label product template others can spin up quickly
- Brand β O-sea-D in product UI (OSEAD in repo shorthand)
Hard constraints that shaped every overnight slice:
- Stay lightweight: Markdown inventory, Svelte UI, Cloudflare Pages, light Functions
- No mandatory CMS / DB / IDX for the demo path
- Always show Fair Housing language and a demo disclaimer where listings appear
- Contact / βbookingβ CTAs must not imply a confirmed paid reservation
Non-goals (unless someone asks later): full calendar payments, live MLS sync, multi-tenant SaaS admin, native apps.
Authoring stack (locked)
The repo is strict about order so AFK agents do not invent a second frontend:
- Astro 7 β pages, layouts, content loading, SEO head, endpoints
- Svelte 5 β all site UI; SSR by default;
client:*only when interaction pays off - TypeScript β config, Zod / content schemas, lib queries, Pages Functions, tests
Starter base: astro-cloudflare-starter, with React islands swapped for Svelte early in the log (refactor(ui): convert presentational Astro UI to SSR Svelte, refactor(ui): move interactive widgets to Svelte islands).
What the commit history actually shipped
Roughly seventy-eight commits on main in a few days of AFK + HITL waves. Collapsed by theme:
Scaffold and brand
feat: scaffold OSEAD coastal rentals and sales sitedocs: lock OSEAD vision and local-first after-hours policyfeat: give OSEAD a coastal brand-first home- Starter SaaS surfaces removed so the IA is rentals / sales / markets / properties, not leftover pricing pages
Listing experience
- Property gallery Svelte island (
feat: add PropertyGallery Svelte islandβ wired into PDPs) - Listing filters scoped by page type (
feat: add ListingFilters Svelte island) - Related homes on property detail pages, breadcrumbs, housing + demo notices
- Varied coastal rental inventory until the demo felt like a large PMC, not an eight-home brochure
SEO destinations
- Collections content type (oceanfront, pets, bedroom counts, pool, β¦)
- Nested town landings under markets
- Journal posts for coastal keywords
- Sitemap URL priorities, VacationRental + RealEstateListing JSON-LD (including collection pages later)
Conversion (light)
- Inquiry intents, rental availability flow β contact
- Thank-you page, honeypot, rate-limit hardening on Functions
- Conversion UX P0 pass from a research plan (
docs+feat(s26)) - Testimonials / ratings for listing staff and business entities
- Beachfront media presence pass after a dedicated research doc
Admin and analytics (Wave FβG)
Not just a pretty public site β the later log densifies an admin shell:
- Dashboard overview, deals/market pulse, KPI strip
- Sales trend sparkline, employee leaderboard bars, market-split stats
- Admin analytics JSON endpoint + loading skeleton
- Optional Metabase embed stub and vendor-adapter notes
- Collection-page JSON-LD and a Cloudflare Pages deploy checklist (
docs(h1))
Process that made the pace possible
The repo carries the same overnight machinery as this site: after-hours loop, caveman, ponytail. Tickets live in TODO.md / docs/afk/*. Waves AβG are visible in commit subjects (chore(afk): arm Wave Eβ¦, docs(wave-f): admin analyticsβ¦). Granular commits, local merge to main, push often β PR creation deliberately HITL-gated so agents do not hang on permissions.
Architecture choices worth copying
| Choice | Why |
|---|---|
| Dual inventory (rent + buy) | Homepage is a 50/50 customer path, rentals primary in presentation |
| Filters-first browse | Markets exist for SEO depth; primary IA is inventory + filters, not βpick a coast firstβ |
| Markdown collections | Type-safe, git-native, demo-friendly |
| Dual JSON-LD | VacationRental and RealEstateListing match the two listing types |
| Coastal tokens, not MLS chrome | Photography-forward; no map-first commodity grids |
Status today
Public GitHub repo, active through mid-July 2026. Homepage field and Pages API still empty at time of writing β treat the repo as the source of truth until a Cloudflare Pages URL is published. White-label steps live in docs/TEMPLATE.md; the phased plan is docs/PLAN.md.
If you fork it: swap brand config, replace seed properties/markets, keep the Fair Housing + demo disclaimer, deploy to Pages. That was the whole point of rebuilding the 2017 idea with adult tooling.
Related Posts
Local agentic AI β Mac Mini harnesses, a 4090 worker, and one Obsidian skill vault
JJ Heffernan
•Jul 6, 2026
jheff.media-site, from boilerplate fork to a modern Rust media stack
JJ Heffernan
•Jun 19, 2026
MakerWorld BOM to McMaster: building a rule-based hardware matcher
JJ Heffernan
•Jun 8, 2026
