Website Assessment Platform — Capability
The reference capability page. The Website Assessment Platform is a cross-repo capability, not a single repo: intelligence authored in FIP → published as a pack in
intelproducts→ executed by the engine ininexisstudios→ evaluated against thewebsite-intelligence-labharness → consumed byoutreachagent/leadplatform. This page documents it from executive to implementation level, evidence-first.
Purpose
Assess a service business’s website — crawl it, score it against an industry intelligence pack, and
produce ranked findings, structured recommendations, and a plain-English report — so Inexis Digital can
diagnose gaps and position an industry-informed website replacement. Positioning (per inexisstudios/CLAUDE.md):
“Preserve what has value. Improve what does not.” It is a sales/diagnostic wedge, not a generic SEO grader.
Why this capability exists
Inexis Digital’s lead-generation model depends on showing a prospect exactly where their website under-performs for their industry, then offering a replacement. Doing that consistently and defensibly requires (a) codified industry intelligence, (b) a deterministic scoring engine, and © explanations that are grounded in facts, not AI opinion. The capability packages all three so any assessor produces the same result and the output can feed automated outreach.
Business problems it solves
- Inconsistent diagnosis — deterministic rules + scoring mean “the same site scores the same regardless of assessor” (
pack-manifest.md). - Weak sales wedge — turns a free diagnostic into a positioned offer (website replacement), not a patch.
- Manual, unscalable audits — an async crawl+score API replaces hand audits across 10 verticals.
- Cross-venture reuse — the engine is domain-agnostic and pack-driven, so new industries (cleaning, travel) are new packs, not new code.
Architectural principles (from source)
- Rule-based scoring; AI explains only. “Recommendations must not be based on AI opinion. AI may explain… after the rule-based recommendation has been selected” (
assessment-engine-plan-v2.md §13). - Nothing is ever auto-sent — admin review/approve gate before external sharing (
ready_for_review → approved). - WordPress is upgrade context, never a quality penalty (
inexisstudios/CLAUDE.md). - Domain-agnostic engine + pack-driven — a generic engine loads a runtime pack; travel/cleaning prove it.
- Idempotent + async — assessments are idempotent by canonical slug;
202 pendingthen poll. - Embodies ecosystem Principle 3 (knowledge referenced, never owned) — the engine pins a pack version, never copies it.
At a glance
| Field | Value |
|---|---|
| Slug | cap-website-assessment |
| Maturity | 🔶 mixed — strong spec + working single-repo engine + mostly-mock cross-repo consumption |
| Owning repo(s) | inexisstudios (engine), intelproducts (pack), personalops (intelligence author), website-intelligence-lab (harness) |
| Consuming repo(s) | outreachagent ✅, leadplatform ⏳ declared |
| Ventures | Inexis Digital (primary); cleaning & travel (Inbound Lanka) expansion packs |
| Last reviewed | 2026-07-05 |
1 · Executive capability overview
graph LR
IN[/"A website URL<br/>(+ industry vertical)"/] --> CAP
CAP[["🔎 Website Assessment Platform<br/><b>Crawl → score against industry pack → findings + recommendations + report</b>"]] --> OUT[/"0–100 score · maturity level ·<br/>findings · recommendations · plain-English report"/]
OUT --> WEDGE["Commercial Opportunity Profile →<br/>outreach · proposal · CRM (Inexis Digital)"]
In one sentence: point it at a service business’s website and it returns a defensible, industry-scored gap analysis that becomes the wedge to sell a new website.
2 · Container architecture
The deployable pieces across the contributing repos.
graph TD
subgraph FIP["PersonalOps / FIP ✅ (author)"]
SRC["Per-vertical conversion intelligence,<br/>scoring priorities, rules (markdown)"]
end
subgraph IPR["intelproducts ✅ (contract)"]
PACK[("website-assessment-pack-v1<br/>15 rules · 6 domains · scoring model · REC-001…015 · maturity 1–5")]
RP[("rule-packs / runtime-packs<br/>travel · cleaning industry packs")]
end
subgraph ENG["inexisstudios ✅ core (the engine)"]
API["Cloudflare Pages Functions API<br/>POST/GET /api/assessments"]
CRAWL["crawler-service<br/>Node + Playwright (separate deploy)"]
SCORE["Scoring engine<br/>src/lib/assessment* · D1 + R2"]
REPORT["Report UI / contract"]
API --> CRAWL --> SCORE --> REPORT
end
subgraph LAB["website-intelligence-lab 🔶 (harness)"]
RUNS[("Immutable provenanced Runs / benchmarks")]
end
subgraph CONS["Consumers"]
OA["outreachagent → COP ✅ (mock default)"]
LEAD["leadplatform ⏳ declared"]
end
SRC -->|authored + published| PACK
PACK -->|pinned pack = scoring truth| SCORE
RP -.domain packs.-> SCORE
REPORT -->|/api/assessments/:slug| OA
PACK -.vendored submodule.-> LEAD
SCORE -.evaluated against.-> RUNS
3 · Component architecture (engine internals + rule flow)
graph TD
REQ["POST /api/assessments {url, industry?}<br/>idempotent by canonical slug"] --> SEL["Select framework/template for industry"]
SEL --> CR["Crawler (Playwright): titles, meta, H1s, CTAs, phone,<br/>forms, testimonials, gallery, schema, local/trust,<br/>WordPress detection, screenshots, PageSpeed"]
CR -->|raw artifacts + callback| NORM["Normalise extracted facts"]
NORM --> RULES["Rule-based scoring vs pack<br/>15 rules · 6 domains"]
RULES --> DOM["Domain scores → weighted 0–100<br/>trust 25 · conversion 22 · proof 15 · clarity 15 · mobile 13 · local-seo 10"]
DOM --> BAND["Score band + Maturity level 1–5"]
RULES --> FIND["Findings (with evidence)"]
FIND --> REC["Structured recommendations REC-001…015<br/>(rule-based; recommended offer)"]
REC --> AI["Optional AI narrative — explains only, no opinion"]
AI --> REV{"Admin review & approve<br/>(nothing auto-sent)"}
REV --> RPT["Report @ /api/assessments/:slug<br/>(trimmed contract; ?full=1 = PackAssessment)"]
classDef opt fill:#fff3cd,stroke:#b8860b;
class AI opt;
Job status sequence (assessment-engine-plan-v2.md §8): queued → crawling → scoring → recommendation_draft → ai_draft → ready_for_review → approved → sent.
4 · Runtime information flow (end-to-end, cross-repo)
graph TD
A["① Prospect/URL enters<br/>(admin UI, or outreachagent enrich)"] --> B["② evaluateCommercialOpportunity() / POST /api/assessments<br/>→ 202 pending, cop_ref/slug"]
B --> C["③ Async crawl (Playwright) → raw artifacts"]
C --> D["④ Score against pinned industry pack → domain scores, band, maturity"]
D --> E["⑤ Findings → structured recommendations → optional AI narrative"]
E --> F["⑥ Admin review & approve"]
F --> G["⑦ Report ready — poll GET returns stable contract"]
G --> H["⑧ outreachagent enriches COP:<br/>evidence → diagnosis → recommendation(action) → solution_blueprint"]
H --> I["⑨ recommendation.action ∈ replace_website / monitor / manual_review / no_opportunity<br/>→ stage in CRM (nothing auto-sent)"]
I --> J["⑩ Outcomes / usage signals"]
J -. future Hermes learning loop 🔶 .-> D
What enters: a website URL + optional industry vertical (10 AU verticals: plumber, electrician, builder, carpenter, landscaping, cleaning, physiotherapist, dentist, accountant, mortgage-broker; others fall back to “all industries” rules). What leaves: overall 0–100 score + band + maturity level (1–5), per-domain scores, evidence-backed findings, ranked recommendations (recommended offer), a plain-English report, and downstream a Commercial Opportunity Profile.
Owning repositories (providers)
| Repo | Role | Status |
|---|---|---|
inexisstudios |
The engine — crawler-service (Node+Playwright) + scoring engine (src/lib/assessment*) + Cloudflare Pages Functions API + report UI |
✅ core built (self-tests 40/40; external API shipped); some v2 schema/competitor/public-form ⏳ |
intelproducts |
The pack — website-assessment-pack-v1 (rules, scoring model, recommendation library, maturity model) + travel/cleaning rule/runtime packs |
✅ v1.0 published; feedback/effectiveness loops ⏳ (Hermes) |
personalops |
Authors the source assessment intelligence (per-vertical conversion intelligence, scoring priorities) and publishes packs | ✅ |
website-intelligence-lab |
Harness — declares the website-assessment capability; provides Runs/provenance/benchmarks the engine is evaluated against |
🔶 Phase-1 seed; engine external |
Consuming repositories & ventures
| Consumer | How it consumes | Status |
|---|---|---|
outreachagent |
evaluateCommercialOpportunity() / /api/assessments → COP → email/proposal/CRM |
✅ built; mock default, live wired but not operationally validated |
leadplatform |
Vendors the pack as a pinned submodule; declared to “qualify/segment by maturity + opportunity” | ⏳ declared; no wired assessment consumer skill (proposal pack is live) |
| Future | Proposal Generator, Website Prototype Generator, CRM Automation, OpenClaw/Hermes/MCP | ⏳ planned (per pack-manifest.md) |
Ventures: Inexis Digital (primary — the lead-gen wedge). Expansion packs exist for cleaning (WP-53) and travel / Cinnamon Stories — Sri Lanka inbound (WP-48B; supports the Inbound Lanka venture and proves the engine is domain-agnostic).
Intelligence products & shared skills that support it
- Intelligence products:
website-assessment-pack-v1, travelrule-packs/runtime-packs, cleaning pack — see Intelligence Productization. - Shared skills: authored/consumed via Reusable AI Skills;
intelproducts/skillsconsumer skills (e.g.commercial-opportunity,findings-translator). - Underpinning capabilities: Knowledge Intelligence (authoring), Intelligence Productization (the pack), Reproducible Evaluation (the lab harness), feeding Commercial Opportunity & Outreach.
Inputs / Outputs / Dependencies (summary)
- Inputs: website URL + optional industry vertical.
- Outputs: score (0–100) + band + maturity (1–5), domain scores, findings, recommendations, report, COP.
- Dependencies: the pinned pack (scoring truth), Cloudflare (Pages/D1/R2), Playwright crawler, the platform capability interface (
resolveAssessmentPack,evaluateCommercialOpportunity,getCommercialOpportunity), COP schema v2 (frozen).
Current maturity
🔶 Mixed (evidence-based): the spec is mature (plan v2 + published immutable pack); the engine core is
built and passing self-tests in inexisstudios (40/40; async crawl→score→report live; external API shipped);
cross-repo consumption (outreachagent→COP) is built with a frozen schema but runs in mock mode by
default and a live end-to-end run is an open checklist item; leadplatform assessment consumption is
declared but not wired; the lab is a Phase-1 seed harness.
Planned evolution
Durable crawler queueing (Phase 3d); competitor benchmarking (plan §11); public assessment form (§7); full
framework-versioning DB schema (§17; only assessments + crawl_jobs migrated today); the Hermes learning
loop to replace inference-derived weights with evidence-derived ones; wiring leadplatform assessment
consumption; operational live-send validation in outreachagent.
Known limitations (stated in source)
- Scoring weights are inference-derived, not empirical — “review-gated defaults, not empirical coefficients” (
scoring-model.md). - Learning loops unimplemented —
assessment-feedback.md/recommendation-performance.md/rule-effectiveness.md: “v1: documented, not implemented.” - Crawler not durable (in-memory; Phase 3d planned); no synchronous scoring path (poll
202). - Pack v1 covers 10 AU verticals; others fall back to generic rules. Health verticals route aggressive claims to human review.
- outreachagent live assessment run not operationally validated (mock default).
Relationship to the wider AI ecosystem
The Website Assessment Platform is the ecosystem’s clearest example of capability composition across layers: Shared Skills (L1) → Knowledge Intelligence (L2, FIP authors) → Intelligence Productization (L3, the pack) → an engine app (L4, inexisstudios) → Commercial Opportunity (L4, outreachagent) → the Inexis Digital venture (L5). It is evaluated by the Reproducible Evaluation harness (L2). See the Capability Reuse Map and Portfolio Overview.
Related
- Repos:
inexisstudios(not yet fully digested) · intelproducts · personalops · website-intelligence-lab - Capabilities: Intelligence Productization · Commercial Opportunity & Outreach · Reproducible Evaluation
- Architecture: Intelligence Platform · Reuse Map · ADR 0004