Case study portfolio

Every system I build is designed to catch something before it becomes a problem.

Seven projects in decision logic, experience analytics, data quality, team enablement, SaaS implementation, and AI-assisted operations — each one built so the safeguard catches the failure, not the person relying on it.

Complexity → Clarity → Adoption Open to roles in systems design, data & CX analytics, and AI-assisted operations
About this work

I design decision systems, data-quality pipelines, and AI-assisted workflows that make complex work faster, clearer, and easier to trust.

My projects usually start with a familiar problem: a manual process is eating up time, creating avoidable errors, or making good decisions harder than they need to be.

The case studies below include:

Decision support

Cut case resolution time from 30 minutes to 5

CX analytics

Turned 3 years of user feedback into insights that helped shape a shipped product feature

Operational enablement

Built a five-phase onboarding program that got 20+ remote hires to full competency in 30 days, down from 60–90+

AI workflow design

Created and tested an AI-assisted workflow that surfaced a critical failure before reaching the user

Risk monitoring

Built an AI workflow that cross-checks email against project boards to catch delivery risk before the weekly review

Data quality

Built an automated validation pipeline protecting 30+ programs from downstream errors

SaaS implementation

Built an AI-assisted onboarding system that takes a client from Closed Won to a reviewed kickoff plan

swipe

Four projects were built inside organizations and are presented with identifying details removed.

Three are self-directed AI portfolio projects shown in full — including the workflows, design decisions, testing, and where they broke.

It's not possible to overstate what a game-changer this has been for us. Saves frustration, reduces wasted time, and reduces errors.Direct manager, on awarding a 2025 Spot Award for Innovation

Portfolio at a glance

The headline number from each case study.

Full toolkit

Everything used to build these six systems.

Excel Power Query ETL Data Validation Decision Logic AI-Assisted Design Change Management Survey Analysis Data Categorization CX Analytics Dashboard Design Stakeholder Presentation Solution Architecture Team Development n8n Gemini Wispr Flow Workflow Automation Process Automation Systems Thinking Asana AI-Powered Design Notion Notion API Risk Monitoring Training Design Train-the-Trainer
The case studies

Seven systems, seven kinds of failure they were built to catch.

take a look
01 · Change Enablement

Decision Intelligence Tool

480 cross-system status combinations, translated into one answer per case.

5 min read · Excel, AI-Assisted Design, Change Management

83%faster case resolution Read →
02 · UX Insights

3-Year CX Analytics Initiative

Raw survey comments, turned into a categorization framework and a one-click Download All button.

5 min read · Survey Analysis, Data Categorization, CX Analytics

1recommended feature shipped Read →
03 · Operational Enablement

224 Tasks, Learned in 30 Days

A five-phase onboarding program that got 20+ remote hires to full competency in 30 days, down from 60–90+.

6 min read · Asana, Training Design, Change Management

30 daysto full competency Read →
04 · AI Automation

Call Recap to Tone-Guided Follow-Up Email

A self-directed n8n + AI workflow prototype — and the safeguard that caught its own failure.

6 min read · n8n, Gemini, Workflow Automation

Draft-onlyhuman-in-the-loop safeguard Read →
05 · Risk Monitoring (In Progress)

Email Threads to a Weekly Risk Digest

A self-directed n8n + Gemini workflow that cross-checks Gmail against Notion boards — and knows when to leave a risk unconfirmed rather than guess.

6 min read · n8n, Gemini, Notion API

3 hrsrecovered weekly across 10 projects Read →
06 · Program Delivery

The Pipeline That Protected 30+ Grant Programs

An automated validation pipeline that flags every mismatch, every cycle.

5 min read · Power Query, ETL, Data Validation

0escalations since deployment Read →
07 · SaaS Implementation

Closed Won Deal to Reviewed Kickoff Plan

A self-directed n8n + Claude system connecting HubSpot, Asana and Gmail — it rates each client's readiness, builds the plan, and waits for a human to press Send.

7 min read · HubSpot, n8n, Claude API, Asana API

5 of 5test clients routed to the right path Read →

Not collecting tools. Using them to solve something real — and knowing what has to happen before the solution becomes real for a business.

If you want the full, non-anonymized versions of the decision intelligence, CX analytics, data quality, or onboarding case studies, or want to talk through how any of this would apply to your team, I'm easiest to reach on LinkedIn.

Connect on LinkedIn
or send a message directly

About · Abitha William, PMP

Most operational pain is a system design problem — not a people problem.

I'm a Senior Project Manager who builds the decision tools, data pipelines, and AI-assisted workflows that make complex work faster, clearer, and easier to trust — and the onboarding and training that get teams to actually use them.

Abitha William smiling on a wooded trail
PMP (Project Management Professional) certification badge
RoleSenior Project Manager, PMP
FocusEnterprise implementation, client onboarding, change management
ToolsExcel & Power Query, Asana, n8n, Gemini, Notion
Based inMaryland · open to remote & hybrid
Open toImplementation, enablement & operations roles in digital health, AI, and consumer tech
My story

I start with who has to live with the result.

I stumbled into project management, but it turned out to be a natural fit for how I think. As a systems thinker, I enjoy connecting the dots, understanding how all the pieces fit together, and helping turn the bigger picture into a clear path forward.

My projects usually start the same way: a team is losing time to a process nobody designed. Twelve specialists cross-referencing three systems by hand. New hires spending two to three months learning a 224-task project from a task list. Volunteer reviewers hunting for their own files. A quality check that only worked if the person running it never got tired.

I don't start with the tool. I start with the people who have to use it — then I build the smallest thing that removes the guesswork, test it where it's most likely to fail, and train the team until they don't need me in the room.

Outside of work, I love exploring trails, kayaking, and taking walks with my golden retriever, Charlie. Spending time outdoors is one of my favorite ways to recharge.

— Abitha

By the numbers
How I work

Five things I believe about building systems people trust.

  1. I design for the person who has to live with it.

    A tool nobody adopts is a failed tool. My decision matrix looked like a form, not a spreadsheet — and 12 people were self-sufficient after two training sessions.

    See the Decision Intelligence Tool →
  2. I measure what nobody is counting.

    The #1 complaint in years of survey feedback had never been tallied. Counting it — 179 people asking for the same thing — is what got the feature shipped.

    See the CX Analytics Initiative →
  3. I automate detection and keep judgment human.

    My pipelines flag every mismatch automatically, but a person makes the correction. My AI workflows draft and propose; they never send or confirm on their own.

    See the Data Quality pipeline →
  4. I test for the failure, not the demo.

    The most useful test is the one that tries to break the thing. It's how a draft-only safeguard caught an identity error before it ever reached a client.

    See the AI follow-up workflow →
  5. I build it so it runs without me.

    Instructions tabs, documented logic, and train-the-trainer handoffs — the onboarding program I built is still how new hires learn today, and managers run it without me.

    See the onboarding program →
What people say
“It's not possible to overstate what a game-changer this has been for us. Saves frustration, reduces wasted time, and reduces errors! It cut case resolution time from 30 minutes to 5 minutes.”
Program Manager, PMPManaged Abitha directly
“In the three years we've worked together, she's been a go-to source of guidance for me, and her mentorship helped me grow into an effective program lead. Abitha is exactly the kind of leader who raises the bar for everyone around her.”
Project & Program LeadWorked with Abitha
Read the full recommendations on LinkedIn →
What I'm looking for

Technology that solves practical problems — and teams ready to adopt it.

I'm particularly excited about digital health, AI and automation, and consumer technology. I'm drawn to organizations that use technology to solve practical problems and make everyday life easier. With my background in enterprise implementation and change management, I enjoy helping teams turn new ideas and systems into services people can successfully adopt and use.

Based in Maryland, open to remote and hybrid roles.

Digital healthAI & automationConsumer technologyEnterprise implementationClient onboarding & enablementChange management

Let's talk.

If your team is losing time to a process nobody designed, I'd love to hear about it.

03 · Operational Enablement

224 Tasks, Learned in 30 Days

Turning a 224-task project into a two-week, five-phase onboarding program that got 20+ remote hires to full competency in 30 days — down from 60–90+.

224Tasks per project, from kickoff to client handoff
600+Productive days gained across 20+ hires (estimate)
20+Remote hires trained through the program
30 daysTo full competency — down from 60–90+

The 30-second version: new hires were spending 60–90+ days learning a 224-task project from lectures and a task list. I turned it into a two-week, five-phase program — lecture, real system, hands-on practice, feedback — that got 20+ remote hires to full competency in 30 days, then handed it to managers to run. It's still the standard, and the team went on to earn very high customer satisfaction scores.

