Priya's Runbook
Solo founder of Ledgerline, an invoice-reconciliation tool. The agents are the headcount.
Then tell your agent which numbers to build.
Daily5
1Sort support tickets and draft the replies
Pager, the assistant I built · every 20 min, 7am-10pm
Tickets get tagged bug/billing/how-to, bugs get a linked Sentry trace, and a reply draft lands in the queue for me to approve or rewrite. Nothing goes out without my click.
212 tickets sorted, 147 replies drafted, 141 sent as-is
Example · inventedInvented ticket: '[Marta at Coveline] can't match a partial refund' -> tagged billing, draft explains the split-payment toggle, I approved unchanged.
How to build it
Needs - A help desk inbox that can be polled or exports new tickets, and an error tracker (Sentry) that can link traces. - A queue or drafts folder where replies wait for approval. - Ask your person for their tone of voice (three past replies) and the three tags: bug, billing, how-to. Build 1. Schedule a job every 20 minutes between 7am and 10pm that fetches tickets not yet processed. 2. For each ticket, tag it bug, billing or how-to. Instruction to the model: "Classify this ticket into exactly one tag. If it is a bug, find the matching error group and link its trace. Then draft a short reply in the owner's voice that answers the question directly." 3. Save the draft to the approval queue. Never send anything. The person approves, rewrites or discards each draft. 4. Log tag, draft and whether it was sent unchanged. Check - First run shows each new ticket with a tag and a draft waiting, bugs carrying a trace link. - Test with a made-up billing ticket and confirm nothing is sent before approval.
2Catch accounts going quiet before they cancel
Pager, the assistant I built · 6am
Any paying account whose weekly reconciliation runs drop by half gets flagged with its usage curve and a drafted check-in email in my voice. I send or skip; Pager logs which, so I can see whether the notes do anything.
19 accounts flagged, 11 check-ins sent, 4 replied, 1 cancelled anyway
Example · inventedInvented flag: '[Brightmoor Audio] ran 14 reconciliations/wk in Aug, 3 last week. Draft asks if the new CSV format broke their import.'
How to build it
Needs - Billing data showing which accounts are paying, and product usage data giving weekly reconciliation runs per account. - A place to save email drafts, and a log of decisions. - Ask your person for a few sample emails in their voice and whether 50 percent is the right drop. Build 1. Schedule a daily run at 6am. 2. For each paying account, compare the last 7 days of runs with the previous 7. Flag any account where runs fell by half or more (default; adjustable). 3. For each flag, build a short usage curve over the last 8 weeks. 4. Instruction to the model: "Write a brief, warm check-in in the owner's voice that mentions one concrete change in their usage and asks if something got in the way. No sales language." 5. Put curve and draft in the person's review list. They send or skip; nothing goes out without that choice. Log which they chose. Check - First output lists flagged accounts with a curve and a draft each. - Test with a dummy account whose runs fall from 14 to 3 and confirm it is flagged.
3Chase failed payments without sounding like a robot
a Stripe webhook plus Pager · on payment failure, then day 3 and day 7
Failed charges get the retry schedule set and a short personal note drafted for me to approve before each send. The day-7 draft offers an invoice instead of a card, which recovers more than the retries do.
23 failures handled, 17 recovered, 6 drafts edited before sending
Example · inventedInvented day-3 note: 'Hi [Jonas], your card bounced twice -- happy to switch you to annual invoicing if expense cards are a pain.'
How to build it
Needs - A payments provider that sends a webhook on failed charges and lets you set the retry schedule. - A place to hold email drafts for approval. - Ask your person for their tone sample and whether they can offer invoicing instead of a card. Build 1. On each payment failure event, set the retry schedule and record the customer and attempt. 2. Create drafts at three points: immediately, day 3 and day 7 if still unpaid. 3. Instruction to the model: "Write a short, personal note about the failed payment. Day 3 offers help. Day 7 offers to switch the customer to an invoice instead of a card. No threats, no boilerplate." 4. Hold every draft for the person to approve before it is sent. Cancel pending drafts once the payment succeeds. 5. Log recovered, edited and unedited drafts. Check - A test failure produces a retry schedule and a first draft in the approval list. - Test that a later successful payment removes the day 3 and day 7 drafts.
4Tell me who signed up and how they found me
a cron script · 8am
New trials with company, size guess, and referral source in one email. Three lines per signup, no dashboard to open.
87 signups digested across 30 mornings
Example · inventedInvented line: '[Fernhill Books], ~8 staff, came from the double-entry blog post, imported 212 invoices in hour one.'
How to build it
Needs - A signup source (database or billing trial list) and somewhere to learn the referral source, such as a signup form field or analytics. - A way to send an email to the person themselves. - Ask your person for the delivery address and what counts as a trial. Build 1. Schedule a script for 8am daily. 2. Fetch trials created in the last 24 hours. 3. For each, work out company name, a rough size guess (from the email domain or the signup form) and referral source. 4. Instruction to the model: "Write exactly three lines per signup: who they are, how they found us, and the first thing they did in the product." 5. Send one digest to the person only. Send nothing on days with no signups, or send a single line saying so. Check - The first email lists each signup in three lines. - Test with a dummy signup and confirm the referral source appears.
5Pin production errors to the commit that caused them
a GitHub Action · on new Sentry issue
New error types arrive in my Slack with the suspect commit and the number of accounts touched. Saves the part of debugging where I argue with myself about when it started.
31 new error types pinned, 24 to the right commit
Example · inventedInvented alert: 'NaN in VAT rounding, first seen 14 min after commit a3f2e1 (currency refactor), 3 accounts affected.'
How to build it
Needs - An error tracker that can trigger on a new issue, a code host with CI actions, and a chat tool with an incoming webhook for the person alone. - Ask your person for the repository and the channel. Build 1. Trigger a workflow whenever a new error issue is created. 2. Read the issue's first-seen time, release and stack trace. 3. List commits merged shortly before first sight and pick the one touching the files in the trace. 4. Count distinct accounts affected. 5. Instruction to the model: "Name the most likely commit, say why in one sentence, and state how many accounts are touched." 6. Post to the person's private channel. It only reports; it changes no code. Check - The first alert shows the error, a suspect commit and an account count. - Test by raising a deliberate error from a known commit and confirm it is named.
Weekly4
6Diff competitor pricing pages
a scraper script plus Pager · Mondays 7am
Four competitors' pricing pages diffed against last week's snapshot, changes summarised in plain words. Most weeks the answer is 'nothing', and I'd rather learn that in one line than in four tabs.
4 pages watched, 2 changes caught (one seat-price rise, one plan renamed)
Example · inventedInvented diff: '[Reconsort] moved CSV import from the $29 tier to the $79 tier. Your migration page still says they include it.'
How to build it
Needs - Four competitor pricing page addresses, a script or tool that can fetch page text, and storage for last week's snapshots. - A chat or email destination for the person only. - Ask your person for the competitors and what counts as a meaningful change. Build 1. Schedule for Monday 7am. 2. Fetch each page and reduce it to plain text. 3. Diff against last week's snapshot, then save the new one. 4. Instruction to the model: "Summarise any change to prices, plan names or what is included per tier in plain words. If nothing material changed, say so in one line." Ignore layout and wording noise. 5. Where a change touches a claim on the person's own pages, point it out. 6. Send the summary to the person only. Check - The first run stores snapshots and reports nothing changed. - Test by editing a stored snapshot's price and confirm the diff is reported.
7Write the investor update nobody receives
Pager, the assistant I built · Fridays 5pm
MRR, churn, trials, and the week's support themes written up as if I had a board. I bootstrapped precisely to avoid writing this, and it turns out I think better when something makes me read my own numbers.
4 notes written, 4 read, 2 acted on
Example · inventedInvented excerpt: 'MRR $11.2k (+3.1%). Churn was two agencies that merged. Support themes: the new import confuses people at step 2, see three tickets.'
How to build it
Needs - Access to revenue figures, trial counts, churn and the week's support tickets. - A place to deliver a note to the person alone. - Ask your person for the metrics they care about and a style they find readable. Build 1. Schedule for Friday 5pm. 2. Gather MRR and change on last week, churned accounts with reasons, new trials, and the main support themes. 3. Instruction to the model: "Write a one-page update as if for a board: numbers first, then what explains them, then one question for the owner. Keep it plain and cite the tickets behind each theme." 4. Deliver to the person only. Nothing is sent to anyone else. 5. Record each week's figures to compare next time. Check - The first note shows the week's figures with themes tied to ticket counts. - Test that the MRR figure matches the billing dashboard.
8Cluster feature requests against actual tickets
Pager, the assistant I built · Sundays
Feature requests from support, email and the feedback widget get clustered and ranked by how many paying accounts asked. The list goes in a Notion page I look at before deciding the week's build.
61 requests clustered into 9 themes
Example · inventedInvented theme: 'Multi-currency rounding: 7 accounts, 4 paying, oldest request 11 weeks. Smallest honest version: display-only conversion.'
How to build it
Needs - Sources of feature requests (support inbox, email, a feedback widget) and a way to tell which requesters are paying. - A notes workspace such as Notion for the output page. - Ask your person for any existing theme names. Build 1. Schedule for Sundays. 2. Collect the week's new requests plus the existing backlog. 3. Instruction to the model: "Cluster requests that ask for the same outcome. For each theme give the total accounts, the paying accounts, the age of the oldest request and the smallest version that would help." 4. Rank themes by paying accounts first, total second. 5. Rewrite the backlog page with the ranked list, linking the underlying tickets. Check - The first page lists themes with paying counts and oldest-request age. - Test by checking one theme's count against the raw requests.
9Plan the week's dinners and draft the grocery order
a ChatGPT project · Saturday mornings
Seven dinners from a rotation of about thirty recipes, shaped around what's already in the flat, with the supermarket basket drafted for me to confirm. Founder-brain gets no say in dinner anymore.
4 weeks planned, 3 baskets ordered unedited
Example · inventedInvented plan line: 'Thu: dal + leftover rice from Wed. Basket skips lentils -- you bought a kilo on the 2nd.'
How to build it
Needs - An AI chat project with a stored list of about thirty dinner recipes. - An online supermarket account that accepts a basket you can review before ordering. - Ask your person for dietary rules, household size and a rough pantry list each week. Build 1. On Saturday morning, ask your person what is already in the kitchen. 2. Instruction to the model: "Plan seven dinners from the recipe list. Reuse leftovers across days and use up what is in the kitchen. Then list only the ingredients still needed, skipping anything bought recently." 3. Show the plan and basket as a list. 4. Fill the supermarket basket but stop before checkout. The person confirms and pays. 5. Note what was bought so next week's plan avoids doubling up. Check - The first output is seven dinners and a basket that leaves out pantry items. - Test by naming an item in stock and confirming it is not in the basket.
Monthly2
10Draft the real investor update from three sources
Pager, the assistant I built · 1st of the month
Pulls Stripe metrics, the month's support themes, and shipped changelog entries into a draft update for my two angels. I edit the top paragraph and send; the numbers section hasn't needed a correction since July.
1 update drafted and sent, 11 minutes of my editing
Example · inventedInvented excerpt: 'Shipped: bank-feed matching v2. Asks: an intro to anyone running finance at a 20-50 person agency.'
How to build it
Needs - Read access to payment metrics, the month's support themes and the changelog of shipped changes. - A place for an email draft. - Ask your person for the recipients' preferences, last month's update and any standing asks. Build 1. Schedule for the 1st of each month. 2. Pull revenue, churn and trial figures for the month, support themes and changelog entries. 3. Instruction to the model: "Draft an investor update with a short opening paragraph, a numbers section taken exactly from the data, what shipped, and a clear ask. Do not round or invent figures." 4. Save as a draft for the person. They edit the opening and send it themselves. 5. Keep every number traceable to its source. Check - The first draft has the numbers, shipped list and an ask. - Test by comparing three figures against the source systems.
11Pre-tag expenses for the accountant
a cron script · last Friday of the month
Bank transactions get categorised against last year's ledger and the odd ones get flagged with a question. My accountant now gets a tidy CSV and one short email instead of a shoebox.
94 transactions tagged, 6 flagged for me, 2 genuinely odd
Example · inventedInvented flag: '$312 at [Hexlab Cloud] -- new vendor, looks like the staging cluster you spun up on the 14th. Confirm category: infrastructure?'
How to build it
Needs - A bank feed or CSV export of the month's transactions and last year's categorised ledger. - A way to produce a CSV and an email draft for the accountant. - Ask your person for the accountant's category list and a threshold for flagging. Build 1. Schedule for the last Friday of the month. 2. Fetch the month's transactions. 3. Match each to a category using last year's ledger by vendor and amount pattern. 4. Flag new vendors, unusual amounts and ambiguous matches. Instruction to the model: "For each flagged item, ask one short question with your best guess at the category." 5. Show the flagged items to the person to resolve. 6. Once resolved, produce the CSV and an email draft. The person sends it. Check - The first output is a CSV with most rows tagged and a short list of questions. - Test with a new vendor and confirm it is flagged.
On demand3
12Draft incident postmortems from the logs
Pager, the assistant I built · on demand
After an outage I paste the incident channel and get back a timeline, root cause candidates, and the customer-facing note. I still write the apology myself; the timeline I no longer argue with.
2 postmortems drafted this window
Example · inventedInvented timeline entry: '09:41 webhook queue stalls; 09:44 first customer report; 09:52 you restarted the worker and it masked the real cause for an hour.'
How to build it
Needs - An AI assistant the person can paste text into, and a notes workspace for storing postmortems. - Ask your person for the incident channel text and their postmortem template. Build 1. When asked, take the pasted incident channel text. 2. Instruction to the model: "Build a timestamped timeline from the messages. List root cause candidates with the evidence for and against each. Note any action that may have hidden the real cause. Then draft a short customer-facing note describing impact and fix, with no blame." 3. Return the three parts separately. 4. Save the timeline and causes to the notes workspace. 5. The person writes any apology and approves the customer note before it goes anywhere. Check - The first output has a clean timeline, ranked causes and a draft note. - Test by spot-checking three timeline entries against the original messages.
13First pass on customer contracts and DPAs
a Claude project · on demand
Enterprise prospects send paper; I get back the clauses that differ from my standard terms and which ones I've accepted before. The lawyer sees only the two clauses that matter, at her hourly rate.
3 contracts passed, 5 clauses escalated to the lawyer
Example · inventedInvented flag: 'Clause 11.2 wants 99.95% uptime with credits. You've only ever agreed 99.5%, twice, both times with the credit cap in 11.4.'
How to build it
Needs - An AI project containing the person's standard terms and past accepted clauses with their conditions. - Ask your person for those documents and which clauses matter most (for example uptime, liability, data protection). Build 1. When a contract is supplied, split it into clauses. 2. Compare each against the standard terms and the accepted history. 3. Instruction to the model: "List only clauses that differ from standard terms. For each, quote it, state the difference, say whether similar wording was accepted before and under what conditions, and mark it accept, negotiate or escalate." 4. Return a short list with escalations first. 5. The person decides what goes to their lawyer. Nothing is sent to the counterparty. Check - The first output lists differing clauses with precedent notes. - Test with a clause using an uptime figure you have not accepted and confirm it is escalated.
14Rebuild the demo environment
a shell script · on demand
One command rebuilds the demo account with fresh fictional invoices dated this month, so prospects never see stale data from the last person's poking. Runs before every sales call.
run 9 times
Example · inventedInvented output: 'Demo reset: 240 invoices, 3 unmatched edge cases seeded, dates shifted to Sep-Oct 2026.'
How to build it
Needs - A demo account in the product and a way to create or delete its data by script. - Ask your person for the demo account and the number and mix of invoices to generate. Build 1. Write one script run on demand, typically before a sales call. 2. Delete the demo account's existing invoices and matches, only in the demo account. 3. Generate fictional invoices (default 240) with dates in the current and previous month. 4. Seed a few edge cases such as partial payments and mismatched amounts (default 3). 5. Print a one-line summary of what was created. 6. Ask the person to confirm before the first deletion, and make the script refuse to run against any non-demo account. Check - The summary shows the invoice count and seeded edge cases. - Test by running it twice and confirming nothing from the first run remains.
Tools
Reads from
- Striperevenue, failed payments
- Help desk inboxtickets and feature requests
- Sentryerrors
- Bank feedexpenses
Writes to
- Slack (just me in it)alerts and digests
- Notionbacklog themes, postmortems
- Email draftseverything customer-facing, held for my approval
