Capability maturity: mixed living owner: Azwaan reviewed: 2026-07-05

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 in inexisstudios → evaluated against the website-intelligence-lab harness → consumed by outreachagent/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 pending then 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 packwebsite-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

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 unimplementedassessment-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.