HOME ABOUT

Verde

AI-assisted ESG reporting for real-estate funds, from raw portfolio data to filed disclosure in one governed workspace.

verde / reports / library

Client
Meridian Capital
Pseudonyms used for confidentiality
Timeline
2024 – 2025
~10 months, four phases
Role
Lead Product Designer
Workflow, governance, AI generation, UI
Team
Design lead (me) 2 UX Researchers 1 Product Manager 4 Engineers 2 Reporting consultants 1 Senior consultant

The brief

Meridian Capital's ESG reporting workflow was entirely manual, reports drafted in PowerPoint, signed off in email, shared as PDFs that immediately drifted out of sync with the live data. The team produced GRESB, EPRA, INREV and SFDR disclosures across dozens of funds, with the entire workflow living outside the platform in Excel, PowerPoint, email threads and Slack.

My job was to design a single governed workspace where every report has a state, a named reviewer, an audit trail and a defined path from raw portfolio data to filed disclosure. The visible UI was the easy part. The hard part was modelling the workflow underneath it.

Verde sat downstream of Arbor and Kova. The portfolio data had finally become trustworthy. Reporting was the last leg of the journey, and the place clients (and their lawyers) actually judged the work.
32%
Reduction in manual reconciliation time per report cycle
100%
Of approved reports carrying a named reviewer and full audit trail
4+
Compliance frameworks served from a single data entry point
10
Months end-to-end, across four phased releases
Problem

Reports were uploaded files, not living workflow objects

Six interconnected problems with one shared root: the platform hosted ESG data but had no opinion on the workflow that turned data into a filed report.

Where it hurt

Reports were drafted in PowerPoint from Excel exports, signed off in email, and shared as PDFs that immediately drifted out of sync with the live data. Cross-framework inconsistencies reached clients regularly.

Who felt it

Reporting consultants ran 20+ active reports across multiple frameworks with no shared status, no named reviewer, and no way to trace a figure back to source when a client's lawyer asked.

The end goal

A platform where reports are first-class objects with state, ownership and audit, with AI drafting the narrative from validated data and consultants owning the final word.

Research

Twelve consultants, seven roles, one report that touched every one of them

Discovery interviews with reporting consultants, senior reviewers and Meridian's data team, plus shadow sessions on three live report cycles, end to end, from brief to disclosure.

Q1

What is a consultant actually trying to do when they open the platform on a Monday morning?

Q2

Where in the report lifecycle does trust break down, and what makes a client (or a regulator) ask the next question?

Q3

Which framework-specific behaviour belongs in the platform, and which is the consultant's professional judgement that we mustn't automate away?

The reporting consultant journey, mapped from request to delivery

Five stages, four handoffs, and a quiet spreadsheet at the centre of all of them. The visible workflow was a sequence of meetings. The real workflow was a chain of files going dark every time they crossed a tool boundary.

Reporting consultant journey across five stages
Consultant journey · brief, collect, draft, review, deliver

The reporting analyst journey, where source data became report data

The hidden second journey: the analyst pulling numbers from Siera, Deepki and the legacy platform into a shared spreadsheet, with no audit trail on the way in and no provenance on the way out. Every cross-framework inconsistency started here.

Reporting analyst journey
RA journey · the spreadsheet at the centre of every report

What we heard, on the workflow itself

"I have to ping three people on Slack to find out if this report shipped. And then I still have to open the PDF to check the version."Reporting Consultant, Meridian Capital

The complaint wasn't about volume of work. It was about the platform never being the source of truth for the report's own status. Every consultant kept a private tracker. Every senior consultant kept a parallel one.

Discovery

A report is an object, not a file, every screen had to honour that

Twelve interview themes affinity-mapped onto three "how might we" questions, two weeks of lifecycle modelling before any UI, and four iteration cycles per surface.

The redesigned reporting flow, drawn as a state machine before any wireframe

Draft becomes Under Review becomes Approved or Rejected, and every transition names a reviewer and writes an audit entry. The lifecycle state machine was the contract that every downstream screen had to honour.

Desired reporting flowchart with lifecycle states
Desired flow, five states, five transitions, one named reviewer at every step

One repository, four frameworks, no re-entry

GRESB, EPRA, INREV and SFDR each ask for the same underlying numbers in different shapes. The instinct was to build a report type per framework, but that would have rebuilt the spreadsheet problem inside the platform, four copies of the truth quietly drifting apart. Instead I defined the metric set once and let each framework read from it, so a figure entered for one disclosure was the same figure every other disclosure cited.

