FAQ
Straight answers, including the parts that aren't finished yet.
Getting started
One job you're trying to win. It bundles the client, the offer, the money and the calendar slot into a single record — so when any one of those changes, the others don't drift out of date. On the calendar it's a coloured chip; on the board it's a card; in Payments it's an invoice. Same row.
No. Hit Create, switch to "New client", and the client, the deal and the calendar slot are all written in one pass. You can fill in the phone number later.
Check-Ins, then the calendar. Check-Ins is ranked by what it costs you to keep waiting, so working it top-to-bottom is the highest-value order available. The calendar is for what's already committed.
Pipeline
The deal's stage, always. Grey is a new request, blue is negotiating, amber is a verbal yes, green is signed, lime is paid. Pink is the exception — it's a milestone of your own with no deal behind it, like a shoot day or a tax deadline.
Yes. That's the whole point. The popover writes to the deal, and the board, the calendar and the analytics all read from it. There's no sync step because there's nothing to sync.
Verbal Yes means they said it out loud. Confirmed means it's signed and you've raised an invoice. The gap between those two is where most deals quietly die, which is why Check-Ins watches both.
Because "no" usually means "not now". A lost deal keeps its history, so when the win-back sequence reaches them in six weeks you already know what the objection was and what you quoted.
Follow-up
Days past your own follow-up date, days silent while the ball is in their court, whether an unopened demo has gone cold, whether a hot demo has been opened repeatedly, and deal size as a tiebreak. It's deliberately simple so you can argue with it — if it ranks something wrong, you'll be able to see why.
A campaign is a one-off push to a list you built. A sequence runs forever on a rhythm and works out its own audience from live pipeline data each time it fires. Monthly client reports are a sequence. A spring roofing blitz is a campaign.
Not from this build — there's no mail provider wired in yet. Running one resolves the real audience, writes a send record per recipient and updates the stats, so the plumbing and the numbers are real; only the SMTP handoff is missing. Wiring in Resend or Postmark is one function.
Proof the money is doing something: visits, calls, form fills, new reviews, and one specific thing you'd change next month. That last line is what turns a report into an upsell. Client Pulse is set up for exactly that.
Money
Automatically when a deal reaches Confirmed, if one doesn't already exist. You can also raise one by hand from Payments and attach it to any deal.
Negative is good — it means clients pay before the date you set. A positive number is how many days late the average invoice lands. If it's above three or four, the fix is usually a deposit up front rather than chasing harder.
A monthly offer is valued at twelve months when it becomes a deal, so the pipeline reflects what it's actually worth to win. The Recurring tile on Payments shows the true monthly figure separately.
Tools
Yes. It fetches the page server-side, reads the HTML and grades twelve specific things — click-to-call, booking language, viewport meta, structured data, and so on. If the site won't load it tells you that rather than inventing a score, which is itself worth knowing before you call.
No. Eva is a rules engine over your own SQL. She matches your question to an intent, runs the query and reports what came back. Nothing leaves the app, and every number she gives you is one you can verify yourself.
⌘K. It searches clients, deals, message bodies and invoice numbers, and doubles as the jump-anywhere navigator. Type two characters and it starts searching records, not just page names.
Data
SQLite, through libSQL. Locally that's a file in the repo. Point TURSO_DATABASE_URL and TURSO_AUTH_TOKEN at a Turso database and it's hosted, with no other code change — the data layer was written for both from the start.
It's a plain SQLite file. Open it in any SQLite browser, query it, copy it, back it up. No export step, no proprietary format, no lock-in.