← ALL CASE STUDIES 07.2026 · 8 MIN

Building a Lifecycle Automation System for a SaaS / AI Business — a hands-on case study of Fiction AI

POST · BUILDING-A-L
MARISA MA · 2026

This is a hands-on case study. I designed and built a working end-to-end automation with PostHog and n8n.I scoped the case study to a self-serve SaaS and AI product, where the whole customer journey happens online. I wanted to build a simple example of automatic engagement system that could respond to different users at different stages.

Why I built this

I kept seeing the same kind of request from SMBs on Upwork: “We want automation around our customer lifecycle.”

After reading enough of those posts, the pattern became pretty clear:

  • collect leads from a website or app into a CRM
  • trigger follow-ups automatically
  • score the leads
  • send a prioritized list to sales in Slack
  • generate personalized outreach
  • add error handling, retries, and monitoring so nothing breaks quietly

That looked like real, recurring demand, so I built a smaller version of it myself.

Instead of using a business with a booking flow, I scoped the case study to a self-serve SaaS and AI product, where the whole customer journey happens online. I wanted to build a simple engagement system that could respond to different users at different stages.

The goal was straightforward: use automation and AI to increase engagement, reduce churn, and move users one step closer to purchase.

Paid_ads.png

This case focuses on one end-to-end loop I actually built for activation recovery. It is a small slice of the larger system, not the whole thing. Once this base version is in place, we can extend it into more complex flows for other lifecycle stages and different conversion problems.

How I framed it: four layers

I break lifecycle automation into four layers:

  • Business flow: What problem are we solving, and what does the user journey look like?
  • Data architecture: What user data, events, and properties do we need?
  • Automation logic: What triggers what, and under which conditions?
  • AI guardrails: Where does AI help, and what limits keep it reliable?

The product is a fictional AI marketing copilot called FictionAI. It is self-serve and has a free tier. In this article, I walk through one complete slice across all four layers: catching users who signed up but never reached first value, then nudging them back.

What I built

I built one n8n workflow that runs end to end: generate and read user data, find users stuck at activation, have an LLM draft a personalized nudge under a strict spec, parse and validate every draft against that spec, and send only the ones that pass.

CleanShot_2026-07-10_at_18.22.202x.png

Three decisions shaped the project.

Decision 1: Make activation measurable

“Activation” is an abstract idea. To automate against it, I had to tie it to one concrete event.

For FictionAI, signing up is just the start. Since the product is a marketing tool, the first real value comes when a user generates a piece of content. So I defined activation as the first Content Generated event and used that as the north star metric.

Why this matters: once activation is tied to a specific event, it becomes measurable. That gives you a clean way to judge whether the system is moving users forward instead of guessing. In PostHog, I built a funnel to track it directly. The drop from Signup Completed to Content Generated is the activation rate.

F_Fiction_Al_Activation.png

Decision 2: Drive it from user state, not blast messaging

This automation does not email everyone. It starts by asking a precise question: who signed up more than 24 hours ago and still has never generated content?

That is the segment I query from PostHog, and the result includes each user’s acquisition channel.

Why this matters: this is the difference between automation and a generic email blast. The trigger is a state in the data, not a date on the calendar. The system acts only on users who actually qualify. Because the acquisition channel comes back with the record, the next step can tailor the message based on where the user came from.

Why PostHog instead of a spreadsheet: Because the analytics layer is doing real work here. PostHog gives me a live, queryable behavioral database. n8n sends one query and gets the users who match right now. A spreadsheet is just a snapshot. It does not update itself, and the workflow cannot reliably check it on every run. In a real product, events keep coming in and the answer to “who is stuck?” changes constantly. The automation needs a system it can query on demand, not a sheet that someone has to maintain by hand.

CleanShot_2026-07-10_at_15.41.342x.png

Decision 3: Separate generation from validation

This was the part I was most careful about. The LLM writes each email, but it does not write freely(should use a spec applied to business regulary and standard tone) and it does not send directly.

How generation is constrained: the model gets a fixed template, a controlled set of variables such as channel, plan, and days since signup, plus a channel-specific angle(can use other criteria for specific customizations) for the opening hook. It fills in the personalization, but it does not restructure the email or improvise beyond the spec.

T.Template_skeleton%28Axed_structure_-_the_L.L.M_Alls_it_does_not.png

How it is validated: after generation, a separate step parses the raw output into clean fields, re-attaches the correct recipient, and checks the draft against the spec. That includes word limits, banned terms such as discounts or fake urgency, and a rule against inventing user actions. The workflow then produces a passed flag. Only drafts with passed = true move forward.

Why this matters: LLM output is unstructured and not always reliable. If the generation step sent emails directly, one malformed or off-brand draft could go to a real user. Splitting generation from validation gives the workflow a real checkpoint before delivery. passed becomes the send switch.

_a_Recin_Enal_and_Test_Spec_Ruled.png

The result

The workflow sends personalized emails based on channel. A user who found FictionAI through an AI assistant gets a different opening from someone who came in through a webinar. The template stays the same. The guardrails stay the same. Only the hook changes, based on real user data.

CleanShot_2026-07-10_at_18.17.202x.png

Youre_One_Step_Away_trom_Creating_Mag_How.png

One detail worth noting: the recipient is tied to each record’s email field, so the same workflow can serve 14 users or 14,000 without changing the logic. In the demo, I route everything to my own inbox because the test addresses are synthetic.

What I would do next in production

This activation flow is just one slice. To turn it into the fuller system that SMBs usually ask for, I would add:

  • Sales assignment: route higher-value users to a specific owner and send from the rep instead of a shared address.
  • Multi-step nurture: branch based on behavior. If they do not open, resend with a different angle. If they open but do not act, lower the barrier with a more concrete guide. If they click but still do not generate content, send one more push. Content Generated stays the exit condition.
  • An evaluation layer: build a test set of user profiles with expected-output criteria, then run it repeatedly to measure LLM quality and consistency over time.
  • Monitoring: write each workflow run back into PostHog so the automation itself is observable and failures do not disappear quietly.

The broader point is that the same four-layer approach can be used across the whole lifecycle: acquisition, activation, engagement, conversion, retention, and win-back. Activation is simply the slice I chose to build end to end here.

Closing

This case study is not really about tool operation. It is about taking a vague but recurring business need, turning it into clear automation system design decisions, and shipping a workflow that is both useful and reliable. AI helps inside the system, but it stays constrained, and every output is checked before it goes out.

* * *