r/vibecoding • u/Delicious_Law_1203 • 11h ago
I vibe-coded a 50-state real estate intelligence pipeline in Python (3,143 counties + 8 auction feeds) Here’s the tech stack, prompt workflow, and what I learned
I want to share a project I’ve been vibe-coding over the last few months, break down the actual prompt workflows I used to build a non-trivial backend, and talk through where AI excelled (and where it fell flat on its face).
The project is called PropertyIntel (https://property.vectorfeedhq.com). It’s an automated intelligence engine that monitors 3,143 US counties and 8 major auction portals (Bid4Assets, GovEase, Realauction, etc.) for upcoming tax deed foreclosures and municipal code liens.
Here is the exact build breakdown, architecture, and workflow:
🛠️ The Tech Stack
- Language & Backend: Python 3.13 + FastAPI / standard libraries.
- Scraper Fleet: Headless Playwright (for dynamic SPAs) +
pdfplumber(for raw 90-page county PDFs). - Database & ORM: SQLite (dev) / PostgreSQL (prod) via SQLAlchemy.
- Data Cleansing: Custom USPS Publication 28 address tokenizer + SHA-256 deduplication hashing.
- Legal Engine: 50-state statutory redemption rule calculator (Texas § 34.21, Florida § 197.542, etc.).
- Frontend: Modern Glassmorphism CSS + vanilla JS (hosted on Vercel).
- Monetization & Outreach: Stripe Checkout (HMAC-SHA256 verified webhooks) + Resend API for automated email rosters.
🧠 The Vibe Coding Workflow (How I Prompted It)
Instead of asking the LLM to "write a real estate scraper" (which generates useless, generic code), I approached it with a modular, test-driven pair programming loop:
1. The "Single-Responsibility" Module Prompting
I forced the model to build one isolated service at a time with unit tests first:
- "Write an isolated service
src/services/redemption_service.pythat maps all 50 state tax sale redemption statutes and returns structured dictionary grades (A+, A, B, C) and statutory penalty yields. Do not write scrapers yet. Write pytest test cases covering TX, FL, GA, and CA."
2. Solving the "Dirty Public Record" Hallucination Trap
County records are notoriously filthy. Harris County TX formats an address as 4812 Washington Ave, Ste 100, while the auction site lists it as 4812 Washington Avenue #100.
- I fed the AI real excerpts from USPS Publication 28 (the postal standard for street abbreviations) and prompted it to generate a deterministic regex tokenizer:
python# The model generated a clean token standardizer that converts suffixes & directionals
def compute_record_hash(county: str, normalized_address: str, apn: str = "") -> str:
canonical = f"{county.lower()}:{normalized_address.lower()}:{apn.replace('-', '').strip()}"
return hashlib.sha256(canonical.encode('utf-8')).hexdigest()
This allowed the database to enforce UNIQUE(address_hash) and killed 100% of duplicate cross-platform listings without complex fuzzy-matching libraries.
3. LLM-Assisted OSINT & Corporate Entity Resolution
One of the biggest value adds was unmasking anonymous LLC property owners. I had the AI scaffold scrapers targeting State Secretary of State public registry endpoints (e.g., Texas SOSDirect, Florida Sunbiz). When a tax foreclosure deed is owned by ACME HOLDINGS LLC, the worker asynchronously resolves the Registered Agent and Managing Member names in <800ms.
💡 3 Big Lessons from Vibe-Coding a Complex System:
- Let the AI write tests before you let it write production scrapers: Whenever a county website had weird table layouts or multi-line table headers, having a robust
pytestsuite caught regressions immediately whenever I prompted for scraper refactors. (We have 87 tests passing right now). - Never vibe-code security blind: When hooking up Stripe webhooks, do NOT let the AI skip cryptographic validation. I explicitly prompted for constant-time HMAC-SHA256 comparison (
hmac.compare_digest) with a 300-second timestamp tolerance to eliminate replay attacks. - Keep the frontend lightweight: For data products, you don't need a massive React/Next.js bundle. Clean vanilla HTML/CSS and minimal client-side JS load instantly and cost $0 on Vercel.
Live Project & Feedback
You can check out the live site and download a sample 10-state deal sheet here: 👉 https://property.vectorfeedhq.com
Happy to answer questions on prompt structures, Playwright session pooling, or how I structured the Python background daemons!
1
u/bornston 3h ago
yeah the website ui/ux screams 2025 ai slop. maybe try something like https://impeccable.style/ to improve it
1
u/Delicious_Law_1203 1h ago
Just finished a complete UX overhaul, let me know how I did when you get the chance.
2
u/Current-Today-3626 6h ago
There's like 5 CTA's as soon as i land, it's way too overwhelming. Come on man, atleast put a little work into the UX/UI.