Jump to how this maps to client implementation → Download the one-page summary (PDF) →
Who was affected

New hires faced 224 tasks — and didn't touch real work for a month.

Every project on our team was a peer review cycle, and running one took 224 tasks from kickoff to the final handoff to the client. Those tasks were split by role: some belonged to Team Leads, others to Project Support Specialists.

New hires learned all of it through lectures and the project task list in Asana. They wouldn't see their first real work task until about a month in — and when they did, it felt like starting from scratch. Reaching full competency took 60 to 90+ days, with heavy errors along the way. On a remote team, that stretch was also isolating.

The knowledge existed. The path through it didn't.
What was broken

Onboarding was a lecture and a task list — no phases, no practice, no one checking in.

  • No structure. 224 tasks were presented as one long list, not broken into the phases people actually work in.
  • No practice. Hires listened to lectures but never used the systems until real work arrived weeks later.
  • No personalized help. Nobody reviewed a new hire's work until it was live — which is where the errors surfaced.
  • No connection. Remote hires learned alone and didn't get to know the wider team.
What I built

Five phases, each ending in the real system.

I architected a two-week onboarding program that split the 224 tasks into the five phases of a peer review project. Every phase followed the same loop: an interactive lecture deck, then the system used in that phase, then a hands-on assignment built on practice data, then personal feedback. Hires worked with real project work during the program, so by day 30 they could simply build a project.

Click a phase to see how it was taught.

Built for the role, paced for retention

Tasks were assigned by role level, so the program followed the same split: Team Leads and Project Support Specialists each practiced the tasks they would own. Practice data covered the work people found hardest — reviewer onboarding, stakeholder communication, reports, and data analysis.

How I built it

  1. 01Map the work

    Broke the 224 tasks into the five phases of a peer review project, split by role.

  2. 02Build the materials

    Interactive lecture decks, practice data, and a hands-on assignment for every phase.

  3. 03Plan with Operations

    Co-developed the two-week schedule and which teammate would lead each session.

  4. 04Run and adjust

    Delivered the first cohort, then rebuilt the dry lectures into two-way sessions.

  5. 05Hand it off

    Trained managers to run it through mini train-the-trainer sessions.

I deliberately held the program at two weeks. Not an accelerated sprint, and not a drawn-out course: two focused weeks, then time to keep working through the materials, so people felt genuinely confident by the end of the first month. I co-developed the schedule and trainer assignments with the Operations team.

The real schedule

Every lecture was followed by practice — and every practice was reviewed.

This is the program's actual two-week structure, recreated with every name, system, and organization detail removed. Three tiers built on each other — basics, then tools, then the phase-by-phase modules — and sessions were led by more than a dozen different teammates, so new hires met the whole team.

Check-inLectureHands-on practiceReview & feedbackSetup & self-study
Week 1
Mon
  • Daily check-in
  • Tier 1: Peer review basics
  • Document library training
Tue
  • Daily check-in
  • Tier 2: Asana basics (my session)
  • Asana hands-on practice
  • Phase 1 lecture: Kickoff
Wed
  • Check-in + Phase 1 quiz
  • Module: email templates
  • Module: reviewer database
  • Phase 2 lecture: Screening
Thu
  • Setup day: credentials & equipment
Fri
  • Daily check-in
  • Weekly team call
  • Practice project overview
  • Assignment 1: reviewer outreach (90 min)
Week 2
Mon
  • Review Assignment 1 results
  • Phase 3 lecture: Assignments
  • Reviewer paneling exercise (2 hrs)
  • Answer key & questions
Tue
  • Team meeting
  • Self-study & 1:1 check-ins
Wed
  • Daily check-in
  • Forms training + sample-forms exercise
  • Phase 4 lecture: Peer Review
  • First outreach email → submitted for QC (2 hrs)
Thu
  • Weekly team call
  • Review forms, write a response
  • Answer key & discussion
  • Letters & templates training
Fri
  • Phase 5 lecture: Final Reports
  • Practice collaboration call
  • Buddy check-in

Recreated from the program's real schedule; condensed, with all names, internal system names, and organization details removed.

Inside the lecture decks

Built to be interacted with, not read.

The original lectures were dry. These recreations show how I rebuilt them as enterprise-system training: animated walkthroughs of the live systems, then a slide that asks the new hire to do something — answer a question, spot what's missing, or stop and practice.

Internal checklist15 sections
  • Opportunity postedKickoff
  • Project kickoffKickoff
  • Reviewer approval & outreachKickoff
  • Application window closesKickoff
  • Applications screenedScreening
  • Reviewer panels set upAssignments
  • Orientation callAssignments
  • First contact email to reviewersPeer Review
+ 7 more sections through Final Reports
The template every project ran onThe Asana project every hire would learn to run: 15 sections, each tagged to its phase, with the subtasks nested inside.
Review management system
Screening Panel setup Initial review Collaboration Final scoring
Panel A2 of 33 of 3
Reviewer 2 Reviewer 5 Unassigned Reviewer 7 Reviewer 9
Animated walkthroughs of the live systemsInstead of static screenshots, lectures showed the real systems in motion: moving from one section to the next and assigning reviewers to panels, with the cursor tracing every click — the way you’d walk a client through a new platform.
Coding applications in two systemsLecture
Going to review“Move forward”
Eliminated at screening“Do not move forward”
Coding applications in two systemsKnowledge check
Going to review
Eliminated at screening

Applications are coded in what two designations?

The same slide, turned into a quizLecture slides came back as knowledge checks: the title struck out, the answer hidden, and the question on screen.
First contact email attachments

Identify the missing documents.

First contact email Funding announcement ? ? COI / NDA form Step-by-step instructions
Fill in what's missingKnowledge checks asked hires to identify what was missing — not just repeat what they'd heard.
First contact email to reviewersPeer Review
  1. 1Create conflict-of-interest / NDA forms
  2. 2Draft the panel lead’s first contact email
  3. ✓Circulate with the team lead for quality control
  4. 4Send the first contact email to reviewers, by panel
Quality control, built into the stepsEvery process slide showed where a team lead reviews the work before it goes out — so checking became a habit, not an afterthought.
Paneling exercise!
Assignments
Exercise breaks, with a phase trackerLectures paused for hands-on exercises, and every slide showed where you were in the five phases.

Recreated from the original training decks — logos, slide template, client, organization, and internal system names removed.

Why it's implementation work

Onboarding a team onto a system is the same job as onboarding a client.

The audience was internal, but every design choice maps directly to how a client gets implemented onto a new platform:

What I built for new hiresThe client implementation equivalent
Five phases from kickoff to client handoffA phased implementation plan with clear milestones
Animated walkthroughs of the live systemsGuided product demos and click-path training for client users
Practice data inside the real systemsA sandbox / UAT environment before go-live
Separate tracks for Team Leads and SpecialistsRole-based training for admins and end users
Train-the-trainer handoff to managersEnabling the client's own champions to train their teams
Manager sign-off and fewer errors caught in reviewAdoption and quality metrics after go-live
Very high customer satisfaction evaluation scoresThe outcome clients actually judge you on
Testing & real-world validation

The lectures were dry, so I made them two-way.

The first version of the lectures carried the same problem as the old onboarding: people were listening, not doing. I rebuilt them around interaction between trainees and trainers, so every lecture led straight into questions, the system, and an assignment.

The real test was each new hire's first unassisted task. It went through without a hitch or with only minimal feedback, and my manager confirmed that hires had reached full competency within 30 days. Fewer errors were caught in review, and fewer questions came up once people were live.

Before & after
MetricBeforeAfter
Time to full competency60–90+ days30 days
Productive time per hireLost to a long ramp-up30–60+ days gained (est.)
First real work taskAbout a month in, from scratchDuring the two-week program
ErrorsHeavyFewer caught in review
StructureLectures + a 224-task list5 phases: lecture, system, hands-on, feedback
SupportNo personalized helpFeedback on every assignment
DeliveryDepended on individualsManagers trained to deliver it
What I did not do
✕Deliver every session myself

A remote team needed attention from more than one person

✓Team leads taught different portions, so hires met the whole team
✕An accelerated bootcamp

Speed without retention just moves the errors later

✓Two focused weeks, then time to keep practicing
✕Lecture-only training

Listening isn't the same as doing

✓Interactive lectures followed by hands-on assignments on practice data
✕Owning the program indefinitely

