Connections and data sources
Where every piece of data comes from, how it gets in, and where it breaks.
How data flows
1. Comes in
Messenger, voice notes, receipt photos, supplier emails, Shopify payments, Alex tapping.
2. Drafted
AI for messy input (text, speech, photos). Rules for structured input (payments, dates, math).
3. Alex confirms
Plain-words card in the Inbox. Confirm, edit, or dismiss. AI never writes to the database itself.
4. Saved
His Postgres database. Every change in the audit log with before and after.
5. Shows up
Dashboard lists: follow-ups due, quotes waiting, open orders, incoming. All plain code.
Badge legend
Turn on Data sources in the menu to see these next to every value. Tap one for details.
Alex
Alex types or taps it in the app.
Calc
Plain code works it out from other data. No AI, always the same answer.
AI
AI drafts it from a message, voice note or photo. Alex confirms before it is saved.
Arrives from Messenger or the Meta Ads API.
Shopify
Pulled from Shopify / Shop Pay payments.
QuickBooks
Synced with QuickBooks expenses.
Photo
Taken with Alex's phone camera.
Supplier
From a supplier portal or order confirmation email.
Excel
One-time import from Alex's Excel sheets, then edited in Settings.
Each source
Facebook Messenger
Not built (interface only)
- Fills
- Customers, leads, interactions, his own copy of every conversation
- Gets in by
- Meta sends each new Page message to the app through a webhook. Needs a Meta developer app on Alex's Page with messaging permission (check Meta's docs for the exact permission and review).
- AI's job
- Reads the thread and proposes lead fields: seats, size, style, chairs, buying reason. Can draft a first quote.
Cracks
- Messenger gives a name, not a phone or email. Matching to Shopify payments later is hard.
- Old conversations from before the connection won't come in.
- Messaging window: 24 hours normally. The 7-day window for ad-started chats is UNVERIFIED.
- Meta app review may be needed even for a single Page.
Meta Ads
Not built (manual campaign entry for now)
- Fills
- Campaigns: name, creative, dates, spend. Which ad a lead came from.
- Gets in by
- Daily pull from the Marketing API. The ad a chat started from comes with the first webhook message (referral data, check docs).
- AI's job
- None. Spend and cost per lead are plain math.
Cracks
- If the referral data isn't on the message, leads can't be tied to a specific ad.
- Cost per sale needs leads linked to orders, which depends on Alex confirming leads.
Phone calls and voice notes AI
Not built
- Fills
- Interactions, quote revisions, order changes
- Gets in by
- Alex taps record in the app after a call and talks. Speech-to-text in the browser, or a hosted model behind the AI adapter.
- AI's job
- Turns "drop the bench, make it 7 ft" into a proposed quote v3 or order change, in plain words, for Alex to confirm.
Cracks
- Calls happen in the phone app, so nothing records automatically. Alex has to remember to tap record.
- Today his notes go into the phone's notes app. He has to switch habits.
Shopify / Shop Pay Shopify
Not built (manual payment entry for now)
- Fills
- Payments: deposit, final, date, method
- Gets in by
- Shopify webhook when an order is paid, or a daily pull from the Admin API.
- AI's job
- None. Matching is rules: email, amount equals deposit or balance, open order.
Cracks
- How does Alex take deposits today: Shopify invoice, draft order, or a product checkout? This decides how easy matching is.
- Customer email in Shopify may not match anything from Messenger.
QuickBooks QuickBooks
Not built
- Fills
- Purchases and expenses (or the other way round)
- Gets in by
- QuickBooks Online API with OAuth. Direction is an open question: this app pushes purchases to QuickBooks, or QuickBooks is the source and he tags jobs here.
- AI's job
- None for syncing. AI only helps upstream (reading receipts).
Cracks
- Direction unknown. Whichever way, there must be one entry point or he double-enters.
- Mileage tracking lives only in QuickBooks.
Whitewood Industries (chairs) Supplier
Not built (manual entry for now)
- Fills
- Chair purchases, order numbers, expected delivery dates
- Gets in by
- No known API. Alex forwards the confirmation or shipping email (or a screenshot of the portal).
- AI's job
- Reads the email or screenshot and proposes the purchase, lines and expected date.
Cracks
- Emails go to Alex's inbox. Forwarding is a habit he has to form.
- Chairs ship to a family member's commercial shop, so "received" happens somewhere else.
Kokomo sawmill (wood) Photo
Not built (manual entry with photo upload in scope)
- Fills
- Wood purchases with receipt photo
- Gets in by
- Alex snaps the paper receipt with the phone camera.
- AI's job
- Reads the receipt, drafts the purchase and lines, suggests the open job that uses that wood.
Cracks
- Handwritten receipts may read badly.
- He keeps wood for 1 to 2 jobs and reuses scraps, so per-job wood cost is approximate.
Phone camera Photo
In scope
- Fills
- Order progress photos, receipts
- Gets in by
- Upload from camera or gallery in the browser. Stored on disk behind a file storage interface.
- AI's job
- Optional later: caption photos, pick website-worthy shots.
Cracks
- Alex does not want to send build photos to customers. These stay private unless flagged for the website.
Excel quote sheet Excel
Waiting on the sheet
- Fills
- Styles, price options, costs, size pricing
- Gets in by
- One-time import, then edited in Settings. The spreadsheet retires.
- AI's job
- None.
Cracks
- Not received yet. All option prices in the app are placeholders.
- How size changes price, base and leg options, sales tax and delivery rules are all unknown.
Production tracker sheet Excel
Waiting on the sheet
- Fills
- Current open orders
- Gets in by
- One-time import of current rows into Orders.
- AI's job
- Could tidy messy rows into stages and dates for Alex to confirm.
Cracks
- Alex says it isn't kept up to date, so imported data needs checking.