Website audit platform
URL audits — Security, SEO, Marketing, Sales, Law — on a rules engine.
Dev-storyChallenge
We had six near-identical audit repos (platform, audit, marketing, sales, security, law), all ~90% the same code re-skinned, and audit scores that change run to run are not trustworthy.
What we did
One app runs all five audit types against a URL through a deterministic rules engine, so scores are reproducible; an optional local AI layer turns the raw findings into client-ready summaries, fixes and action plans without touching the objective evidence.
Result
Six repos collapsed into one, a URL gets a repeatable score plus a readable report, and the AI adds narrative depth without changing the numbers.
Dev-story article
Website audit platform: how the project was built
There were five near-identical audit codebases — security, SEO, marketing, sales, law — each about 90% the same app re-skinned for a different domain, and each drifting on its own. The harder question underneath was trust: an audit score that changes between runs, or that an LLM quietly invents, is worthless to a client. So the work was two decisions at once — collapse the five apps into one, and make the score something you can defend byte-for-byte.
Sections
05
Modules
05
Stack
Vue 3 + webedge-db
Why the project exists
We had six near-identical audit repos (platform, audit, marketing, sales, security, law), all ~90% the same code re-skinned, and audit scores that change run to run are not trustworthy.
There were five near-identical audit codebases — security, SEO, marketing, sales, law — each about 90% the same app re-skinned for a different domain, and each drifting on its own. The harder question underneath was trust: an audit score that changes between runs, or that an LLM quietly invents, is worthless to a client. So the work was two decisions at once — collapse the five apps into one, and make the score something you can defend byte-for-byte.
What was built
One app runs all five audit types against a URL through a deterministic rules engine, so scores are reproducible; an optional local AI layer turns the raw findings into client-ready summaries, fixes and action plans without touching the objective evidence.
One deployment that runs all five audit types against a URL through a shared deterministic engine: collectors gather objective facts, a checklist of weighted rules maps each fact to pass/warn/fail, and category scores plus an A+…F grade come out the same for the same input every time. Each domain is now an audit module inside that engine rather than a separate repo. A local open-weights LLM can run afterwards to enrich summaries and action plans, but it is only allowed to touch wording — never the score.
Main modules and user path
Deterministic rules engine: fetch-based collectors (headers, redirects, cookies, robots/sitemap/llms.txt, AI-crawler access, HTML meta/H1/JSON-LD) feed weighted per-category rules and a fixed grade mapping, so the same URL always yields the same score.
Pluggable audit modules — Security, SEO/GEO, Marketing, Sales, Law — each a small AuditModule contract (rules + optional panels) registered in one place; adding a domain is a new file plus a weights entry, with collectors, scoring, history and PDF shared.
Reactive backend on webedge-db: the engine runs as a scheduled Node action that patches an analysis document, and the Vue SPA subscribes to it — live status, logs and result stream in with no SSE and no polling.
Optional local-AI enrichment layer gated to narrative-only fields (executive summary, fix wording, quick wins, 30/60/90-day plan); if the model is unconfigured or down, the audit still completes on the deterministic baseline.
A deliberate product pivot: ripped out paid credits, checkout and 'AI runs the checks / pick a model' UI, replacing it with a free-and-unlimited deterministic service and passwordless email-OTP login.
Architecture and technology decisions
Built with Vue 3, webedge-db, Rules engine.
Vue 3 + Vite + Pinia front end talking to our reactive backend (webedge-db) via a singleton client; the whole app — UI and backend functions — lives in one frontend/ tree, deployed on our own infrastructure as a static SPA plus a backend deployment.
Result and lessons
Six repos collapsed into one, a URL gets a repeatable score plus a readable report, and the AI adds narrative depth without changing the numbers.
Five overlapping repos became one maintainable app with reproducible, defensible scores across all five domains, and the local-AI layer is strictly additive — it deepens the narrative without ever moving the number a client relies on.
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