・VISHWAS / PORTFOLIO
0%
INITIALIZING EXPERIENCE

sisu · project 07/11

Sisu.

Finds local businesses with broken websites and drafts the pitch.

localhost:3000 · leads
Inboxsorted by score
Bright Smile Dental2m
Chrome shows “Not secure” on brightsmile…65
Northside Plumbing6m
Footer still says © 2017 — no online booking45
Luxe Hair Studio11m
No mobile viewport · contact form, no booking50
Oak & Iron Barbers—
Slow load (7.2 s) · missing meta descriptiondisq.

Illustrative leads — the shape of what Sisu finds.

score 65pitch: redesignMX ✓

Quick fix for brightsmile-dental.com

Draft · to hello@brightsmile… · from you

Hi Dr. Rao,

Chrome shows a “Not secure” warning on brightsmile-dental.com — patients see it before they see your clinic. It’s a quick fix, and I can also add online booking while I’m in there.

Worth a 10-minute call this week?

— reply STOP to opt out · [postal address]

How a lead lands in your inbox

Finding small businesses that genuinely need web work — and writing outreach specific enough to get a reply — is slow manual work.

S
sisu-bot · Discoverstep 01

Google Places plus OpenStreetMap with mirror failover; chains are skipped and known businesses excluded up front.

S
sisu-bot · Scrapestep 02

A shared Chromium visits four sites at a time and extracts emails, phone and socials — including Cloudflare-obfuscated emails.

S
sisu-bot · Scorestep 03

Weighted site issues add up to a lead score; dead, healthy or unreachable businesses are disqualified.

S
sisu-bot · Validatestep 04

MX records are checked so drafts never go to dead domains.

S
sisu-bot · Draftstep 05

The email opens with the one issue the owner can verify in ten seconds, with opt-out and address built in.

Audit rules

from extractor.py
  • Page shows PHP / WordPress error messages redesign+45
  • No mobile viewport redesign+35
  • Plain http:// (no SSL) redesign+30
  • Copyright footer 3+ years old redesign+25
  • No way to book online booking+20
  • Contact form but no booking booking+15
  • Slow load (> 5 s) +10
  • Missing meta description / thin text +5
  • No OpenGraph tags +2

Below 20 a site is disqualified and never shown — so is anything dead or unreachable.

9weighted website checks
100cities in rotation
41business niches
What’s inside
Website audit

Nine weighted checks — from PHP errors and missing SSL to a stale © footer.

Three run modes

Targeted city + niche, random, or a rotation that remembers its position.

Polite by design

Random pacing, rate-limited geocoding and a daily lead cap.

Run panel

Start, watch and stop pipeline runs from the dashboard with a live log.

Compliant drafts

Opt-out line and postal address in every email.

Sent · engineering notes
Obfuscated email decoding✓✓

Decodes Cloudflare email protection and filters placeholder and asset junk.

📎 extractor.py
Always reaching further✓✓

Known businesses are excluded before the per-run limit, so each run digs deeper into a city.

📎 discovery.py
Safe process control✓✓

The dashboard spawns the pipeline without a shell and kills the whole process tree on stop.

📎 dashboard/src/lib/pipelineRunner.ts
Settings · integrations
Dashboard

Next.js 16, React 19, Tailwind 4

Pipeline

Python, Playwright, asyncpg, BeautifulSoup, dnspython

Data

PostgreSQL

Sources

Google Places API, OpenStreetMap, Nominatim, Ollama (optional)

View source on GitHub ↗
Fwd: next project 08/11Prism →AI prior-authorization review, with the evidence attached.