Inexis Studios — Repo Digest
The Website Assessment engine and Inexis Digital’s marketing site + CMS. It is the producer of website evidence for the Website Assessment Platform capability (documented cross-repo there).
What it is
“Inexis Studios / Inexis Digital — the marketing website + admin CMS for a web-design studio serving
Australian service businesses (Melbourne / SE-Melbourne), plus an industry-informed Website Assessment
product that is the core lead-generation wedge.” (CLAUDE.md). The assessment “evaluates a service
business’s website against what actually drives enquiries in that industry — it is not a generic SEO
grader.” (docs/website-assessment/design/01-product-vision.md).
Why it exists
The assessment report is the sales wedge: “it demonstrates expertise before any pitch.” Inexis Digital’s lead generation depends on showing a prospect exactly where their site under-performs for their industry, then offering a replacement. This repo owns the diagnostic that makes that credible and repeatable — positioning: “Preserve what has value. Improve what does not.”
At a glance
| Field | Value |
|---|---|
| Slug | inexisstudios |
| System | applications-agents |
| Architecture layer | Applications & Agents (layer 4) |
| Owner | Azwaan (github.com/azwaanameer/inexisstudios) |
| Lifecycle | active |
| Maturity | active-development (assessment flow works end-to-end; crawler durability pending) |
| Stack | TanStack Start/Router (React 19), Vite 7, TypeScript, Cloudflare Pages/D1/R2, Playwright |
| Latest commit | fix(website-assessment): re-crawls now update the result (per-job idempotency) |
| Last reviewed | 2026-07-06 |
Business capability provided
Website Assessment — crawl a service business’s site, score it against an industry intelligence pack, and produce a plain-English report (the lead-gen wedge). Plus the public marketing site + admin CMS (gallery, FAQs, testimonials, service areas, settings).
Technical responsibilities
- Own the marketing site, the CMS, the assessment engine (score → findings → report), and the public assessment API.
- Own the crawler service that extracts raw per-page artifacts. Explicitly does not: score inside the crawler (“it crawls + extracts raw artifacts; it does not score”); author intelligence (“it consumes assessment intelligence packs; it does not author Knowledge Assets, recommendations or industry intelligence”).
Core concepts
| Concept | Meaning |
|---|---|
| PackAssessment | The raw internal assessment object (domain scores, maturity_level, score_band). |
| opportunity_profile | The stable public contract (contract_version: 2) the outreach pipeline consumes. |
| Intelligence pack | Industry-specific rules/scoring the engine applies (consumed, not authored here). |
| canonicalSlug() | Idempotency key — the same URL always maps to the same assessment. |
| Failure taxonomy | error_code / retryable / failure_stage / recommended_action. |
Key workflows
- Create — admin creates an assessment (
functions/api/admin/assessments.ts). - Crawl (async) — app enqueues a job to the standalone
crawler-service(POST /crawl-jobs). - Callback — the crawler POSTs raw artifacts + screenshots back to
functions/api/admin/crawl-callback.ts. - Score — the engine (
src/lib/assessment/) scores artifacts against the industry pack and derives the report. - Serve — the report is served at
/api/assessments/:slugand rendered bysrc/components/assessment/. Build pipeline:build-assessment-pack.mjs → vite build → generate-index.js → prerender.mjs.
Technologies used
- Frontend: TanStack Start + TanStack Router (React 19, file-based routes), Vite 7, TypeScript ~5.8, Tailwind CSS v4, shadcn/Radix.
- Hosting/API: Cloudflare Pages + Pages Functions (
functions/, not TanStack server). - Data: Cloudflare D1 (
DB,inexis-cms) + R2 (MEDIA,inexis-media); Supabase client also present. - Crawler: standalone Node + Playwright service (
crawler-service/, Dockerfile, deployed viarender.yaml); Puppeteer for prerender.
Major modules / components
| Module | Responsibility |
|---|---|
src/routes/ |
File-based public / industry / location-SEO / admin pages |
src/lib/assessment/ |
The engine — evaluator, store, packs, types, opportunityProfile, publicContract |
src/lib/assessment-pack/ |
Pack parsing → pack.generated.json |
functions/ |
The API — public /api/assessments + auth-gated /api/admin/* |
crawler-service/ |
Playwright crawler (separate deploy) |
db/migrations/ |
0001 initial, 0002 assessments, 0003 crawl_jobs |
Capabilities
website-assessment— crawl → score → findings → recommendations → report (the capability this repo provides)website-crawl— Playwright extraction of per-page artifactsmarketing-site·cms— Inexis Digital public site + admin content management
Upstream dependencies
| Dependency | Type | Version | Notes |
|---|---|---|---|
crawler-service |
internal (same repo, separate deploy) | n/a | Node+Playwright on Render |
| Intelligence packs | data (source markdown → compiled) | n/a | data/intelligence-packs/; also published in intelproducts |
| Cloudflare Pages / D1 / R2 | external-service | — | Hosting + data |
| Supabase | external-service | — | Client present |
| Shared Skills | internal-repo | n/a | Engineering capability (layer 1) |
Downstream consumers
outreachagent— its CIE calls the assessment service over HTTP to compose Commercial Opportunity Profiles.leadplatform— designed to attach assessment output as evidence to website opportunities (complementary).- The in-app report view (
src/routes/r.$slug.tsx).
Major interfaces & integration points
- Public API (base
inexisdigital.com.au):POST /api/assessments {url, industry?}(idempotent by canonical slug;200cached /202pending /4xx/5xx) andGET /api/assessments/:slug(?full=1→ rawPackAssessment). - Admin API (auth-gated
/api/admin/*): assessments, crawl-callback, crawl-jobs, live-crawl, business-profile, CMS. - Contract: the stable
opportunity_profile(v2), snapshot-tested (npm run test:contract). - Integration env:
CRAWLER_SERVICE_URL/API_KEY,ASSESSMENT_API_KEY,ASSESSMENT_DEFAULT_INDUSTRY,APP_BASE_URL.
Reusable assets exposed to other repositories
- The public assessment API + stable
opportunity_profilecontract (v2). - The
canonicalSlug()idempotency algorithm (shared cross-repo) and the failure taxonomy. - The crawler service and the intelligence-pack format.
Architectural decisions
No docs/decisions/ ADR folder; decisions live as structured design specs (assessment-engine-plan-v2,
assessment-scoring-spec-v3, industry-framework-spec-v1, crawler-spec-v1, scoring-engine-spec-v1) and
architecture reviews (assessment-identity-model.md, final-architecture-review.md). Embodies the ecosystem
principle deterministic rules decide; AI explains — the engine scores by rules; AI only narrates.
Architecture snapshot
graph TD
UI[TanStack Start site + admin<br/>Cloudflare Pages] --> API[Pages Functions API<br/>/api/assessments · /api/admin/*]
API --> D1[(D1 · inexis-cms)]
API --> R2[(R2 · inexis-media)]
API -->|enqueue crawl| CR[crawler-service<br/>Node + Playwright · Render]
CR -->|raw artifacts callback| API
API --> ENG[Assessment engine<br/>src/lib/assessment/*]
PACK[Compiled intelligence pack] --> ENG
ENG --> RPT[Report + opportunity_profile]
RPT -->|consumed by| OA[outreachagent]
Current maturity
Active-development. The assessment flow works end-to-end with real hardening (idempotency, watchdog, hard timeout, failure taxonomy). Primary MVP industries are Cleaning + Landscaping (Carpentry/Home-Builders scaffolding), with 10 verticals supported by the API. Not yet production-durable: the crawler job model is “in-memory / not durable across restarts” and there is “no scheduler” (Pages has no cron).
Roadmap
Durable crawler queueing (Phase 3d); additional verticals beyond Cleaning/Landscaping; report v2 design.
Known limitations
- Crawler not durable (in-memory jobs); no scheduler — completion depends on the crawler’s HTTP callback landing.
- Live service blocker (Jul 2026): downstream
outreachagentreports the live service accepts but does not complete crawls (a site stayedpending9+ min);ASSESSMENT_MODE=mockworks. Recorded honestly. - Misconfigured
APP_BASE_URLcauses masspendingfailures.
Future opportunities
Durable queueing; more industry packs; productise the assessment API as a standalone service (aligns with the Platform Services extraction proposed in ADR 0005).
Relationship to the wider AI venture ecosystem
Layer-4 application for Inexis Digital; the producer of the Website Assessment capability that
outreachagent and leadplatform consume. It consumes Shared Skills for engineering and
the intelligence packs (intelproducts) for scoring. See the
Website Assessment Platform capability and the
Applications & Agents system.
Links
- Source:
github.com/azwaanameer/inexisstudios(private) - Capability: Website Assessment Platform
- System: Applications & Agents
- Registry row: repo registry