CRM and operations hub
A Vue 3 + webedge-db CRM — leads from every source, then triage, assign and follow up in one pipeline.
Dev-storyChallenge
Leads arrive from very different places — partner APIs, email alerts, RSS/sitemaps, scraped listings, spreadsheets — and end up scattered instead of in one pipeline.
What we did
A webedge-db CRM that ingests leads through eight source types (official API, email-alert parser, RSS/Atom/sitemap, HTML fetch, a Playwright browser profile, webhooks, CSV/Excel/Sheets import, a browser extension), with a source catalogue, saved search profiles, a lead inbox and per-source health. It grew out of a real-estate listing radar into a general acquisition tool.
Result
New lead sources are added as configured connectors; everything lands in one real-time inbox with per-source health, then a drag-and-drop pipeline with lead-triage scoring, duplicate merge, bulk CSV actions and automated follow-up reminders moves each lead forward.
Dev-story article
CRM and operations hub: how the project was built
It began as a single-portal listings monitor: a browser worker that fought through a bot challenge, scraped one Lithuanian real-estate site, and emailed new results. The problem was that every new lead source meant another one-off script and another inbox. So the project turned inward and became a real CRM: one place where leads from many source types land, get scored, and get worked, with the screen updating live instead of on redeploy.
Sections
05
Modules
05
Stack
Vue 3 + webedge-db
Why the project exists
Leads arrive from very different places — partner APIs, email alerts, RSS/sitemaps, scraped listings, spreadsheets — and end up scattered instead of in one pipeline.
It began as a single-portal listings monitor: a browser worker that fought through a bot challenge, scraped one Lithuanian real-estate site, and emailed new results. The problem was that every new lead source meant another one-off script and another inbox. So the project turned inward and became a real CRM: one place where leads from many source types land, get scored, and get worked, with the screen updating live instead of on redeploy.
What was built
A webedge-db CRM that ingests leads through eight source types (official API, email-alert parser, RSS/Atom/sitemap, HTML fetch, a Playwright browser profile, webhooks, CSV/Excel/Sheets import, a browser extension), with a source catalogue, saved search profiles, a lead inbox and per-source health. It grew out of a real-estate listing radar into a general acquisition tool.
A Vue 3 + Tailwind workspace over a reactive backend, where a source catalog models twelve acquisition modes: partner APIs, email-alert parsers, RSS/sitemap feeds, public-HTML crawlers, a Playwright browser profile with saved cookies, webhooks, CSV/Sheets imports, and Telegram/Messenger groups among them. Raw events flow in through secret-guarded HTTP ingest endpoints, become deduplicated leads, and surface on a drag-drop pipeline board. A generic worker queue runs pluggable HTML, RSS, and API connectors, so adding a source is a search profile, not a new codebase.
Main modules and user path
Source catalog + ingest: twelve modeled acquisition modes feeding two HTTP endpoints (inbound-email, generic ingest) guarded by a shared ingest secret, plus a worker queue running pluggable public-HTML, RSS/Atom, and JSON-API connectors
Drag-drop pipeline board with custom stages, workload stats, a contacts drawer, bulk actions, and CSV import/export
Smart lead triage scoring alongside exact- and cross-source fingerprint dedup with a duplicate-lead merge flow and normalized phone/email writes
Follow-up engine: owner assignment, activity logging, and email reminders deliberately capped to recently-due tasks so the mailbox stays signal
Automation Studio: a recipe builder (triggers lead_created/email_received/manual, source and price filters, actions like set-priority, assign-owner, create-task, enqueue-job) that logs each run's results, duration, and errors
Architecture and technology decisions
Built with Vue 3, webedge-db, Integrations.
Vue 3 + Tailwind SPA subscribing to a reactive backend whose TypeScript mutations and queries handle dedup, price history, and upserts; login runs on Better Auth OTP gated by backend context, and free-text posts from chat sources are parsed by a Claude extractor.
Result and lessons
New lead sources are added as configured connectors; everything lands in one real-time inbox with per-source health, then a drag-and-drop pipeline with lead-triage scoring, duplicate merge, bulk CSV actions and automated follow-up reminders moves each lead forward.
What was a one-portal email radar is now a working multi-source acquisition workspace where a new lead source is a saved search profile rather than a new script — honestly still one team's operational tool, but a genuine CRM rather than a scraper with a mailing list.
Related articles
Read next
Related project stories
These projects share nearby technical or product decisions, so they show how the same principle behaves in another context.
Dev-storyCMS
A dynamic headless CMS on webedge-db — content types, media, roles, and the public read API behind our sites and their articles.
Dev-storyCalendar booking platform
Scheduling on Vue 3 — availability, bookings, confirmations and one-click Meet video links.
Dev-storyFableVita
FableVita — an AI fitness coach with leagues, quests and a fraud-safe rewards economy.
Have a similar idea?
Discuss your project