A program that needs its builder doesn't scale

✓Handed off to managers through mini train-the-trainer sessions
Result

Still the standard today — and it runs without me.

I built the lectures and the program, then handed delivery to the operations managers through mini train-the-trainer sessions, and kept giving feedback using the same lectures and practice data. More than 20 hires have come through it, it is still how new team members are onboarded today, and the framework was adopted across the organization.

The effect reached our clients too: the team went on to earn very high customer satisfaction evaluation scores.

In capacity terms, each hire became productive roughly 30–60+ days sooner than before. Across 20+ hires, that's an estimated 600–1,200+ days of productive work the team got back — without adding headcount.

What I'd measure next

Manager sign-off and fewer review errors proved the program worked, but I'd build a fuller scorecard for the next rollout: days to first unassisted task, errors per cohort in each phase, 90-day retention, and a short confidence survey at the end of weeks one and two — the same adoption metrics I'd use for a client go-live.

She also has played a lead role in our new staff training programs and overall led her team to perform at a high level resulting in very high customer satisfaction evaluation scores and very high level of quality based on our quality key performance indicators.Program Manager, PMP · managed Abitha directly
30 min → 5 mincase resolution time
01 · Change Enablement

An AI-Assisted Decision Intelligence Tool

Guided clarity for complex decisions: turning 480 cross-system status combinations into a single answer per case.

83%Case resolution time cut, from 30 to 5 minutes
480Cross-system status combinations translated into guidance
12Staff trained to full adoption in two sessions
2025Spot Award for Innovation

The 30-second version: A team of 12 was cross-referencing three systems by hand to interpret 480 possible status combinations — about 30 minutes a case and roughly 20 interruptions a day. I mapped every combination (340 were invalid) and built an Excel tool that works like a form: pick the statuses, get the answer and the next steps. Case time dropped to 5 minutes, the whole team was self-sufficient after two training sessions, and it earned a 2025 Spot Award for Innovation.

Jump to the interactive demo → Download the one-page summary (PDF) →
3 open systems, mentally cross-referenced
One guided form, one answer
Stakeholder map & organizational value

Builder: Abitha William, Senior Project Manager (sole architect) · Primary users: 12 Project Support Specialists · Downstream impact: 10+ programs, 500+ end users receiving consistent, accurate outreach.

~6 hours/day returned to the team — 30 minutes saved per case × 12 staff × daily use. ~10 hours/week returned to leadership capacity — 20 interruptions eliminated per day × 30 minutes each.

Who was affected

A team of 12 was losing 30 minutes per case to logic no document could hold

As the senior project manager overseeing a team of 12 project support specialists, I watched them navigate a three-system enrollment process every day across 10+ programs. A new security decision created 480 possible status combinations across those systems, and nobody had built anything to help staff interpret them.

Staff had to open three systems, read each status, mentally calculate how they interacted, decide what the user needed, and send the right email in the right order — every single case, every single day. I was fielding roughly 20 interruptions a day. Staff were frustrated, users were waiting, and the work wasn't getting done.

It was not a knowledge problem. It was a system design problem that nobody had built a solution for yet.
What was broken

340 of 480 combinations were invalid — and staff couldn't tell which.

Staff were being asked to interpret logic instead of being guided through it, and the order of operations changed with every combination — for example, one status pairing meant work System 1 first, while a different pairing meant work System 2 first and leave System 1 alone. A static reference document couldn't hold that kind of hierarchy.

340 of the 480 combinations were invalid states where the systems didn't harmonize and the helpdesk had to intervene. Staff had no way to know which was which, which meant constant interruptions, inconsistent guidance, and avoidable escalations.

340 invalid combinations 140 valid combinations
What I built

A form, not a table

I proposed the solution to my manager before building anything, got approval, and researched every status in every system row by row. Manually checking all 480 combinations by hand would have taken weeks on its own, so I used ChatGPT to help reason through the logic and narrow down which combinations were actually valid, and to draft the Excel formulas that powered the matrix — without exposing confidential data. I built and verified the full 480-combination master matrix myself over a few weeks.

Then I designed the interface like a form instead of a spreadsheet: staff select statuses from dropdowns, and the tool instantly shows what the combination means, what staff need to do, and what the user needs to do — color-coded by urgency. For invalid combinations, it returns a clear error: invalid, contact helpdesk. No more guessing.

One deliberate choice: the tool tells staff which email template to use but doesn't auto-fill or send it. I wanted staff to read and understand what they were sending — a staff member who understands the email is a better advocate than one who just clicks send.

Try a simplified version of the tool

Set a status for each system and see the kind of guidance the real tool returns — color-coded by urgency, the same pattern described above.

All systems active — no action needed.
No action needed Work one system first Invalid — contact helpdesk

Illustrative recreation of the interaction pattern described above — not the original 480-row matrix, which contains confidential system names and logic.

Session 1Tool walkthrough + guided practice
Session 2Live cases, open questions
Full adoptionAll 12 staff self-sufficient
Testing & real-world validation

Two moments proved the safeguard, not just the build

What happenedWhat the team sawWhat it confirmed
Staff-reported "unrecognized" combinations During early use, several of the 12 staff flagged combinations the tool didn't recognize at all Investigated and confirmed as genuine glitches in the underlying systems, not gaps in the matrix — correctly routed to the helpdesk exactly as designed
A downstream security update A later system change made one previously invalid combination valid The tool still flagged it as invalid until the matrix was updated — caught and corrected, and confirmed why the tool needed active maintenance, not a one-time build

Both moments came back to the same principle: an automated "invalid" flag is only trustworthy if someone keeps the underlying logic current. The tool doesn't maintain itself — I do.

Before & after
MetricBeforeAfter
Time per case30 minutes5 minutes
Questions to me daily~201–2
Training requiredHours of self-guided learningTwo sessions to full adoption
Consistency across teamVaried100% consistent
Invalid-state visibilityNoneInstant error flag
What I did not do
✕Flowchart

Can't show hierarchy across 3 simultaneous variables

✓Decision matrix with dropdown interface
✕Reference document

Relocates cognitive load, doesn't remove it

✓Automated output that removes interpretation entirely
✕Lengthy training program

12 people would internalize it 12 different ways

✓Two focused sessions + consistent tool output
✕A heavier workflow platform

Requires a new platform learning curve

✓Excel — immediately familiar, zero adoption friction
Result

Still in use today, and it runs without its builder in the room.

The tool is still in active use today, updated as systems change, and remains the single source of truth for every status combination in the organization. A built-in instructions tab, the dropdown structure, and documented logic mean any team member can operate it without the original builder present — a deliberate architectural choice.

It's not possible to overstate what a game-changer this has been for us. Saves frustration, reduces wasted time, and reduces errors.Direct manager, on awarding a 2025 Spot Award for Innovation

What I'm most proud of isn't the award or the adoption rate. It's that 12 people came to work and did their jobs more happily — that was the business need that mattered, and everything else followed from it.

02 · UX Insights

A 3-Year CX Analytics Initiative

Evidence that shaped product direction: turning a word document full of unread feedback into a shipped feature.

8,400Data points from 900+ users across 7 program offices
3×Increase in positive sentiment, 2021–2024
3 yrsConsistent methodology, run end to end by me
1Feature shipped in 2024 — a one-click Download All button

The 30-second version: Volunteer reviewers were losing time to a hard-to-use review system, and leadership only ever saw raw ticket counts. On my own initiative, I read and categorized years of survey feedback into a framework I held constant from 2021 to 2024 — and found that the #1 request, a faster way to get assigned files, had been asked for by 179 people and never counted. I took it to leadership; in 2024 the client shipped a one-click Download All button, and positive sentiment tripled.

Jump to the category breakdown → Download the one-page summary (PDF) →
Stakeholder map & what was at stake

Led by: Abitha William, Senior Project Manager — read and categorized the large majority of the survey data herself across the initiative · Reviewers: 900+ volunteer peer reviewers, reading applications in whatever free time they could find around full-time jobs and families · Client: needed confidence that awards were going to the applicants who earned them · Downstream: every organization that applied, whether or not it deserved funding.

A frustrating system didn't just waste volunteers' evenings. It pushed tired reviewers toward rushed reviews instead of the quality review each application deserved — and a rushed review is how the wrong application gets an award instead of the right one.

One file, one click — every single time
DOWNLOAD ALL One click — every file, straight to desktop
Who was affected

Volunteers were losing their own time to a system nobody had measured