Shared ESG metric set feeding multiple disclosure frameworks
Shared metric layer · one validated number, read by every framework

AI drafts, the consultant decides

Research drew a hard line: the platform automates the framework mechanics, the consultant owns the professional judgement. Every AI-drafted section is editable and every edit is logged, so the audit trail covers the human decision, not just the machine output, which is exactly what a client's lawyer asks to see when a number is questioned.

The AI drafts
First-pass work, never the final word
  • Writes a first-pass narrative for each ESG metric, pulling the validated numbers straight from the shared data layer.
  • Drafts the boilerplate commentary every framework expects, in the right shape for GRESB, EPRA, INREV or SFDR.
  • Flags gaps and missing inputs before a report can move forward, so nothing ships half-sourced.
  • Proposes the structure of the disclosure so the consultant starts from a draft, not a blank page.
Output is always a draft, marked as AI-generated.
The consultant keeps the pen
Accountable for the filed report
  • Makes the materiality judgement, deciding what matters and what gets said about it.
  • Holds final sign-off, the one transition that moves a report to Approved.
  • Owns anything filed under their name, every figure and sentence that reaches a client or regulator.
  • Leaves the audit-trailed decision, a named reviewer on every approval, traceable back to source.
The human decision is what the audit trail records.
Wireframes

Wireframing the disclosure workspace

The board-level flows that turned a fragile spreadsheet process into a governed, auditable workspace.

Spreadsheets, email chains and hope

Meridian's consultants were building GRESB, EPRA, INREV and SFDR reports in Excel, sending PDFs over email, and tracking sign-off in Slack. The platform "had" reporting, it just had no place to do reporting. Before pushing pixels we mapped the people, the frameworks, and the failure points.

v0 · as-is
What the platform was doing
screen audit
▾ Client12345
Reporting
PINNED REPORTS
LI ESG…
GRI · 15 Apr
JS Villa…
GHG · 5 Feb
KL_EV…
NZC · 23 Aug
LI ESG…
BESP · 8 Nov
File name
Type
Freq
Uploaded
Year
Created by
Pinned strip = the closest thing to a status, but only "I cared about this once".
No status, no owner, no reviewer. The file is the only artifact.
Six columns. None of them is "where in the cycle is this?"
Reports were uploaded artifacts, not living workflow objects.
Sign-off happened in email, invisible to the platform that hosted the file.
User quote: "I have to ping three people on Slack to find out if this report shipped."
v0 · users
Seven people. One report.
personas
INTERNAL · MERIDIAN C1 Consultant drafts, edits, owns deadline RA Reporting team data manipulation, QA, formatting D Data team pulls Siera/Deepki/Pense source SC Senior consultant internal sign-off · the new role EXTERNAL · MERIDIAN'S CLIENTS ESG Client ESG Director reviews, approves, escalates FM Fund manager consumes report · cares about story PM Property manager supplies asset-level data one report, seven hands
Every report passes through 5–7 people. The old platform modelled it as one.
The "senior consultant" role didn't exist in the system, but every report needed their sign-off.

Three questions that framed everything that came after.

From twelve consultant interviews + a journey-map workshop with Meridian's reporting team. Every wireframe had to earn its place against one of these.

HMW · 01
Give every consultant one place -
to see every report they own, what state it's in, and what's blocking it. No more Slack archaeology.
HMW · 02
Make governance a first-class object -
reviewers, approvers and lifecycle states live inside the report, not in email threads next to it.
HMW · 03
Cut the drafting time, not the rigor -
AI-assisted first drafts from validated data sources, so consultants spend time on analysis, not formatting.

The as-is reporting journey, five stages, five hand-offs, two weeks per cycle.

Brief
Collect data
Draft
Review
Deliver
Consultant
scope call with client
chases PMs for inputs via email
drafts in PowerPoint, copies from Excel
incorporates senior comments
emails final PDF
Reporting / Data
exports Siera / Deepki to Excel
manual QA in spreadsheet, no audit trail
re-runs numbers if QA finds issues
Senior · Client
defines disclosure framework
reviews via marked-up PDF, comments lost
signs off via email

DecisionThe report is the object. Everything else attaches to it.

