Kepler
Every number in the business on one screen. It refreshes every 15 minutes and puts the biggest problem at the top.
- 15 min
- Every source re-read, every time
- 125
- Customer steps mapped across 15 stages
- 16
- Social accounts tracked in one place
The problem
The numbers lived in ten different tools. I was making calls off whichever one I checked last.
What it does
- Reads ads, CRM, payments, search, social and site traffic. Read-only, so it can't break anything.
- Maps the customer path in 15 stages and shows what each stage can and can't see.
- Ranks bottlenecks by how much monthly revenue is at stake.
- Pauses losing ads on its own when they break fixed rules I set.
Biggest challenge
It cut a working ad twice in one afternoon. Meta sent back bad spend numbers: $74 on 11 impressions when the real spend was $3.25.
How we solved it. Before any cut it now re-reads spend straight from Meta. If the numbers disagree by more than $1, or the cost per 1,000 views looks impossible, it holds the cut.
How it got built
- 50
- PRs merged to production
- 20 hours
- Average time between PRs
- 40
- PRs in the busiest week
- 41 days
- Aug 26 to Oct 6, 2026
v1: a sales report
Read the cold email campaign and the sales pipeline and reported on partner sales. 6,500 lines in the first PR.
Rebuilt for the whole business
Wrote the spec, then rebuilt it as a 15-stage customer journey with one controller refreshing everything every 15 minutes.
Email page
Every email tracked by ID, from sent to opened to clicked to booked.
Took over the ads
Moved the ad scorecard and the auto-cut in from their own repo, so the whole 15-minute run lives in one place.
Organic growth and ideas
Growth across 16 social accounts, then a live tab of ranked content ideas.
Live events and a calendar
Email events pushed in by webhook instead of polled, plus a calendar of everything that auto-posts.
Bad-data guard
The fix for the biggest challenge above.
Call card
A live script and objection list to keep open on sales calls.