The users in this story weren't employees. They were volunteer peer reviewers, reading applications in whatever free time they could find around full-time jobs and families. When the review system launched, it wasn't intuitive — files were hard to find, navigation was clunky, and every minute spent fighting the system was a minute stolen from actually reading the application in front of them. That mattered beyond convenience: a tired reviewer with less time is a reviewer more likely to rush, and a rushed review is how the wrong application gets funded instead of the right one.

Their time was precious. The system was wasting it. And nobody had measured how much.

The organization was already collecting survey data after every review cycle, and users left detailed comments — but the report sent to leadership was a raw list of helpdesk ticket counts and an unprocessed dump of feedback. No categories, no patterns, no recommendations.

What was broken

The #1 complaint sat uncounted for years — 179 people asked for the same thing.

The gap wasn't a data gap — the data existed. The gap was analytical. In one fiscal year alone, 900+ responses came in across program offices: roughly 300 navigation issues, 200 troubleshooting issues, 100 system accessibility issues, and 250+ with no criticism at all. The single most common complaint across all offices — a faster, simpler way to retrieve assigned files — was flagged by 179 respondents, but it had sat in a raw comment list, uncounted, for years.

Leadership was making system-improvement decisions without knowing what was actually broken or how many people were experiencing it.

850+ RESPONSES

Click a category to see what it meant.

What I built

A categorization framework held constant for four years

I proposed the initiative to my manager on my own initiative, then put every survey response into a single spreadsheet column and read each one manually, tagging it by hand into a small set of recurring findings. I tested multiple categorization structures before landing on three that held across all the data — navigation, troubleshooting, and system accessibility — and built individual pie charts per program office plus a combined totals analysis, with a recommendations list drawn directly from the highest-volume comments.

“I can never find my assigned files — I have to click through four different tabs every single review cycle just to see what's mine.”

Navigation

Illustrative example, written to match the tone of real feedback — not an actual reviewer quote.

I kept the exact same framework from 2021 through 2024 so the data stayed comparable year over year, then documented and handed the template to my direct reports to maintain going forward. I also tracked something most analysts wouldn't think to measure: positive sentiment. In 2021, roughly 10% of comments held no criticism at all; by 2024 that had grown to 30%.

30% 0% 2021 · ~10% 2024 · ~30%

Only 2021 and 2024 are measured data points — the line shows overall direction, not a claimed year-by-year trend.

I had built a longitudinal proof of impact without anyone asking me to.
Before & after
MetricBeforeAfter
Leadership reportingRaw helpdesk ticket countsCategorized analysis with charts
User pain visibilityAnecdotal, unstructuredTallied, trended, visualized
RecommendationsNoneEvidence-based, top 3 per cycle
Positive sentiment~10% (2021)~30% (2024)
Feature shipped01 — one-click Download All button
What I did not do
Option consideredWhy rejected or adaptedWhat I chose instead
Complex weighted scoring modelAdds explanation burden before insight can be usedSimple tally and pie chart — zero explanation needed
User interviewsStakeholders weren't in a position to act on qualitative depthEnriched survey data with specific comment categorization
Elevating a security-driven pain pointReal, but technically unfixable by the clientIncluded in findings, not elevated to top recommendation
One-time analysisNo trend visibility, no proof of impact over time4-year longitudinal framework, consistent methodology
Result

The top request shipped in 2024 as a one-click Download All button.

I presented the findings directly to leadership as evidence: this was end users' top request, and it was costing reviewers real time every cycle. In 2024, the client shipped a one-click Download All button — replacing the one-file-at-a-time downloads reviewers had been stuck with since launch.

The categorization template I built in 2021 is still in use today, maintained by my direct reports. It was designed to be replicable — documented clearly enough that anyone could run it, and consistent enough that four years of data remain comparable. That initiative made the organization look good in front of its stakeholders, and gave volunteer reviewers something they'd never had before: proof that someone was measuring what the system was costing them.

What I'd measure next

Positive sentiment climbing from 10% to 30% is real evidence something improved — but sentiment isn't the same as time. I never directly studied whether reviewers actually got more time back to review each application carefully, which was the outcome that mattered most to award quality. That's the metric I'd build next.

I don't wait to be handed a problem. I find the gap. I build the solution. And I make sure the people who have to live with the results are better off than they were before.
06 · Program Delivery

The Pipeline That Protected 30+ Grant Programs

Reliable systems for high-stakes work: replacing an hour of manual comparison with a pipeline that flags every mismatch, every cycle.

74%Projected cut in processing time, ~1 hour to 16 minutes
100%Application status accuracy in screening
30+Grant programs protected every screening cycle
0Helpdesk escalations from data mismatches since deployment
Who was affected

A miscategorized application could mean an organization went unfunded

My team ran application screening cycles across 30 or more programs. After each cycle, two reports had to match: one showing statuses before screening, one after. When they didn't match, an application had been miscategorized — and a miscategorized application could go unfunded entirely.

Pre-screening report
ApplicationCategory
Program A · App 014Category 1
Program A · App 015Category 2
Program B · App 022Category 1
Post-screening report
ApplicationCategory
Program A · App 014Category 1
Program A · App 015Category 3
Program B · App 022Category 1

Hover the mismatched row — that's what the pipeline flags automatically, every cycle. (Program and application names are illustrative.)

The human cost of bad data in grant management is not abstract. It is an organization that does not receive funding it deserved.

When a mismatch reached a stakeholder uncaught, the helpdesk had to manually fix the coding — days of correction work, during which the application sat in the wrong place and the applying organization had no idea.

What was broken

Detection depended on a busy person being perfectly consistent.

Before the pipeline, every comparison was done manually: copy-paste, conditional formatting by hand, thousands of cells scanned visually — about an hour per program, per cycle, across 30 programs. The process was broken at the detection stage, because it depended on the person reviewing being thorough, unrushed, and consistent. Those are human qualities that vary.

Before ~1 hour
After ~16 min
A pipeline does not vary.
What I built

Automated detection, deliberately manual correction

Before any build began, I authored detailed multi-page validation procedures with screenshots, specifying exactly which columns to compare, which reports to match, and what a flagged mismatch should look like. I designed and directed a Power Query dashboard — I owned the architecture, and a direct report with stronger Power Query execution skills built it.

The structure has three parts: a pre-screening report, a post-screening report, and a comparative reference tab. When the query runs, it flags every mismatch as a red cell, and a separate tab shows exactly which application, which field, and which value changed — telling me precisely what to correct manually in the source system.

I kept the paste step deliberately manual, so the person running validation engages with the data before the tool processes it.

Comprehension was more important to me than full automation.
Before & after
MetricBeforeAfter
Validation methodManual copy-paste + conditional formattingAutomated Power Query pipeline
Time per program, per cycle~1 hour~16 minutes
Mismatch detectionDependent on human consistencySystematic, every cycle
Errors reaching stakeholdersPossibleZero since deployment
Knowledge transferSingle point of failureMulti-page documented procedure
What I did not do
Option consideredWhy rejected or adaptedWhat I chose instead
Fully automated end-to-end pipelineThe source system only allows manual updatesAutomated detection, manual correction — right tool for the right step
Build it myself entirelyMy direct report had stronger Power Query execution skillsDirected the architecture, delegated the build
Skip the documentationTool becomes a single point of failure when the builder leavesMulti-page procedure with screenshots before build began
Automate the data paste stepWanted the analyst to engage with the data before processingDeliberate manual paste — comprehension over convenience
Result

The first real catch was an application in the wrong funding category.

The first real mismatch the dashboard caught was an application that had moved from one funding category to another incorrectly. Without the flag, it may not have been funded at all. The pipeline caught it; the correction was made; the application went to the right place.

The tool is mission-critical enough that rebuilding it, if ever needed, is on my own task list — and because I wrote the procedure document before the build began, I can rebuild it from scratch without starting over, and any future team member could too.

Delegation is not the absence of skill. It is the presence of judgment.
04 · AI Automation

Call Recap to Tone-Guided Follow-Up Email

A self-directed n8n workflow prototype that converts structured call recaps into addressed Gmail drafts for human review — and the draft-only safeguard that caught its own failure.

Self-directed portfolio project inspired by a publicly posted freelance brief. Not commissioned client work.

5 min read
4Workflow components: intake, draft, create, review
2Test scenarios, chosen by risk: a success case and a stress case
1Identity inconsistency caught before send
Draft-onlyHuman-in-the-loop safeguard, by design