The platform had treated reports as uploaded files. Every red box above was a workflow event that should have been part of the report itself, a comment, a state change, an approval, a data version.

That re-shaped the data model: a Report became a first-class object with status, reviewers, approvers, source bindings and a history. Everything we designed downstream attaches to it.

TradeoffTwo weeks of data-model work before any final pixels.

Pushing back on "let's just style the existing screens" was unpopular but necessary. The original schema had no concept of state, adding it after styling would have meant redesigning every screen twice.

The compromise: lo-fi wireframes shipped fast, in parallel, so stakeholders could see the new model take shape while engineering was still aligning.

From "find your file" to "what needs me today"

Four passes. The first kept the table because it was familiar. The second tried to fix the table. The third threw the table out and over-pivoted into a feed. The fourth landed on a card-deck-over-table that worked for both the consultant scanning their queue and the manager hunting a specific file.

v1
Tabified table
familiar
All
Mine
Recent
File
Type
Uploaded
User test: "looks like the old one." It was.
Still no answer to "where in the cycle is this report?"
v2
Table + status column
band-aid
File
Status
Uploaded
Review
Approved
Rejected
Draft
Review
Status visible in row.
Visual weight wrong: file name reads first, status second. Should flip.
No preview of what's in the report, just a name.
v3
Activity feed
over-pivot
timeline · most recent
2h ago · approved
5h ago · under review
1d · rejected
3d · uploaded
Status finally led the visual hierarchy.
No way to find a specific report you remember by name.
Senior consultants HATED it, they think in batches, not events.
final
Card deck + filter chips
shipped
Jamie, you've got 8 reports to review
All · 28 Favs · 5 Review · 5 Done · 5
GRESB
GRESB Annual 2024
Review
EPRA
Asia Markets FY25
Approved
↔ paginated carousel · ‹ ● ○ ○ ○ ○ ›
Charts in cards = recognize a report by shape, not name.
Filter chips collapse the 4 tabs from v3 into one row with counts.
Card sparkline = previewable identity, names alone are forgettable.
Table still available below as a "show all", search + filter live there.

The pivotStop showing a file list. Start showing the queue.

Between v2 and v3 we re-wrote the brief for the home screen: what is the consultant actually trying to do when they open the platform on Monday?

The answer was always "find what needs me today", not "look up a file from 2022". The card deck makes the queue the headline; the table moves below as the reference store.

TradeoffCards are heavier to build than rows.

Each framework needs a different chart shape (GRESB line, EPRA stacked bars, CSRD gauge). Engineering pushed to start with status-only cards. We held the line on charts-from-day-one because the test was specifically recognition speed.

Comp: framework cards share a single chart component with a "render as" prop, keeps the visual variety without forking the implementation.

Three states the platform had been calling none

The inherited platform had no concept of approval. We introduced a lifecycle, Draft → Under Review → Approved | Rejected, with named reviewers and an audit trail. The fight was over how much of it to surface in normal views vs. tuck behind an "audit" tab.

concept
Report lifecycle, drawn out for the client first
STATE 01 Draft STATE 02 Under review STATE 03a Approved STATE 03b Rejected TERMINAL Disclosed submit → approve → reject → back for fixes publish → REPORT LIFECYCLE 5 states · 5 transitions · always one named reviewer
v1
No state at all
inherited
FILE
2024_ESG.pdf
uploaded by Sarah · 3d
"…is this final?"
nobody knows
Sign-off lived in email. Audit trail = "trust me".
No way to block a report from being shared accidentally.
v2
Status in an "Audit" tab
hidden
Report
Files
Audit
REPORT VIEW
status hidden 1 tab over →
Status was the most important thing. Putting it 1 tab away meant nobody saw it.
Audit log existed. Just invisible.
v3
Pill + reviewer avatars
surfaced
Under Review GRESB
GRESB Annual 2024
DR
ER
SC
3 reviewers
→ but: clicking pill doesn't do anything
Status front-and-center. Tests resoundingly preferred it.
Pill was decorative, couldn't approve from card.
Should approve happen inline or in a modal?
final
Interactive + audit drawer
shipped
Under Review GRESB
history ›
GRESB Annual 2024
DR
ER
SC
3 reviewers
Approve
Reject
AUDIT TIMELINE
DR submitted · 2d
ER reviewing · 1d
SC pending
actions on the card. timeline under it.
Approve / Reject live on the card, one click from the queue view.
"History" expands inline drawer with full audit log (who, when, why).
Pill colour = same vocabulary as filter chips on library home.

