Skip to main content
Sarah Murphy

Case study 01 / Product engineering + applied AI

SiteSpruce

Pre-launch

Turning diagnostic consultancy into an evidence-grounded product

SiteSpruce started as a website diagnostic consultancy. After using and refining the methodology with real clients, I found one part that made sense to turn into a self-service product: comparing what a business wants to communicate with what its website actually says and what a first-time visitor is likely to take from it.

I built V2 around that smaller problem, from checking and crawling the site through to analysis, validation and report delivery. LLMs handle the parts that need interpretation; the surrounding software controls what evidence they get, what gets saved and whether the process can continue.

V2 self-serve product launching soon.

SiteSpruce V2 report excerpt: The One Thing to prioritise for Salonix
A real V2 report output, run against a public demo site (Salonix): the one priority the report surfaces.
Role
Founder & Product Engineer
Context
Independent product · developed part-time
Stack
Next.js · TypeScript · Supabase/Postgres · Puppeteer · LLM API · Trigger.dev · Zod · Stripe · Resend

01 / Clarity before change

Deciding what actually needed to change

A lot of websites aren't really broken. They work. But over time, copy gets added, priorities change, different people make different decisions, and eventually the site doesn't quite reflect the business anymore.

Audit tools can point out individual problems, but a list of warnings only gets you so far. It doesn't tell you which things are connected, what actually matters, or whether you need a few targeted changes or something much bigger.

And without that context, it's very easy to jump straight to rewriting the copy, redesigning the site or rebuilding it.

SiteSpruce started from a different question:

What is the website actually doing now — and what needs to change?

The point wasn't to find as many problems as possible. It was to work out what was worth fixing, what could wait, and what kind of change the evidence actually supported.

02 / Building the original consultancy

Looking for patterns, not isolated warnings

The first version of SiteSpruce was a broad, hands-on website diagnostic consultancy.

I combined automated checks with detailed manual review across technical performance, mobile usability, user experience and design, SEO foundations, trust and credibility, and content and local visibility.

A finding on its own usually wasn't the interesting part. The useful bit was seeing when several apparently separate problems pointed to the same underlying issue, then working out what mattered most and what kind of change it actually called for.

The reports weren't implementation plans. They were there to help clients work out what to tackle first, what could wait, and whether the site needed targeted improvements or something larger.

I developed and refined the methodology through paid consultancy work. The self-service product came later.

  1. Automated checks + manual review
  2. Structured the findings
  3. Cross-check the evidence
  4. Find site-wide patterns
  5. Prioritise + decide what's next
How the V1 review moved from individual findings to priorities and next steps.

03 / Finding the product boundary

Choosing what V2 should actually do

I didn't want V2 to pretend it could reproduce the whole consultancy. V1 covered too many different areas and relied too much on broad manual review and judgment for that to make sense.

So I narrowed it to one part that was useful, repeatable and suited to a self-service product:

the gap between what a business wants to communicate, what its website actually communicates and what a first-time visitor is likely to take from it.

That became V2.

It focuses on what visitors understand, what they are still left wondering, where confidence drops and what deserves attention first.

AI made the repeated reading, comparison and interpretation practical at this scale. But I chose the scope around what the product could actually support with evidence, rather than around everything the technology could potentially do.

V1 — full diagnostic consultancyTechnical performanceSEO foundationsMobile usabilityUser experience& designTrust & credibilityContent & localvisibilityone boundedopportunityV2message-gap diagnosis
V2 productises one bounded communication problem from the broader V1 consultancy.

What V2 covers

  • business intent and audience
  • evidence from the website itself
  • what a first-time visitor is likely to understand
  • communication gaps and areas of uncertainty
  • a practical priority for what to address first

What it does not claim

  • to replace the original consultancy
  • to be a complete SEO or technical audit
  • to provide an implementation specification
  • certainty where the available evidence does't support it

04 / Designing the customer journey

Check the site before asking for payment

A self-service diagnostic has an awkward trust problem: the customer shouldn't have to pay before knowing whether SiteSpruce can actually review their website.

So the flow starts with a free check.