The short version: a self-directed n8n + Gemini workflow drafts tone-matched Gmail follow-ups from call recaps — and during testing, its human-review safeguard caught an identity mix-up before it could reach a client.

Jump to Real Engagement → Solo project — see 3-Year CX Analytics Initiative for team-scale leadership →
Who this serves & what was at stake

Serves: the BD/account team member sending the follow-up, and the client on the other end of the call · Why it matters: every minute not spent drafting from scratch is a minute the BD team gets back to focus on the relationship itself, not paperwork.

A generic, unreviewed follow-up right after a phone call reads as impersonal — clients who just spoke with someone want a reply with the right tone and a personal touch, not a template. That's exactly why the workflow stops at a draft: a human still checks it before anything reaches the client.

01 · Context

Follow-ups were manual, inconsistent, and easy to send unreviewed.

I found a public freelance brief describing a familiar workflow problem: turning sales calls into follow-up emails was repetitive, manual, and inconsistent.

Each team member was:

  • Copying call transcripts into an AI tool
  • Writing prompts from scratch
  • Creating recaps in different formats
  • Drafting emails in their own tone and structure

The opportunity: turn that fragmented process into a repeatable workflow that could produce a consistent, voice-aligned draft for human review.

I didn't build everything. I chose the part worth testing.

Without access to the client, its systems, or real customer data, recreating the entire proposed solution would have added complexity without proving much more.

So I scoped the prototype around one high-value question:

Can a structured call recap reliably become a useful, voice-aligned email draft without giving AI the final say?

The prototype

The workflow:

  • Standardizes the drafting process
  • Reduces repetitive manual work
  • Applies defined voice and writing rules
  • Grounds the email in the supplied recap
  • Stops at Gmail Drafts rather than auto-sending
Call recap AI drafting Gmail draft Human review

Why that last decision matters

The goal wasn't maximum automation. It was finding the right boundary between automation and human judgment.

For customer-facing communication, AI could do the repetitive first-pass work. A person still owned the final decision.

That was the system I wanted to test.

02 · Solution

The short version: a four-node pipeline that drafts the email and stops — a human decides what sends.

AI drafts the email. A human decides what sends.

I built the four-node pipeline below in a single afternoon, then spent the following days testing it against real and fictional scenarios.

try it
Click a step above to see an illustrative example of its input or output.

The AI drafting step

The recap is converted into an email using defined voice and style rules. Click the five highlighted phrases below to see which rule shaped each one:

Hi Morgan, thanks for the time today. Per our call, the team needs API access by end of month, so I'll get a technical contact looped in this week. We can start the setup once the contract is signed, and I'm happy to hop on a quick call if anything above needs adjusting.

Best,
Jordan

Reconstructed example.

Model choice

Gemini powered the prototype, but I did not treat that choice as final.

For a real implementation, I would compare multiple models against the same test set for:

Voice consistency Accuracy Hallucination risk Draft quality Cost and speed

The goal would be to select the model based on evidence, not preference.

Human stays in control

The Gmail integration creates an:

Addressed email subject line completed draft

But it never sends automatically.

The workflow ends in Drafts, keeping a human responsible for reviewing and approving every customer-facing message.

Intentional boundary: draft, not send

The automation removes repetitive setup. It does not remove the reviewer's responsibility to verify identity, recipients, facts, commitments, action items, and tone before sending.

For testing inputs, I used my own Wispr Flow call recaps, because the meeting recorder produces the structured overview, key points, action items, and next steps this workflow needs.

Estimated impact (illustrative, pending Discover-phase validation)

Adjust the assumptions to see how the estimate moves.

try it

That's roughly 6 hours a week returned to relationship-building instead of drafting.

Multiply by team size for organization-wide impact.

What I did not do
ChatGPT (for drafting)

Why rejected: Ongoing API cost for a workflow meant to run on every call, not a one-off.

Chose instead: Gemini — lower cost for a prototype run repeatedly.

Zapier (for the automation itself)

Why rejected: Subscription cost scales with usage — expensive to run this on every call.

Chose instead: n8n — self-hostable, no per-task cost.

Fireflies (meeting recorder)

Why rejected: A human needs to review the recap right after the call, not after a processing delay.

Chose instead: Wispr Flow — the structured recap is ready immediately.

Before & after
MetricBeforeAfter
Path to a follow-upHave the call → AI drafts a transcript → prompt ChatGPT to draft the email → copy the draft into Gmail → address and sendWispr Flow captures the call → review and paste into n8n → draft comes out → human reviews and sends
Tools touched per email3–4, switching by hand1 workflow, start to finish
Voice & toneWhatever each person wrote that dayDefined voice rules, applied consistently
Human review before sendInconsistent, easy to skip under time pressureRequired by design — draft-only
03 · Testing

The short version: the safeguard did its job — a flawed draft never reached a client inbox.

The output failed an identity check. The safeguard worked.

TestPurposeObserved result
Recruiter screening recap (success case)Confirm form submission, model drafting, and Gmail creation worked end to endAddressed Gmail draft produced — plumbing confirmed
Fictional sales discovery recap (stress case)Test the same workflow against the brief's actual target scenarioDraft completed, but contained an identity inconsistency
Input — call recap from the successful test run
Output — Gmail draft from the successful test run

The prompt assumed one sender, while the fictional recap named a different BD lead: the draft described that lead's actions in third person, then signed off in their name. It didn't pass the identity check — but because the workflow stops in Gmail Drafts, the inconsistency was caught before it could become client-facing communication.

Had it sent, the cost wasn't just an awkward typo — it was content confusion and damaged trust. A client who just got off the phone doesn't want a generic, mismatched follow-up; they want a reply with a personal touch and the right tone, checked by a person before it lands in their inbox.

Hi Morgan, following up on today's call — Jordan discussed pricing options and next steps with your team, and wanted to confirm we're aligned before the proposal goes out. Happy to jump on a quick call if anything needs clarifying.

Best,
Jordan

Click the two highlighted spans to see the inconsistency — reconstructed for illustration.

The prototype was built around a single known sender. A team-ready version needs sender identity, approved voice rules, and signature details as structured inputs — not assumptions hidden inside one prompt.

What the fix would look like

A structured sender profile, selected before drafting — instead of an assumption buried in the prompt.

Sender: Jordan Lee, BD Lead · Voice: warm, concise, no em dashes · Signs as: Jordan Lee

A hypothesis, not yet tested — not a built feature.

04 · From prototype to team-ready

The short version: six workstreams — from discovery to measurement — separate this prototype from a team-ready rollout.

Sender identity has to become a structured input before this goes team-wide.

Rollout roadmap Scroll to see all 7 workstreams →
01Discover
Discover

Interview BD, account, and operations leads; map call types, ownership, and approval steps.

Planned
02Design
Design

Define sender profiles, voice rules, required sections, and the human approval boundary.

Planned
03Build
Build

Add recipient/sender validation, duplicate prevention, retries, failure alerts, and prompt versioning.

Planned
04Evaluate
Evaluate

Test representative call types and edge cases against a defined accuracy/identity/tone rubric, including a head-to-head comparison of drafting models before locking one in.

Planned
05Govern
Govern

Confirm transcript consent, confidential-data handling, retention, and access control.

Planned
06Pilot & adopt
Pilot & adopt

Small-group rollout with trained reviewers before expanding to the wider team.

Planned
07Measure
Measure

Define KPIs/OKRs before rollout (e.g., minutes saved per rep, time from call to sent email, percentage of drafts sent without edits), then track them against the estimated impact above once live.

Planned

If I had to prioritize two of these first, it would be Discover and Evaluate: you can't design real guardrails without understanding actual call patterns, and the one failure this prototype surfaced was an evaluation gap. Govern would run alongside Discover, not wait until later, given this touches real client communications.

What would remain human-owned regardless: final factual verification, commitments made to the client, recipient selection, sensitive content, relationship judgment, and the decision to send.

1

A safeguard caught a real identity error — before it reached a client.

2

The workflow stops at Drafts. A human decides what sends.

3

Six clear workstreams separate this prototype from a team-ready rollout.

Reflection

The hardest part wasn't building the automation. It was defining the right boundary between AI and human judgment.

This prototype shows how I:

  • Scope ambiguous problems
  • Test responsibly
  • Catch failures
  • Turn experimentation into a clear next step

This is exactly the kind of work I want to keep doing: finding the deliberate boundary between automation and human judgment, and building systems people can actually trust. Solo, this is how I think. With a team, it's what I've already led — see the case studies above for what that looks like at scale.

