Homesonspec

repo: ~/Projects/homesonspec · 104 commits · 38 in last 24h, 104 in last 7d · █▁ ▅

Search the build

104 commits indexed

  1. 7080744 2026-07-28 feat: live V8 'engine room' dashboard (:9798) — pistons/crank/belt driven by real DB throughput
  2. c9a3fdf 2026-07-28 admin/ingestion: guard sparkline last-value (TS strict index)
  3. 557ae65 2026-07-28 admin/ingestion: live sparkline + new-vs-refreshed + error rate + per-source health table
  4. d44d527 2026-07-28 auto-save: 2026-07-28T08:58:52 (1 files) — apps/admin/src/app/api/ingestion-stats/route.ts
  5. 3cac9a3 2026-07-28 deploy-kamatera: :80 acme block covers admin.homesonspec.com for renewals
  6. 5064112 2026-07-28 deploy-kamatera: admin block uses LE cert (admin now in cert SANs)
  7. de505ba 2026-07-28 feat: LA all-permit ingest + Census permit geocoder + searchable permit viewer
  8. b0103f2 2026-07-28 admin: live ingestion dashboard (/ingestion) — auto-refreshing throughput from Kamatera DB
  9. db9700f 2026-07-28 build-loop: source repo .env for DATABASE_URL (fixes PrismaClientInitializationError on Kamatera)
  10. 9075f7b 2026-07-28 feat: construction-pipeline layer — building-permit ingestion + Census geocoder
  11. 89a47a0 2026-07-28 build-loop: honor injected DATABASE_URL (portable to Kamatera cron)
  12. be37128 2026-07-28 deploy-kamatera: rewrite for homesonspec self-host (correct naming, explicit PORT, pgboss grants, LE-cert vhost)
  13. e118a5b 2026-07-28 build-loop: max-it — fan out 4 adapters in parallel (per-domain), 30rpm, bigger enrich batches
  14. 168b21d 2026-07-28 build-loop: West Coast first + deeper per-state cap (CAP=120)
  15. 53b1804 2026-07-28 collectors: add Ashton Woods adapter (national; JSON-LD QMI, per-home geo)
  16. da8824a 2026-07-28 build-loop: go nationwide — sweep 42 top homebuilding states (all-50 name map)
  17. 40750c0 2026-07-28 fix: david-weekley stories/garages must be integer (1.5-story home 400'd the Houston page)
  18. b319e2f 2026-07-28 TK-10: add finish-tk10.sh turnkey go-live driver
  19. 887b38f 2026-07-28 auto-save: 2026-07-28T06:58:06 (2 files) — collectors/discovery/src/index.ts scripts/build-loop.sh
  20. eacead2 2026-07-27 collectors: add David Weekley adapter (national; server-rendered homes-ready-soon)
  21. 8550e53 2026-07-27 recon: classify 8 regional builders' plain-fetch inventory feasibility
  22. 444eee6 2026-07-27 collectors: add Discovery Homes adapter (first regional; Seeno-family feed)
  23. c612735 2026-07-27 auto-save: 2026-07-27T20:54:34 (4 files) — apps/workers/package.json apps/workers/src/cli.ts pnpm-lock.yaml collectors/discovery/
  24. fbd5fc6 2026-07-27 workers: register 29 Pacific-region regional builders as onboarding targets
  25. 76c1d27 2026-07-27 auto-save: 2026-07-27T20:24:23 (1 files) — scripts/build-loop.sh
  26. 48110bc 2026-07-27 scripts: all-night autonomous build-loop (ingest x states + enrichment sweeps)
  27. 8dda332 2026-07-27 workers: public-records nearby-enrichment stage (NCES schools + OSM places)
  28. 7677fe3 2026-07-27 collectors: enforce robots.txt in LiveFetcher (POLICY compliance)
  29. 7782f9c 2026-07-27 auto-save: 2026-07-27T19:54:12 (1 files) — collectors/common/src/live-fetch.ts
  30. ce2edb5 2026-07-27 chore: v0.3.1 (session close — spechomes→homesonspec rename)
  31. 63efe78 2026-07-27 auto-save: 2026-07-27T18:53:10 (95 files) — .env.example README.md apps/admin/next.config.ts apps/admin/package.json apps/admin/src/app/api/review/route.ts
  32. ff7f593 2026-07-27 Scrub non-owned domain spechomes.com -> homesonspec.com (Layer 1)
  33. 762fa0e 2026-07-27 chore: v0.3.0 (session close) — honest positioning, admin fail-closed auth, secret history scrub, typecheck gate green
  34. 1c821fb 2026-07-27 chore(TK-10): finalize secret scrub — gitignore ROLLBACK-DNS.txt, env-based admin test cred
  35. 77fbb63 2026-07-27 auto-save: 2026-07-27T17:22:24 (1 files) — deploy-kamatera.sh
  36. 89f29a3 2026-07-27 admin: fail-closed auth + generated prod password (TK-10 security #2, partial)
  37. 2fa9a7f 2026-07-27 auto-save: 2026-07-27T16:52:13 (3 files) — apps/workers/src/pipeline.itest.ts collectors/taylor-morrison/tsconfig.json packages/source-registry/src/
  38. ef45303 2026-07-27 web: honest Lennar-anchored positioning (TK-10 blocker C)
  39. 0d87dcd 2026-07-23 chore: v0.2.1 (session close) — spechomes pm2 prod + redeploy scripts
  40. 8f6d3bf 2026-07-23 auto-save: 2026-07-23T13:51:43 (1 files) — pnpm-lock.yaml
  41. b04f2be 2026-07-23 add pnpm redeploy scripts (build + pm2 restart) for prod web/admin
  42. 844edb3 2026-07-23 pm2: boot spechomes-workers via node --env-file so DATABASE_URL loads
  43. ff4a50f 2026-07-23 chore: gitignore screenrecord/ test artifacts
  44. 4acc9f1 2026-07-23 chore: v0.2.0 (session close) — Taylor Morrison adapter + national multi-state state-fixes
  45. 6612fe5 2026-07-23 fix(dr-horton,tri-pointe): use real parsed state instead of hardcoded CA
  46. 55372bc 2026-07-23 fix(pulte): use real state code instead of hardcoded CA (enables multi-state)
  47. ac8dff8 2026-07-23 docs(collectors): update builder status — 5 live, TM egress-blocked, Meritage needs XHR trace
  48. 2570ea0 2026-07-23 fix(workers): declare taylor-morrison collector dep so pnpm links it
  49. 86433ff 2026-07-23 feat(collectors): add Taylor Morrison adapter (Sitecore fedmodel, CA)
  50. 08c6d17 2026-07-23 fix(collectors): raise DRH+Lennar default PAGE_LIMIT 8→300 for statewide coverage
  51. aa61dfd 2026-07-23 fix(live-fetch): broaden Accept header so D.R. Horton WAF stops 406ing
  52. f66f9ae 2026-07-23 Add Tri Pointe adapter (5th builder) — Next.js RSC (unescape + brace-match display_price objects), CA-scoped, WITH lat/lon; verified 3 live Corona homes + community geo/phone; registered
  53. 8456a67 2026-07-23 Fix new-builder ingest bugs caught on real data: lat/lon optional in home schema (KB/DRH feeds lack per-home geo), TOWNHOUSE→TOWNHOME enum (KB/Pulte), Pulte builder slug pulte→pultegroup + deploy-full pnpm install step
  54. 7478696 2026-07-23 Add Pulte adapter (4th builder) — JSON API (getcommunities + qmiplans), CA-scoped, WITH lat/lon so homes map; verified 8 live Ontario homes + community geo/phone; registered
  55. ca4ba1d 2026-07-22 CA builders: recon spec doc (collectors/BUILDERS.md) — turnkey extraction specs for Pulte/TriPointe/TaylorMorrison/Meritage; all 6 builders plain-curl/no-anti-bot/per-community-phone
  56. 65775ba 2026-07-22 Add KB Home adapter (3rd builder) — single-feed (var allMIRs double-decode), CA-scoped, verified 58 communities + 143 live CA homes from one fetch; registered in pipeline
  57. d27cab5 2026-07-22 Add D.R. Horton adapter (2nd builder) — Sitecore var-model blob, CA-scoped via DRHORTON_STATE, captures homes+community+salesPhone+images; verified 3 live Manteca homes; registered in pipeline
  58. 0d7bc77 2026-07-22 Listings contact: capture per-community sales-office phone from Lennar feed (verified) + Community.salesPhone column + prominent Call button on home detail; Lennar exposes no public email so listings show phone + lead form
  59. c642140 2026-07-22 Lennar adapter: LENNAR_STATE_FILTER for targeted per-state crawls + drop promo/event non-community URLs (alphabetical full-sweep is too slow to reach late-alphabet states like TX)
  60. ef19ec0 2026-07-22 Fix broken search: when a query doesn't resolve to a location (city/state/builder name), fall back to a free-text filter (city/community/builder/state) instead of silently returning the entire national catalog
  61. 8231981 2026-07-22 Design review fix: dedupe home detail Data-provenance table to one row per field (newest) — kills the ~8x per-snapshot row bloat the visual review caught
  62. 2968a92 2026-07-22 Builder-image kill-switch: BUILDER_IMAGES_ENABLED env gates all photo render sites (default ON) — one flip to compliance pending media-rights decision (DTD panel FIX-THEN-SHIP)
  63. f5b9111 2026-07-22 Contrarian fixes: StagedRecord unique (source,snapshot,home) + upsert/delete-recreate → FORCE_REEXTRACT idempotent (no raw-row bloat); img loading=lazy + hero fetchPriority
  64. bda9b29 2026-07-22 auto-save: 2026-07-22T20:46:37 (1 files) — packages/database/prisma/schema.prisma
  65. f4b686d 2026-07-22 Featured homes: spread price bands (value ~250-380k / mid ~480-650k / luxury 750k+) so tiers read distinctly
  66. ba86ab2 2026-07-22 Homepage: 3 featured homes on load — Value / Mid-range / Luxury price tiers, real listings with builder photos
  67. 4be9de7 2026-07-22 deploy-full.sh: also ship collectors + publisher + schemas src (image extractor was silently missing from prod deploys)
  68. ba895b7 2026-07-22 Pipeline: FORCE_REEXTRACT env to re-extract already-snapshotted pages (backfills new fields like images onto unchanged-source homes) + durable grant note
  69. 13997e3 2026-07-22 Builder images: capture per-home photos from Lennar feed (elevationImage/plan/community, verified 58/58 homes), images[] schema+migration, thread through publisher, render in detail hero+gallery+carousel with gradient fallback
  70. 77b81eb 2026-07-22 Home detail: branded hero header + status badge, 'more homes in this community' carousel, prominent builder-contact CTA (builders-want-to-sell), full brand reskin
  71. da530f2 2026-07-22 Amazon-style faceted search rail: State (multi-select, 50-state overflow) + Builder/firm + Min Sq Ft facets, live counts, clear-all, sticky scroll; add state facet to API + multi-state param
  72. 008a9de 2026-07-22 auto-save: 2026-07-22T18:15:55 (4 files) — apps/web/src/app/search/SearchClient.tsx apps/web/src/lib/parse-search.ts packages/search/src/index.ts deploy-full.sh
  73. ec6046b 2026-07-22 Contrarian gate fixes: guard auto-pause recovery (manual disable stays down), defense-in-depth freshness!=INACTIVE on search+map, honest design-bundle README
  74. 3cb6635 2026-07-22 Stage-3 verification engine: freshness decay + relabel, source-health auto-pause (SourceRun log + counters), cross-source dedup, verify CLI + 9 unit tests, wired into pipeline runs
  75. 832a5c0 2026-07-22 Design system iter-2: reskin /map explorer panel + /search cards & controls from tokens (brand/accent, Fraunces prices, card-interactive)
  76. 8b8126d 2026-07-22 Design system iter-1: Claude Design bundle (tokens + buttons/badges/home-card/map-legend cards w/ @dsCard markers) staged for DesignSync push
  77. 678cf48 2026-07-22 Design system iter-1: @theme token layer (brand/accent/status ramps, Fraunces+Inter, radii/shadows), reskin app shell + hero from tokens
  78. be45764 2026-07-22 auto-save: 2026-07-22T17:15:39 (2 files) — deploy-heromap.sh deploy-web.sh
  79. bbbcbc6 2026-07-22 Add robust map explorer (/map): 12k canvas markers, per-field on/off toggles (status/price/beds/builder), color-by + legend, localStorage-persisted
  80. 13c6b83 2026-07-22 Add live national map to homepage hero (loads on page load) + fix stale demo copy
  81. ab1a330 2026-07-22 auto-save: 2026-07-22T14:44:58 (1 files) — cert-homesonspec.sh
  82. 1a42593 2026-07-22 rebrand SpecHomes → HomesOnSpec; add /builders directory (all 30 builders w/ coverage, website, live home counts + links)
  83. af67cea 2026-07-22 clean-relaunch script for homesonspec.com (ship demo-filtered code + purge synthetic DB rows + rebuild + retarget nginx)
  84. f895480 2026-07-22 HARD RULE: demo/synthetic inventory NEVER surfaces live — isDemo:false filter on search + all consumer queries, isDemo 404-guards on detail pages, banner drops demo language (real builder data only)
  85. 5c85769 2026-07-22 resilience: live adapters skip per-URL fetch failures (404/blip) instead of aborting the whole sweep — a single stale Lennar /promo/ URL killed a 4.4k-page run after 15,974 homes
  86. e8366c4 2026-07-22 auto-save: 2026-07-22T13:14:23 (1 files) — ROLLBACK-DNS.txt
  87. 6e35e39 2026-07-22 fix: relative import for parse-search (the @/ alias mis-resolved against inherited baseUrl under next build — never caught because prod build was never run locally)
  88. 013b828 2026-07-22 yolo: harden go-live scripts per contrarian (self-signed origin TLS + CF Full, admin origin-only, default_server preflight, rollback capture)
  89. 030753f 2026-07-22 go-live scripts (Kamatera deploy + CF/GoDaddy cutover), gitignored (contain infra topology); pm2 env hardening
  90. 30af084 2026-07-22 go-live: Kamatera deploy script; start scripts respect PORT env; national-builder recon recorded (batches 3-4); dream-finders adapter
  91. 0e090e4 2026-07-22 auto-save: 2026-07-22T12:13:58 (1 files) — collectors/dream-finders/
  92. 4ba331c 2026-07-22 source runbooks for toll-brothers + lennar live adapters
  93. 45f9ee2 2026-07-22 lennar live adapter (172 real homes from 8 pages, Apollo state extraction), streaming runPipeline for large sweeps, honest early-preview banner
  94. f0e81ad 2026-07-22 top-30 builder registry + recon findings recorded; toll-brothers live adapter: 337 real communities ingested via sitemap-sanctioned feed, full evidence trail; positioning update (no one-stop place)
  95. 1413161 2026-07-22 polite LiveFetcher (rate-limited, never circumvents blocks) + top-10 national builder registry seed (sources PAUSED until recon + activation)
  96. 4dce3d2 2026-07-22 pm2 ecosystem config, 9 ADRs, data-rights policy, source runbook template, README
  97. 0ba8822 2026-07-22 integration tests (pipeline e2e, only-writer invariant, review-approve flow) + 7 Playwright e2e specs, all green
  98. 73a5db3 2026-07-22 generalize pipeline: hints column on StagedRecord, publisher resolves builder/community from hints, label derives from collection method, live/fixture mode from registry
  99. 7c746cc 2026-07-22 fix Leaflet SSR: keep MapView out of the shared-ui barrel, subpath dynamic import
  100. 6b477e6 2026-07-22 consumer web app (search/detail/community/builder/contact) + admin app (review/sources/validation/snapshots) + publisher package extraction; both apps serving
  101. 75e00bb 2026-07-22 worker pipeline (fetch/extract/validate/publish) + CLI + synthetic seed; fixture pipeline e2e green, idempotent re-run, dup rule scoped to zip
  102. 1e9a023 2026-07-22 collector adapter contract + meridian-homes fixture adapter with hand-authored extraction contracts (7 tests green, null-never-guessed proven)
  103. d635803 2026-07-22 shared utilities (canonicalKey/geo/queue) + zod schemas + validation engine with 10 rules, 31 unit tests green
  104. 1aad19c 2026-07-22 initial scaffold: pnpm monorepo, Prisma schema (published + raw pipeline sides), migrations applied

Authors

Agents used

  • secrets-manager1

Skills used

  • /lon5
  • /workers4
  • /builder4
  • /community4
  • /ingestion3
  • /app3
  • /search3
  • /route2
  • /baths2
  • /stories2
  • /garage2
  • /discovery2
  • /index2
  • /build-loop2
  • /price2
  • /beds2
  • /status2
  • /sterling2
  • /package2
  • /builders2
  • /phone2
  • /state2
  • /web2
  • /map2
  • /accent2
  • /crank1
  • /belt1
  • /ingestion-stats1
  • /geocode-census1
  • /garages1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

de505ba · 2026-07-28 · feat: LA all-permit ingest + Census permit geocoder + searchable permit viewer
- ingest-permits.py: LA (LADBS, ALL types commercial+residential, ~539k) + per-city cap
- geocode-permits.sh: free Census batch geocoder for building_permits (94% hit on LA)
- permit-viewer.mjs: zero-dep searchable map viewer over building_permits (:9977)
9075f7b · 2026-07-28 · feat: construction-pipeline layer — building-permit ingestion + Census geocoder
New leading-indicator layer: ingest new-residential building permits from free,
no-key city open-data APIs (Socrata) into building_permits — homes visible at the
permit stage, months before they list. SF + Seattle live (5.3k permits, geocoded,
current). Plus scripts/geocode-census.sh (free Census batch geocoder to backfill
home coords). $0, West Coast first. Next metros: LA/Sacramento/San Jose/Portland/Phoenix/Vegas.
168b21d · 2026-07-28 · build-loop: West Coast first + deeper per-state cap (CAP=120)
Reorder sweep to lead with CA/OR/WA/NV/AZ/ID/HI, then the rest by volume; raise
per-(adapter,state) community cap 40->120 so California actually fills in.
53b1804 · 2026-07-28 · collectors: add Ashton Woods adapter (national; JSON-LD QMI, per-home geo)
Next national plain-fetch target off the backlog after David Weekley (eacead2).
Ashton Woods publishes per-metro *-sitemap-qmi.xml files; each QMI page is fully
server-rendered with a clean JSON-LD SingleFamilyResidence + Product/Offer pair
(address, Floorsize, AmenityFeature beds/baths/stories/garage, geo lat/lon, sales
phone, price, availability). robots allows the metro QMI pages. One page == one
inventory_home + community; baths = full + half*0.5; coord() preserves negative
US longitudes (same bug class caught in Discovery overnight). Facts-only,
mediaRights=NONE. Env: ASHTONWOODS_METRO, ASHTONWOODS_PAGE_LIMIT.

Live-verified read-only across TX/AZ (3 homes, 0 errors, full facts incl. geo).
6/6 vitest + adapter/workers typecheck green. Registered in workers CLI.
Activation + deploy + ingest stays GATED (go-live).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
40750c0 · 2026-07-28 · fix: david-weekley stories/garages must be integer (1.5-story home 400'd the Houston page)
Round stories+garages at emission — schema wants int; num() returned a float for
a 1.5-story home, rejecting the whole Houston homes-ready-soon page.
b319e2f · 2026-07-28 · TK-10: add finish-tk10.sh turnkey go-live driver
Gates on GoDaddy->Cloudflare NS propagation (exits with the DO-THIS-ONE-THING
card if not swapped), then runs the CF-API cutover half + Kamatera deploy +
apex/admin smoke test, and prints (does not run) the old-GoDaddy-key revocation
step. Secret-free; reads creds from secrets-manager at runtime like cutover-dns.sh.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
eacead2 · 2026-07-27 · collectors: add David Weekley adapter (national; server-rendered homes-ready-soon)
Plain-fetch HTML_PARSE adapter over davidweekleyhomes.com per-metro
homes-ready-soon list pages (robots-clean, no browser). Parses per-home
QMI showcase cards: address/price/beds/baths/sqft/stories/garage/status/
plan/jobNumber. Live-verified 3 TX pages -> 284 inventory_home recs, 0 err;
fixture parse matches source exactly. 6/6 vitest + typecheck green.
Registered in workers cli. Env: DAVIDWEEKLEY_STATE, DAVIDWEEKLEY_PAGE_LIMIT.
Facts-only (mediaRights=NONE). BUILDERS.md: also re-verdicts Highland as
BOT-WALLED (CF challenge blocks Algolia search; Insights key can't reach index).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8550e53 · 2026-07-27 · recon: classify 8 regional builders' plain-fetch inventory feasibility
Evidence-backed pass over registered 'adapter pending' regionals. Findings
mirrored into SourceRegistry.notes. Highland Homes is the best next adapter
(open robots + large inventory; needs one browser-trace of its AJAX endpoint).
Most regionals render inventory client-side — plain-fetch adapters are the
exception; SPA/XHR builders share one next-step (capture the inventory XHR).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
444eee6 · 2026-07-27 · collectors: add Discovery Homes adapter (first regional; Seeno-family feed)
discoveryhomes.com JSON API (/api/communities + a single site-wide /api/homes).
Joins each home card to its community by href-slug in fetch(), emits a normalized
page so extract() stays pure. Onboards 4 Seeno-family brands from one feed
(discovery/seeno/jmc/sterling). Facts-only (images omitted), robots-enforced,
sold/unpriced skipped. Fixed a location-mislabel bug (community_id param is
ignored by the server; derive location from the home's own href+address). Live:
discovery 14 homes + sterling 3, +109 communities. Registered seeno/sterling builders.
fbd5fc6 · 2026-07-27 · workers: register 29 Pacific-region regional builders as onboarding targets
Inactive Builder + SourceRegistry rows (CRAWL, mediaRights=NONE, active=false,
health=PAUSED) for CA/AZ/WA/OR/NV/HI regionals (Trumark, New Home Co, Fulton,
Holt, Pahlisch, Castle & Cooke, etc.) with verified websites. Tracked 'coming
soon' targets; no crawl until bespoke adapters are built (Loop B backlog).
48110bc · 2026-07-27 · scripts: all-night autonomous build-loop (ingest x states + enrichment sweeps)
Deterministic overnight driver: activates the 4 working adapters + dr-horton, sweeps
CA/TX/FL/AZ/NV/CO/GA/NC/SC/TN/WA/UT (op-40 each), drains public-records enrichment,
repeats freshness sweeps (max 6, ~2.5h apart) until tmp/BUILD-LOOP-STOP. Facts-only,
robots-enforced, LOCAL DB only; public go-live stays gated. Idempotent re-sweeps.
8dda332 · 2026-07-27 · workers: public-records nearby-enrichment stage (NCES schools + OSM places)
Attaches objective nearby facts to communities from PUBLIC RECORDS instead of
builders' robots-disallowed nearby-schools/amenities pages: NCES CCD schools
(via Urban Institute API; no ratings -> Fair-Housing safe) + OpenStreetMap places
(ODbL, attributed). Keyed on Community.lat/lon, persisted to Community.amenities
with per-source provenance. Idempotent, op-N batched, $0. Verified on 40 real
Lennar/Toll communities (schools 100%, OSM places 25/35 with graceful fallback).
7677fe3 · 2026-07-27 · collectors: enforce robots.txt in LiveFetcher (POLICY compliance)
Adds a robots.txt parser + longest-match Allow/Disallow matcher (with */$ wildcards)
and a per-origin cache to LiveFetcher, throwing DisallowedError on blocked paths.
Closes the gap where POLICY.md claimed robots compliance but the fetcher only did
UA+rate-limit+stop-on-403/429. Verified: 13/13 matcher unit cases, typecheck clean,
kb-home + lennar paths regression-clean (no false blocks).
ff7f593 · 2026-07-27 · Scrub non-owned domain spechomes.com -> homesonspec.com (Layer 1)
'spechomes.com' is not ours (rebranded to homesonspec.com). Removed the last domain
refs: the outbound collector bot User-Agent (was advertising SpecHomesBot + spechomes.com
+ data@spechomes.com to every scraped site) and the nginx vhost filename in cert-homesonspec.sh.
Left 'spechomes.compare' localStorage key + all structural 'spechomes' names (dir/pm2/DB/pkg)
for the Layer-2 coordinated migration.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1c821fb · 2026-07-27 · chore(TK-10): finalize secret scrub — gitignore ROLLBACK-DNS.txt, env-based admin test cred
History rewritten via git filter-repo --replace-text (GoDaddy sso-key + admin
default removed from all 70 commits). This commit stops the rollback file from
re-entering git and removes the last hardcoded test credential.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
89f29a3 · 2026-07-27 · admin: fail-closed auth + generated prod password (TK-10 security #2, partial)
- middleware: remove hardcoded 'admin:DWSecure2024!' fallback; deny all when
  BASIC_AUTH is unset/malformed (fail closed). First-colon split on BOTH the
  configured value and the incoming credential (symmetric; ':' allowed in pw).
- deploy-kamatera: generate a random BASIC_AUTH into the gitignored .env.kamatera
  (mirrors the SPECHOMES_DB_PW pattern) instead of writing a committed default.
- .env.example: placeholder, not a real credential.

Verified: admin typecheck+build clean; gate 401(no-auth)/200(correct)/401(wrong).
NOT fully resolved (Steve/gated): the string still exists in tests/end-to-end/
admin.spec.ts AND git history — needs the same rotate+filter-repo scrub as the
GoDaddy key (TK-10 blocker A). Existing prod boxes rotate on next deploy-kamatera.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ef45303 · 2026-07-27 · web: honest Lennar-anchored positioning (TK-10 blocker C)
- hero stat leads with homes+metros; shows builder count only when >1,
  else 'more builders coming' (no '1 builder' under 'Every builder')
- builder count now counts only builders with live published inventory
- builder photos default OFF (BUILDER_IMAGES_ENABLED=1 to opt in) on BOTH
  homepage and home-detail — media-rights safe per docs/data-rights/POLICY.md
- drop over-claims from root + /builders meta descriptions
  (no 'across the United States' / 'national, regional, and local')

Verified: web build compiles clean; renders '...27 metros · more builders
coming', no builder <img>, home detail 200. Gated go-live still blocked on
TK-10 A (leaked GoDaddy key) + B (committed admin default).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6612fe5 · 2026-07-23 · fix(dr-horton,tri-pointe): use real parsed state instead of hardcoded CA
Same class of bug as the Pulte fix: both adapters PARSED the true state
(DRH parseCityStateZip → geo.state; TriPointe state_alpha_2_code) then
discarded it and wrote fv("CA" as const, …). On the national drain this
mislabeled every TX/FL/etc. home as California — corrupting search-by-state.
Now the parsed 2-letter code becomes the published value. state is not in
canonicalKey, so a re-drain UPDATES existing rows in place (no dupes).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
55372bc · 2026-07-23 · fix(pulte): use real state code instead of hardcoded CA (enables multi-state)
The community + home state value was pinned to 'CA' while raw evidence
held the true stateAbbreviation — a silent data-integrity bug that would
mislabel every non-CA home as California on a multi-state drain. Now
normalizes stateAbbreviation (or the PULTE_STATE full-name fallback) to
the real 2-letter code. Prereq for the authorized national expansion.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
86433ff · 2026-07-23 · feat(collectors): add Taylor Morrison adapter (Sitecore fedmodel, CA)
Two-level sitemap → per-community /available-homes. Scans all 13 fedmodel
blocks for the one carrying availableHomesList (first is a browser-warning
decoy), walks sections[].homes[]. Normalizes California→CA, M/D/YYYY→ISO,
JSON-LD telephone, photo.Src → images. Verified against live fixture:
3 records, 0 errors, all fields correct. Builder+source rows already seeded.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
08c6d17 · 2026-07-23 · fix(collectors): raise DRH+Lennar default PAGE_LIMIT 8→300 for statewide coverage
The 8-page default stranded >96% of inventory: there is no cursor to
advance past the sorted head, so successive runs re-hit the same 8
communities forever. DRH's CA sitemap alone has 226 communities.
300 covers a whole state per run; contentHash dedup keeps unchanged
communities cheap on recurring cron passes. Matches Pulte/TriPointe (200).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
aa61dfd · 2026-07-23 · fix(live-fetch): broaden Accept header so D.R. Horton WAF stops 406ing
Narrow 'text/html,application/json' failed DRH's strict content
negotiation (406 Not Acceptable) from the datacenter IP. Added the
standard */*;q=0.8 fallback (kept the honest SpecHomesBot UA — no
browser spoofing). */* still covers Pulte's JSON API + XML sitemaps.
Fixes DRH = 0 published; helps every adapter through the one choke-point.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

File tree

201 files tracked. Click any to browse the source at HEAD.

Other build journals

← Hollywood Wallcoverings  ·  all 4 projects  ·  Hospitalitydesignreps →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 1ms