Why this matteredState was the UX rewrite of a compliance posture.

Meridian's clients, and their lawyers, were asking who signed off and when. The platform's answer was "check email". We made the answer a real timeline, attached to a real state machine, with named approvers.

The wireframe was the contract: every screen with a report on it had to show the state pill and the named reviewer. No exceptions.

TradeoffInline actions vs. a confirmation step.

One-click approve from the queue is fast, and risky. We added a "are you sure" only on Reject (which kicks the report back to Draft) and on Approve when the report is missing required data.

The principle: friction proportional to consequence. Approving a clean report should be one click.

Three framework families. One generator. Real editing after

GRESB, EPRA, INREV and SFDR ask for different parameters, different time ranges, different unit conventions. The original idea was one giant form. The shipped flow is a 4-step wizard with framework-aware steps, an AI-drafted output, and an editor that keeps the consultant in control of the final word.

logic
Generation flow, mapped before any frame
business logic
Pick framework Choose fund scope · single or portfolio Pick parameters framework-aware fields AI drafts consultant edits + commits FRAMEWORK-AWARE STEP 3 SHAPES GRESB Energy · Water · Waste annual · per asset · per fund ~22 params EPRA sBPR + financial overlays quarterly · NAV-linked ~38 params INREV Fund-level NAV + ESG quarterly · fund only ~14 params SFDR · CSRD · TCFD · GHG Disclosure-heavy frameworks narrative + structured tables 12–60 params · varies
v1
All-in-one form
honest mess
framework ▾
fund ▾
parameters · 60 fields
reporting period
unit system (only EPRA)
NAV link (only INREV, EPRA)
narrative prompts (only SFDR/CSRD)
… 53 more fields
A wall of 60+ fields, most disabled depending on framework.
First user in test scrolled, sighed, and closed the tab.
v2
Wizard + radio chooser
progressive
1
2
3
4
Step 1, pick framework
â-‹ GRESB
EPRA
â-‹ INREV
â-‹ SFDR
â-‹ + 4 more
Step-by-step finally fit on a screen.
Eight tiny radios for an anchor decision = wrong weight.
No preview of what the picked framework will ask for.
final
Framework cards + AI draft
shipped
Crafting your AI insights report
GRI
GRESB
PICKED
EPRA
CSRD
AI DRAFT · LIVE PREVIEW
↓ 8.2% vs target
Cards give framework choice the visual weight it deserves.
AI-draft preview updates as parameters change, see the report before you commit.
Step 3 is rendered per-framework, only the relevant fields show.
+ editor
Edit the AI draft
shipped
EPRA Draft
autosaved · just now
2024 EPRA Sustainability Report
The portfolio achieved a 16.1% YoY reduction in emissions …
… consistently exceeding target trajectory. Industrial assets …
Office sector now leads on Scope 2 reductions at 22%.
Detailed breakdowns are available by sector …
✎ Rewrite
+ Chart
↻ Regen §
Submit →
dotted = AI text. filled = a human took ownership.
Visual provenance, you can always see which sentences are AI and which the consultant has owned.
Inline "Regenerate this section" keeps the consultant in flow.
"Submit" → flips state to Under Review and pings named reviewers.

DecisionThe AI draft is not the finish line.

We resisted "press button → ship report". The AI produces the draft; the consultant edits it; the senior approves it. That kept Verde the same governed system at the end of generation as it was at the start.

Visually: AI-drafted content is marked with a subtle dotted underline until a human edits or approves it.

TradeoffOne wizard for eight frameworks is more engineering.

Eight discrete generators would be simpler. We took the wizard hit so the AI draft component, the audit log, and the parameter schema were all shared across frameworks.

Onboarding a new framework now means writing a parameter schema file. Not a whole new flow.

Where do reports actually live after approval?

Half the consumers of Verde reports work in Power BI. The other half want a PDF. The shipped sharing flow makes both first-class, and adds shared-link governance so the platform can revoke access without re-issuing the file.