05 · Risk Monitoring (In Progress)

Email Threads to a Weekly Risk Digest

A self-directed n8n + Gemini workflow that checks Gmail against Notion project status every week — so a delivery risk gets surfaced while the status board still says everything's on track.

Self-directed portfolio project built from a publicly posted AI-workflow brief. Not commissioned client work.

6 min read
5Pipeline stages: collect, extract, evaluate, review, digest
4Test inputs validated before this touches a real inbox
3Fallback triggers for exactly what the model shouldn't decide
Confirm-requiredNo proposed risk becomes official without the owner's review

The short version: a self-directed n8n + Gemini workflow reads designated Gmail threads, cross-checks them against Notion project status, and drafts a weekly risk digest — but nothing counts as a real risk until the project owner confirms it.

Jump to Real Engagement → Solo project — see The Pipeline That Protected 30+ Grant Programs for automated risk-catching at team scale →
Who this serves & what was at stake

Serves: the project owner running the weekly delivery review, and everyone whose work depends on that project staying on schedule · Why it matters: the brief's own framing is the whole problem — a project can look on track in Notion while an email already contains evidence of a delay, and the owner won't know until the next status meeting.

That's why the workflow never decides a risk is real on its own. It surfaces evidence and a source; a person still confirms, dismisses, or asks for clarification before anything becomes an official update.

01 · Context

A status board that can look fine while an inbox already knows otherwise.

I found a public brief describing a familiar operations problem: one project owner, overseeing about 10 concurrent projects, spending roughly 30 minutes per project before every weekly delivery review.

Each review meant:

  • Searching Gmail for updates about dependencies, approvals, and deadlines
  • Comparing email commitments against the project plan
  • Contacting task owners to clarify conflicting information
  • Writing a status summary and highlighting risks for the team

At 30 minutes × 10 projects, that's 5 hours a week spent re-reading the same threads and boards — before the owner could even start resolving what those emails actually said.

I didn't build everything. I chose the part worth testing.

Without access to a real Notion workspace, a real inbox, or real project data, recreating the entire proposed system would have added complexity without proving much more.

So I scoped the prototype around one high-value question:

Can a workflow reliably surface delivery risk from unstructured email evidence — without ever getting to decide what counts as an official risk?

The prototype

The workflow:

  • Reads only Gmail threads explicitly tied to a project
  • Extracts blockers, changed commitments, and unresolved approvals as evidence, not conclusions
  • Compares that evidence against recorded deadlines and dependencies with rules, not AI judgment
  • Leaves ambiguous dates unresolved instead of guessing
  • Stops at a review queue rather than auto-confirming anything
Collect Extract Evaluate Review Digest

Why that last decision matters

The goal wasn't to automate the owner's judgment about what's actually urgent. It was to remove the repetitive first pass — reading every thread, every week — so that judgment lands on real evidence instead of scattered notes.

For something touching deadlines and dependencies across 10 live projects, AI could do the reading. A person still owned the decision.

That was the system I wanted to test.

02 · Solution

The short version: a five-step pipeline that reads, extracts, and proposes — and stops the moment a finding needs a person's judgment.

AI reads the email. A rule decides the risk. The owner makes it official.

I designed the five-step pipeline below around the prerequisites the brief called out: structured Notion tasks with an owner and due date, Gmail threads explicitly tied to a project, and an owner who actually reviews what gets proposed.

try it
Click a step above to see an illustrative example of its input or output.

The signal-extraction prompt

Step 2 is the only place a full email gets handed to a model, so it's also where the prompt has to be the most disciplined about what it's allowed to claim.

System prompt

You are analyzing project emails for a delivery risk monitoring system. Given an email associated with a specific project, identify any explicit blockers, changed commitments, or unresolved approvals. For each finding, output the finding type, a supporting excerpt (verbatim or close paraphrase, under 25 words), and the source (sender and date). If a date is relative or unclear, mark it as unresolved rather than calculating a specific date. Output ONLY a JSON array of findings, no preamble or closing commentary.

Error handling, added to the same prompt: if the email contains no blockers, changed commitments, or unresolved approvals, return an empty array. If a date is vague (“early next week,” “soon,” “hard to say”), set date_status to “unresolved” and don't invent a specific date.

Sample run

Input — email from Priya Patel, Sept 8: “Heads up, the new mockups won't be ready until next Friday, not Monday like we said last week.”

[ { "type": "changed_commitment", "excerpt": "the new mockups won't be ready until next Friday, not Monday like we said", "source": "Priya Patel, 2026-09-08", "date_status": "resolved" } ]

Output — one structured finding, grounded in a direct excerpt rather than a rewritten summary.

Why rules decide, not AI

Step 3 could have asked Gemini to judge whether a delay is a real risk. Instead, a rule compares the extracted date against the recorded deadline and dependency chain, and the rule decides the dates are inconsistent — Gemini's only job is explaining that conflict in plain language.

Human stays in control

The review queue in Notion shows:

Proposed risk supporting evidence affected task responsible owner

But nothing is official yet.

The owner confirms it, dismisses it, or asks for clarification. Only confirmed risks and outstanding review items make it into the weekly digest — and the workflow never changes an approved deadline on its own.

Intentional boundary: propose, never confirm

Automation removes the repetitive search-and-compare pass. It does not remove the owner's responsibility to decide what actually counts as a risk, or to catch a rule that's misfiring.

For testing inputs, I used the sample emails and edge cases the brief itself specified, because they were written to probe exactly the judgment calls this kind of prompt tends to get wrong.

Estimated impact (illustrative, pending pilot validation)

Adjust the assumptions to see how the estimate moves.

try it

That's roughly 3 hours a week returned to resolving risks instead of re-reading the same threads.

10 projects is one owner's current load — the same math scales with however many run through this pattern.

What I did not do
Full inbox scanning

Why rejected: broader coverage, but more unrelated information and a higher chance of matching a message to the wrong project.

Chose instead: designated Gmail threads explicitly tied to a project.

AI-judged risk severity

Why rejected: an LLM's opinion on how urgent something is, with no consistent standard across projects.

Chose instead: a rule compares signals to recorded deadlines; Gemini only explains the conflict.

Auto-updating the plan

Why rejected: a workflow finding a conflict isn't the same as that conflict being an approved decision.

Chose instead: proposed risks sit in a review queue until the owner confirms them.

Before & after
MetricBeforeAfter (Est.)
Avg. review time per project30 min12 min (−60%)
Weekly review time (10 projects)5 hrs (300 min)2 hrs (120 min)
Blocker visibilityScattered across individual emailsCross-checked against Notion automatically
Escalation consistencyVaries by owner judgmentStandardized review queue

10 × (30 − 12) = 180 minutes (~3 hours) recovered weekly. This estimate covers review time only and excludes setup and maintenance — a pilot would measure both, alongside missed risks, false alerts, and the time between a risk appearing in an email and reaching the owner.

03 · Testing

The short version: before this ever touches a real inbox, four scripted inputs check whether the model knows when to stay quiet.

The hardest test isn't catching a blocker. It's not inventing one.

It's easy to write a prompt that finds a blocker in an email that obviously contains one. The harder, more important question for something running unattended across 10 projects is whether it can tell the difference between “explicit” and “sounds like it could be a problem.”

Four test inputs — specified in the original brief — check exactly that, from a clean pass to a case designed to tempt the model into manufacturing a finding:

Click a test above to see its input and expected outcome.
The riskiest failure mode here isn't missing a real blocker. It's Test 4 — manufacturing a finding out of an email that says nothing has changed. A prompt that can't stay quiet isn't ready for an unattended inbox.

What happens when a finding doesn't clear the bar

Human fallback triggers

  • Ambiguous or unresolved dates in an email → the risk stays “unconfirmed” rather than being scored, flagged for owner review
  • A risk touches more than one project's dependency chain → routed to both owners before being marked confirmed
  • The owner dismisses the same type of finding 3+ times → flagged as a noisy rule, not a real risk, for the owner to review

None of these four tests have been run against a live Gemini endpoint yet — this is the validation protocol I'd run before connecting this to any real inbox, using the exact inputs and expected outcomes from the original brief.

04 · From prototype to team-ready

The short version: six workstreams — from a small pilot to full-scale rollout — separate this prototype from a monitor running across all 10 projects.

A 2–3 project pilot comes first — dismissal patterns show which rules to tune.

Rollout roadmap Scroll to see all 6 workstreams →
01Pilot
Pilot