The customer enters their URL and three pieces of context: what the business does, who it is for and what the website should achieve.

Those answers are part of the analysis, not just setup. They give SiteSpruce the business-intent side of the comparison, so the customer can review and sharpen them before the full report runs.

SiteSpruce checks whether the site can be read and finds useful pages. If it can't, the flow stops before payment.

If it can, the customer sees the pages that were found and gets a limited observation from the homepage before choosing whether to continue.

After payment, the full review runs in the background across up to five useful pages, validates the findings and produces the finished report in the browser and as a PDF.

URL + context → free check → preview → payment → analysis → validation → report

SiteSpruce V2 questionnaire showing ideal-customer and website-goal answers for Salonix, plus the Run the free check button
SiteSpruce V2 free-check preview showing the pages found on Salonix and a sample visitor-gap finding
SiteSpruce V2 report section listing what a Salonix visitor is still wondering, with supporting evidence for two questions

Salonix is a public demo site used to test SiteSpruce V2 end-to-end — the content and contact details shown are placeholders, not a real client.

05 / Structuring the pipeline

Breaking the analysis into stages

I could have sent the website and questionnaire through one large prompt, but that would have made the output much harder to inspect, constrain or recover when something failed.

Instead, I split the analysis into stages with different jobs. The full product flow starts with the customer context and free preflight; after payment, the main analysis runs through these six stages.

1. Crawl and evidence collection

SiteSpruce renders a small set of useful public pages and collects the source material the rest of the analysis can use.

Coverage is explicit. A page that doesn't exist is different from one that couldn't be crawled, and neither should quietly turn into invented evidence.

2. Structured fact extraction

Each successfully crawled page is analysed on its own and turned into structured observations: headings, claims, calls to action, audience language, service descriptions, trust signals, contact information and other useful evidence.

This stage records what is there. It doesn't decide what it means yet.

3. Communication-gap detection

Those facts are compared with the business context supplied by the customer.

This is where SiteSpruce looks for gaps between what the business wants to communicate, what the website actually shows and what a visitor still needs to understand.

4. Visitor conclusions

The gaps are turned into a structured view of the visitor experience: what they understand, what they are still wondering, where confidence drops and why that matters for the website's goal.

This stage also chooses the overall Refinement / Restructure / Reposition assessment and The One Thing to prioritise.

5. Validation

The conclusions are checked against the available evidence before the report can continue.

6. Report and delivery

Only validated findings make it into the report-writing stage. The finished report is saved, rendered for the browser and PDF, and delivered to the customer.

ContextPreflight + previewCrawl + evidence collectionStructured fact extractionCommunication-gap detectionVisitor conclusionsValidation + groundingReport + delivery

Each major stage saves its result before continuing. If processing is interrupted, the pipeline can reuse completed work rather than restarting the entire analysis.

06 / Separating software from model judgment

Keeping the process in software

The model is useful for the parts that need interpretation. I didn't want it controlling the workflow around them.

The boundary is fairly simple:

Software controls what evidence is available and whether the pipeline can continue. The model interprets that evidence and helps explain what it means for a first-time visitor.

Software owns

  • input validation, preflight and crawl constraints
  • what evidence each stage can use
  • persistence and pipeline state
  • schema and mechanical consistency checks
  • retries, escalation and failure handling
  • report delivery and the final decision to send

The model handles

  • turning page content into structured facts
  • identifying communication gaps
  • producing visitor-centred conclusions
  • checking whether those conclusions are grounded in the evidence
  • writing customer-facing explanations from validated findings

Even the final writing stage cannot quietly redefine the diagnosis.

The overall assessment is chosen earlier in the conclusions stage and enforced by the application when the report is generated. A later writing call can't turn a Refinement into a Reposition just because it happens to produce different prose.

software

Collect + constrain evidence

model

Extract structured facts

software

Supply constrained evidence

model

Identify communication gaps

model

Produce visitor conclusions

software

Validate + persist structure

model

Review grounding

software

Mechanical checks + retry control

model

Write customer-facing explanation

software

Enforce final rules + delivery