v1
Download button
inherited
EPRA Q4 FY25
approved · 2d
⤓ Download PDF
and then? email it? upload it to a SharePoint?
PDF download = report leaves the platform. No revoke, no version control.
Power BI users were re-keying numbers by hand.
v2
+ Share link
EPRA Q4 FY25
verde.app/r/3kZ-9... · copy ▸
⤓ PDF
Share
Link sharing meant no more "is this the right version?"
Anyone with link could view, not OK for SFDR/CSRD reports.
Still nothing for Power BI users.
v3
Named recipients
Share with…
Jenny S × Mark T ×
+ add recipient
View only
View + comment
Permission model, view, comment, revoke.
Power BI users still locked out of the data layer.
final
Share + push to BI
shipped
People
Apps
Link
Power BI ●
Looker
Tableau
Alteryx ●
push approved reports only ✓
"Apps" tab = data goes, not just a viewer.
Three sharing modes, people, apps, link, under one button.
Only approved reports can be pushed externally. Lifecycle = gate.
Connections persist: re-publish overwrites the live BI dashboard.

Principle in actionThe report stays in Verde.

Pre-Verde, a PDF download was the moment the report became un-governable. Post-Verde, the PDF is one of several modes, and the canonical version always lives inside the platform with its audit trail attached.

TradeoffSix integrations is more surface than launch needed.

We could have shipped Power BI only. We built the integrations grid (Power BI, Looker, Tableau, Alteryx, Qlik, Zoho) but ship Power BI + Alteryx as live in v1, the others ghosted in to communicate the roadmap without overpromising.

The decisions that shaped the rest

Where we held the line, where we bent, and what we cut from scope. Every row here represents a debate that's still defensible today.