Run the workflow against 2–3 real projects with an engaged owner; confirm the collect → extract → evaluate → review loop holds up on real threads.

Planned
02Tune rules
Tune rules

Adjust the due-date and dependency comparison logic based on what the pilot surfaces, and address any finding type the owner dismisses repeatedly.

Planned
03Govern
Govern

Confirm handling for email content ingested into the extraction step, retention of proposed risks, and who can see review-queue entries across projects.

Planned
04Expand coverage
Expand coverage

Add designated Gmail threads for the remaining projects once the pilot's false-positive and false-negative rate is acceptable.

Planned
05Measure
Measure

Track review time per project, dismissal rate per rule, and the time between a risk appearing in an email and reaching the owner, against the 3-hour weekly estimate above.

Planned
06Scale
Scale

Reuse the same workflow configuration across all 10 concurrent projects; batch-test processing cost, delay, and failure rate before calling that volume supported.

Planned

If I had to prioritize two of these first, it'd be Pilot and Tune rules: dismissal patterns are the fastest signal for whether a rule is well-calibrated or just noisy, and there's nothing to tune without real threads to tune it against. Govern would run alongside Pilot, not wait until later, since this touches real project communications from the start.

What would remain human-owned regardless: confirming or dismissing every proposed risk, editing and sending the digest, any change to an approved deadline, and the judgment call on which of 10 projects needs attention first.

1

Evidence and owner review catch a misread before it becomes an official update.

2

The workflow proposes; it never confirms a risk or changes a deadline on its own.

3

Six workstreams separate this prototype from a monitor running across all 10 projects.

Reflection

The hardest part wasn't extracting signals from an email. It was deciding exactly where the rule stops and a person has to weigh in.

This prototype shows how I:

  • Draw a deliberate line between rule-based logic and AI judgment
  • Design fallback paths for the cases a prompt shouldn't guess at
  • Test for restraint, not just accuracy
  • Turn a manual weekly habit into a system built for a real rollout

This is exactly the kind of work I want to keep doing: finding where automation should stop and a person should decide, then building the review step that makes that boundary real. Solo, this is how I think. With a team, it's what I've already led — see the case studies above for what that looks like at scale.

07 · SaaS Implementation

Closed Won Deal to Reviewed Kickoff Plan

A self-directed lab: two n8n workflows connecting HubSpot, Claude, Asana and Gmail that take a new SaaS client from a Closed Won deal to a reviewed kickoff plan — with a human approving every client message.

38n8n nodes across two connected workflows
5 of 5Test clients routed to the right outcome
10Real build problems traced to a root cause and fixed
0Client messages sent without a human pressing Send

The 30-second version: I turned the discovery-first approach from a real Asana rollout into an AI-assisted client onboarding system. A Closed Won deal in HubSpot triggers a welcome email and intake form. The client's answers get a green, yellow or red readiness rating from Claude, then a five-phase Asana plan built through the API and a drafted kickoff email. Nothing reaches a client until I review it and press Send. I tested it with five fictional clients and fixed 10 real build problems along the way.

Jump to the system → Download the one-page summary (PDF) → Self-directed lab — see 224 Tasks, Learned in 30 Days for onboarding at team scale →
The real-world inspiration

I've been the client in this story.

When my organization replaced Microsoft Access with Asana, I worked directly with the Asana team to fit the tool into our project cycle. They didn't start by configuring anything. They started by asking how we ran projects — and through that discovery, we could see clearly how Asana would fit the company.

This lab rebuilds that experience from the other side of the table. I play the implementation consultant, rolling out Asana while running the rollout inside Asana.

What I learned in the real rolloutHow the lab mirrors it
Discovery came before any configurationThe intake form is the discovery conversation, turned into a structured form
Each project became a checklist of tasks across 5 phasesEvery plan uses the 5 PMBOK phases, with tasks that hold subtasks
The project description sat at the top, so everyone saw the purpose firstAn AI-written project overview sits at the top of every Asana project
Timeline (Gantt) view showed the scheduleDue dates count back from the client's go-live date, ready for Timeline view
Discovery comes first. The tool comes second.
The problem

Handoffs lose details, and plans get built on guesses.

  • The handoff leaks. The move from sales to implementation is a common pain point where details get lost.
  • Onboarding starts with unknowns. It happens after the sale, so many intake answers are still “not sure.” A plan built on those gaps looks finished but isn't.
  • Speed can cost trust. AI can draft a plan and an email in seconds, but one wrong message to a brand-new client damages the relationship.

The goal: take a client from Closed Won to a kickoff-ready plan quickly, without losing the human judgment.

What I built

Two workflows, one hidden form field, two human reviews.

Both workflows run in n8n every 15 minutes. Step 1 starts when a deal reaches Closed Won and ends when the welcome email is sent. Step 2 starts when the client submits the intake form and ends when the kickoff or discovery email is sent. Status fields on the deal and the contact make sure each client is handled exactly once.

Step 1 Closed Won handoff to intake invite
  1. Deal moves to Closed WonSales updates the deal in HubSpot
  2. Claude drafts a welcome emailPersonal intake form link, email prefilled
  3. I review and sendSaved as a Gmail draft until I press Send
  4. Deal marked as handledNext step: “Intake form sent,” plus the date
Client submits the intake formA hidden field sets Intake status to Submitted
Step 2 Intake to plan and kickoff draft
  1. Find the submitted intakeBuilds a clean client brief from HubSpot
  2. Claude rates readinessGreen, yellow or red, with a reason
  3. GreenYellow
    Full five-phase plan
    Red
    Discovery call first
  4. Asana project built through the APIAgenda and every open question in the kickoff task
  5. Claude drafts the kickoff emailPlan link, a real date, 3 priority questions
  6. I review and sendHubSpot first, then Asana, then the email

Human decision point — nothing reaches a client without it

The real workflows in n8n

Step 1: Closed Won handoff to intake inviteThree groups — find new Closed Won deals, get the client, then draft and human review — with a sticky note documenting purpose, steps, the human-in-the-loop rule and the handoff.
Step 2: Intake to implementation plan and kickoff draftOne run built 1 Asana project, 5 phase sections, 20 tasks and 73 subtasks through the API — then stopped at a Gmail draft and a review packet.

Click any screenshot to enlarge it.

The stack

ToolRole in the systemWhat I set up
HubSpot CRMSource of truth for contacts and deals10 custom contact properties, test contacts, Closed Won deals
HubSpot FormsClient intake form14-question form with a hidden Intake status field
n8nAutomation engine for both workflows2 workflows, 38 nodes, scheduled every 15 minutes
Claude (Anthropic API)AI engine for ratings, plans and emails3 AI nodes with system prompts and structured output parsers
AsanaImplementation project trackerProjects with phase sections, tasks, subtasks and due dates
GmailClient emails and internal review packetsDrafts for clients; review packets to me

Every tool ran on a free plan or an existing account; each test run cost a few cents of Claude API usage. I started on Gemini and swapped to Claude without changing any business logic.

How I built it

  1. 01Design the process

    Discovery form, PMBOK plan shape, train-the-trainer model, and a draft-only email rule.

  2. 02Build the planning flow

    Wired HubSpot, Claude and Asana, then fixed each error until the first full plan came through.

  3. 03Improve the outputs

    Capped emails at 3 questions, added a real kickoff date, and moved every question into Asana.

  4. 04Build the sales handoff

    Closed Won trigger, intake form with a hidden field, and an automatic handoff to Step 2.

  5. 05Test and document

    Four more clients across all three paths, clear workflow names, and notes inside each workflow.

I went step by step on purpose, learning each piece before moving on and testing one client at a time, with Claude as my build partner.

What the client sees

Three touchpoints, each one reviewed first.

From the client's side, onboarding is a warm welcome, a 10-minute form where “not sure” is a good answer, and a kickoff email built from their own words. Here's that journey for Brightpath Youth Alliance, the yellow client.

1 · The welcome emailDrafted by Claude the moment the deal hit Closed Won, with a personal intake link. Saved as a draft until I sent it.
2 · The intake form14 questions, consolidated to fit the free plan. The email is prefilled, and a hidden field hands the client to Step 2 on submit.
3 · The kickoff emailTheir goal in their words, two early priorities, a real kickoff date and three questions — including that go-live falls on Presidents' Day.

Test addresses in the form are redacted. Brightpath's draft still shows a robot-style date (2027-02-15) — the repeat catch that's next on the rules list.

The readiness check

Green gets a plan. Red gets a conversation.

