Changelog
A record of every notable improvement to HomeBidder.
v1.14.0
Added
- Inspection report PDF upload — upload an inspection report on the analysis form; Claude extracts structured findings (per-system severity, status, and category) that override renovation line-item likelihoods and inject findings into the LLM prompt; color-coded system badges shown in Property tab; inspection_informed flag on the Fixer card
- Post-analysis inspection report upload — attach an inspection PDF to an existing saved analysis to re-run the renovation estimate in place without re-running the full analysis
- Mark as seen — registered users can mark an analysis as seen (physical visit) via a button on the permalink page; modal captures Quality and Location ratings; composite score stored for future Buying Plan integration
- Duplex / multi-family fair value support — comps filtered to the correct multi-family bucket; GRM-based income premium (up to 10%) applied for whole-building properties; second-unit rent offsets monthly buy cost in investment metrics
Changed
- Pricing page updated to reflect new Buyer-tier features: duplex/multi-family support, inspection report upload, and property visit tracking
Fixed
- Backend code review fixes — input validation, error handling, and response consistency improvements across several API routes
- FAQ content updated with clarifications based on user questions
v1.13.1
Fixed
- Property summary card no longer shows a wrong-city property when Realtor.com's geocoding quirk returns a same-street-name listing from a different city — homeharvest row selection now validates ZIP code against the Census-geocoded ZIP and rejects mismatches
v1.13.0
Added
- Distinguish single-unit vs whole-building multi-family properties in valuation and offer analysis
- Support unlisted (off-market) properties in offer analysis
- De-emphasize unclosed permits as common and typically non-blocking in SF
v1.12.0
Changed
- Profile page redesigned with card-based layout — account card with avatar initials circle and navy gradient header, subscription card with tier-colored header band and animated usage progress bar, security section in a card with shield icon, danger zone with distinct red-tinted header band
Fixed
- Lightbox now renders via React Portal mounted on document.body — overlay is no longer clipped by ancestor CSS transforms; body scroll locked while lightbox is open; clicking the dark backdrop outside the photo dismisses the lightbox
- Improved comp and property lookup reliability with fallback strategies for address matching
v1.11.0
Added
- Favorite analyses — heart icon on history page rows and analysis detail/streaming page headers toggles favorite status; favorited history rows highlighted with rose background
- Comparable sales table gated to Investor+ tier — Buyer tier sees a teaser with comp count, price range, and median $/sqft; Investor and Agent tiers see full table with addresses, dates, and $/sqft
- History retention limits by tier — Buyer (30 days), Investor (6 months), Agent (unlimited); informational banner on history page links to /pricing for upgrades
- Lower confidence interval when square footage or lot size data is missing — CI half-width widens +2% for missing sqft, +1% for missing lot size on non-condos
- FAQ page at /faq explaining how HomeBidder's calculations work — 6 sections and 15 questions; FAQ link added to footer
- Admin link in footer visible only to superusers
- robots.txt allowing crawling of public pages and disallowing private routes
Changed
- Superusers treated as Agent tier for all feature gates — unlimited history retention, full comparable sales table, and investment projections
- Analysis page title redesigned — address displayed as a full-width h1; action buttons (Refresh, New analysis, PDF Export) moved to a compact sub-row below the address
- Rate limit counter text updated from daily to monthly throughout the UI
- Plans nav link given persistent coral color to visually distinguish it from standard nav links
- Pricing page redesigned with tiered visual identity — colored header bands, per-tier feature checklists, featured Investor card with coral ring shadow, anonymous usage pill badge, and Stripe trust strip
v1.10.0
Added
- Log-based hedonic adjustments for lot size and square footage — more accurate relative value comparisons using a diminishing-returns model; expanded comp fields surfaced in analysis
- Analysis history pagination — offset/limit query parameters to load history incrementally
- Fair value calculation breakdown on offer card — itemized view of how base comp value, hedonic adjustments, and risk discounts combine to produce the final fair value
- PDF export for Agent tier — download a full analysis report as a formatted PDF
- Investment tab projections gated to Investor+ tier — Buyer tier users see an upgrade prompt instead of financial projections
- Tab navigation on saved analysis permalink page — switch between Offer, Investment, and Risk views on the saved analysis page
Fixed
- Stripe webhook handler updated for SDK v15 compatibility; added reset subscription script for development
- Refresh button on saved analysis page now triggers a force-refresh immediately without requiring a second click
- Valuation breakdown handles old analyses gracefully — loose null checks prevent errors when displaying older saved analyses
- Null/undefined guards in numeric formatting prevent toFixed errors on old analyses
v1.9.0
Added
- Subscription tiers — Buyer (free, 5 analyses/month), Investor ($10/month, 30 analyses/month), Agent ($30/month, 100 analyses/month); anonymous users get 3 analyses/month; superusers are unlimited
- Stripe Checkout integration — hosted redirect flow for upgrading to Investor or Agent; no embedded Stripe.js required
- Stripe billing portal — authenticated users can manage or cancel their subscription from the profile page
- Stripe webhook handler — checkout.session.completed upgrades the user tier; customer.subscription.updated syncs status; customer.subscription.deleted downgrades to Buyer
- Pricing page at /pricing — three plan cards with limits, prices, Current Plan badge, and upgrade CTAs
- Subscription section on profile page — tier badge, monthly usage meter, upgrade buttons, and Manage billing link
- Pricing nav link in header — visible to all users
- Grandfathering migration — all pre-existing users automatically promoted to Investor tier on first startup after upgrade
- stripe-listen.sh helper script for forwarding Stripe webhooks to the local backend during development
Changed
- Rate limiting switched from rolling 24-hour window to calendar-month window for all users
- Authenticated users counted against their tier's monthly limit via the analyses table (no longer via RateLimitEntry)
- Anonymous rate limit changed from daily to monthly (3/month) so free registration is clearly more valuable
- 429 responses on the analysis page now show a contextual prompt — register link for anonymous users, upgrade link for authenticated users
Fixed
- Apple Sign In switched to form_post response mode for compatibility with stricter browser redirect policies
v1.8.0
Added
- Duplex / triplex / multi-family structure detection — new signal fires on duplex, triplex, half-duplex, multi-family, upper/lower unit/flat, two-unit, and related phrases; risk factor distinguishes one unit within a multi-unit building from a whole investment property
- Daly City school data — Serramonte Elementary, Benjamin Franklin Intermediate, Westmoor High, and Jefferson High added with CAASPP 2022–23 proficiency rates
Changed
- Admin portal authentication upgraded from HTTP Basic Auth to JWT Bearer + superuser check; first registered user automatically promoted to superuser on startup
Fixed
- Permalink page tests: added missing useNavigate to router mock
v1.7.0
Added
- RentCast property-specific rent AVM for authenticated users in Bay Area value drivers — more accurate than Census zip-code median; falls back to Census for anonymous users
- Rent range (low/high) and estimate source surfaced in investment metrics
- Saved analysis page: Refresh analysis button re-runs the full analysis pipeline for the saved address
- Saved analysis page: final AI analysis text now displayed in a styled markdown card
Fixed
- TIC risk factor and fair value discount applied correctly in offer recommendation
- Deduplicated photo URLs in property lookup
- Front page feature badges updated to reflect current app capabilities
- History page View link navigated to wrong URL
v1.6.0
Added
- HTTP Basic Auth protected admin portal at /admin — tables of all users and analyses, credentials from ADMIN_USERNAME/ADMIN_PASSWORD env vars
- Paginated admin portal with page/page_size query params and Prev/Next controls
- Permalink for saved analyses — /analysis/:id loads a saved analysis without re-running; Copy permalink button; History View links updated
Fixed
- Admin analyses table shows user email instead of truncated UUID
- Admin analyses table removes redundant Low/High/Rating columns; formats price as M/k
- Rate-limit status fetch now sends Authorization header for authenticated users
v1.5.0
Added
- Sign In with Apple — authorize + callback endpoints, branded button on login/register pages
- Persist renovation toggle state in the database; PATCH /api/analyses/{id}/renovation-toggles stores disabled line-item indices
- RentCast AVM estimate restored behind ENABLE_RENTCAST_AVM feature flag; blends 15% AVM weight into comp-based fair value and surfaces it in property summary
- Exact Redfin listing URL via location-autocomplete API; graceful fallback to address search URL
- UI polish: avatar dropdown header, shimmer skeletons, tab/toast animations, card-hover lift, footer logomark, coral sign-up button, refined form inputs
- .env.example updated with all environment variables grouped by category with signup links
Fixed
- Rate-limit status endpoint now returns account quota (20/day) for authenticated users instead of the IP-based anonymous quota
v1.4.0
Added
- User accounts — email/password registration and login via fastapi-users with JWT Bearer tokens (30-day expiry)
- Per-account rate limiting: 20 analyses/day for authenticated users vs. 5/day for anonymous visitors
- Analyses tied to the logged-in user; list and delete endpoints scoped by ownership
- Frontend AuthContext, login/register routes, and auth headers on all API calls
- Profile page: change password (PATCH /api/users/me) and delete account (DELETE /api/users/me)
- Google OAuth2 — authorize + callback endpoints, "Continue with Google" button on login/register pages
v1.3.0
Added
- Tabbed analysis layout (Offer, Risk, Investment, Fixer) with animated tab-fade transitions
- Clickable photo gallery with full-screen lightbox; Escape/arrow key navigation, click-outside to close
- Rate limiting for unauthenticated visitors: 5 analyses per 24-hour rolling window (IP-based, hashed for privacy)
- Rate-limit counter below the form; turns amber at ≤ 2 remaining; shows reset time when exhausted
- Favicon (SVG + ICO) and corrected PWA manifest with HomeBidder branding
Fixed
- Photo extraction corrected to read primary_photo and alt_photos columns from homeharvest
v1.2.0
Added
- BART, Caltrain, and MUNI Metro transit proximity displayed in investment analysis
- Nearby school quality using CAASPP proficiency rates — nearest elementary/middle/high within 2 miles, color-coded Math/ELA scores
- Crime rates near the property via DataSF (San Francisco) and SpotCrime (Bay Area); violent vs. property crime breakdown
- CalEnviroScreen 4.0 data: Air Quality (PM2.5 percentile) and Environmental Contamination (cleanup sites, groundwater threats, hazardous waste)
- MLS listing photo gallery embedded in property summary card
- LLM summary of DBI permit history; permit data cached with 24-hour expiry
- Direct Google Maps link and external listing links (Redfin, Zillow, Realtor, StreetView) in property summary
v1.1.0
Added
- Market trend analysis using FHFA HPI and Zillow ZHVI with ZIP-level fallback
- California hazard zone overlays: fire, flood, liquefaction, and seismic risk
- Risk assessment card with color-coded factor breakdown
- 10/20/30-year investment projections with opportunity-cost-vs-renting comparison
- Rent comparison normalized by bedroom count with rent growth factoring
- Comp outlier removal and adaptive search radius
Fixed
- Off-market condo data handling and unit-number collision prevention
- Overbid/low-offer recommendation logic edge cases
v1.0.0
Added
- Initial release: SF Bay Area offer analysis engine
- Property lookup via HomeHarvest with address normalization
- Comparable sales within 0.3-mile radius with sqft and property-type filters
- Fair value estimate with confidence interval
- Offer recommendation (low / recommended / high) with contingency guidance
- Fixer vs. turn-key analysis with line-item renovation estimates; toggleable line items
- Investment analysis with projected appreciation
- Analysis history page with expand-in-place detail and delete
- Streaming agent UI with step-by-step progress indicator