{"slug":"bubbesblock","total":22,"limit":100,"offset":0,"since":null,"commits":[{"hash":"8159840","date":"2026-09-11 04:04:35 -0700","author":"Steve Abrams","subject":"TK-11341: commit missing public/privacy.html (server.js route existed, file was untracked)","body":"Commit 0f22c5c added the /privacy route to server.js but did not stage\nthe HTML file itself — it was created but left untracked. Now committed.\nRevert: git revert HEAD\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"0f22c5c","date":"2026-09-10 12:18:46 -0700","author":"Steve Abrams","subject":"Add real privacy page + /privacy route (was catch-all serving homepage) — AdSense","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"f17e95d","date":"2026-09-10 11:54:08 -0700","author":"Steve Abrams","subject":"TK-11341: strip AdSense loader from private /inbox route (serve-time guard); revert to restore","body":"Serve inbox/notifications/bookmarks with any AdSense loader stripped at\nserve-time (before express.static), so a stale on-disk file can never re-leak\nads on a private, login-gated page. Public content pages keep their loader.\nRoot cause of the live leak: commit 5a6874a's per-file fix was never deployed\nto prod; this guard also hardens against that recurrence.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BQfWFUMW9XZMNwUAuHNtFq"},{"hash":"5a6874a","date":"2026-09-10 00:59:24 -0700","author":"Steve Abrams","subject":"Keep AdSense out of private notification pages","body":""},{"hash":"8c817f2","date":"2026-09-10 00:54:10 -0700","author":"Steve Abrams","subject":"Keep AdSense out of private inbox","body":""},{"hash":"47b8fc0","date":"2026-09-09 16:02:01 -0700","author":"Steve","subject":"TK-11341: add AdSense Auto-Ads loader + ads.txt (revert to remove ads)","body":""},{"hash":"c1615c0","date":"2026-08-17 13:24:28 -0700","author":"Steve Abrams","subject":"GA4: inject gtag G-DG1WN1HSHS into bubbesblock index.html","body":""},{"hash":"d67ffa0","date":"2026-08-05 08:31:19 -0700","author":"Steve Abrams","subject":"remove AdSense from bubbesblock (login-gated UGC app = account-ban risk, not a content publisher)","body":""},{"hash":"67829e4","date":"2026-08-04 17:46:18 -0700","author":"Steve Abrams","subject":"Refactor SELECT * -> explicit columns (clears pre-deploy PII lint; behavior-identical)","body":""},{"hash":"38df1c3","date":"2026-08-04 16:51:12 -0700","author":"Steve Abrams","subject":"AdSense: loader + ads.txt (ca-pub-5278231299883833) — prep, not deployed","body":""},{"hash":"977e8e6","date":"2026-06-19 16:26:55 -0700","author":"Steve","subject":"Security hardening (code-reviewer pass): server-side XSS escaping on all user input, fix inbox IDOR, stop search leaking addresses, opp-response uniqueness, safe notification links, prod SESSION_SECRET required + secure cookie, json limit, unhandledRejection guard","body":""},{"hash":"7cbd55e","date":"2026-06-19 16:19:19 -0700","author":"Steve","subject":"Build out every button with real UX: sessions + claim gate, write endpoints (posts/comments/reactions/respond/unlock/rsvp/join/bookmark), search, notifications, inbox, events, groups, content pages; live home-history wired; interaction layer (app.js) + modals/toasts","body":""},{"hash":"698091f","date":"2026-06-19 16:12:06 -0700","author":"SteveStudio2","subject":"Add home-history module with LA County parcel + LADBS permit lookup","body":"- lib/home-history.js: CommonJS module exporting getHomeHistory(address)\n  pulls Tier A data from LA County GIS ArcGIS REST (free, no auth) and\n  LADBS Socrata permit datasets; JSON cache at data/home-history.json;\n  resilient (never throws, returns honest unavailable stub on no data)\n- data/home-history.json: pre-seeded for 13 BubbesBlock lead addresses;\n  2 with real assessor data (18406 Bessemer St + 18700 Ventura Blvd),\n  11 honest unavailable stubs (fictionally-numbered addresses not in the\n  LA County public parcel roll)\n- scripts/seed-home-history.js: one-shot cache warmer\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"552f29c","date":"2026-06-19 15:39:10 -0700","author":"Steve","subject":"Rebrand: original BubbesBlock logo (row-of-homes + heart) + warm mulberry palette; drop Nextdoor-style green house mark","body":""},{"hash":"e1c77a4","date":"2026-06-19 15:34:31 -0700","author":"Steve","subject":"Add Opportunity Alerts surface: 12 similar-but-not-exact home-service leads (from iPhone Nextdoor screenshots, agent-extracted), Tarzana-localized, wholivedthere enrichment hook, DB-backed","body":""},{"hash":"0110f82","date":"2026-06-19 15:24:21 -0700","author":"Steve","subject":"Add BubbesBlock Postgres DB (posts+comments+config), migration, DB-backed server with JSON fallback; live on bubbesblock.com","body":""},{"hash":"18d989b","date":"2026-06-19 14:21:02 -0700","author":"Steve","subject":"Add /healthz route + deploy config; live on bubbesblock.com (port 9825)","body":""},{"hash":"d0b4a97","date":"2026-06-19 14:16:28 -0700","author":"Steve","subject":"Wire BubbesBlock live: Express server + data-driven block feed & post detail, seeded with religious-theme posts","body":""},{"hash":"5be1261","date":"2026-06-19 14:08:52 -0700","author":"Steve","subject":"Add Nextdoor-style block post-detail UI (public/index.html)","body":""},{"hash":"1adfcbd","date":"2026-05-11 10:02:33 -0700","author":"SteveStudio2","subject":"security: untrack .env (still present on disk, just not in git)","body":".env was committed before .gitignore exclusion was in place. File remains\non disk and functional; this stops future commits and prevents the next\ngit push (if any remote is ever added) from leaking secrets.\nNo remote currently configured, so no public exposure occurred."},{"hash":"7d43131","date":"2026-05-07 12:05:24 -0700","author":"Steve","subject":"add canonical .gitignore per standing rule","body":""},{"hash":"34dc101","date":"2026-05-04 06:58:43 -0700","author":"SteveStudio2","subject":"[overnight] pre-debate baseline","body":""}]}