Claude rates every intake before planning anything, and gives a reason. The rating decides what the client receives, so the system never builds a full plan on guesses.

GreenIntake is complete

A full five-phase plan and a kickoff email with a real meeting date.

YellowSome answers unknown

A full plan with every guess clearly labeled as an assumption.

RedMostly “not sure”

The Initiating phase only, and a discovery call within 5 to 10 days.

Inside a green client's plan

What Lumen Creative Agency got in Asana.

Lumen rated green: a complete intake for moving 30 users from Trello and spreadsheets into Asana. Without anyone touching Asana, the workflow built the whole project — and the kickoff task carries every open question, so nothing lives only in email.

The overview comes firstClaude's project description sits at the top: 30 users, the brief-to-launch lifecycle, and a 90-day success measure of no missed client deadlines.
The kickoff task holds every questionThe agenda, the three questions sent ahead, and what's still to cover at kickoff — answered questions can become checked-off subtasks.
Five PMBOK phases, ready to run21 tasks with 3–4 subtasks each, from a workflow workshop and Trello migration to train-the-trainer and a 90-day success review.
Dates counted back from go-liveEvery task has a due date worked back from the client's go-live, so the plan opens straight into Timeline view.
Inside a red client's path

What Oakline Logistics got instead.

Oakline's intake came back almost entirely “not sure,” so the system didn't pretend to plan an implementation. It built only the Initiating phase, scheduled a discovery call, and drafted a warm invitation with three questions to think about first.

Initiating only — five discovery tasksIdentify the sponsor, document how work is tracked today, and define success and a go-live date. The discovery-call task holds the agenda and every open question.
A discovery call, not a planThe draft quotes Jordan's own words (“more organized”), invites the owner to join, and says “not sure yet” is completely fine. It waits in Gmail until I press Send.
What this run taught the system

This is the run my review flagged: with no go-live date, a 90-day fallback put the discovery call on November 24 — seven weeks out. I re-anchored plans to today when go-live is missing and added a rule for a first meeting within 5 to 10 days. The next red client's call landed 6 days out.

Test clients

Five fictional clients, five fitting outcomes.

I wrote five realistic clients and ran each one end to end, playing sales, the client and the reviewer. Pick a client to see what the system produced and what my review caught.

Riverstone Property Services

Dana Morales, Operations Director

Scenario

Moving from Microsoft Access to Asana, 45 users, and the database expert retires in March.

What the system produced

A full five-phase plan and a Tuesday-morning kickoff.

Star moment

Moved knowledge capture early, because the Access expert retires in March.

What my review caught

Nine questions was too many for a welcome email, there was no specific kickoff date, and a pilot landed on Christmas Day.

All clients, contacts and companies are fictional. Test emails were routed to my own inbox.

Human in the loop

Nothing reaches a client until a person presses Send.

The AI prepares and a human decides. These design choices are what make the speed safe to use with real clients:

Draft only

Both workflows save client emails as Gmail drafts and never send them.

Review in order

HubSpot first (the facts), then Asana (the plan), then the email (the message), so errors are caught at the source.

Internal until reviewed

The Asana project stays internal until I invite the client as a guest.

No invented facts

Claude may use only the client's answers and must label every guess as an assumption.

Honest gaps

Missing information becomes open questions, never filler.

Handled once

Each deal and intake is marked after processing, so no client gets duplicate emails or projects.

The review packet

Every run emails me a review packet before anything goes to the client: a client snapshot, the readiness rating with its reason, flags to check, the questions sent and still open, the assumptions the AI made, and my review steps in order — HubSpot, then Asana, then the email.

Oakline's review packetRed, with a reason: users, lifecycle, approvals, go-live and stakeholders were all unknown. It flagged that Jordan may lack decision authority and listed every assumption — including that later phases wait for discovery.

How review made the AI better

ReviewSpot a patternUpdate the rule
What my review caughtThe rule I added
A pilot scheduled on Christmas DayAvoid weekends and major holidays — later runs avoided a US holiday on their own
Nine questions in one welcome emailCap client emails at 3 priority questions, chosen during planning so Asana, the email and the review packet match
No specific kickoff date or start timeAlways propose a real meeting date
A red client's discovery call 7 weeks outAnchor to today when go-live is missing; first meeting within 5 to 10 days
Robot-style dates (2027-02-15), twiceNext rule to add: write dates in words. A repeat catch means fix the rules, not the draft
Problems solved

Ten real build problems, each traced to a root cause.

  1. 01HubSpot blocked new fields at “11 out of 10”The free plan allows 10 custom properties and HubSpot had auto-created 2. I archived those and consolidated 20 intake fields into 10.Working within platform limits
  2. 02Claude node failed: “API key is invalid”The stored credential was out of date. I created a fresh key and updated it in n8n.Credential management
  3. 03Asana rejected tasksThe task API needs the workspace even when a section is given. I added the workspace ID to every request.Reading API errors
  4. 04Asana returned “too many requests”Ten tasks sent at once hit the rate limit. I sent one request every 0.7 seconds with 3 automatic retries.Rate limits and throttling
  5. 05Phases appeared out of orderSections were created in parallel. I created them one at a time.Order of operations
  6. 06Plans cut off mid-answerClaude hit its output limit. I raised it to 16,000 tokens and tightened the plan rules.Token limits and prompt design
  7. 07HubSpot sign-in blocked in HTTP nodesn8n's managed HubSpot sign-in only works in native nodes. I swapped 3 raw API calls for native HubSpot nodes.Connector versus direct API
  8. 08The form showed the last client's detailsA HubSpot tracking cookie remembered the last visitor. I tested each client in a fresh incognito window.QA and browser behavior
  9. 09A discovery call landed 7 weeks outA 90-day fallback pushed every date late. Plans now anchor to today when go-live is missing.Logic review from test results
  10. 10A pilot scheduled on Christmas DayThe AI's date planning ignored holidays. I added a rule to avoid weekends and major holidays.Human review improving the AI
Under the hood

Direct API calls where they fit, native connectors where they didn't.

I built the Asana project through its REST API with HTTP Request nodes, throttled with retries. For HubSpot, I first configured raw calls, then switched to native nodes when n8n's managed sign-in required it.

MethodEndpointPurpose
GET/api/1.0/workspacesFind the Asana workspace ID, by hand in the browser
POST/api/1.0/projectsCreate each client's project with its overview
POST/api/1.0/projects/{id}/sectionsCreate the 5 phase sections, in order
POST/api/1.0/tasksCreate tasks with due dates, notes and section placement
POST/api/1.0/tasks/{id}/subtasksCreate subtasks under each task
PATCH/crm/v3/objects/deals/{id}Write “Intake form sent” to the deal, later via a native node

Every POST sent a JSON body — for example, {"data": {"name": "Planning"}} to create a section. Credentials live only in n8n's credential manager.

What I did not do
✕Let the AI send emails

One wrong message damages a new client relationship

✓Draft-only emails and a review packet before every send
✕A full plan for every client

A plan built on “not sure” only looks finished

✓A readiness check: red clients get a discovery call first
✕Let the AI fill in the blanks

Invented details become the client's problem later

✓Labeled assumptions and open questions in the kickoff task
✕Lock the logic to one AI model

Models change faster than onboarding processes

✓Swapped Gemini for Claude without changing the business logic
Result

It works end to end, and it keeps getting better.

The system runs today from a Closed Won deal to a reviewed kickoff plan. Each of the five test clients received a different, fitting outcome: green clients got full plans, the yellow client got a plan with six labeled assumptions, and red clients got a discovery call within a week. HubSpot's timeline shows the whole journey for each client — contact created, deal won, form viewed, form submitted, plan drafted.

Every repeated review edit became a rule, so the next client's draft needs fewer of them.

What I'd measure next

Before using this with real clients, I'd track first-draft approval rate, edits per client and time saved per client — and add an error workflow that emails me if any step fails, automatic Asana guest invites after my approval, and a Slack or Teams approval option alongside email.

Mapped to the PMI-CPMAI methodology

  1. I–IIBusiness & data

    Defined the problem, success criteria and the human review requirement, and what client data HubSpot holds.

  2. IIIData preparation

    Consolidated 20 fields into 10 properties and built clean client briefs.

  3. IVModel development

    Wrote the prompts, rules and structured JSON outputs for Claude.

  4. VEvaluation

    Tested 5 clients across green, yellow and red paths and reviewed every output.

  5. VIOperationalization

    Scheduled workflows, handled-once markers, and a feedback loop from review to rules.

Connect