Page discovery follows the same rule. Common pages are matched deterministically; if there are still gaps, the model can classify links that actually exist on the site. Software validates the result and won't allow an invented URL to be crawled.

07 / Building for unreliable output

Planning for failure

A detailed prompt doesn't make model output reliable. Structured output can be malformed, a finding can sound convincing without being well supported, and two stages can contradict each other. External services can also fail halfway through a run.

I treated those as normal failure modes the product had to handle, rather than unusual exceptions.

Structure

  • strict schemas
  • constrained inputs
  • persisted stages

Grounding

  • evidence checks
  • contradiction checks
  • missing-page / coverage awareness
  • independent mechanical checks

Control

  • retries
  • conclusion regeneration
  • block delivery
  • pause + alert

Model responses are validated against schemas before they become pipeline state. Invalid structured output can be corrected or retried instead of being silently accepted.

Findings also have to trace back to evidence collected from the website. SiteSpruce distinguishes between pages that do not exist and pages that could not be crawled, checks for unsupported or contradictory findings, and does not turn known gaps in coverage into confident conclusions.

Website and questionnaire content is treated as untrusted data, not as instructions to the model. It is fenced separately from the task instructions, with safeguards to stop content from escaping those boundaries and changing how the pipeline is supposed to behave.

Model-based validation is only one part of the check. Mechanical rules run alongside it, so the pipeline does not rely on the model to decide whether its own output is acceptable.

Validation can retry and, if needed, regenerate the visitor conclusions once. If the result still fails, the report is paused rather than sent. SiteSpruce gets an operational alert, while the completed stages stay saved so a recovery does not have to start from scratch.

The same idea applies to smaller features too. The free homepage preview is deliberately non-critical: if that model call fails, a successful site check can still continue rather than turning a preview feature into a system-wide failure.

Unsupported or contradictory finding → validation blocks delivery → retry / regenerate → persistent failure → pause report + alert

08 / Human product judgment

Deciding what SiteSpruce should promise

Before I got to prompts, I had to decide what SiteSpruce would and wouldn't claim, what counted as enough evidence, and when the system should stop rather than force an answer.

I built the product around three perspectives: what the business intends to communicate, what the website actually shows and what a first-time visitor is likely to conclude.

That meant deciding:

  • the three central questions the diagnosis answers
  • the five-page scope
  • the structure of the finished report
  • what Refinement, Restructure and Reposition mean
  • how The One Thing is chosen
  • confidence and omission rules
  • when uncertainty should be called out for further investigation
  • when the product should stop instead of forcing an answer

Models can analyse the material and write explanations. They don't decide what SiteSpruce should claim, what counts as enough evidence or when an answer is too uncertain to send.

The same boundary applies commercially. SiteSpruce diagnoses; it doesn't sell the redesign or development work that might follow. The report is there to help the customer decide what to do next, not to create implementation work for SiteSpruce.

09 / Current state

What is built, and what is still unproven

V2 turns one part of the original consultancy into an end-to-end self-service product.

At publication, it runs from the free website check through payment, background analysis and validation to the finished browser report, downloadable PDF and email delivery.

The workflow is implemented end to end, including crawling, persisted stage state, payment handling, report generation, quality checks, recovery paths and operational alerts. The repository also includes integration coverage for the main flow, duplicate payment/start behaviour and stage-level recovery.

What I don't have yet is enough V2 customer usage to make meaningful claims about customer outcomes.

That's the next thing I want to learn: where the reports consistently help, where the methodology needs tuning across different kinds of business, how often uncertainty or failure paths show up in production, and whether the product still holds up across a wider range of real websites.

Until I have that evidence, I'm keeping the claims here to what I can actually verify: what the product does, how it is built and what I still need to learn from its use.

10 / Reflection

The product got better when the scope got smaller

SiteSpruce started with a broad human workflow. V2 got better when I stopped trying to reproduce all of it.

Once the scope was smaller, the architecture became clearer too: collect the evidence, structure it, interpret it, validate it, then explain it.

Each stage has a specific job, and no single model call gets to own the answer.

V2 is intentionally smaller than the original consultancy, but it has a clearer purpose, clearer failure boundaries and a scope I can actually support with evidence.