Case study · Prior work

Cleangirl: one database
for a 25-million-follower brand.

Six platforms generating data at different cadences, in different shapes, with different definitions of a customer. I built the layer underneath that made them agree, and then built the operator tools on top of it.

Client
Cleangirl
Industry
Creator-led DTC
Scope
Data infra + custom ops
Role
Prior engagement · foundation for Dandelion
Total audience
25.1M
YT 17.7M · TT 5.6M · IG 1.8M
Data sources unified
6
Shopify, Amazon, Klaviyo, 3PL, Meta, TikTok
3PL overcharges recovered
$18.4k
Automated bill auditing, 90 days
Sales tracker cadence
1 hr
Previously end-of-week

The situation.

Cleangirl sells cleaning products to a 25-million-follower creator audience. Growth looked healthy by every platform’s internal dashboard, but none of the dashboards agreed with each other. The Shopify number and the Amazon number told two different stories about the same customer. The Klaviyo report and the Meta attribution told three.

By the time the team was reviewing week-over-week, it was already Friday, and the numbers on screen had been reconciled by hand in a Google Sheet that nobody fully trusted.

“Every platform had its own truth. Daniel built us one, and then the rest of the stack followed.
Placeholder attribution · Cleangirl

What I built.

1. The unified database

A single Postgres instance became the source of truth. Every order, customer, subscription event, inventory movement and ad impression lands there, reconciled against a canonical customer identity resolved across email, phone, and platform IDs.

Stack · unified data layer
Database
Postgres
Ingestion
Fivetran + custom
Modeling
dbt
Reverse ETL
Hightouch
Reporting
Metabase
Ops UI
Retool + custom Next.js

2. Custom Liquid Shopify theme

The frontend was rebuilt in Liquid to match how the product actually sold. Subscription-first, bundle-aware, creator-content-native. No theme builder was going to get the conversion flows right.

3. Subscription economics for Magic Foam

A cohort model that projects LTV, churn curves, and contribution margin per subscriber, by acquisition channel, by content creator, by gifting campaign. It’s the model the team plans inventory against.

4. Influencer gifting automation

Gifting had been a Google Sheet and a Slack channel. I replaced it with a workflow inside the internal app: list management, address validation, fulfillment triggers, and post-send performance tracking tied back to the creator’s UTM. Scales with the audience, not the operator.

5. 3PL bill auditing

The 3PL bills were dense. Line items didn’t always match what was fulfilled. I wrote a job that reconciles every invoice line against the actual warehouse events in Postgres and flags overcharges. Recovered $18,400 in the first 90 days, and keeps running.

6. Hourly sales tracker

A sales dashboard that updates hourly rather than daily, built because the team operates in viral-content time, not business-day time. When a TikTok is taking off at 11pm, you want to know by midnight whether inventory is going to survive Saturday.

The timeline.

  1. Weeks 1–2
    Stack audit
    Map every tool, every data source, every disagreement. Write a fixed scope.
  2. Weeks 3–6
    Unified Postgres + dbt models
    Ingest, reconcile, publish canonical tables. Ship Metabase v1 in parallel.
  3. Weeks 6–10
    Custom Shopify theme
    Liquid rebuild for subscription and bundle flows.
  4. Weeks 8–14
    Operator tools
    Gifting workflow, 3PL auditing, hourly sales tracker. Iterate with ops lead weekly.
  5. Ongoing
    Subscription model + LTV
    Magic Foam cohort modeling refined every cycle.

What it proved.

The architecture works. A single operator can stand up a production-grade data layer for a business with real scale: not just a dashboard, but the source of truth the rest of the company plans against. That playbook is what Dandelion now runs as a service.

Your stack probably looks like this too. Let’s talk.

Same disagreement across platforms, same weekly reconciliation, same Friday spreadsheet. That’s the job.

Start with an audit →