Decision What we picked What we gave up Why
Home screen kept Card deck of in-flight reports + table below for the long tail. cut Pure table (familiar but didn't answer "what needs me today"); pure feed (broke "find that 2022 file"). Two jobs, two surfaces, the queue lives on cards, the archive lives in the table.
Lifecycle states kept Five states (Draft → Review → Approved | Rejected → Disclosed) with named reviewers per transition. cut The simple "uploaded / not uploaded" model that the legacy schema used. Clients and auditors were asking who signed what. A real state machine is the only honest answer.
Status surfacing kept Status pill is the first thing on every card, in every list, on every report header. cut Hiding status behind an "Audit" tab to keep the main view clean. If status changes how you act on the report, it can't be one tab away.
Generation flow kept Framework cards + 4-step wizard + AI draft preview. cut Monolithic form with conditional fields; one generator per framework. One mental model, framework-aware steps. Shared AI draft + audit component across all eight frameworks.
AI-generated content kept AI drafts narrative + tables; consultant must edit/approve before sign-off. deferred One-click "generate and publish" workflows. SFDR / CSRD content reaches lawyers and regulators. Human-in-the-loop is non-negotiable for v1.
Sharing model kept Three modes, named people, integrations, signed link, gated by approval state. cut Anonymous shareable URL. ESG reports name funds, assets and individuals. Anonymous links were a compliance liability.
Integrations kept Power BI + Alteryx live; UI surface for Looker, Tableau, Qlik, Zoho. deferred Live OAuth for non-Microsoft integrations to v1.2. 80% of Meridian's BI work is in Power BI. Ship that solid, signal the rest.
Pinned / favourites kept Heart icon on each card, user-scoped favourites. cut Org-level pinning ("important reports"), confused with status pills. Two pin systems was one too many. Status is the org signal; favourites are personal.
Audit timeline kept Visible by default in report header (collapsible). cut A standalone "Audit" page that nobody opened. The audit trail is part of the report's story. Hiding it implied it was extra; surfacing it implies "this is who has approved this".
Phased delivery kept Four phases: library → governance → AI generation → integrations. cut Big-bang launch. Each phase ran with Meridian consultants in test. The integrations design was reshaped by what we learned in phase 2.

If we did it again.

Three things we'd front-load on the next engagement with the same shape of problem.

retro · 01
Model the workflow before the UI.
The lifecycle state machine saved redesigns. We'd write that on day one next time, not week three.
retro · 02
Show the governance, don't bury it.
"Audit" tabs are where compliance posture goes to die. We'd put the audit trail in the primary view from the first wireframe.
retro · 03
AI is a first draft, not a release.
The hardest argument was holding the line on human-in-the-loop. We'd write that as a principle before scoping the AI flow next time.
Final UI

Where the platform stopped being a passive file-store and started running the workflow

A walk through the four surfaces that did the heaviest lifting once Verde shipped, the report library, the lifecycle pipeline, the AI generation wizard, and the share-and-integrate flow.

Report library
A queue of what needs you today, not a list of files
The home screen flipped from a file list into a card deck of in-flight reports. Status pills lead. Charts inside the card make a report recognisable by shape, not by name. The full table sits below for the long tail.
1
2
3
verde / reports / library
Hi Jamie
You have 8 reports needing review this week.
All · 28 Favourites · 5 Review · 8 Approved · 15
GRESB
GRESB Annual 2024
Asia Markets · updated 2h ago
Under review
DRERSC
EPRA
Asia Markets sBPR FY25
3 funds · updated yesterday
Approved
ERJP
INREV
Q4 NAV-linked disclosure
Core Fund · updated 3d
Draft
DRSC
SFDR
Article 8 Q3 disclosure
Growth Fund · updated 5d
Under review
JPER
GHG
Portfolio carbon footprint
Whole estate · updated 1w
Approved
DR
CSRD
Article 19a narrative
EU funds · updated 2d
Rejected
SCDR
What you are looking at
1
Status leads. Every card opens with the pill, then the framework, then the name. Triage happens in the queue, not after opening.
2
Charts make a report recognisable. A sparkline inside the card is faster than a filename. Consultants spotted yesterday's GRESB out of the corner of their eye in usability tests.
3
Filter chips collapse the tabs. The old four-tab nav became a single row of counted chips. The full table moved below as a search-and-filter surface, not the headline.
Approval & governance
Every report carries its own audit trail
The lifecycle state machine surfaces on the report itself. A status pill, a named reviewer, an approve and reject action, and a timeline of every transition with a timestamp and a signature.
1
2
3
verde / reports / Asia Markets FY25 / approvals
EPRA · Asia Markets · FY25
Sustainability disclosure, FY25
Submitted by Sarah Chen · 2 days ago
Under review
Draft
Under review
Approved
Audit timeline12 events · last 14 days
Just now Emma Rivera opened the report for review Review
2 d ago Sarah Chen submitted for review, assigned to Emma Rivera and Senior consultant Submit
3 d ago Sarah Chen edited the Scope 2 narrative, three sentences Edit
5 d ago System drafted from EPRA template, 38 parameters bound to source Draft
What you are looking at
1
State is the header, not a tab. Status pill, lifecycle pipeline and approve and reject all live on the primary view. If status changes how you act, it cannot be one click away.
2
Friction is proportional to consequence. Approve is one click on a clean report. Reject opens a required reason field. The platform argues for the safer default without blocking the experienced user.
3
The audit trail is the answer. When a client's lawyer asks who signed what and when, the timeline below is the answer, not a call to the data team.
AI generation
A first draft from validated data, never a final answer
Pick a framework, scope a fund, configure framework-aware parameters, and the platform drafts a structured report from live portfolio data. The consultant edits the narrative. The senior approves it. The AI is a starting point, never a publish button.
1
2
3
verde / generator / step 2 of 4
New report · step 2 of 4
Crafting your AI insights report.
Choose a framework, configure its parameters, and watch the draft assemble in the preview.
GRI
~26 params
GRESB
22 params · picked
EPRA
~38 params
CSRD
~60 params
AI draft · live preview
↓ 16.1% YoY emissions, on track vs. trajectory
What you are looking at
1
Framework first, then parameters. One generator covers eight frameworks. Step 3 renders only the fields the chosen framework needs, so a 60-field SFDR form never appears for a 14-field INREV report.
2
Cards over radios. Picking a framework is the anchor decision of the flow. It gets the visual weight, with a parameter count and a logo, not a tiny radio in a list.
3
The draft is a preview, not a publish. Numbers update as parameters change. The downstream editor marks AI-drafted sentences with a dotted underline until a human edits or approves them.
More of the system
Impact

From fragmented and manual to structured and governed.

32%
Reduction in manual reconciliation time per report cycle
100%
Of approved reports carrying a named reviewer and full audit trail
4+
Compliance frameworks served from a single data entry point
10
Months end-to-end, across four phased releases

The most useful signal was qualitative: consultants stopped keeping private trackers. The platform's status pill became the version of the truth the whole team referred to, which is what made the legal-review conversations stop being a scramble.

More case studies

Three other projects, the foundation layer Verde was built on top of, the analytics surface that turned the foundation into answers, and an AI-powered invoice pipeline for a multi-country utility portfolio.