Bygga
Type the product name from the box. Bygga shows every assembly step in 3D, with the parts, screws and tools for each one, and reads it out loud.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证What a new Bay Area home actually costs once builder incentives are priced in dollars, with county records of homes already sold. Built with Muse Spark.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗What does a new Bay Area home actually cost once the builder's incentives are counted, and what do the county's records say about the homes already sold in that community?
For production-builder communities in eight counties in and around the Bay Area (Contra Costa, Alameda, Santa Clara, San Mateo, Solano, Sonoma, Napa and San Joaquin; San Francisco and Marin showed none on the builders we read), this project collects move-in-ready homes with street addresses or lots, floor plans and incentive fine print from the builders' own sites. It turns each incentive (flat cash, closing credits, permanent rate buydowns, 2/1 buydowns, ARM promos) into a dollar value, and shows the result as a true-price range next to the county assessor's records for homes sold in earlier phases.
Built for the Meta Global AI Developer Hackathon (Indie track, "Build for Your World").
Live: https://bay-area-true-price.netlify.app: map, community pages and an agent you can ask ("cheapest 4-bed in Contra Costa after incentives, ready now?").
Spend from the build's own ledger (llm_calls, repeat calls served from cache cost $0):
| Job | Model and mode | Calls | Cost |
|---|---|---|---|
| Extract homes, plans and incentives from ~340 builder pages, one extractor for every site, plus daily re-reads of changed pages | Muse Spark 1.3, contributor | 1,141 | $5.04 |
| Re-extract pages that fail validation | Muse Spark 1.3, standard | 43 | $1.93 |
| Extraction eval on open weights | Muse Spark Open | 43 | $1.04 |
| Buyer agent with 7 read-only database tools (native tool calls), eval runs | Muse Spark Open | 588 | $1.35 |
| Same agent, eval runs | Muse Spark 1.3, contributor | 797 | $0.16 |
| Read room labels off floor-plan images (vision) | Muse Spark 1.3, contributor | 432 | $0.10 |
Contributor mode lets Meta train on the request and is about 12× cheaper. It only ever sees public builder pages and my own test questions.
Muse Spark Open (open weights, on Fireworks) ran the same 43-page extraction eval and also passes the 90% gate (report, $1.04). Against Muse Spark contributor on the same pages (report):
| Field | Muse Spark (contributor) | Muse Spark Open |
|---|---|---|
| Home recall / price / beds / sq ft | 99.3% / 100% / 100% / 100% | 99.3% / 100% / 100% / 100% |
| Baths | 99.3% | 98.5% |
| Incentive kinds: recall / precision | 95.7% / 100% | 96.7% / 97.5% |
| Plan beds | 100% | 95.1% |
| Pages failed | 0 of 43 | 1 of 43 (output ran on to the 32k-token limit) |
The buyer agent on Muse Spark Open passes all 20 of the same hand-checked questions, after the ranking fix above, with every dollar
figure traced to a tool result (report;
python -m tools.eval_agent --purpose agent_live). The site shows the tool calls behind every answer. The eval runs on a frozen copy of the 11-03 data, so the
daily refresh can't move its answers; python -m tools.derive_agent_truth --freeze rebuilds the key from
newer data with SQL written apart from the agent's tools. Since 2026-10-28 the live site's agent runs on Muse Spark
Open, on Baseten since 2026-11-04, which doesn't store model inputs or outputs by default; /api/health names the model.
It moved from Fireworks that morning, when a one-word call took 133 seconds there and new questions timed out.
Visitor questions are capped at $2/day.
Every model call in the product goes to a Meta model. The code itself was written with Claude Code.
builder sites ──fetch (robots.txt, 2 s/host)──► preprocess (embedded JSON + visible text)
──► Muse Spark extract (JSON schema) ──► validate (ranges, quotes must match the page)
──fail──► Muse Spark standard ──fail──► review queue
──► SQLite: homes, plans, incentives ──► incentive pricing (FRED rate) ──► true price range
county assessor layers (ArcGIS) ──► link parcels by street ──► each home's assessor record + community median
SQLite ──► export ──► static site (Netlify) SQLite ──► agent API (Flask on Railway, /api proxy)
Every morning python -m tools.daily_refresh (a launchd job on the build machine) fetches every builder again,
re-extracts only pages whose prices, amounts or rates changed (pages change other text daily: office hours,
tracking tokens), reprices, records each home's asking and true price in price_history, and redeploys.
Model spend is capped at $10 a day on the Meta API; a page that misses extraction keeps its last one, as does a builder whose site
fails that morning (dropped connections are retried first), and a day that loads under 70% of the previous day's
homes is not published. Each home keeps a permanent id, so links and cited answers
stay on the same home. The site shows each home's price history, and the whole series is a CSV:
https://bay-area-true-price.netlify.app/data/price_history.csv
price_history.csv before 2026-11-03 used the earlier rate method (payment savings), so compare asking prices across those dates, not true prices.Each piece when it passed its gate, with the counts of that day. Current figures are at the top.
| Piece | State |
|---|---|
Schema (migrations/001_init.sql, tools/db.py) | done |
Incentive pricing (tools/price_incentives.py) | done, 17 unit tests |
Market rate (tools/fetch_market_rate.py, FRED MORTGAGE30US) | done |
Assessor pulls (tools/pull_assessor.py): Alameda, Contra Costa, San Joaquin | done, 155k parcels + 14.5k priced Alameda sales |
Builder page fetch (tools/fetch_builder_pages.py): 19 builders | done: 209 community pages + 73 single-home pages; 3 builders skipped (JS-only / bot challenge), logged |
Page preprocessing (tools/preprocess_page.py) | done: 0.1–5 MB of HTML → 3k–31k tokens per page |
Model client (tools/llm.py): cache, cost ledger, budget guard | done |
Truth labels (tools/build_truth.py, no model): 43 pages, 136 homes, 81 plans | done |
Extraction (tools/extract_listing.py) + eval (tools/eval_extraction.py) | Muse Spark contributor passes the 90% gate on 43 pages (report) |
Validation (tools/validate_records.py) + routing (contributor → standard → review) | done; 6 of 286 pages in the review queue |
Coverage (tools/coverage_report.py) | Day 3 gate PASS: 463 unique homes, 100% with address or lot (report) |
True prices (tools/load_records.py): 462 homes loaded, 456 priced | Day 4 gate PASS (report) |
Floor plans (tools/read_floorplan.py, Muse Spark vision): 107 Lennar plans | 98.7% of printed room labels read exactly (report) |
Assumptions: 20% down, 30-year amortization, savings discounted monthly at the market rate (FRED MORTGAGE30US; jumbo loans add a spread). Each rate offer gets two figures:
A rate with no loan named isn't assumed to be a 30-year fixed (see Limits). "Up to" amounts are ranges starting at $0. Incentives the builder offers as a choice ("your way") count once, at the biggest option. The true price is a range: asking price minus the high and low values.
uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python -r requirements.txt
.venv/bin/python -m pytest -q
.venv/bin/python -m tools.db # create data/trueprice.db
.venv/bin/python -m tools.fetch_market_rate # latest 30-yr rate
.venv/bin/python -m tools.link_parcels --spot-check # assessor records per community + live assessor checks
.venv/bin/python -m tools.agent "4 bed under $1.1M true price, ready by January, Contra Costa or San Joaquin"
.venv/bin/python -m tools.eval_agent # 20-question agent eval -> eval/reports/<date>__agent.md
.venv/bin/python -m tools.geocode_communities # map pins for communities the assessor roll can't place yet
.venv/bin/python -m tools.export_site_data # web/data/*.json + data/site.db (the live agent's slim DB)
.venv/bin/python -m tools.server # site + agent API at http://localhost:8787
.venv/bin/python -m tools.build_bundle # allowlisted deploy folder for the agent API -> .tmp/bundle/
.venv/bin/python -m tools.daily_refresh --no-deploy # the daily price check, without publishing
Code: MIT. Listings, incentives and county records belong to their publishers; follow the source links.
Before the 2026-10-26 kickoff: research only, no code. That covered a county ranking from Census population and permits, a roster of builders currently selling in the four counties, and a check of which county assessors publish free parcel data. All code in this repo was written during the building period.
workflows/extract_listing.md).Parcel linking + county records (tools/link_parcels.py, no model) | Day 5 gate PASS: 27 communities show earlier homes' assessor records (report) |
Buyer agent (tools/agent.py + tools/agent_tools.py, Muse Spark native tool calls, 7 read-only tools) | Day 6 gate PASS: 20/20 hand-checked questions, every dollar figure traced to a tool result (report) |
Map + web app (web/, tools/server.py): map of 101 communities, home list, community pages, agent box | Live: https://bay-area-true-price.netlify.app (site on Netlify; agent API on Railway behind Netlify's /api proxy). Checked on desktop and a 375 px phone; live answers verified against the DB |
compare now returns the differences so the model adds nothing up.
A Codex review found sold-out communities in the no-homes list; they're gone and coming-soon ones are labelled. KB's FHA ARM is disclosed under Limits.
Same frozen data: Muse Spark 20/20, Muse Spark Open 19/20, with a different miss from the earlier run.
14 communities with homes had no map pin although their builders' pages say where they are; the geocoder now reads those records. 137 of 138 are on the map; Woodside Estates' page gives no location.
Every community now gets a pin, not just those with a priced home: 215 of 219 communities still selling or coming soon (hollow pin = floor plans only). Each shows its lowest advertised price and how that and its priced offers have moved, from community_history, backfilled to Oct 27 from saved readings (Nov 3 for the four newest counties). Older prices aren't on record. Lennar's 555,555 placeholder on 40 plans no longer shows as a price.
Rebuilt around what no single visit to a builder's site shows. Each community has its own page: advertised price over time, every priced offer with first and last seen dates, then county records of earlier homes. The list is by community and starting price, the map has one color, and every figure is at 20% down. A lower rate is now valued at the points it would cost to buy, which cut the average discount from 4.1% to 2.8%. Fixed along the way: "7/6 ARM, 2-1" was read as 7 and 6 points off the rate (19 offers).
867 of 1,005 floor plans now link to their own page on the builder's site, read from the community page with no model calls; a plan with no certain link shows none. Meritage, SummerHill, Signature and Ponderosa print no plan links, and old plan spellings the latest reading no longer lists are now removed each day. One sampled link per builder opened (16 of 16 returned 200).
Each floor plan's price now carries its date and is recorded daily (backfilled to Oct 27 for what the saved readings show), so a plan's price history builds from here. Offers tied to one home sit under that home's floor plan; the incentives section is community-wide only.
Internet Archive copies of 56 of 219 community pages, from Aug 2 to Oct 21, were read with the same extractor into community_history ($0.20), so those communities' history starts earlier than our Oct 27 first check. A price counts only if the copy prints it, a copy with no priced offers says nothing about offers, and a move between readings far apart shows as a range of dates. Lennar, Trumark and Tri Pointe are mostly not archived.
Added Seeno Homes (7 communities listed, 30 homes) and K. Hovnanian's San Joaquin communities (Manteca, Lathrop, Lodi; 15 homes) from a city-by-city coverage search, on Herman's say. 581 homes, 225 of 229 communities on the map. Seeno's site states no ready dates, so its homes show no "ready now".
The agent now says once that an assessed value on a fully assessed new home is usually the sale price. Same frozen data, no re-rolls: Muse Spark 20/20, Muse Spark Open 18/20.