Money Trail: track money owed to the business, chase it through Send on approval, and show what was paid
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 8/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
Research direction
This is a design-heavy feature, not a starter task. Read src/shared/quickbooks.ts for the allowlisted AR tools, then src/main/mailApprovals.ts and src/shared/mailProposals.ts for the Send on approval flow. Settle the ledger shape and the cadence rules with maintainers before coding. Done means the MVP in the issue: open-money.json is written, reminders become proposals, and a Report card shows paid-after-reminder.
Written by the indexing model from the issue text.
Description
Problem / motivation
The office does money work, but nothing proves it got the owner paid.
The home services pack already tells the team to chase money. The Finance Work style says "List overdue invoices with customer, amount and days late" and the Sales one says "When a quote goes three days without an answer, draft a short reminder" (resources/packs/home-services.json). Both live only in a prompt. The app keeps no record of which invoice is overdue, which reminder went out, or whether the customer then paid. So the owner can't answer the one question that decides whether they keep paying for a Claude plan: "Did the office get me paid?"
Existing issues measure activity and cost, not money in:
- #81 (weekly digest) counts work done. The "time saved" estimate was dropped there because owner-set minutes would be wrong for nearly everyone.
- #319 (track record) is cost and how often work was used as is.
- #47 / #51 verify that a task finished, not what it earned.
- #252 hunts new leads; nothing follows up the money already owed.
Proposed solution
Money Trail: an app-kept ledger of money owed to the business, chased through Send on approval, and reported from real amounts and dates only.
- Read what is owed. A weekly starter job for the Finance member reads QuickBooks receivables.
qbo_accounting_get_ar_aging_detailandqbo_sales_get_invoicesare already on the read allowlist insrc/shared/quickbooks.ts. The member hands the rows to the app (hive message), and the app writesopen-money.json: invoice id, customer, amount, due date, days late, last reminder, outcome. - Chase on a cadence. At 1 / 7 / 14 / 30 days late, the member drafts a reminder. Every one goes through the existing Send on approval flow (
src/main/mailApprovals.ts,src/shared/mailProposals.ts). There is a cap of 3 per invoice. Once the owner has approved a template enough times, a standing approval can take over, as it does for other mail today. - Close the loop from dates, not from the model. On the next QuickBooks read, an invoice that went from open to paid after an approved reminder is marked paid after reminder with both dates. The app computes this. It is never taken from Michael's memory or wording, and it never claims "because of".
- Show it where the owner already looks. A Monday Report card (
src/shared/askMeRouting.ts) says: "$4,200 overdue across 9 invoices · 6 reminders approved · $1,900 paid after a reminder (3 invoices)", with each invoice listed.
Phase 2: the same ledger for quotes. Track quote threads from the mailbox (threadFrom in mailProposals.ts): sent date, last reply, nudge due. A silent quote at day 3 / 7 becomes a draft nudge on Needs you, capped at 2 per thread. The owner marks it Won / Lost on the card. This turns the existing "three days" rule into state the app keeps.
Why it matters for the business, not just the owner
- It is the first number in the app that is in dollars earned rather than dollars spent. Today the cost views (
costLifetime.ts) show only the cost side. Putting "$X paid after a reminder" next to "$Y spent on the Claude plan" is the clearest case for keeping the office running and for recommending it to another owner. - It is local-first and owner-approved. SMB collections and follow-up tools mostly run as cloud SaaS (Podium, Birdeye and GoHighLevel are roughly $97–$599/mo) and cannot show "paid after a reminder" from the owner's own books.
- It reuses what exists: QuickBooks read tools, Send on approval, standing approvals, starter jobs, packs and Report cards. No new connector and no new outbound channel.
MVP (about 1 week): one starter job in the home services and professional services packs, open-money.json plus its writer, a cadence that writes proposals, and one Report card. It is skipped cleanly when no QuickBooks is connected.
Success metric: share of overdue dollars paid within 14 days of the first approved reminder, compared with the same office's first 2 weeks before Money Trail was on. Secondary: days sales outstanding, and the number of owners who approve at least 1 reminder in their first week.
Risks and constraints
- QuickBooks is a Claude account connector (#320), so the app can't read it directly. The ledger is only as good as the member's handoff. Mitigation: store the raw QuickBooks ids and amounts, and recompute paid / unpaid on every read.
- Customer money mail is sensitive. It stays Send on approval by default, with a hard cap per invoice and no reminder to a customer the owner has marked "don't chase".
- Attribution wording stays factual ("paid after"), as #81 set for estimates.
- Engine coupling: like #320, this depends on a Claude connector until #85 and #109 land.
Alternatives considered
- An estimated "time saved / money saved" figure. Rejected in #81 as wrong for most owners. Money Trail uses only amounts and dates from QuickBooks and the send log.
- Leave it to the prompt, as today. The work happens but nothing is kept, so nothing can be shown or trusted.
- Missed-call text-back / review requests. These have strong market demand but need an always-on phone or SMS channel, which a desktop app doesn't have.
- Dominant language
- TypeScript
- Stars
- 273
- Forks
- 211
- Avg merge
- 13h
- Merged PRs (30d)
- 197
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from agentvivekkumar/dontbemichael
-
Windows: a hidden Claude call cannot start when the CLI path has a spacePossibly taken @theshloksschauhan claimed this 1 day ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
agentvivekkumar/dontbemichael#426 ·
Maintainers usually reply within 1 day
-
Raise Home and Manager setup text to the 14px floorPossibly taken @glenmiracle18 claimed this 1 day ago. Openbug os:windows
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
agentvivekkumar/dontbemichael#416 · 1 comment ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 18/100
agentvivekkumar/dontbemichael#472 ·
Maintainers usually reply within 1 day
-
Run a scheduled job now, to see it work without waiting for its clockPossibly taken @19BEC0802 claimed this today. Openenhancement
Difficulty 4/5 3-5 days Newbie friendliness 15/100
agentvivekkumar/dontbemichael#467 ·
Maintainers usually reply within 1 day
-
Improve Failed Task Visibility and RecoveryPossibly taken @mts755Dev claimed this 1 day ago. Openenhancement
Difficulty 4/5 3-5 days Newbie friendliness 18/100
agentvivekkumar/dontbemichael#451 ·
Maintainers usually reply within 1 day
All issues in agentvivekkumar/dontbemichael
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
callstackincubator/simlock#639 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
aws/agentcore-cli#2606 ·
Maintainers usually reply within 1 day
-
ai-driven-qa bug Cosmetic
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Maintainers usually reply within 1 day
-
ai-driven-qa bug claude Minor
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
linagora/twake-mail-admin#301 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day