Commercialrealestate
Search the build
-
133d0162026-07-28 auto-save: 2026-07-28T07:28:16 (1 files) — data/alerts-state.json -
c6d781a2026-07-28 auto-save: 2026-07-28T06:58:06 (1 files) — data/residential-report.html -
824f2632026-07-28 auto-save: 2026-07-28T06:27:56 (5 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/sfr-redfin.json -
05120b12026-07-28 auto-save: 2026-07-28T05:57:47 (3 files) — data/crcp-drift-state.json data/latest.json data/listings.json -
4de4dbc2026-07-28 auto-save: 2026-07-28T04:27:17 (1 files) — data/brokers-snapshot.json -
e2a4ff32026-07-28 auto-save: 2026-07-28T00:56:07 (1 files) — data/residential-report.html -
b1762872026-07-28 auto-save: 2026-07-28T00:25:56 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
c091e8e2026-07-27 auto-save: 2026-07-27T23:55:46 (2 files) — data/crcp-drift-state.json data/latest.json -
d1fae032026-07-27 auto-save: 2026-07-27T18:53:10 (1 files) — data/residential-report.html -
0fb18442026-07-27 auto-save: 2026-07-27T18:22:43 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
1410e3f2026-07-27 auto-save: 2026-07-27T17:52:34 (2 files) — data/crcp-drift-state.json data/latest.json -
2845c452026-07-27 afternoon CRE update 2026-07-27 -
e3609472026-07-27 auto-save: 2026-07-27T12:50:40 (1 files) — data/residential-report.html -
cb49ede2026-07-27 auto-save: 2026-07-27T12:20:30 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
d9221ee2026-07-27 auto-save: 2026-07-27T11:50:21 (2 files) — data/crcp-drift-state.json data/latest.json -
c4e95ba2026-07-27 auto-save: 2026-07-27T07:18:47 (1 files) — data/alerts-state.json -
16a192f2026-07-27 weekly unwarrantable-condos report 2026-07-27 -
d9400f12026-07-27 auto-save: 2026-07-27T06:18:28 (5 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/sfr-redfin.json -
bf298042026-07-27 auto-save: 2026-07-27T05:48:20 (3 files) — data/crcp-drift-state.json data/latest.json data/listings.json -
c7939072026-07-27 weekly Crexi refresh 2026-07-27 -
1b76b6d2026-07-27 auto-save: 2026-07-27T04:17:53 (1 files) — data/brokers-snapshot.json -
11e408e2026-07-27 auto-save: 2026-07-27T00:46:55 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
11abb762026-07-27 auto-save: 2026-07-27T00:16:47 (1 files) — data/condos-redfin.json -
61969cf2026-07-26 auto-save: 2026-07-26T23:46:40 (2 files) — data/crcp-drift-state.json data/latest.json -
2d4c80b2026-07-26 auto-save: 2026-07-26T18:45:13 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
3a4b4002026-07-26 auto-save: 2026-07-26T18:15:03 (1 files) — data/condos-redfin.json -
8a68ec42026-07-26 auto-save: 2026-07-26T17:44:55 (2 files) — data/crcp-drift-state.json data/latest.json -
c5474202026-07-26 afternoon CRE update 2026-07-26 -
6bd7f502026-07-26 auto-save: 2026-07-26T12:43:27 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
110ac642026-07-26 auto-save: 2026-07-26T12:13:19 (3 files) — data/condos-redfin.json data/crcp-drift-state.json data/latest.json -
b74cbab2026-07-26 auto-save: 2026-07-26T07:11:20 (1 files) — data/alerts-state.json -
12bb9712026-07-26 auto-save: 2026-07-26T06:41:11 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
03edf252026-07-26 auto-save: 2026-07-26T06:11:02 (5 files) — data/condos-redfin.json data/crcp-drift-state.json data/latest.json data/qwen-cache.json data/ranked.json -
59eaec22026-07-26 auto-save: 2026-07-26T05:40:54 (1 files) — data/listings.json -
6fe0d5f2026-07-26 auto-save: 2026-07-26T04:40:35 (1 files) — data/brokers-snapshot.json -
e17a2002026-07-26 auto-save: 2026-07-26T00:39:31 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
56eda3b2026-07-26 auto-save: 2026-07-26T00:09:22 (3 files) — data/condos-redfin.json data/crcp-drift-state.json data/latest.json -
e78904b2026-07-25 auto-save: 2026-07-25T18:37:55 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
47170fd2026-07-25 auto-save: 2026-07-25T18:07:45 (2 files) — data/crcp-drift-state.json data/latest.json -
4440d472026-07-25 afternoon CRE update 2026-07-25 -
4fabfad2026-07-25 auto-save: 2026-07-25T12:36:15 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
27e17b22026-07-25 auto-save: 2026-07-25T12:06:06 (2 files) — data/crcp-drift-state.json data/latest.json -
379ab202026-07-25 CRCP: harden serve.js — atomic brokers-snapshot write (H3) + clip /api/comps inputs before child-process env (H2) -
aeb00282026-07-25 CRCP: graceful-degrade /api/brokers/linkedin + /api/segments to 200+unavailable on DB error (match /api/leads/top; clean prod console) -
44f86d62026-07-25 CRCP: scrub persona flag_reason twin in broker-history-pilot.json (agent-caught residual) -
1c035bb2026-07-25 CRCP: remove verified Frank residuals — served flag_reason string + linkedin localStorage key (contrarian-caught) -
14f019d2026-07-25 CRCP: drop Frank signature from agentDraft signoff (parity with live) -
1ba902c2026-07-25 auto-save: 2026-07-25T07:04:29 (1 files) — data/alerts-state.json -
5d4b7cf2026-07-25 auto-save: 2026-07-25T06:34:19 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
f96d44b2026-07-25 auto-save: 2026-07-25T06:04:08 (4 files) — data/crcp-drift-state.json data/latest.json data/qwen-cache.json data/ranked.json -
e8eef162026-07-25 auto-save: 2026-07-25T05:33:58 (1 files) — data/listings.json -
0673a1d2026-07-25 auto-save: 2026-07-25T04:33:37 (1 files) — data/brokers-snapshot.json -
0a1a3b82026-07-25 auto-save: 2026-07-25T00:32:03 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
a6b4cb32026-07-25 auto-save: 2026-07-25T00:01:48 (2 files) — data/crcp-drift-state.json data/latest.json -
aa4300a2026-07-24 auto-save: 2026-07-24T18:59:11 (1 files) — data/residential-report.html -
8df63a02026-07-24 auto-save: 2026-07-24T18:29:03 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
c617b9e2026-07-24 auto-save: 2026-07-24T17:58:56 (2 files) — data/crcp-drift-state.json data/latest.json -
9989efc2026-07-24 auto-save: 2026-07-24T13:58:01 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
817e6962026-07-24 auto-save: 2026-07-24T13:27:55 (1 files) — data/condos-redfin.json -
692b5732026-07-24 afternoon CRE update 2026-07-24 -
12891e32026-07-24 auto-save: 2026-07-24T12:57:48 (1 files) — data/residential-report.html -
faa77152026-07-24 auto-save: 2026-07-24T11:57:36 (1 files) — data/latest.json -
0a55b7c2026-07-24 serve.js: handle EADDRINUSE gracefully to stop launchd crash-restart storm -
5cfe1b72026-07-24 auto-save: 2026-07-24T07:26:03 (1 files) — data/alerts-state.json -
848c8332026-07-24 auto-save: 2026-07-24T06:55:55 (1 files) — data/residential-report.html -
35f50c42026-07-24 auto-save: 2026-07-24T06:25:47 (5 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/sfr-redfin.json -
9e485a82026-07-24 auto-save: 2026-07-24T05:55:40 (3 files) — data/crcp-drift-state.json data/latest.json data/listings.json -
562c5502026-07-24 auto-save: 2026-07-24T04:25:19 (1 files) — data/brokers-snapshot.json -
549bd002026-07-24 auto-save: 2026-07-24T00:54:30 (1 files) — data/residential-report.html -
b719f7f2026-07-24 auto-save: 2026-07-24T00:24:22 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
89a78b82026-07-23 auto-save: 2026-07-23T23:54:14 (2 files) — data/crcp-drift-state.json data/latest.json -
72b1f152026-07-23 auto-save: 2026-07-23T18:53:06 (1 files) — data/residential-report.html -
3ca99412026-07-23 auto-save: 2026-07-23T18:22:59 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
cc325132026-07-23 auto-save: 2026-07-23T17:52:50 (2 files) — data/crcp-drift-state.json data/latest.json -
9ce5a122026-07-23 Remove Frank + Arcstone from CRCP entirely -
6ad26c32026-07-23 auto-save: 2026-07-23T14:52:02 (1 files) — scripts/serve.js -
2dd43832026-07-23 afternoon CRE update 2026-07-23 -
f5983b72026-07-23 auto-save: 2026-07-23T12:51:13 (1 files) — data/residential-report.html -
79a87bf2026-07-23 auto-save: 2026-07-23T12:20:57 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
1e1b5d42026-07-23 auto-save: 2026-07-23T11:50:46 (2 files) — data/crcp-drift-state.json data/latest.json -
ef98b502026-07-23 auto-save: 2026-07-23T07:19:17 (1 files) — data/alerts-state.json -
47d04022026-07-23 auto-save: 2026-07-23T06:49:07 (1 files) — data/residential-report.html -
8989a9a2026-07-23 auto-save: 2026-07-23T06:19:01 (5 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/sfr-redfin.json -
626986c2026-07-23 auto-save: 2026-07-23T05:48:54 (3 files) — data/crcp-drift-state.json data/latest.json data/listings.json -
ad5f7862026-07-23 auto-save: 2026-07-23T04:18:33 (1 files) — data/brokers-snapshot.json -
00fe3922026-07-23 auto-save: 2026-07-23T00:47:42 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
1a365cb2026-07-23 auto-save: 2026-07-23T00:17:34 (1 files) — data/condos-redfin.json -
1ff33272026-07-22 auto-save: 2026-07-22T23:47:26 (2 files) — data/crcp-drift-state.json data/latest.json -
4fc16482026-07-22 auto-save: 2026-07-22T18:46:04 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
ef7ac332026-07-22 auto-save: 2026-07-22T18:15:55 (1 files) — data/condos-redfin.json -
94e297a2026-07-22 auto-save: 2026-07-22T17:45:47 (2 files) — data/crcp-drift-state.json data/latest.json -
b26c96e2026-07-22 afternoon CRE update 2026-07-22 -
d6344aa2026-07-22 auto-save: 2026-07-22T12:44:11 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
ff421942026-07-22 auto-save: 2026-07-22T12:13:58 (1 files) — data/condos-redfin.json -
a48bdc92026-07-22 auto-save: 2026-07-22T11:43:42 (2 files) — data/crcp-drift-state.json data/latest.json -
96016d62026-07-22 auto-save: 2026-07-22T07:12:00 (1 files) — data/alerts-state.json -
bd69f712026-07-22 auto-save: 2026-07-22T06:41:50 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
70f8f732026-07-22 auto-save: 2026-07-22T06:11:42 (5 files) — data/condos-redfin.json data/crcp-drift-state.json data/latest.json data/qwen-cache.json data/ranked.json -
c07f8812026-07-22 auto-save: 2026-07-22T05:41:36 (1 files) — data/listings.json -
020a3262026-07-22 auto-save: 2026-07-22T04:41:22 (1 files) — data/brokers-snapshot.json -
5c012e52026-07-22 auto-save: 2026-07-22T00:40:31 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
1efb63e2026-07-22 auto-save: 2026-07-22T00:10:24 (3 files) — data/condos-redfin.json data/crcp-drift-state.json data/latest.json -
40f7d2c2026-07-21 auto-save: 2026-07-21T18:39:12 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
09719d72026-07-21 auto-save: 2026-07-21T18:09:04 (3 files) — data/condos-redfin.json data/crcp-drift-state.json data/latest.json -
5031cac2026-07-21 afternoon CRE update 2026-07-21 -
b79b5cc2026-07-21 auto-save: 2026-07-21T12:37:29 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
5e326932026-07-21 auto-save: 2026-07-21T12:07:22 (2 files) — data/crcp-drift-state.json data/latest.json -
e2798c82026-07-21 auto-save: 2026-07-21T07:06:14 (1 files) — data/alerts-state.json -
9c375cc2026-07-21 auto-save: 2026-07-21T06:36:08 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
427fad12026-07-21 auto-save: 2026-07-21T06:06:01 (4 files) — data/crcp-drift-state.json data/latest.json data/qwen-cache.json data/ranked.json -
e29def02026-07-21 auto-save: 2026-07-21T05:35:54 (1 files) — data/listings.json -
adc59c02026-07-21 auto-save: 2026-07-21T04:35:41 (1 files) — data/brokers-snapshot.json -
22589dc2026-07-21 auto-save: 2026-07-21T00:34:53 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
610e16d2026-07-21 auto-save: 2026-07-21T00:04:47 (2 files) — data/crcp-drift-state.json data/latest.json -
139682b2026-07-20 auto-save: 2026-07-20T18:33:36 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
cabc6de2026-07-20 auto-save: 2026-07-20T18:03:31 (2 files) — data/crcp-drift-state.json data/latest.json -
3c101f72026-07-20 afternoon CRE update 2026-07-20 -
426f7212026-07-20 auto-save: 2026-07-20T13:02:15 (1 files) — data/.pre-afternoon-ids.json -
5afbd032026-07-20 auto-save: 2026-07-20T12:32:08 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
6ab6fe82026-07-20 auto-save: 2026-07-20T12:02:00 (2 files) — data/crcp-drift-state.json data/latest.json -
f6799872026-07-20 weekly unwarrantable-condos report 2026-07-20 -
7fa0b2d2026-07-20 auto-save: 2026-07-20T06:30:25 (6 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/residential-report.html -
fa009342026-07-20 auto-save: 2026-07-20T06:00:16 (3 files) — data/crcp-drift-state.json data/latest.json data/listings.json -
e5bde072026-07-20 weekly Crexi refresh 2026-07-20 -
a8e1e5d2026-07-20 auto-save: 2026-07-20T04:29:52 (1 files) — data/brokers-snapshot.json -
6d0e97d2026-07-20 auto-save: 2026-07-20T00:59:05 (1 files) — data/residential-report.html -
42378f42026-07-20 auto-save: 2026-07-20T00:28:58 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
b8be3a92026-07-19 auto-save: 2026-07-19T23:58:51 (2 files) — data/crcp-drift-state.json data/latest.json -
6f5842c2026-07-19 auto-save: 2026-07-19T18:57:38 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
1c26b572026-07-19 auto-save: 2026-07-19T18:27:32 (1 files) — data/condos-redfin.json -
9e133472026-07-19 auto-save: 2026-07-19T17:57:26 (2 files) — data/crcp-drift-state.json data/latest.json -
a011bd52026-07-19 afternoon CRE update 2026-07-19 -
deb74cc2026-07-19 auto-save: 2026-07-19T12:56:25 (1 files) — data/residential-report.html -
8e306892026-07-19 auto-save: 2026-07-19T12:26:19 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
f8f067d2026-07-19 auto-save: 2026-07-19T11:56:13 (2 files) — data/crcp-drift-state.json data/latest.json -
8689c732026-07-19 auto-save: 2026-07-19T07:25:16 (1 files) — data/alerts-state.json -
9fcbcf22026-07-19 auto-save: 2026-07-19T06:55:10 (1 files) — data/residential-report.html -
a1671742026-07-19 auto-save: 2026-07-19T06:25:04 (5 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/sfr-redfin.json -
c7c4d5f2026-07-19 auto-save: 2026-07-19T05:54:59 (3 files) — data/crcp-drift-state.json data/latest.json data/listings.json -
8a2a3cb2026-07-19 auto-save: 2026-07-19T04:24:38 (1 files) — data/brokers-snapshot.json -
19f69e72026-07-19 auto-save: 2026-07-19T00:53:53 (1 files) — data/residential-report.html -
29b45562026-07-19 auto-save: 2026-07-19T00:23:46 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
1e6f2782026-07-18 auto-save: 2026-07-18T23:53:39 (2 files) — data/crcp-drift-state.json data/latest.json -
08841642026-07-18 auto-save: 2026-07-18T18:52:32 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
3741ee32026-07-18 auto-save: 2026-07-18T18:22:25 (1 files) — data/condos-redfin.json -
65779272026-07-18 auto-save: 2026-07-18T17:52:20 (2 files) — data/crcp-drift-state.json data/latest.json -
619a1c42026-07-18 afternoon CRE update 2026-07-18 -
aa050132026-07-18 auto-save: 2026-07-18T12:51:21 (1 files) — data/residential-report.html -
999a61b2026-07-18 auto-save: 2026-07-18T12:21:15 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
8af74292026-07-18 auto-save: 2026-07-18T11:51:10 (2 files) — data/crcp-drift-state.json data/latest.json -
6dd4f8c2026-07-18 auto-save: 2026-07-18T07:20:11 (1 files) — data/alerts-state.json -
b1a66122026-07-18 auto-save: 2026-07-18T06:50:05 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
08fa5ae2026-07-18 auto-save: 2026-07-18T06:19:57 (3 files) — data/condos-redfin.json data/qwen-cache.json data/ranked.json -
95c2d5a2026-07-18 auto-save: 2026-07-18T05:49:50 (3 files) — data/crcp-drift-state.json data/latest.json data/listings.json -
037a9982026-07-18 auto-save: 2026-07-18T04:19:30 (1 files) — data/brokers-snapshot.json -
253c0ef2026-07-18 auto-save: 2026-07-18T00:48:43 (1 files) — data/residential-report.html -
580d9112026-07-18 auto-save: 2026-07-18T00:18:37 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
406b25d2026-07-17 auto-save: 2026-07-17T23:48:30 (2 files) — data/crcp-drift-state.json data/latest.json -
69651932026-07-17 auto-save: 2026-07-17T19:47:29 (6 files) — data/condos-redfin.json data/crcp-drift-state.json data/latest.json data/map-points.json data/residential-report.html -
99ea9db2026-07-17 afternoon CRE update 2026-07-17 -
f8421a42026-07-17 chore: lint (fix shadowed var), v0.11.0 (session close) -
d438cb42026-07-17 CRCP License Directory: agents/firms/title/escrow from cre license DB (4615 agents, 707 firms) as contactable cards w/ firm-IG inline, sort+density; export script; +title/escrow IG handles -
50009ed2026-07-17 CRCP firm-IG: render inline & LINK-FREE under agent-contact cards (honor no-outside-links); unify leads strip to same global renderer -
3db44ca2026-07-17 chore: refactor (drop dead toggleExpand), lint pass, v0.10.0 (session close) -
4211af82026-07-17 CRCP firm-IG: cache thumbnails locally (fix IG hotlink block), +7 firms (CBRE/JLL/Cushman/Newmark/Elliman/BHHS-CA), short-alias matching -
79bc0cf2026-07-17 Consolidate everything into ONE tabbed Agent window (links OK again) -
4d0bb9f2026-07-17 Agent CRM: all-inline (no outside links) + inline Notes field -
ed5770b2026-07-17 Harden agent-contact CRM (contrarian gate): serialize writes, stable letter ids, XSS guards -
5a195952026-07-17 serve.js: load project .env via native process.loadEnvFile (enables GEORGE_AUTH/GMAIL_BASIC_AUTH_B64 + fixes CENSUS_API_KEY loading) -
c164c3f2026-07-17 Add gated Send-via-George button — creates a Gmail DRAFT (never sends) -
f503eb12026-07-17 Agent-contact CRM now on EVERY listing + card view (one modal everywhere) -
123b0e32026-07-17 CRCP list view: sortable + fully hrefd rows, inline row expansion, and an Agent·contact column with save-date + saved-letter CRM -
cb778e72026-07-16 graceful-degrade /api/leads/frank + /api/broker (502 -> 200 when cre DB absent) -
b4b3c102026-07-16 add CRCP origin-vs-live drift canary (DTD verdict D) -
a8e43862026-07-16 add on-demand CRCP front-end deploy script (mac3->Kamatera) -
0f635d92026-07-16 iPad fix sweep: crcp.html nav breakpoint 760->1024, licensed-agents badge width cap -
b59aea12026-07-16 afternoon CRE update 2026-07-16 -
1cdd91f2026-07-16 iPad fix: header nav becomes swipeable strip + grid minmax, no horizontal overflow on tablet -
30822fa2026-07-16 auto-save: 2026-07-16T07:11:48 (1 files) — data/alerts-state.json -
8f11f322026-07-16 auto-save: 2026-07-16T06:41:42 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
d1ce8362026-07-16 auto-save: 2026-07-16T06:11:35 (3 files) — data/condos-redfin.json data/qwen-cache.json data/ranked.json -
e2e26092026-07-16 auto-save: 2026-07-16T05:41:28 (1 files) — data/listings.json -
e4a922a2026-07-16 auto-save: 2026-07-16T04:41:14 (1 files) — data/brokers-snapshot.json -
3aa29ff2026-07-16 auto-save: 2026-07-16T00:40:23 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
2679e352026-07-16 auto-save: 2026-07-16T00:10:17 (1 files) — data/condos-redfin.json -
d8dc6852026-07-15 auto-save: 2026-07-15T18:39:06 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
c79df342026-07-15 afternoon CRE update 2026-07-15 -
259e52d2026-07-15 auto-save: 2026-07-15T12:36:34 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
0c5c19e2026-07-15 auto-save: 2026-07-15T07:05:05 (1 files) — data/alerts-state.json -
8b87f812026-07-15 auto-save: 2026-07-15T06:34:59 (6 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/residential-report.html -
acc24642026-07-15 auto-save: 2026-07-15T05:34:45 (1 files) — data/listings.json -
5a9fe712026-07-15 auto-save: 2026-07-15T04:34:32 (1 files) — data/brokers-snapshot.json -
b7d27072026-07-15 auto-save: 2026-07-15T00:33:42 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
0ca32442026-07-14 auto-save: 2026-07-14T18:32:24 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
d3c8b8e2026-07-14 afternoon CRE update 2026-07-14 -
136ce9d2026-07-14 auto-save: 2026-07-14T13:01:14 (1 files) — data/.pre-afternoon-ids.json -
8fcd14e2026-07-14 auto-save: 2026-07-14T12:31:06 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
5bdd0af2026-07-14 auto-save: 2026-07-14T07:29:44 (1 files) — data/alerts-state.json -
8ef33582026-07-14 auto-save: 2026-07-14T06:59:38 (1 files) — data/residential-report.html -
a374bb92026-07-14 auto-save: 2026-07-14T06:29:31 (5 files) — data/condos-redfin.json data/map-points.json data/qwen-cache.json data/ranked.json data/sfr-redfin.json -
e4a82c52026-07-14 auto-save: 2026-07-14T05:59:19 (1 files) — data/listings.json -
384bd602026-07-14 auto-save: 2026-07-14T04:28:59 (1 files) — data/brokers-snapshot.json -
d5296c22026-07-14 auto-save: 2026-07-14T00:58:14 (1 files) — data/residential-report.html -
c0b30622026-07-14 auto-save: 2026-07-14T00:28:06 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
92c39682026-07-13 auto-save: 2026-07-13T18:56:46 (1 files) — data/residential-report.html -
e87e3da2026-07-13 auto-save: 2026-07-13T18:26:38 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
34ace812026-07-13 afternoon CRE update 2026-07-13 -
eee3d972026-07-13 auto-save: 2026-07-13T12:55:05 (1 files) — data/residential-report.html -
779f41b2026-07-13 auto-save: 2026-07-13T12:24:56 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
2f574202026-07-13 auto-save: 2026-07-13T11:24:39 (1 files) — package-lock.json -
471ec092026-07-13 chore: v0.9.1 — launchd bare-node PATH fix (session close) -
d16f1a42026-07-13 auto-save: 2026-07-13T10:54:28 (1 files) — data/brokers-snapshot.json -
71b7a182026-07-13 fix: pin Homebrew PATH in refresh-broker-snapshot.sh (launchd bare-node bug) -
8a22cdc2026-07-13 auto-save: 2026-07-13T10:24:15 (1 files) — package-lock.json -
701f6cd2026-07-13 data: CRCP listings sweep +2 (palm-beach) from launchd kickstart verify -
87cbbde2026-07-13 chore: lint, refactor, v0.9.0 (session close) -
96492dc2026-07-13 auto-save: 2026-07-13T09:54:06 (1 files) — data/alerts-state.json -
d6c86162026-07-13 fix(launchd): pin PATH so node resolves — both CRCP jobs were failing (email exit127, listings N=0/node-not-found); contrarian caught it, kickstart-verified email now sends end-to-end -
00b7b5b2026-07-13 5x re-verify: homepage core 6/6 green, 0 JS errors; Jul-10 fixes held; 6 clickthrough fails = same triaged harness artifact -
9ea52c82026-07-13 weekly unwarrantable-condos report 2026-07-13 -
448406f2026-07-13 auto-save: 2026-07-13T06:23:11 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
398ad292026-07-13 weekly Crexi refresh 2026-07-13 -
51399ad2026-07-13 prod CRCP: snapshot fallback for stats top-brokers + id/website in snapshot top rows -
47b46622026-07-13 find-email button: on-demand broker email hunt from their website (CRCP + broker grid) -
eec551f2026-07-13 auto-save: 2026-07-13T00:51:43 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
dee1dce2026-07-13 auto-save: 2026-07-13T00:21:34 (1 files) — data/condos-redfin.json -
cad0dba2026-07-12 auto-save: 2026-07-12T22:51:02 (1 files) — scripts/install-alerts-launchd.sh -
7bb04402026-07-12 auto-save: 2026-07-12T18:49:42 (1 files) — data/residential-report.html -
b699cec2026-07-12 auto-save: 2026-07-12T18:19:36 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
8d3a4012026-07-12 afternoon CRE update 2026-07-12 -
d5ea8e22026-07-12 auto-save: 2026-07-12T13:18:21 (2 files) — data/.pre-afternoon-ids.json data/last-refresh.json -
5e73b202026-07-12 auto-save: 2026-07-12T12:48:16 (1 files) — data/residential-report.html -
f83266a2026-07-12 auto-save: 2026-07-12T12:18:09 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
24bc8a12026-07-12 CRCP alerts FIX-THEN-SHIP (contrarian+DTD-B): enforce per-subscriber cadence + watermarks, log untagged listings, gov seen-state sidecar (no main-state bloat), Browserbase cost logging -
06ae1102026-07-12 CRCP listings: all-metro Crexi sweep complete — 2,791 listings, 1,177 metro-tagged across 17 markets (+1,177 from baseline) -
cd428e02026-07-12 CRCP listings: daily rotating refresh (DTD verdict C) — ~3 metros/day, timeout-safe; launchd+recurring-spend gated -
0a6e0fc2026-07-12 CRCP email-alerts: opt-in gov-agent segment (DTD verdict C) — per-metro new-licensee diff, default stays low-noise -
95003172026-07-12 broker-email: contrarian-driven hardening — exact last-name-token name-match, cross-domain block, vendor blocklist, shared-inbox dedup, colleague-sole-email guard -
310925d2026-07-12 auto-save: 2026-07-12T11:48:02 (2 files) — data/listings.json scripts/sweep-remaining-metros.sh -
beb40362026-07-12 broker-email: poison-guard sole-email on corporate megasite/office pages (mis-assigns stranger emails) + log-parse committer with rollback -
f93ac062026-07-12 broker-email-finder: hard per-broker timeout so a single hung site can't wedge the batch -
db7a5da2026-07-12 Serve col-resize.js via dedicated no-cache route (revalidate-every-load) ahead of static mount -
c102c072026-07-12 auto-save: 2026-07-12T11:17:54 (2 files) — data/alerts-state.json data/listings.json -
7d99a282026-07-12 CRCP email-alerts: George Basic Auth header + don't advance state on send failure (news-loss guard) -
035640a2026-07-12 CRCP email-alerts: fix George send (/api/send + body field) + wire token from george-gmail/.env -
d433ef82026-07-12 col-resize: add click-to-sort headers (asc/desc/reset, numeric-aware, blanks last) -
dd4abf62026-07-12 Add spreadsheet-style draggable column resizing (col-resize.js) to all table pages -
367513f2026-07-12 CRCP multi-metro listings sweep: generalize SFV Crexi scrape to all 21 metros + per-metro config; paid run gated -
91621f02026-07-12 CRCP email-alerts: snapshot-diff engine + George send wiring (DTD verdict A), dry-run proven, launchd+send gated -
52b71e12026-07-12 broker-email-finder: --browser tier (real system Chrome) recovers 403/anti-bot + JS-rendered sites; name-match disambiguates multi-agent firm pages -
88612822026-07-12 CRCP gov data: regenerate snapshot with all 21 metros (top-expensive-cities) — prior export was in a blocked bash call and never ran -
561fd542026-07-12 CRCP gov data: CT Greenwich (648, DCP eLicense API). Top-expensive-cities expansion: 19/20 loaded; WY Jackson walled (portal, no bulk) -
86793a42026-07-12 CRCP gov data: CO Aspen/Telluride/Vail (777, DORA API) + FL luxury cities Palm Beach/Naples/Miami Beach (DBPR) -
988e9892026-07-12 CRCP gov data: CA luxury cities (Atherton/Beverly Hills/Malibu/Newport Beach/Montecito/Hillsborough/Woodside) city-level from DRE CurrList -
32e449e2026-07-12 CRCP gov data: 7 metros / 337,725 agents live-ready (add CA SF+Silicon Valley + TX statewide); cache gov metro snapshot reads (TX 40MB read once) -
a3f111a2026-07-12 CRCP gov data: CA SF+Silicon Valley (13,714 from DRE bulk CurrList) + TX statewide (188,932 active, SB510 no-geo). 7 metros now -
715d28a2026-07-12 CRCP brokers: nightly snapshot refresh (launchd com.steve.crcp-broker-snapshot, sanity-gated, no-restart) + harden brokers-db PG user so it never silently defaults to root on prod -
31412702026-07-12 CRCP: snapshot fallback for ALL broker endpoints (graph/top/enrich-stats/contact) via cached readBrokerSnap; broker snapshot now carries graph+top+enrichStats so brokers.html mind-map works on prod too -
c1d67092026-07-12 auto-save: 2026-07-12T08:17:05 (7 files) — data/brokers-snapshot.json public/broker-grid.html scripts/export-brokers-snapshot.js scripts/serve.js data/gov/ -
7b4fce32026-07-12 CRCP gov data: Las Vegas loaded (18,023 Clark-county licensees from NV Real Estate Division xlsx); 4 metros / 135,079 gov-licensed agents total -
235cba42026-07-12 CRCP: fix empty prod broker-grid — snapshot fallback for /api/brokers/all (prod has no Postgres → was erroring 'role root does not exist'); export-brokers-snapshot.js + data/brokers-snapshot.json (2,537 w/ geo labels) -
3d612002026-07-12 CRCP: FL DBPR CSV adapter — Miami (Dade county) 67,776 licensees loaded (brokers+salespersons, active); streaming quoted-CSV parser + batched upsert -
7fe75972026-07-12 CRCP: NY metros loaded from gov data — NYC 47,019 + Hamptons 2,261 licensees (brokers+salespersons); batched upsert + office/branch filter -
cdf28712026-07-12 CRCP: multi-metro gov-license ingest — gov_licensed_agent table + NY DOS SODA API adapter; loaded Hamptons (2,617 licensees, $0, authoritative govt data) -
068be0a2026-07-12 CRCP broker grid: organize all fields into categories (Identity/Geography/Activity/Contact/Details) + grouped sort menu with optgroups; surface State + CA-Confidence as badged sortable columns; every field sortable -
9939cbd2026-07-12 CRCP: default broker view lists ALL brokers again (Steve: ok if not CA); ?scope=ca keeps the California-only cut -
bce9ae62026-07-12 auto-save: 2026-07-12T06:46:47 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
41456642026-07-12 auto-save: 2026-07-12T06:16:42 (3 files) — data/condos-redfin.json data/qwen-cache.json data/ranked.json -
7cc109c2026-07-12 auto-save: 2026-07-12T00:45:38 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
fce8c2b2026-07-12 auto-save: 2026-07-12T00:15:33 (1 files) — data/condos-redfin.json -
7d08d222026-07-11 CRCP: pass-3 broker CA recovery — city-disambiguation (marginal) + listing-activity confirmation (234 brokers CA by operation of law); DB now 93.7% confirmed-California -
b1e900b2026-07-11 CRCP: pass-2 fuzzy broker CA-DRE recovery (nickname+prefix, surname-search, single-person guard); fix norm-strips-comma parse bug -
f9af5432026-07-11 auto-save: 2026-07-11T18:44:33 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
801a86a2026-07-11 auto-save: 2026-07-11T18:14:27 (1 files) — data/condos-redfin.json -
894dfe02026-07-11 afternoon CRE update 2026-07-11 -
51162a12026-07-11 auto-save: 2026-07-11T12:43:24 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
f8985642026-07-11 auto-save: 2026-07-11T12:13:17 (1 files) — data/condos-redfin.json -
de954cf2026-07-11 CRCP: California-scope the broker DB — /api/brokers/all defaults to CA + unknown (hides 22 confirmed out-of-state; ?scope=all override). Backed by DRE cross-ref: 2,075/2,537 now confirmed CA -
482a1692026-07-11 CRCP: confirm unknown-geography brokers as CA via CA-DRE cross-ref (bridges cre.broker ↔ licensed-agents; $0 local, resumable) -
abbed742026-07-11 auto-save: 2026-07-11T06:42:06 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
5ad18e12026-07-11 auto-save: 2026-07-11T06:12:00 (3 files) — data/condos-redfin.json data/qwen-cache.json data/ranked.json -
7de1a842026-07-11 auto-save: 2026-07-11T00:41:01 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
2bb63e52026-07-11 auto-save: 2026-07-11T00:10:56 (1 files) — data/condos-redfin.json -
71cc6172026-07-10 CRCP: contrarian fixes on broker rollup — disclose 123 broker-licensed non-supervisors, persist broker sort, guard agent re-fetch, reorder cleanBrokerName address-strip -
93c26422026-07-10 CRCP: broker-level rollup view — /api/brokers/licensed + Agents⇄Brokers toggle (131 brokers from DRE responsible-broker field, $0) -
aa5fee62026-07-10 CRCP: full 556-agent DRE license snapshot (162 verified / 262 probable / 132 unmatched, 0 errors) -
b6bd8852026-07-10 chore: v0.5.0 — DRE-licensed agents feature (session close) -
1e4b4672026-07-10 auto-save: 2026-07-10T18:39:55 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
4c1be112026-07-10 auto-save: 2026-07-10T18:09:50 (1 files) — data/condos-redfin.json -
6abac2e2026-07-10 CRCP DRE: contrarian fixes — verified only on exact match, drop dead DB branch -
e914e062026-07-10 CRCP: DRE-licensed agents/brokers DB from CA public govt data -
a3bff782026-07-10 afternoon CRE update 2026-07-10 -
06a035c2026-07-10 auto-save: 2026-07-10T12:38:21 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
65dbb602026-07-10 5x: correct report scope note — verified deals/fha/rent-rolls are dashboards not catalogs -
a19ee812026-07-10 5x sweep 4 (contrarian follow-up): sort+density on broker-grid + condos grids; fix pre-existing favicon 404 on condos+graphics -
9e620372026-07-10 5x: sweeps 2-3 clean + REPORT (clean twice, done) -
bb93e9c2026-07-10 5x sweep 1: add sort select + density slider to mls.html grid (Steve grid rule); persisted, 0 JS errors -
69e27602026-07-10 5x sweep 1: triage — clickthrough FAILs are phantom (wrong-app vocabulary), not defects -
5aaf9b22026-07-10 auto-save: 2026-07-10T08:44:50 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
c71fc8d2026-07-10 map: popup shows residential lifecycle — status (Active/In Escrow/Sold/Withdrawn) + days-on-market tags -
a8e7f8a2026-07-10 auto-save: 2026-07-10T08:14:41 (1 files) — data/condos-redfin.json -
92df9732026-07-10 scrapers: capture LATITUDE/LONGITUDE from gis-csv -> lat/lng (was discarded) -
b11c2872026-07-10 auto-save: 2026-07-10T06:44:22 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
a568ac42026-07-10 auto-save: 2026-07-10T06:14:15 (3 files) — data/condos-redfin.json data/qwen-cache.json data/ranked.json -
4a6713e2026-07-10 auto-save: 2026-07-10T00:43:01 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
df748422026-07-10 auto-save: 2026-07-10T00:12:54 (1 files) — data/condos-redfin.json -
44256f42026-07-09 auto-save: 2026-07-09T18:41:42 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
8cadaa22026-07-09 auto-save: 2026-07-09T18:11:36 (1 files) — data/condos-redfin.json -
f8b28f82026-07-09 afternoon CRE update 2026-07-09 -
6cc61662026-07-09 auto-save: 2026-07-09T12:40:29 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
e52657d2026-07-09 auto-save: 2026-07-09T12:10:23 (1 files) — data/condos-redfin.json -
b2bccff2026-07-09 auto-save: 2026-07-09T06:39:18 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
a64f26b2026-07-09 auto-save: 2026-07-09T06:09:13 (3 files) — data/condos-redfin.json data/qwen-cache.json data/ranked.json -
f3ed4b02026-07-09 auto-save: 2026-07-09T00:38:11 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
1b9dcd32026-07-08 auto-save: 2026-07-08T18:37:07 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
14d68e42026-07-08 afternoon CRE update 2026-07-08 -
1258f682026-07-08 auto-save: 2026-07-08T12:35:41 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
4fa17ee2026-07-08 auto-save: 2026-07-08T06:34:26 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
bea08ab2026-07-08 chore: version bump v0.4.1 (session close — auth gate) -
66769262026-07-08 Gate crcp.agentabrams.com behind Basic Auth (admin/DW2024!); open /healthz for smoke test -
08981d02026-07-08 auto-save: 2026-07-08T06:04:21 (2 files) — data/qwen-cache.json data/ranked.json -
eb104312026-07-08 auto-save: 2026-07-08T00:33:23 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
5778fde2026-07-07 auto-save: 2026-07-07T18:32:03 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
b7ae2912026-07-07 chore: lint (syntax-check ✓), v0.3.1 → v0.4.0 (session close) -
0ab08f22026-07-07 add fix-workspace-trust.js — restores hasTrustDialogAccepted after mac3 migration -
f81d9202026-07-07 afternoon CRE update 2026-07-07 -
18f673e2026-07-07 auto-save: 2026-07-07T13:30:45 (1 files) — data/last-refresh.json -
7ffa8da2026-07-07 crcp: auto-rebuild assessor SQLite on ingest + refresh/push wrapper -
df421742026-07-07 chore: v0.3.1 (session close) -
13a73ac2026-07-07 crcp: bridge 2.43M assessor roll to DB-less prod via read-only SQLite + honest miss copy -
f572b742026-07-07 auto-save: 2026-07-07T13:00:27 (1 files) — data/.pre-afternoon-ids.json -
945fe2b2026-07-07 auto-save: 2026-07-07T12:30:21 (4 files) — data/condos-redfin.json data/map-points.json data/residential-report.html data/sfr-redfin.json -
7abb1022026-07-07 auto-save: 2026-07-07T09:59:53 (3 files) — data/condos-redfin.json data/map-points.json data/sfr-redfin.json -
0ddd3652026-07-07 explorer: Fields section starts expanded (toggle cards visible on load); other left-panel sections stay collapsed -
bb116972026-07-07 explorer: density slider 1-10 (was 1-20, clamps saved values) + field toggles restyled as click-on/off cards (:has() keeps existing wiring) -
79fb3952026-07-07 auto-save: 2026-07-07T09:29:44 (1 files) — data/condos-redfin.json -
c37e1412026-07-07 fix: export PATH in run-residential-refresh.sh — launchd's minimal PATH lacked /opt/homebrew/bin so node was not found; the scheduled 4x/day refresh would have silently failed every run -
67dff5f2026-07-07 map: residential on the map colored by status (Active/In Escrow/Sold/Withdrawn) -
d8dc3ea2026-07-07 residential: price-drop tracking — 💸 Price Cut chip + report section -
809771f2026-07-07 auto-save: 2026-07-07T08:59:49 (2 files) — scripts/export-residential-snapshots.js scripts/serve.js -
18bf3fc2026-07-07 auto-save: 2026-07-07T08:59:35 (4 files) — scripts/export-residential-snapshots.js scripts/fetch-condos-redfin.js scripts/fetch-sfr-redfin.js scripts/db/price-drop-migration.sql -
bf516b72026-07-07 reports: refresh generated HTML (morning/afternoon/condos/residential pulse) -
eb0c10c2026-07-07 residential report: LA Residential Pulse (SFR+condo) email — just listed / in escrow / just sold / fell out -
84883622026-07-07 fix: raise /api/residential cap 12k->25k — SFR active grew past 12k, truncating off-market/sold rows off prod -
27c5ece2026-07-07 snapshots: escrow + DOM coverage (sfr 3860 escrow/13079 dom, condo 380 escrow/1578 dom) -
eb3ad192026-07-07 fix: condo fetchStatus referenced loop-scoped reg from outer closure -> captured 0; pass reg as param (matches SFR fetchRegion pattern) -
a31904e2026-07-07 listings: real DAYS ON MARKET (gap-immune Just Listed) + In Escrow / Fell Out tabs -
fae32252026-07-07 mls: Just Listed + Just Sold quick-filter chips with adjustable day window (persisted) -
018ff112026-07-07 off-market: re-check withdrawn rows for later-recorded sales (escrow lag) + fresh snapshots w/ 1,647 pulled listings -
60613492026-07-07 CRE: migrate condos-report from mac2 (node path + Max-plan claude strip); harden morning/condos claude calls to Max plan -
2d64c252026-07-07 residential: off-market tracking — see pulled listings, labeled SOLD vs WITHDRAWN -
ce1d6f22026-07-07 refresh: email steve-office (George) on sanity-gate abort or rsync failure -
843d5592026-07-06 mls: rename browser title -> 'LA County MLS — Residential + CRE' -
dcf9b4d2026-07-06 refresh: set CC_FRESH=1 so SFR re-sweeps every run (ledger was skipping all regions -> no-op) -
4a6fac72026-07-06 residential refresh: CC_LOCAL=1 mode ($0 local Chrome, no Browserbase) + 4x/day launchd -
9a70d222026-07-06 residential: fresh Redfin scrape snapshots (10.6k SFR + 1.29k condos) + lift condo cap 1000->5000 -
0dae1772026-07-06 mls: add residential inventory (9.6k SFR + condos) alongside CRE + Census rent averages -
6e2d2bf2026-07-04 closed-sales: snapshot fallback so sales.html has data on prod (no cre DB on Kamatera) -
d7077f32026-07-04 fix: guard brokers.map in graphics.html against non-array payload -
adc85c12026-07-04 sales: Amazon rail + field toggles + grid/list via crcp-grid engine; add ?limit to closed-sales; engine link+cap support -
11171682026-07-04 fha-loans: Amazon left-rail + field toggles + grid/list via shared crcp-grid engine -
10edd442026-07-04 condos api: explicit column projection (drop SELECT *, satisfies pre-deploy PII lint) -
a665e5c2026-07-04 condos: Amazon-rail UI live + /api/condos snapshot fallback for prod (no cre DB on Kamatera) -
883f96e2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew) -
253a4372026-07-02 auto-save: 2026-07-02T17:51:29 (1 files) — public/broker-grid.html -
8ceee472026-07-02 perf(mls): paginated table (DTD verdict B, UNANIMOUS 3/3 Codex+Qwen+Claude) — 200 rows / 60 grid cards per page with 'Show N more'; count + stats strip computed over the FULL filtered set, only the DOM windowed. Cuts a 1823-row MLS render to 200. Pass-20 milestone: all 4 surfaces smoke-clean (0 console errors, no regressions from 19 passes). Contrarian-gated. -
9b10d002026-07-02 feat(mls): heat cues + copy summary parity (DTD verdict D, UNANIMOUS 3/3 Codex+Qwen+Claude) — color-by-metric Heat (Cap rate / Score) tints table rows red->green over the filtered set (only real values), legend; per-row 📋 Copy summary (address/type/units/price/cap/$-unit/$-SF/year/beds-baths/warrantability/URL) to clipboard. Closes the index<->mls consistency gap. Contrarian-gated, 0 errors. -
a8fedb12026-07-02 feat(index): per-card 📋 Copy summary (DTD verdict C, UNANIMOUS 3/3 Codex+Qwen+Claude) — copies a clean multi-line text block (address, type/units/price, cap/$-unit/$-SF, DSCR/CoC/cash needed/cash flow, est rent/deal score/warrantability, listing URL) to the clipboard for email/CRM; honest fields only (omits missing values); ✓ confirmation. Contrarian-gated, 0 errors. -
45fe54b2026-07-02 feat(index): saved searches (DTD verdict D, 2/3 Codex+Claude; Qwen dissent C=$/SF-vs-submarket OVERRIDDEN on honest-data grounds — comps.json submarket benchmarks are prose cap ranges, no joinable $/SF/median) — name + save the current filter/sort/view/heat state (reuses the shareable-URL serialization) into a rail 'Saved searches' list; one-click restore (full-URL, bulletproof) + ✕ delete; localStorage-persisted. Contrarian-gated, 0 errors. -
6c08b422026-07-02 feat(index): Compare -> deliverable (DTD verdict A, 2/3 Codex+Claude; Qwen dissent C=similar-in-city) — ⬇ CSV export of the compared listings (one row per listing x 17 metric columns, entity-decoded) + 🖨 Print with a scoped @media print stylesheet (body.printing-compare) that prints only the side-by-side clean black-on-white for deal memos, without breaking normal Cmd+P. Contrarian-gated, 0 errors. -
6d8e1822026-07-02 feat(condos): surface parity (DTD verdict C, 2/3 Codex+Claude; Qwen dissent B=export-compare) — collapsible rail tabs (all collapsed on load) + aggregate stats strip (count/median price/$-SF/HOA/year) + ⭐shortlist stars sharing the SAME cre_shortlist key/ids as Explorer+MLS (shortlist now unified across ALL 4 surfaces) + a11y focus-visible/reduced-motion. Contrarian-gated, 0 errors. -
589fdb52026-07-02 a11y(index): accessibility pass (DTD verdict A, 2/3 Codex+Claude; Qwen dissent C=export-compare) — aria-label + aria-pressed on ★ shortlist buttons, scope=col on list + compare table headers, :focus-visible keyboard focus rings, @media prefers-reduced-motion, and Escape-to-close on the compare + broker/property-history modals. Contrarian-gated, 0 errors. -
ac724c32026-07-02 feat(index): empty-state quick-start chips (DTD verdict D, 2/3 Qwen+Claude; Codex dissent B=a11y, queued next) — the wait-for-selection screen now offers one-click starters (Condos · Multifamily · ◆Non-QM · ⚑Unwarrantable · ✓In budget · ⭐My shortlist when non-empty) that apply a filter instantly, fixing the collapsed-tabs first-action dead-end. Contrarian-gated, 0 errors. -
793d08b2026-07-02 perf(index): paginated DOM rendering (DTD verdict D, UNANIMOUS 3/3 Codex+Qwen+Claude) — grid renders 60 cards / list 200 rows per page with a 'Show N more' button; count + stats strip + facet counts still computed over the FULL filtered set (only the DOM is windowed). Cuts a 1823-card Non-QM render to 60. Contrarian-gated, 0 errors. -
bf0b6002026-07-02 afternoon CRE update 2026-07-02 -
7e7b8f42026-07-02 feat(mls): feature parity (DTD verdict B, 2/3 Codex+Claude; Qwen dissent D=export-compare) — port ⭐shortlist + aggregate stats strip to the MLS table; shortlist shares the SAME cre_shortlist localStorage key + listing ids as the Explorer, so starring is UNIFIED across index<->mls. Stats: count/median price/$-unit/$-SF/avg cap/median year over the filtered set. Star column + grid-card stars, shortlist toggle filters. Contrarian-gated, 0 errors. -
681a9b82026-07-02 feat(index): color-by-metric heat cues (DTD verdict D, 2/3 Qwen+Claude; Codex dissent C=rent-control OVERRIDDEN on honest-data grounds — rent_control is 98% 'verify' placeholder, real RSO needs a classification-data task) — Heat select (Deal score / Cap rate / Cash-on-cash) tints each card left-border / list row red→green over the filtered set's min-max; only real values colored; gradient legend; persisted + in shareable URL (?ht=). Contrarian-gated, 0 errors. -
b5a7c9f2026-07-02 feat(index): live facet counts (DTD verdict A, 2/3 Codex+Claude; Qwen dissent=saved-searches) — Asset-type/Firm/City chip counts update to reflect matches given the OTHER active filters (skip own dimension, Amazon-style narrowing); zero-match chips dimmed. Contrarian-gated, 0 errors. -
14963d52026-07-02 feat(index): side-by-side Compare modal for shortlisted listings — 17 aligned metric rows (price, $/unit, $/SF, cap, DSCR, CoC, cash needed/flow, rent, beds/baths/sqft, year, warrantability, scores), sticky label col + header, star-2-first hint. Contrarian-gated, 0 errors. -
d9c099f2026-07-02 feat(index): aggregate stats strip — median price / $-per-unit / $-per-SF / avg cap (disclosed) / median est. rent / in-budget count computed over the current filtered slice; hidden on the wait-for-selection state. Contrarian-gated, 0 errors. -
8b66d892026-07-02 feat(index): shortlist — ⭐ star any listing (grid + list), device-local persisted set, '⭐ Shortlist (N)' toggle filters to starred only, removable active-filter chip. Contrarian-gated, 0 errors. -
c919ae12026-07-02 feat(index): ⬇ CSV export of the current filtered+sorted view (visible columns, proper escaping) + column-sort persisted in the shareable URL (?cs=key:a|d restores click-to-sort). Contrarian-gated, 0 errors. -
acf37682026-07-02 feat(mls+broker-grid): fleet consistency (DTD Option D) — collapsible rail tabs (all collapsed on load) on both; mls gains wait-for-selection empty state + ◆ Non-QM in-grid filter (unwarrantable condos + small multifamily 1-9u + mixed-use = 1823). broker-grid keeps its browsable ranked default (people directory, not filter-first). Contrarian-gated, 0 errors. -
12bcd302026-07-02 feat(index): click-to-sort on List column headers (Option C) — sort by ANY visible data point (price, $/SF, beds, sqft, HOA, year, assessed-derived, etc.) asc/desc with ▲▼ indicators; generic fieldVal resolver; sort dropdown clears column-sort. Contrarian-gated (grid clicks unaffected; colSort scoped to .listtbl th). -
d036a012026-07-02 auto-save: 2026-07-02T10:47:21 (1 files) — public/index.html -
2414c9b2026-07-02 feat(index): shareable URL state (DTD dissent B / Codex) — every filter/sort/view/scenario ↔ query string via replaceState; deep-links restore the exact view and override wait-for-selection; 🔗 Copy-link button. Contrarian gate caught + fixed a real bug: local 'history' array shadowed window.history, silently no-op'ing replaceState. -
9dc699f2026-07-02 feat(index): active-filter summary bar — removable chips for every applied filter + one-click Reset all above the grid (DTD verdict A, 2/3: Claude+Qwen; Codex dissent=URL-share). Closes the 'what's filtering this?' gap from the collapsed-tabs/wait-for-selection UX; empty-state now guides expanding a tab. Contrarian-gated. -
e9d13a82026-07-02 feat(index): collapsible filter tabs (all collapsed on load) + wait-for-selection empty state (no 2134-card dump on load) + ◆ Non-QM in-grid filter (unwarrantable condos + small multifamily 1-9u + mixed-use) + lazy assessor data points (assessed value / land-imp split / use-code / prior sale via /api/property-history, IntersectionObserver + eager first batch, concurrency-capped, cached) -
44c3be82026-07-02 feat(index+mls): merge condos IN-GRID as a real 'Condo' asset type (727 rows → 2134 total) — filters in place like any asset class; ⚑ Unwarrantable in-grid filter (713); +6 condo data points (beds/baths/sqft/HOA/warrantability/broker) as toggles on index, auto-discovered as columns on mls; $/unit suppressed for 1-unit condos -
ad43c252026-07-02 auto-save: 2026-07-02T10:17:10 (1 files) — public/index.html -
58cbced2026-07-02 fix(index): surface Condos + Unwarrantable as the FIRST chips inside the Asset type facet (were separate links below, easy to miss); nav-chips deep-link to the condos page -
a33bd462026-07-02 feat(condos): full Amazon left-rail drill-down — warrantability (incl. Unwarrantable) + city(20) + firm(14) + beds/baths mins + price/HOA/sqft/$-per-sqft/year ranges + 17 per-field show/hide toggles (computed $/sqft, $/bed, age); list/grid both field-driven; ?status deep-link -
a2c781e2026-07-02 feat(condos): add Unwarrantable (non-FHA-approved) filter — 713 condos, Arcstone non-QM target; deep-link ?status=unwarrantable; red Unwarrantable chips in index+mls asset-class rails -
f5711112026-07-02 feat(broker-grid+index): Amazon left rail on broker-grid (agent-type/Arcstone/firm facets + per-column show/hide, auto-discovers every scalar field driving table+grid+CSV); Condos added as an asset class in the index left rail -
d74ce022026-07-02 auto-save: 2026-07-02T09:46:55 (1 files) — public/mls.html -
5a3ee552026-07-02 feat(condos): List/Grid toggle (both DB-listing & FHA-directory schemas) + density max to 20 -
c02f5b22026-07-02 feat(index): Amazon-style docked left filter rail + List/Grid toggle + per-field show/hide (34 fields) + density to 20 + new data points (price/unit, price/SF, GRM, year built, days-on-market, ZIP) -
177e1b02026-07-02 style: roomier collection grids — bigger card+container padding, 2px white stroke on cards/tiles across index/condos/mls/broker-grid/graphics/deals/fha-loans -
c5796c22026-07-01 afternoon CRE update 2026-07-01 -
8edbdfd2026-07-01 feat: CRE deeds part (b) — current_broker for FREE-fetchable listings (compass/coldwell/myelisting/M&M) via verified WebFetch; crexi 98% deferred (anti-bot, needs Browserbase) -
6be26bf2026-07-01 chore: lint ✓ (clean, no linter) · refactor ✓ (no change) · v0.3.0 (session close) -
7f658fc2026-07-01 feat: clean extension-less URLs (/mls, /brokers, /map, etc.) alongside .html links -
b40a08b2026-07-01 ops: launchd LaunchAgent for cre-viewer reboot persistence (KeepAlive, no pm2) -
07e09772026-07-01 feat: deeds FREE-PASS part (a) — extend broker-history to all 1,407 listings -
6ee845c2026-07-01 chore: v0.2.0 (session close — broker contacts/MLS+broker grids/property-history/CSV/assessor 2.43M/tailscale) -
192e8892026-06-30 feat: broker-history pilot — transaction history + listing-agent enrichment on property cards -
584c4092026-06-30 auto-save: 2026-06-30T19:42:55 (3 files) — public/index.html scripts/serve.js data/broker-history-pilot.json -
d96d2832026-06-30 auto-save: 2026-06-30T18:12:29 (1 files) — package-lock.json -
ddb1e4d2026-06-30 chore: lint ✓, v0.1.1 (session close — condos render fix) -
ac6be592026-06-30 Map markers → 100-yr property-history popup (📜 History link in every marker popup) -
1760f5c2026-06-30 assessor keyset: stream line-count (1.3GB file exceeds V8 max string; readFileSync failed) -
1634e832026-06-30 assessor: key-set pagination completion (AIN>cursor) to finish the roll past the resultOffset false-stop at 1.884M -
ad0fbf92026-06-30 Arcstone prior-relationship flag (chip on grid card + list + firm roster + modal) + always show email/phone/website on broker modals -
8d4f2eb2026-06-30 Add .deploy.conf for Kamatera prod deploy (CRCP + FHA loans feature) -
c469c562026-06-30 Add CSV export to MLS + broker grids (exports current filtered/sorted rows) -
5a26b032026-06-30 Make the grids actionable: MLS row → 100-yr property history popup; broker-grid row → full contact/listings/pitch modal -
ddcd86b2026-06-30 Broker grid+list view — all 2,537 brokers, every field sortable & searchable -
41913072026-06-30 FHA loans: add /fha-loans route + /api/fha-loans JSON endpoint to serve.js -
06ad8912026-06-30 auto-save: 2026-06-30T16:41:53 (10 files) — public/condos.html public/crcp.html public/deals.html public/index.html public/map.html -
03d91292026-06-30 Broker card: current+expired+sales with dates/MLS#/url across both modals -
9c3c4e82026-06-30 Add MLS spreadsheet + grid view (sortable & searchable, all property data) -
22644c32026-06-30 fix(condos): render listings — warrant_signals is an object, .map threw and stuck grid on loading -
bfc32f82026-06-30 fix(assessor): stop on exceededTransferLimit, not short page (was truncating at 294k/2.43M) + CC_START_OFFSET resume -
531f7e72026-06-30 Add DW-Wins-Dashboard.png — CRE build wins dashboard (emailed to steve-office) -
69ac4d32026-06-30 CRE :9911 — 'Best leads for Frank' ranked list: expandable MLS-style current listings + Sold button + 100-yr address-only property history -
6d18e702026-06-30 auto-save: 2026-06-30T13:40:46 (1 files) — scripts/seed-frank-arcstone.js -
ee71adf2026-06-30 CRE :9911 — front-page broker contacts (name/company/phone/email) + ready-pitch popup, Frank Arcstone demo, LinkedIn follow-tab -
aafcd092026-06-30 Assessor parcel roll: streaming Socrata/eGIS fetcher + cre.assessor_parcel schema + NDJSON ingest (2025 roll, all parcels, disk-aware capped to current snapshot) -
a45ddb92026-06-30 afternoon CRE update 2026-06-30 -
e2e6fb42026-06-29 afternoon CRE update 2026-06-29 -
311558a2026-06-29 auto-save: 2026-06-29T07:19:26 (7 files) — 5x/deals-assert.js 5x/index-assert.js 5x/map-assert.js public/deals.html public/index.html -
d10cdb42026-06-29 officer-yolo: DTD verdict A (Unified Deal Score) 3-0 for next build -
a8e2d742026-06-29 Map: marker clustering (Leaflet.markercluster — per-type colored cluster bubbles w/ counts at low zoom, individual dots past z16) + 'Color by: Type | Price' mode (5-tier price coloring + price-key legend, recolors all 10,876 markers). Updated cluster-aware strong gate (zoom-to-uncluster popup + price-toggle assertion) — PASS. Closes deferred item 7 -
22f626a2026-06-29 Surface assumable-FHA/VA heuristic on the map: bake assumable likelihood+rate into map-points export (4,239 condo/SFR points, medium/high only) + 🔑 badge in popups (est rate when known, clearly labeled heuristic-not-title-verified). Closes the assumable UI gap (task 13). Map gate still PASS -
157d8352026-06-29 Build rent-roll → DSCR underwriting: /api/rent-rolls endpoint + rent-rolls.html viewer (unit table + underwriting tiles + live DSCR calculator: NOI/debt-service, verdict vs target, max-loan-at-target). Parser fix: money-formatted-rent only (no phantom unit from street#/zip). Strong gate (PASS) + health-check + nav links. Labeled DEMO rent roll included -
ec348692026-06-29 weekly Crexi refresh 2026-06-29 -
119516b2026-06-29 5x: OVERNIGHT-REPORT.md (final) — all 6 pages gated + PASS; loop substantive work complete; items 4+7 deferred for Steve -
9c2a5fc2026-06-29 5x: index.html strong gate (index-assert.js — 1407 cards/no-NaN/loopnet+rent links/sort-reorders/filter-narrows/empty-degrades, PASS). No defect; all 6 pages now gated. Added index to health-check.sh -
94555712026-06-29 5x: health-check.sh (server + all 5 strong gates) + night-log final state (primary queue complete; index gate is the one remaining candidate) -
bae2d752026-06-29 5x night option A: gate sales.html + brokers.html. Real fix: favicon 404 (1 JS err each) → inline favicon → both 6/6. New strong gates sales-assert.js + brokers-assert.js (PASS). Caught 2 bugs in my OWN verifiers first (sales #city=input not select; brokers row-click highlights graph, node-click opens detail) -
ec4d78b2026-06-29 5x night-log: item 8 done; primary queue essentially complete (items 4,7 deferred to do with Steve); next-wake options + anti-churn note -
7f52ab62026-06-29 5x night item 8: mobile/a11y pass — fix real 390px overflow (crcp nav-wrap, map topbar-wrap, index scenario-seg wrap; map/index overflow-x guard); prefers-reduced-motion on deals gradient anim; aria-labels on density slider + modal close. All 3 strong gates still PASS (no desktop regression) -
e121e472026-06-28 auto-save: 2026-06-28T23:47:35 (1 files) — data/map-points.json -
28c0b792026-06-28 5x night-log: items 2+5 done; item 4 deferred (do with Steve); next = price-band chart + map clustering -
ad89b922026-06-28 5x night item 5: harden geocoder — strip unit designators (#4/Apt/Ste) + skip un-geocodable junk (Call Broker/Plan N); recovered +1 retroactively. Honest: remaining ~769 un-placed are Census TIGER gaps (new-build streets), not fixable free — durable value is correct geocoding of future unit-suffixed imports -
928c43f2026-06-28 5x night item 2: crcp.html strong gate (crcp-assert.js — tiles/segments/expand/modal/sort/empty all PASS); six-way 6/6 with correct visible selector. No crcp defect — M3 FAIL was collapse-default vs visibility-selector mismatch, not a bug -
cdaa2b42026-06-28 5x night-log: items 1+3 done; queue + method note for next wake -
b6a5bdd2026-06-28 5x night item 3: wire nonqm segment agent count (union of non-FHA condo agents + 1-9-unit/mixed listing agents) — was unwired/0, now 1696 -
f98b8af2026-06-28 5x night item 1: map.html — aerial-img onerror graceful fallback + strong map-assert.js gate (markers/toggles/popup-decode/empty-data); map verified 6/6 + strong PASS -
14b36ac2026-06-28 5x: overnight refinement night-log + queue -
2f5592e2026-06-28 5x: final REPORT — clean twice (sweeps 4-5) with strengthened gate after contrarian caught 3 real defects in sweep 3 -
292b7fb2026-06-28 5x sweep 3 (contrarian-gated): fix medAll ÷0 → $NaN tile; guard F.money/F.num/countUp + grad() undefined-color crash (was swallowed on empty data); make Refresh/toggle verifier-discoverable; add strong deals-assert.js (charts-drew-data + empty-data + no-NaN gate) -
022582f2026-06-28 5x: sweep logs + REPORT (deals.html clean twice; clickthrough false-negatives escalated) -
7a4f4572026-06-28 5x sweep 1: add live Refresh + pipeline metric toggle (Deals/Median $) to deals.html — refactor to pull()/draw() with chart-destroy guards (no double-init); real interactive controls -
d5d29c92026-06-28 Deal Intelligence dashboard: 2026 liquid-glass UI (animated gradient mesh + frosted panels) with 6 dynamic Chart.js charts bound to live deal data; nav links across pages -
f4cd5322026-06-28 Property map: all 10,875 geocoded properties on Leaflet, colored overlays per type, free Esri aerial photo per property; free Census batch geocoder (scripts/geocode-census.js); nav links from index+crcp -
9e99f282026-06-28 LoopNet for all listings (free deep-links on every card + gated CoStar adapter) + local rent-roll PDF ingester + feasibility doc -
3054e112026-06-28 CRCP: collapse-all-until-activated panels + chip density slider + building prices; dedupe caret CSS, inline favicon -
495d8d62026-06-28 auto-save: 2026-06-28T17:15:46 (1 files) — public/crcp.html -
b0cabb22026-06-28 CRCP: building prices on Call Segments (med + p10–p90 band) and per-agent avg/top price in call list; chip density slider + collapse-all-until-activated panels (persisted) -
80c28382026-06-28 additive: Assumable FHA/VA call segment + read-only /api/assumable endpoint -
5f05fc12026-06-28 assumable-loan heuristic + estimate model + credentialed source adapters + integration plan -
50e36fe2026-06-28 CRE: transaction-party entity model — title/escrow/insurance/lender companies + per-property edges (transaction_company + transaction_party), seeded major LA players; populated from title-records adapter once Steve's login lands -
5aaf0872026-06-28 CRE viewer: neighborhood rent estimate (std + proforma from Census median gross rent × units) per card + Pro-forma Rent ROI sort, with implausible-yield (>18%) guard flagging bad unit counts -
9f0bd7e2026-06-28 Wire sfr-bankstmt segment to cre.sfr + add fetch-sfr-agents.js (broker_sfr edge) -
9a5c2602026-06-28 Add fetch-sfr-redfin.js — feed-first uipt=1 SFR sweep w/ price-banding + swept_region_sfr ledger -
e39860e2026-06-28 CRCP: SFR/non-QM segments open the lead-source playbook even at 0 listings (compliant social/referral channels) -
dfbb2c52026-06-28 CRCP: compliant lead-source playbook on SFR/non-QM segments (referral partners + Special-Ad-Category social marketing, NOT scraped consumers) -
44fe3fb2026-06-28 Add cre.sfr table + broker_sfr edge (mirror condo/broker_condo for SFR for-sale) -
f51be7b2026-06-28 CRCP: Call Segments panel (Arcstone loan products) — mixed-use / non-warrantable condos / standard condos (FNMA CPM offer) / DSCR 1-4 / DSCR 5-9 / SFR bank-stmt / non-QM; click a segment → agents-to-call list → segment-tailored pitch -
99ec9a72026-06-28 CRE: local XLSX exporter (no Drive API) — 5-tab workbook of all brokers/agents/firms/condos/sales for Drive upload -
2b992932026-06-28 CRE: comprehensive 5-tab Google Sheet exporter (commercial brokers + residential agents + firms + warrantable condos + 17k closed sales), shares to steve@ as writer -
a880a292026-06-28 afternoon CRE update 2026-06-28 -
4d1c2a92026-06-28 CRE: sortable columns on /sales.html comps table (address/city/price/date, click to rank ▲▼) -
cc6c1a92026-06-28 closed-sales: full LA County coverage — 228 resolved regions, price-banding past the 350 cap, resume ledger, honest ~5yr depth note (6,391 -> 17,023 rows) -
52878762026-06-28 CRCP: sortable columns on broker + firm tables (click any header to rank asc/desc, ▲▼ indicator) -
56c18982026-06-28 auto-save: 2026-06-28T10:14:06 (2 files) — scripts/serve.js public/sales.html -
ed384932026-06-28 CRE residential agents: final capture artifact — 637 agents across 19 Browserbase sessions ($0.76), 104 phone / 102 email / 636 license; 74 honestly labeled no-public-agent (Redfin-suppressed) -
43075b02026-06-28 auto-save: 2026-06-28T08:43:43 (2 files) — public/crcp.html scripts/serve.js -
8e180852026-06-28 auto-save: 2026-06-28T08:13:35 (2 files) — scripts/fetch-closed-sales.js data/redfin-agents.json -
3fb9caa2026-06-28 CRE residential agents: integrate into CRCP — fetch-redfin-agents.js capture, agent_type+license through /api/crcp/stats topBrokers + /api/broker (id-safe lookup, condos as listings) + /api/broker/pitch (condo refs for residential) + mind-map graph()/contact card; CRCP residential/commercial badge + Agents tile + agent counts in /api/condos/stats -
a686d472026-06-28 CRE: closed-sales scraper (Redfin gis-csv sold feed, 10yr) → closed_sale market-comps table; per-agent attribution follows agent resolution -
2d837a22026-06-28 CRE residential agents: feasibility probe (mainHouseInfo endpoint confirms agent name+brokerage+phone/email/license) + residential schema (broker.agent_type/license, broker_condo edge, extended broker_node view) -
44b69732026-06-28 auto-save: 2026-06-28T07:43:27 (2 files) — public/brokers.html scripts/db/brokers-db.js -
d7ca6492026-06-28 CRCP: broker contact columns (phone/email/web) + click-through contact modal (full business contact + current/closed listings) + Frank user (admin) + Arcstone Financial resources + non-warrantable-condo pitch generator (email/call-script DRAFTS, send stays George-gated) -
c5507a72026-06-28 CRE Job B Tier 3: filter data-aggregator emails (signalhire/rocketreach/zoominfo/apollo/etc) — keep only real broker/firm contacts; scrub 1 false-positive -
63ed0e22026-06-28 CRE Job B Tier 3: Brave-search enrichment (~$0.004/q) for brokers-with-listings missing email — top-result fetch+harvest, last-name email attribution, firm/linkedin/crexi result ranking, $10 global cap + running spend surfaced -
22629f02026-06-28 CRCP: live Commercial Real Estate Control Panel (CNCP-styled) — /crcp.html + /api/crcp/stats, auto-polls every 3s showing listings/brokers/firms/condos + live broker-enrichment progress bars -
88d26a32026-06-28 CRE Job B Tier 2: firm-website team-page crawler ($0 local HTTPS) — mailto/tel + regex harvest, firm-domain email preference, office-level fallback assignment w/ provenance -
8378bf72026-06-28 CRE Job B: enrichment schema (website/linkedin/specialties/office_addr cols + broker_field_source provenance + broker_other_listing) + Tier 1 Crexi re-fetch (office addr/website/title/phone + book sizes) -
fc5b4d42026-06-28 auto-save: 2026-06-28T07:13:19 (1 files) — scripts/db/broker-enrich-schema.sql -
8bfec9f2026-06-28 CRE Job A: graphics reflect REAL scraped condos — /api/condos/stats (warrantable-vs-unwarranted + by-city + avg price over cre.condo), 2 new charts + stats; condos API serves all 1000 -
e64aea12026-06-28 CRE Job A: Redfin feed-first condo scraper (gis-csv) — region resolvers (city+neighborhood region_ids) + capped sweep w/ FHA warrantability classify + cre.condo upsert; probes confirm gis-csv feed (~350 condos/region) -
d9dfc392026-06-28 CRE: 5-broker enrichment PoC (~$0.04) — public Crexi broker-profile API exposes no contact fields via /brokers/<id> or /profile/<id>; full harvest needs source-discovery, documented for gated memo -
09e1ede2026-06-28 CRE: 1-session Browserbase condo-sample pipeline (capture->classify->DB, ~$0.04) — proves end-to-end flow; Crexi /condo found to be national commercial inventory not LA residential condos (purged from DB), residential source (Zillow/Redfin) is the gated full-scale path -
37b95ec2026-06-28 CRE: graphics page (broker leaderboard, firm market-share, FHA warrantability breakdown + by-city + expiring-soon charts via Chart.js) + condos warrantability view + /api/firms/share /api/warrantability /api/condos /api/fha-condos endpoints; link from index -
b27a82b2026-06-28 CRE: warrantability classifier — FHA-list match (name + street/zip) primary, heuristic text flags (condotel/cash-only/litigation/investor/mixed-use/new-construction) secondary; honest proxy labeling -
848cc192026-06-28 CRE: add condo + warrantability schema (fha_condo ref table, condo table w/ broker linkage, warrant_status enum, fha_match fn); load 2,661 FHA rows -
f67266d2026-06-28 CRE: ingest HUD FHA-approved condo list for LA County (2,661 records: 358 approved / 2,303 expired) — warrantability proxy source -
a9547bc2026-06-28 auto-save: 2026-06-28T06:13:03 (2 files) — data/fha-approved-condos.json scripts/fetch-fha-condos.js -
298a0a42026-06-27 CRE: AI narratives backfilled for all 1407 properties -
45d44d02026-06-27 CRE: extend Crexi sweep to 30 more LA County cities (1028→1407 properties); fetch-brokers incremental skip of already-captured listings -
08e290a2026-06-27 CRE: broker/agent relationship graph — cre Postgres DB (firm/broker/listing + co-list edges), Crexi /assets/<id>/brokers capture, /api/graph, vis-network mind-map at /brokers.html (verified: 68 brokers/52 firms/16 co-list edges from 60-listing sample) -
216da732026-06-27 afternoon CRE update 2026-06-27 -
c70d4a62026-06-27 CRE: case-insensitive generic sniffer (handles M&M/.NET capitalized Results+fields); record firm discovery — M&M has /api/contentsearch/properties (needs POST payload), LoopNet anti-bot dead-end -
e133dd42026-06-27 auto-save: 2026-06-27T05:37:39 (1 files) — scripts/sources/firms.js -
6594d542026-06-27 CRE: qwen narratives backfilled for all 1028 properties (thesis + recommendation) -
b6964fd2026-06-27 CRE: live Census ACS demographics for 73 LA submarkets (keyless Census Reporter) — renter%, med rent, income, pop, home value, rent burden on every card -
baf6f582026-06-27 CRE: add Census ACS demographics fetcher (70 LA submarkets) + per-card 📊 demographics line; npm run demographics -
46ede352026-06-27 CRE data: Crexi LA County sweep — 104→1028 properties (all asset types, wide band), re-ranked for viewer -
741304a2026-06-27 CRE viewer rebuilt like-new: left filter drawer behind hamburger (collapsed) with rich facets (asset type/firm/submarket/price/cap/units/year/status/budget); capture band widened to all properties + all asset classes -
ddd052e2026-06-27 CRE: add chunked full-firm LA County sweep runner (run-sweep.sh) -
690567b2026-06-27 CRE: wire read-only WhoLivedThere/pastdoor archive (assessor parcel + permits + film history) into viewer via /api/history -
2674ef82026-06-26 CRE: expand geographic scope to all of LA County (88 cities + neighborhoods + unincorporated) -
9c2ab882026-06-26 auto-save: 2026-06-26T23:36:14 (2 files) — scripts/refresh-all.js scripts/sources/firms.js -
9c8ad7b2026-06-26 CRE: multi-firm listing-source framework + firm badges in viewer -
aa88a982026-06-26 CRE reports: add score bar-chart, rich table-of-info ($/unit, $/sqft, GRM), and suggested Zillow data points (per Steve's 1pm reply) -
81019262026-06-26 afternoon CRE update 2026-06-26 -
b6dbc622026-06-26 afternoon CRE update 2026-06-26 -
133b5832026-06-26 morning CRE report: add steve-personal as second recipient -
99d728a2026-06-26 add 1pm afternoon CRE report: new-listings diff + red-hot deals, launchd 13:00 PT -
42bff372026-06-22 weekly Crexi refresh 2026-06-22 -
a3711a12026-06-22 weekly Crexi refresh 2026-06-22 -
39b655c2026-06-21 Add rent-yield (rent÷price) metric + broader SFV sweep (81 listings) -
f205d2c2026-06-21 Verify Granada Hills #1 (pro-forma 6.66%, lease-up risk) + detailed per-property recap in daily email -
fc9d2732026-06-21 Weekly Crexi refresh job + 38 new SFV listings (62 total) -
c09a4262026-06-21 Daily 6am top-10 report -> steve-office via George (launchd) -
de42fa52026-06-21 Add daily morning-report generator (top 10 SFV CRE opportunities -> HTML email body) -
5b97a772026-06-21 Tighten live-comps units parse -
89f1ab22026-06-21 Live comps -> Browserbase/Crexi (drop Exa dependency) -
1351a122026-06-21 Expand listing set (+5) + gated live-comps route -
a22e0f02026-06-21 Chat: add per-unit rent rolls + real SFV sale comps to grounding context -
0feadae2026-06-21 Ranking integrity: verify top picks vs MLS + unverified-NOI penalty -
e27dd0a2026-06-21 SFV CRE viewer + grounded control-chat -
33e19722026-06-21 initial scaffold: SFV CRE investment ranker
Authors
- Steve535
Agents used
- vp-engineering20
- code-reviewer1
Skills used
- /condos-redfin113
- /map-points83
- /sfr-redfin79
- /residential-report77
- /latest43
- /crcp-drift-state42
- /qwen-cache19
- /ranked19
- /listings18
- /brokers-snapshot17
- /alerts-state15
- /brokers13
- /phone13
- /condos11
- /firm8
- /units8
- /serve7
- /firms7
- /agent7
- /broker7
- /crcp7
- /property-history7
- /unit7
- /sqft7
- /index7
- /residential6
- /type6
- /price6
- /cap6
- /linkedin5
Creative ideas + design notes
379ab20 · 2026-07-25 · CRCP: harden serve.js — atomic brokers-snapshot write (H3) + clip /api/comps inputs before child-process env (H2)
From a code-reviewer sweep; both verified against source. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0a55b7c · 2026-07-24 · serve.js: handle EADDRINUSE gracefully to stop launchd crash-restart storm
An unhandled listen EADDRINUSE threw a full stack trace and instantly respawned under KeepAlive, writing a 1.18M-line / 36.8MB error log when two instances raced for port 9911. Now log one line and exit cleanly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9ce5a12 · 2026-07-23 · Remove Frank + Arcstone from CRCP entirely
Purged the synthetic 'Frank Arcstone' demo broker, the Arcstone Financial lender persona, the 'frank' app user, and the real 'ArcStone Financial Inc' license entry from all layers: - DB: dropped broker_pitch/arcstone_resource/app_user, deleted demo broker/firm/ listings and the gov license row (real Frank brokers untouched) - serve.js: removed the pitch generator + Arcstone-financeability lead scoring, renamed /api/leads/frank -> /api/leads/top, dropped arcstone_flag column, genericized Call Segments (now generic broker/prospect explorer) - 7 public HTML pages: removed pitch UI, Arcstone badges, Frank labels - data: regenerated brokers-snapshot.json, scrubbed license-directory.json + gov/newport-beach.json, deleted seed-frank-arcstone.js Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
79bc0cf · 2026-07-17 · Consolidate everything into ONE tabbed Agent window (links OK again)
Per Steve: link-out is fine, but put it all in one window with tabs. So the agent modal is now
a single per-listing window with 5 tabs:
- Agent — editable name/phone/email (tel:/mailto: restored), Notes, Mark contacted
- Letters — compose + Save letter + Send via George (Gmail draft) + letter log
- Find — all external lookups in one place: firm/agent Google + LinkedIn, DRE, View source
listing, LoopNet (target=_blank, link-out OK); plus in-app 'More from this firm'
- Comps — inline Live comps
- History — inline Property history
- Row-click (and the ⧉ cell icon / ✎ Open buttons) now open this ONE window instead of a separate
inline row panel — dropped the .lexp expansion entirely.
- Moved Live comps / Property history out of the card into the window (kills duplicate #lc-/#hist-
ids). repaintModal preserves the active tab across mark/letter/send saves.
Verified headless: row->tabbed window, 5 tabs switch, Save-info stays on Agent, Save-letter keeps
Letters tab + shows the letter, Find has 8 external links, 0 errors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4d0bb9f · 2026-07-17 · Agent CRM: all-inline (no outside links) + inline Notes field
- Removed every external link from the listing/agent surfaces: address no longer links to source; dropped firm/agent Google + LinkedIn + DRE searches, LoopNet, and 'View listing'. No target=_blank. - Firm cell is now an in-app filter (click = show only that firm) instead of a Google link. - Phone/email are inline display + copy (⧉) buttons, not tel:/mailto: that launch other apps. Source listing URL + live-comp URLs are copy-buttons too, so nothing auto-opens a tab. - Contact modal is now the inline 'Agent window' with a persisted Notes field (saved with Save info); notes surface as a 🗒 chip on the row/card and render inline in the row panel. - Kept the genuinely-inline panels (Live comps, Property history render in-place). Verified headless: 0 external/tel/mailto links in table + modal, firm filters inline, notes save->chip->inline render, 0 errors. (Separate 'Best Leads for Frank' broker panel still has its own external contact links — left untouched.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ed5770b · 2026-07-17 · Harden agent-contact CRM (contrarian gate): serialize writes, stable letter ids, XSS guards
- Concurrency (HIGH #1): every read-modify-write of agent-contacts.json now runs through a promise-chain lock (withContacts) so interleaved requests cant last-writer-win and drop data. Verified: 8 parallel saves -> all 8 persisted. - Stable letter ids (HIGH #2): each letter gets a monotonic id at creation; delete addresses by id (index fallback for legacy), and send-draft records its own id-stamped letter instead of the fragile match-by-20k-char-body that could push a ghost + shift indices. Verified delete-by-id. - XSS: safeUrl() blocks javascript:/data: URLs in p.source hrefs; esc() applied to qwen.thesis, qwen.risks[], and upside_note (were raw innerHTML). Verified headless: parallel-save no-loss, delete-by-id, UI 2->1 delete, 0 errors, still fail-closed.
c164c3f · 2026-07-17 · Add gated Send-via-George button — creates a Gmail DRAFT (never sends)
- Modal gets a 📤 Send via George button beside Save letter. Confirm gate, then POSTs /api/contacts/:key/send-draft which proxies to the George gmail-agent on the same box (127.0.0.1:9850 /api/drafts) creating a Gmail DRAFT from steve-office to the agent — it is NOT sent (never calls /api/send). Letter log shows a 📤 drafted badge. - GATED THREE WAYS: draft-only (nothing leaves until Steve reviews+sends in Gmail); FAIL-CLOSED (no GEORGE_AUTH in CRCP env -> 503 george_not_configured, does nothing); never touches George's live-send route. Browser never holds George creds (server proxies). - Validates recipient email at click time (repaint-proof); graceful alert on fail-closed. Verified headless: button renders, no-email click validates, confirm gate fires, fail-closed path handled gracefully. Inert until GEORGE_AUTH is set in the CRCP env. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
f503eb1 · 2026-07-17 · Agent-contact CRM now on EVERY listing + card view (one modal everywhere)
- Card view: every card (all asset types) gets a cardAgentBlock — name/phone/email + contacted/letters chips + Contact and Mark-contacted buttons. - Promoted the compose popup into one full per-listing contact modal (openContact): editable name/phone/email, mark-contacted, compose + save letter, saved-letter log with delete. Opens from list cell, list-row expansion, AND cards. - refreshContactUI() repaints whichever surfaces are visible (list agent cell, open expansion, card block) + repaintModal() keeps the open modal fresh — no full re-render. - List-row expansion CRM simplified to a summary + Contact/Mark buttons (no duplicate form). Verified headless: Multifamily (non-condo) list + card, modal save-info/letter/mark all persist and refresh in place across surfaces; 60 cards each carry the block; 0 errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
123b0e3 · 2026-07-17 · CRCP list view: sortable + fully hrefd rows, inline row expansion, and an Agent·contact column with save-date + saved-letter CRM
- Agent · contact column inserted right after Deal score: name/phone/email with tap-to-call (tel:) + email (mailto:), Contact and Mark-contacted buttons, plus contacted-date and saved-letter chips. - Every list field now hrefd (never un-hrefd): listing firm + broker + current-broker cells link to scoped agent/firm web searches; columns already sortable. - Clicking a row opens an inline panel below it: deep searches (LoopNet, live comps, property history, firm/agent web+LinkedIn+DRE, More-from-this-firm filter) + the agent CRM (editable name/phone/email, mark-contacted, compose+save letter, letter log). - New durable CRM store: data/agent-contacts.json + /api/contacts endpoints (info / contacted / letter / letter delete). Letters are SAVED, never sent (sending stays Steve-gated via George). gitignored + rsync-excluded so a deploy can't overwrite the live contact log. Verified headless (Chrome/Playwright): column order correct, 200 rows render, expansion + CRM controls work, mark-contacted + compose-save persist to disk, 0 console errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
cb778e7 · 2026-07-16 · graceful-degrade /api/leads/frank + /api/broker (502 -> 200 when cre DB absent)
On prod (Kamatera) the broker DB module loads but there's no 'cre' Postgres,
so pool.query throws and both endpoints hard-502'd -> red console errors on
every internal page load. Return the front-end-safe shapes at 200 instead:
leads:[]+unavailable (panel already shows 'no leads (broker DB unavailable)'),
and the same {error} body (modal handles d.error; featured card guards !d.broker).
Verified by reproducing the prod condition (brokerdb loaded, DB unreachable):
both now 200; working-DB success path untouched.
b4b3c10 · 2026-07-16 · add CRCP origin-vs-live drift canary (DTD verdict D)
Read-only sha256 compare of front-end assets origin(mac3) vs live(Kamatera); worsening-only CNCP+email alert when live falls behind. Fixes the actual 9-day-silent-rot failure (invisibility) without an auto-push foot-gun. Verified: baseline-silent, catches injected drift as WORSENING, recovery silent. Scheduling (launchd, 6h) is a Steve-paste.
a8e4386 · 2026-07-16 · add on-demand CRCP front-end deploy script (mac3->Kamatera)
Root-cause tooling for the 9-day stale-deploy: crcp.agentabrams.com is a Kamatera-local rsync copy with no code-sync. This gives it a reviewable, backup-first, html/js/css-only, no---delete, NOT-scheduled deploy path. Scheduling it is intentionally left out (a cron would push uncommitted local edits to prod).
0f635d9 · 2026-07-16 · iPad fix sweep: crcp.html nav breakpoint 760->1024, licensed-agents badge width cap
- crcp.html: nav-wrap media query was max-width:760px, missed iPad portrait (768px) by 8px -> raised to 1024 + overflow-x:hidden guard. - licensed-agents.html: a stray long a.status value made a nowrap .badge balloon to 1512px and spill 1216px off-screen; capped max-width:60% + min-width:0 + ellipsis so any status text stays contained. - Verified: all 15 CRCP pages now zero horizontal overflow at 768 & 1024 both orientations (WebKit/iPad engine). Other 13 pages were already clean.
1cdd91f · 2026-07-16 · iPad fix: header nav becomes swipeable strip + grid minmax, no horizontal overflow on tablet
- Wrap header nav links + scenario seg in .topnav; on <=1024px it's a swipeable horizontal strip (fixed 1-row header preserves sticky offsets) instead of clipping off-screen. - grid tracks -> minmax(0,1fr) + 2 cols through the docked-drawer band so cards aren't crushed on iPad landscape. - html+body overflow-x:hidden, title/sub ellipsis, un-stick .bar on tablet. - Verified in WebKit (iPad Safari engine) at 768/820/1024 both orientations: zero horizontal scroll, drawer + nav touch work, no JS errors.
71b7a18 · 2026-07-13 · fix: pin Homebrew PATH in refresh-broker-snapshot.sh (launchd bare-node bug)
The 04:15 launchd run died 'node: command not found', leaving prod brokers frozen. Same fix as sibling CRCP runners. Verified node resolves under a launchd-minimal PATH.
87cbbde · 2026-07-13 · chore: lint, refactor, v0.9.0 (session close)
- email-hunt.js: rename blockedOrEmpty→shouldEscalate + clearer comment (no behavior change) - serve.js: find-email timeout message now reflects the real cap (45s/75s) instead of hardcoded 45s - crcp.html: add esc() helper + apply in webLink() (XSS-harden the site-name link) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
51399ad · 2026-07-13 · prod CRCP: snapshot fallback for stats top-brokers + id/website in snapshot top rows
- serve.js /api/crcp/stats: fill brokers/topBrokers/topFirms/enrich counts from brokers-snapshot.json when the cre DB is absent (Kamatera) — panel was empty on prod - find-email route: DB errors fall through to snapshot resolve/save (prod landmine: brokerdb requires fine but every query fails there) - brokers-db topBrokers(): + id, website so the snapshot rows can drive the contact card and the ✉ find-email button on prod - snapshot regenerated + pushed (2,537 brokers) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
47b4662 · 2026-07-13 · find-email button: on-demand broker email hunt from their website (CRCP + broker grid)
- lib/email-hunt.js: engine extracted from broker-email-finder.js (shared guards: name-match wins, refuse shared corporate pages, junk/TLD filter) + lenient-TLS fallback for expired-cert broker sites (mdrealtycorp.com) - lib/email-hunt-browser.js: headless-Chrome tier (ignoreHTTPSErrors) shared by CLI+server - serve.js: POST /api/broker/find-email — hunts the broker's own site, saves to broker.email (PG) or brokers-snapshot.json (DB-less prod) - crcp.html + broker-grid.html: website links now show the SITE NAME (domain) instead of bare 'site↗'; '✉ find email' button where email is missing; modal variant too Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
b6bd885 · 2026-07-10 · chore: v0.5.0 — DRE-licensed agents feature (session close)
Contrarian pass served as the quality gate this session (3 bugs fixed). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6abac2e · 2026-07-10 · CRCP DRE: contrarian fixes — verified only on exact match, drop dead DB branch
- pick(): surname-only match REMOVED (wrong-person risk). Now dre_verified=true ONLY for a single exact full-name match; >1 exact or first+last -> 'probable' (license shown, never badged verified). Invariant: no probable is dre_verified. - serve.js: removed the broken DB-first branch (broker table has no license_type/ license_status/license_expiration/firm_name cols; it always threw + was swallowed). Snapshot is the canonical DRE store (prod has no Postgres). - viewer: 'probable' badge/pill/filter, is_proof_run coverage banner, unmatched=no-license. - Regen 25-agent proof: 10 verified, 9 probable, 6 unmatched, 0 errors. Rendered headless (cards/badges verified). $0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e914e06 · 2026-07-10 · CRCP: DRE-licensed agents/brokers DB from CA public govt data
- scripts/fetch-dre-licenses.js: name->License ID->detail against the CA DRE public lookup (www2.dre.ca.gov), $0 local curl, resumable, honest labeling - /api/agents/licensed route (DB->snapshot fallback, same idiom as /api/residential) - public/licensed-agents.html viewer: search + sort + density, per-agent DRE verification (license #, type Salesperson/Broker, status, expiration, resp. broker) - mls.html nav link; bounded 25-agent proof run (19 verified, 0 errors, $0) - full 637 run + launchd + prod deploy drafted to pending-approval (Steve-gated) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
92df973 · 2026-07-10 · scrapers: capture LATITUDE/LONGITUDE from gis-csv -> lat/lng (was discarded)
~6,100 active residential listings (5,081 SFR + 1,031 condo) were invisible on the map for lack of coordinates. The feed carries LATITUDE/LONGITUDE; now parsed + upserted (COALESCE so an existing geocode is never nulled). Map coverage climbs to ~100% as sweeps run. Verified: SFR 215/215, condo 68/68 on freshly-swept regions.
b7ae291 · 2026-07-07 · chore: lint (syntax-check ✓), v0.3.1 → v0.4.0 (session close)
Refactor pass intentionally skipped: session code is already deployed + live-verified on prod; refactoring now would create local↔prod drift with no redeploy at close. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0ab08f2 · 2026-07-07 · add fix-workspace-trust.js — restores hasTrustDialogAccepted after mac3 migration
The Jul 2 Claude update + mac3 migration reset ~/.claude.json workspace trust to false, silently breaking every headless 'claude -p' launchd job (Unknown command on slash-command jobs; ignored permissions on plain-prompt jobs). This one-shot restores it with a backup. Paste-safe alternative to a long node -e one-liner. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7ffa8da · 2026-07-07 · crcp: auto-rebuild assessor SQLite on ingest + refresh/push wrapper
- ingest-assessor.js now rebuilds data/assessor.sqlite at the end of every ingest (event-driven, non-fatal) so the prod file can never drift from the DB - run-assessor-refresh.sh: rebuild-from-DB -> sanity floor (>=2M rows) -> md5 skip-if-unchanged -> data-only rsync to prod, George alert on failure (mirrors run-residential-refresh.sh) - com.steve.crcp-assessor-refresh.plist: weekly (Sun 03:00) schedule, NOT loaded (auto-pushes to prod = Steve-gated); checksum guard makes an unchanged week a no-op Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
13a73ac · 2026-07-07 · crcp: bridge 2.43M assessor roll to DB-less prod via read-only SQLite + honest miss copy
- export-assessor-sqlite.js builds data/assessor.sqlite (449MB, indexed on situs_house_no+situs_street) from cre.assessor_parcel; keyset-paginated, DELETE journal mode so it's a single self-contained read-only file (no WAL sidecars) - serve.js /api/property-history: SQLite fallback when Postgres is absent (prod), DB-first preserved; better-sqlite3 added as dep (npm ci rebuilds it on Linux) - index.html/mls.html: replace false 'still ingesting' banner (roll landed 2026-06-30) with honest 'no assessor record matched' miss message - gitignore the 449MB file (ships via rsync, not git) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
67dff5f · 2026-07-07 · map: residential on the map colored by status (Active/In Escrow/Sold/Withdrawn)
- build-map-points.js rebuilds data/map-points.json from the DB: keeps commercial points, refreshes
9.6k geocoded residential (SFR+condo) with an rstatus lifecycle field.
- map.html: new 'Color: Status' mode + residential-status legend key. Fixed the {points:[...]} shape.
- refresh pipeline rebuilds + rsyncs map-points.json each sweep so the map tracks fresh status.
d8dc3ea · 2026-07-07 · residential: price-drop tracking — 💸 Price Cut chip + report section
- schema: prev_price + price_changed_at on sfr/condo (condo_card recreated, +lat/lng). - scrapers set prev_price=old price + price_changed_at=now() only when price actually changes. - Price Cut chip = price < prev_price within N days; Prev $ column; report tile + Price Cuts table. - Verified via simulated prior price (1.5M->750k captured); reset the test row so no fake cut ships.
eb0c10c · 2026-07-07 · residential report: LA Residential Pulse (SFR+condo) email — just listed / in escrow / just sold / fell out
- residential-report.js builds the HTML market-pulse from the cre DB ($0 local): 5 headline tiles + Just Listed / Just Sold / Fell Out tables + In-Escrow-by-city. - run-residential-report.sh sends via george-send rawfile pattern (size-safe) to steve-office + steve-personal, with a build-size sanity gate. - launchd com.steve.crcp-residential-report fires 06:30/12:30/18:30/00:30 — :30 past so it runs AFTER the :00 residential refresh sweep lands. $0/run.
a31904e · 2026-07-07 · listings: real DAYS ON MARKET (gap-immune Just Listed) + In Escrow / Fell Out tabs
- Capture Redfin DAYS ON MARKET + STATUS (was discarding both); derive listed_date. Just Listed now keys on days_on_market (real list age) not our first-seen date — fixes the scrape-gap artifact. - Scrapers now also sweep status=130 (pending/contingent) so in-escrow homes are captured; track prev_market_status for fell-out-of-escrow detection. - New chips: 🤝 In Escrow (pending/contingent), ↩️ Fell Out of Escrow (was pending, now active). Just Sold = closed escrow. Status shows In Escrow; new Market + Days on Mkt columns. - FIX: cast $N::int in the upsert — a bound param used only inside CURRENT_DATE-($N)::int failed Postgres type inference (masked by .catch(()=>null)). schema: days_on_market/listed_date/ market_status/prev_market_status on sfr+condo; condo_card recreated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fae3225 · 2026-07-07 · mls: Just Listed + Just Sold quick-filter chips with adjustable day window (persisted)
- 🆕 Just Listed = active & first_seen within N days; ✅ Just Sold = disposition sold & left market (off_market_at) within N days. Mutually exclusive; 'within N days' input (default 7, localStorage). - created_at flows through /api/residential + mappers as first_seen.
2d64c25 · 2026-07-07 · residential: off-market tracking — see pulled listings, labeled SOLD vs WITHDRAWN
- schema: sfr/condo gain last_seen/status/off_market_at/disposition/sold_price/sold_date; condo_card view recreated to expose them. - scrapers stamp last_seen=now() on every seen listing + reset a re-listed home to active. - mark-off-market.js: after a FULL sweep, flag listings that stopped appearing (last_seen<sweep start) as off_market, then cross-ref closed_sale (normalized addr key) -> disposition sold (+price/date) vs withdrawn. >40%-would-flag safety abort guards partial/throttled sweeps. - export-residential-snapshots.js: dumps BOTH snapshots post-mark w/ lifecycle fields (active + off-market within 180d). Supersedes export-sfr-snapshot.js in the refresh flow. - /api/residential + /api/condos return lifecycle fields, active-first. - mls.html: Status now Active/Sold/Withdrawn + Pulled/Sold$/Sold-date columns; Status facet buckets Active vs Off-market. - refresh.sh: capture MARK_SINCE pre-sweep -> mark -> combined export. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ce1d6f2 · 2026-07-07 · refresh: email steve-office (George) on sanity-gate abort or rsync failure
Silent-failure alerting for the 4x/day residential refresh — reuses the fleet's canonical _shared/george-send.sh. Fires only on abort (bad scrape blocked) or rsync-to-prod failure; clean runs stay silent. Recipient overridable via RESIDENTIAL_REFRESH_TO. Verified via test send (success:true).
4a6fac7 · 2026-07-06 · residential refresh: CC_LOCAL=1 mode ($0 local Chrome, no Browserbase) + 4x/day launchd
- Both Redfin scrapers gain a CC_LOCAL branch: launch local Chrome (residential IP clears Redfin's bot wall) instead of a paid Browserbase session. Cloud path untouched (default). - run-residential-refresh.sh: local scrape both -> export SFR snapshot -> sanity-gate -> rsync data-only (2 JSON snapshots) to prod. No code deploy, no pm2 reload (snapshot fallbacks readFileSync per request). $0/run. - launchd com.steve.crcp-residential-refresh fires 06:00/12:00/18:00/00:00. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9a70d22 · 2026-07-06 · residential: fresh Redfin scrape snapshots (10.6k SFR + 1.29k condos) + lift condo cap 1000->5000
Scrape 2026-07-06: SFR 9665->10617 (+952), condos 727->1290. Snapshots regenerated for prod (no-DB) fallback. $3.20 Browserbase. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0dae177 · 2026-07-06 · mls: add residential inventory (9.6k SFR + condos) alongside CRE + Census rent averages
- /api/residential endpoint (DB-first, sfr-redfin.json snapshot fallback for prod) - export-sfr-snapshot.js: dump public.sfr -> data/sfr-redfin.json (prod has no PG) - mls.html: mapSfr() + fetch residential; Single-Family/Condo asset-class chips auto-build - Census median gross rent join by city -> Area Rent/mo + Area GRY% cols + stat pills (area proxy, honestly labeled) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c02f5b2 · 2026-07-02 · feat(index): Amazon-style docked left filter rail + List/Grid toggle + per-field show/hide (34 fields) + density to 20 + new data points (price/unit, price/SF, GRM, year built, days-on-market, ZIP)
- Left filter drawer now docks as a persistent Amazon-style rail on desktop (>=901px); stays off-canvas burger on mobile - Grid/List segmented toggle in results bar; List renders a sortable columnar table (sticky Property column), columns driven by field toggles - Fields show/hide panel: every card field + several list-only columns, All/None/Default, persisted to localStorage - Density slider max 6 -> 20 cards per row - New computed data points: price/unit, price/SF, GRM, year built, days-on-market, ZIP Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
07e0977 · 2026-07-01 · feat: deeds FREE-PASS part (a) — extend broker-history to all 1,407 listings
Free LA County assessor roll (assessor_parcel) attaches last deed date + AIN + year-built to every ranked listing via the same address match /api/property-history uses. 1,188/1,407 matched (84%); the 11 broker-enriched pilot records are merge-preserved. /api/broker-history now prefers the full set, pilot as fallback. Broker (part b) stays gated (deeds carry no agent name). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
192e889 · 2026-06-30 · feat: broker-history pilot — transaction history + listing-agent enrichment on property cards
- data/broker-history-pilot.json: pilot dataset covering top 13 of the 30 sampled ranked
properties. Each entry has: LA County Assessor AIN + recording_date (last deed, Tier A),
sale-price history where findable from public MLS search results (Tier B), and the
current listing agent name/DRE/firm/phone from Redfin/Zillow/Compass/LoopNet results.
12/13 properties have a named broker or firm (92% coverage in pilot).
- scripts/serve.js: adds GET /api/broker-history endpoint serving the pilot JSON. Indexed
by listing id and lowercase address for fast O(1) card-level lookup. Graceful 503 if
file absent; full set returned when no query params (for bulk UI hydration).
- public/index.html:
- CSS: .brokerflag (amber "Prior broker on file" badge), .txhist (deed + sale date
rows with Tier A/B color coding), .brokerline (agent name/DRE/phone chip).
- JS: loads /api/broker-history at boot into window.BROKER_HIST (by id) +
window.BROKER_HIST_ADDR (by address); re-renders when DATA is ready.
- card(): injects brokerFlagBadge, txHistHTML(), brokerLineHTML() per property using
the pilot index — degrades gracefully (empty string) when property not in pilot set.
Coverage findings (pilot sample of 30):
- Assessor parcel hit: 27/30 (90%). Three misses: Granada Hills (long address), Reseda
(dual-number parcel 7302-7304), Tujunga (Foothill address variant).
- closed_sale DB: 0/30 matches. The 17k rows are residential SFR/condo (Redfin
gis-csv); none are commercial multifamily — not a useful source for these properties.
- Broker/agent found (current listing): 12/13 enriched (92%). 1 miss (553 Stanford Ave
— broker not surfaced in public search results).
- Historical sale price found: 5/13 (38%). Sources: Redfin search snippets, Zillow.
- Historical BROKER on a PAST sale: 2/13 (15%) — 9350 Tampa 2022 listing (Stephanie
Vitacco/Equity Union) and 8022 Felix 2025 sale (Brandon Hauer). Past-sale brokers are
NOT in any free public record (deed carries no agent name; confirmed against RR/CC FAQ).
Equity Union finding: appears on 4 of the top 10 ranked properties (ranks 2, 4, 6, 10).
Marcus & Millichap on rank 23 (383 W 14th St San Pedro).
Lyon Stahl/Cameron Samimi on rank 8 (10370 Ashton).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ac6be59 · 2026-06-30 · Map markers → 100-yr property-history popup (📜 History link in every marker popup)
Adds a '📜 History' link to each Leaflet marker popup opening the address-only property-history modal (assessor parcel + sold history + permits) via /api/property-history — the same feature now on the MLS grid, front-page + broker modals. Self-contained modal on map.html. Verified headless: opens, 0 errors.
c469c56 · 2026-06-30 · Add CSV export to MLS + broker grids (exports current filtered/sorted rows)
⬇ CSV button on both spreadsheet views — client-side export of the currently filtered+sorted rows with all columns (proper quote-escaping). Verified headless: cre-mls-1407.csv + cre-brokers-2537.csv download, 0 errors.
5a26b03 · 2026-06-30 · Make the grids actionable: MLS row → 100-yr property history popup; broker-grid row → full contact/listings/pitch modal
mls.html: click any property (list row or grid card) → property-history popup (assessor parcel + sold history + permits, address-only). broker-grid.html: click any broker → full modal (contact + current/ expired/sales listings with dates+MLS + ready Arcstone pitch). Header-sort clicks excluded. Verified headless: both open correctly, sort still works, 0 console errors.
ddcd86b · 2026-06-30 · Broker grid+list view — all 2,537 brokers, every field sortable & searchable
public/broker-grid.html: List (spreadsheet, 15 cols: name/firm/type/listings/total-assets/phone/email/ website/linkedin/title/DRE-MLS/specialties/office/source/added) + Grid toggle. Every column click-sorts (numeric-aware), global search across all fields. Backed by new GET /api/brokers/all (all fields + listings count). Linked from CRCP nav + front-page header. Verified headless: sort/search/toggle, 0 errors.
03d9129 · 2026-06-30 · Broker card: current+expired+sales with dates/MLS#/url across both modals
/api/broker: current listings now carry listed_at (+zip/units); new 'expired' (best-effort match of a broker's listings against the sold feed — honest empty-state since there's no MLS off-market feed); 'sales' (area sold comps) enriched with sold_date + MLS# + url + beds/baths/sqft. Front-page #bkmodal AND crcp.html modal both render Current(dated) / Expired-off-market / Sales(dated+MLS+link) sections. name/email/phone/ website already present. Verified headless on front modal (all sections, dates, MLS#, 0 errors).
9c3c4e8 · 2026-06-30 · Add MLS spreadsheet + grid view (sortable & searchable, all property data)
public/mls.html: MLS-style view over ranked.json (1,407 properties) — Table (spreadsheet, sticky header, 18 cols: address/city/zip/type/price/units/sqft/$per-unit/$per-sqft/cap/year/rent-control/ status/firm/finance/score/source) AND Grid toggle. Every column click-sorts (numeric-aware), global search filters all fields. Header link added on index.html. Verified headless: sort/search/toggle, 0 errors.
bfc32f8 · 2026-06-30 · fix(assessor): stop on exceededTransferLimit, not short page (was truncating at 294k/2.43M) + CC_START_OFFSET resume
The ArcGIS parcel layer returns short pages (<maxRecordCount) mid-dataset while exceededTransferLimit is still true, so breaking on feats.length<PAGE silently stopped the pull at ~12%. Now terminates only on the server's real end-of-data signal, and CC_START_OFFSET resumes/appends a partial pull.
69ac4d3 · 2026-06-30 · CRE :9911 — 'Best leads for Frank' ranked list: expandable MLS-style current listings + Sold button + 100-yr address-only property history
- serve.js: GET /api/leads/frank (brokers ranked by Arcstone-financeability of current listings — mixed-use/condo x3, multifamily/commercial x2; excludes Frank; returns listings_json) + GET /api/property-history (address-only, NO owner names — assessor parcel roll + closed_sale sold history + WhoLivedThere permits/events). - index.html: front-page section is now 🎯 Best leads for Frank — ranked, click-to-expand leads; each shows MLS-style current listings (address/type/price/units/cap), a Sold/area-history button (area sold comps), and per-listing 📜 100-yr property history popup (no names). Featured Frank card + contact/pitch modal retained. Verified headless: 40 leads, expand 16 MLS rows, history popup + Sold all work, 0 console errors. Assessor facts (year built/beds/baths) populate once the 2.43M-roll ingest lands.
ee71adf · 2026-06-30 · CRE :9911 — front-page broker contacts (name/company/phone/email) + ready-pitch popup, Frank Arcstone demo, LinkedIn follow-tab
- index.html: self-contained Brokers & Agents panel above the deals grid — featured Frank Arcstone card (full contact + one-click pitch popup) + top-25 roster (name/company/phone/email), click any row -> contact modal with the ready-to-send Arcstone pitch (DRAFT; send stays George/Steve-gated). Header links: 👤 Brokers, 🔗 LinkedIn. - linkedin.html: TOS-compliant follow-list for Frank — every broker/agent with stored LinkedIn profile or a people-search fallback URL, client-side followed-state, search + filter. Links only, no automation. - serve.js: GET /api/brokers/linkedin (profile/search links + counts). Frank pitch pre-generated (ready to send). Verified front page + tab 200, route + Frank contact/pitch OK.
9c8ad7b · 2026-06-26 · CRE: multi-firm listing-source framework + firm badges in viewer
- sources/firms.js: shared normalizer + dedup + declarative firm registry (Crexi verified; Marcus & Millichap, Lee & Associates, Colliers, CBRE, JLL wired with generic listing-shape sniffer, flagged needs-discovery) - refresh-all.js: one Browserbase session drives every firm through the same capture->normalize->dedup->append path into listings.json - discover-firm.js: one-command schema cracker to lock each new firm - viewer: 🏢 firm/source badge on every deal card (verified 104 cards render) - npm run refresh / npm run discover
39b655c · 2026-06-21 · Add rent-yield (rent÷price) metric + broader SFV sweep (81 listings)
- finance.js: grossYield = annual gross rent / price (from rent_roll/gross_actual) — surfaces 'rent close to price' - viewer: Rent Yield sort + per-card 'rent yld' badge; morning-report: rent yield in recap - broader Crexi sweep (+19 cities) -> 81 listings total
File tree
- .deploy.conf
- .gitignore
- 5x/DTD-deal-score.md
- 5x/NIGHT-LOG.md
- 5x/OVERNIGHT-REPORT.md
- 5x/REPORT.md
- 5x/brokers-assert.js
- 5x/brokers-sweep.raw
- 5x/brokers-sweep2.raw
- 5x/crcp-assert.js
- 5x/crcp-sweep-1.raw
- 5x/crcp-sweep-2.raw
- 5x/deals-assert.js
- 5x/health-check.sh
- 5x/index-assert.js
- 5x/map-assert.js
- 5x/map-sweep-1.raw
- 5x/rentrolls-assert.js
- 5x/sales-assert.js
- 5x/sales-sweep.raw
- 5x/sales-sweep2.raw
- 5x/sweep-1.md
- 5x/sweep-1.raw
- 5x/sweep-2-ct.raw
- 5x/sweep-2.md
- 5x/sweep-2.raw
- 5x/sweep-3.md
- 5x/sweep-4.md
- 5x/sweep-4.raw
- 5x/sweep-5.raw
- DW-Wins-Dashboard.png
- claude-chat-bridge.cjs
- data/.pre-afternoon-ids.json
- data/afternoon-report.html
- data/alerts-config.json
- data/alerts-state.json
- data/broker-enrich-poc.json
- data/broker-history-full.json
- data/broker-history-pilot.json
- data/brokers-snapshot.json
- data/closed-sales.json
- data/comps.json
- data/condos-redfin.json
- data/condos-report.html
- data/condos-sample.json
- data/crcp-drift-state.json
- data/demographics.json
- data/fha-approved-condos.json
- data/fha-loans.json
- data/firm-ig-cache.json
- data/firm-ig-map.json
- data/firm-ig-thumbs/bhhscaliforniaproperties-0.jpg
- data/firm-ig-thumbs/bhhscaliforniaproperties-1.jpg
- data/firm-ig-thumbs/bhhscaliforniaproperties-2.jpg
- data/firm-ig-thumbs/carolwood-0.jpg
- data/firm-ig-thumbs/carolwood-1.jpg
- data/firm-ig-thumbs/carolwood-2.jpg
- data/firm-ig-thumbs/cbre-0.jpg
- data/firm-ig-thumbs/cbre-1.jpg
- data/firm-ig-thumbs/cbre-2.jpg
- data/firm-ig-thumbs/century21-0.jpg
- data/firm-ig-thumbs/century21-1.jpg
- data/firm-ig-thumbs/century21-2.jpg
- data/firm-ig-thumbs/coldwellbanker-0.jpg
- data/firm-ig-thumbs/coldwellbanker-1.jpg
- data/firm-ig-thumbs/coldwellbanker-2.jpg
- data/firm-ig-thumbs/compass-0.jpg
- data/firm-ig-thumbs/compass-1.jpg
- data/firm-ig-thumbs/compass-2.jpg
- data/firm-ig-thumbs/corinthiantitle-0.jpg
- data/firm-ig-thumbs/corinthiantitle-1.jpg
- data/firm-ig-thumbs/corinthiantitle-2.jpg
- data/firm-ig-thumbs/cushwake-0.jpg
- data/firm-ig-thumbs/cushwake-1.jpg
- data/firm-ig-thumbs/cushwake-2.jpg
- data/firm-ig-thumbs/douglaselliman-0.jpg
- data/firm-ig-thumbs/douglaselliman-1.jpg
- data/firm-ig-thumbs/douglaselliman-2.jpg
- data/firm-ig-thumbs/exprealty-0.jpg
- data/firm-ig-thumbs/exprealty-1.jpg
- data/firm-ig-thumbs/exprealty-2.jpg
- data/firm-ig-thumbs/firstteam-0.jpg
- data/firm-ig-thumbs/firstteam-1.jpg
- data/firm-ig-thumbs/firstteam-2.jpg
- data/firm-ig-thumbs/jll-0.jpg
- data/firm-ig-thumbs/jll-1.jpg
- data/firm-ig-thumbs/jll-2.jpg
- data/firm-ig-thumbs/johnhartre-0.jpg
- data/firm-ig-thumbs/johnhartre-1.jpg
- data/firm-ig-thumbs/johnhartre-2.jpg
- data/firm-ig-thumbs/kellerwilliams-0.jpg
- data/firm-ig-thumbs/kellerwilliams-1.jpg
- data/firm-ig-thumbs/kellerwilliams-2.jpg
- data/firm-ig-thumbs/lyonstahl-0.jpg
- data/firm-ig-thumbs/lyonstahl-1.jpg
- data/firm-ig-thumbs/lyonstahl-2.jpg
- data/firm-ig-thumbs/newmark-0.jpg
- data/firm-ig-thumbs/newmark-1.jpg
- data/firm-ig-thumbs/newmark-2.jpg
- data/firm-ig-thumbs/oldrepublictitle-0.jpg
- data/firm-ig-thumbs/oldrepublictitle-1.jpg
- data/firm-ig-thumbs/oldrepublictitle-2.jpg
- data/firm-ig-thumbs/pinnacleestate-0.jpg
- data/firm-ig-thumbs/pinnacleestate-1.jpg
- data/firm-ig-thumbs/pinnacleestate-2.jpg
- data/firm-ig-thumbs/remax-0.jpg
- data/firm-ig-thumbs/remax-1.jpg
- data/firm-ig-thumbs/remax-2.jpg
- data/firm-ig-thumbs/sothebysrealty-0.jpg
- data/firm-ig-thumbs/sothebysrealty-1.jpg
- data/firm-ig-thumbs/sothebysrealty-2.jpg
- data/firm-ig-thumbs/stewarttitleco-0.jpg
- data/firm-ig-thumbs/stewarttitleco-1.jpg
- data/firm-ig-thumbs/stewarttitleco-2.jpg
- data/firm-ig-thumbs/theagencyre-0.jpg
- data/firm-ig-thumbs/theagencyre-1.jpg
- data/firm-ig-thumbs/theagencyre-2.jpg
- data/firm-ig-thumbs/thebeverlyhillsestates-0.jpg
- data/firm-ig-thumbs/thebeverlyhillsestates-1.jpg
- data/firm-ig-thumbs/thebeverlyhillsestates-2.jpg
- data/gov/aspen.json
- data/gov/atherton.json
- data/gov/beverly-hills.json
- data/gov/greenwich.json
- data/gov/hamptons.json
- data/gov/hillsborough.json
- data/gov/index.json
- data/gov/las-vegas.json
- data/gov/malibu.json
- data/gov/miami-beach.json
- data/gov/miami.json
- data/gov/montecito.json
- data/gov/naples.json
- data/gov/newport-beach.json
- data/gov/nyc.json
- data/gov/palm-beach.json
- data/gov/san-francisco.json
- data/gov/silicon-valley.json
- data/gov/telluride.json
- data/gov/texas.json
- data/gov/vail.json
- data/gov/woodside.json
- data/last-refresh.json
- data/latest.json
- data/license-directory.json
- data/licensed-agents.json
- data/listings.json
- data/map-points.json
- data/metro-listings-config.json
- data/qwen-cache.json
- data/ranked.json
- data/redfin-agents.json
- data/redfin-neighborhoods.json
- data/redfin-regions.json
- data/rent-rolls/.gitignore
- data/rent-rolls/.gitkeep
- data/rent-rolls/SAMPLE-12unit-demo.json
- data/residential-report.html
- data/sfr-redfin.json
- deploy/README.md
- deploy/com.steve.crcp-drift-canary.plist
- deploy/com.steve.cre-afternoon-report.plist
- deploy/com.steve.cre-morning-report.plist
- deploy/com.steve.cre-viewer.plist
- deploy/com.steve.cre-weekly-refresh.plist
- deploy/launchd/com.steve.crcp-residential-refresh.plist
- deploy/launchd/com.steve.crcp-residential-report.plist
- deploy/push-frontend-kamatera.sh
- docs/data-integration-plan.md
- docs/loopnet-and-rent-rolls.md
- package-lock.json
- package.json
- public/broker-grid.html
- public/brokers.html
- public/col-resize.js
- public/condos.html
- public/crcp-grid.css
- public/crcp-grid.js
- public/crcp.html
- public/deal-score.js
- public/deals.html
- public/fha-loans.html
- public/finance.js
- public/gov-agents.html
- public/graphics.html
- public/index.html
- public/licensed-agents.html
- public/licensed.html
- public/linkedin.html
- public/map.html
- public/mls.html
- public/rent-rolls.html
- public/sales.html
- scripts/afternoon-report.js
- scripts/analyze.js
- scripts/assumable-heuristic.js
- scripts/broker-email-commit-from-logs.js
- scripts/broker-email-finder.js
- scripts/broker-enrich-poc.js
- scripts/build-deed-history.js
- scripts/build-map-points.js
- scripts/capture-schema.js
- scripts/classify-warrantability.js
- scripts/com.steve.crcp-assessor-refresh.plist
- scripts/com.steve.crcp-broker-snapshot.plist
- scripts/com.steve.crcp-email-alerts.plist
- scripts/com.steve.crcp-listings-rotating.plist
- scripts/condos-report.js
- scripts/confirm-broker-ca-dre-pass2.js
- scripts/confirm-broker-ca-dre-pass3.js
- scripts/confirm-broker-ca-dre.js
- scripts/crcp-drift-canary.js
- scripts/db/agent-residential-schema.sql
- scripts/db/assessor-schema.sql
- scripts/db/assumable-schema.sql
- scripts/db/broker-enrich-schema.sql
- scripts/db/broker-schema.sql
- scripts/db/brokers-db.js
- scripts/db/condo-schema.sql
- scripts/db/listing-signals-migration.sql
- scripts/db/load-fha-condos.js
- scripts/db/off-market-migration.sql
- scripts/db/pitch-schema.sql
- scripts/db/price-drop-migration.sql
- scripts/db/sfr-schema.sql
- scripts/db/transaction-parties-schema.sql
- scripts/discover-firm.js
- scripts/discover.js
- scripts/discover2.js
- scripts/email-alerts.js
- scripts/enrich-tier1-crexi.js
- scripts/enrich-tier2-firmsites.js
- scripts/enrich-tier3-search.js
- scripts/export-assessor-sqlite.js
- scripts/export-brokers-snapshot.js
- scripts/export-gov-snapshot.js
- scripts/export-license-directory.js
- scripts/export-residential-snapshots.js
- scripts/export-sfr-snapshot.js
- scripts/export-to-gsheet.js
- scripts/export-to-xlsx.js
- scripts/fetch-assessor-keyset.js
- scripts/fetch-assessor.js
- scripts/fetch-brokers.js
- scripts/fetch-closed-sales.js
- scripts/fetch-condos-redfin.js
- scripts/fetch-condos-sample.js
- scripts/fetch-demographics.js
- scripts/fetch-dre-licenses.js
- scripts/fetch-fha-condos.js
- scripts/fetch-fha-loans.js
- scripts/fetch-redfin-agents.js
- scripts/fetch-sfr-agents.js
- scripts/fetch-sfr-redfin.js
- scripts/fix-workspace-trust.js
- scripts/geocode-census.js
- scripts/ingest-assessor.js
- scripts/ingest-gov-ca-cities.js
- scripts/ingest-gov-ca.js
- scripts/ingest-gov-co.js
- scripts/ingest-gov-ct.js
- scripts/ingest-gov-fl-cities.js
- scripts/ingest-gov-fl.js
- scripts/ingest-gov-nv.md
- scripts/ingest-gov-ny.js
- scripts/ingest-gov-tx.js
- scripts/install-alerts-launchd.sh
- scripts/lib/email-hunt-browser.js
- scripts/lib/email-hunt.js
- scripts/live-comps-bb.js
- scripts/mark-off-market.js
- scripts/morning-report.js
- scripts/probe-brokers.js
- scripts/probe-redfin-agents.js
- scripts/probe-redfin-csv.js
- scripts/probe-redfin.js
- scripts/probe-redfin2.js
- scripts/probe-redfin3.js
- scripts/refresh-all.js
- scripts/refresh-broker-snapshot.sh
- scripts/refresh-firm-ig.js
- scripts/refresh-listings-multi.js
- scripts/refresh-listings-rotating.sh
- scripts/refresh-listings.js
- scripts/rent-roll-ingest.js
- scripts/report-extras.js
- scripts/residential-report.js
- scripts/resolve-redfin-neighborhoods.js
- scripts/resolve-redfin-regions.js
- scripts/run-afternoon-report.sh
- scripts/run-assessor-refresh.sh
- scripts/run-condos-report.sh
- scripts/run-email-alerts.sh
- scripts/run-morning-report.sh
- scripts/run-residential-refresh.sh
- scripts/run-residential-report.sh
- scripts/run-sweep.sh
- scripts/run-weekly-refresh.sh
- scripts/scrape-crexi.js
- scripts/serve.js
- scripts/sources/appraisal-panel.js
- scripts/sources/firms.js
- scripts/sources/fnma-cpm.js
- scripts/sources/la-county.js
- scripts/sources/loopnet.js
- scripts/sources/title-records.js
- scripts/sources/wholivedthere.js
- scripts/sweep-remaining-metros.sh