juntekim.com/stripe_to_invoice/README.md
2026-02-07 19:38:11 +00:00

7.8 KiB
Raw Blame History

Got you — heres a clean, founder-brain-friendly summary of Stripe → Invoice (Stripe → Xero) based on everything youve been working through, plus tight next steps that fit your nights/weekends reality.


🧾 What Stripe → Invoice Is (current state)

  • Problem youre solving

    • UK VAT-registered small businesses using Stripe struggle with audit-safe, VAT-correct invoices in Xero
    • Existing tools are overbuilt, accountant-first, or break down on VAT, clearing accounts, or reconciliation
    • This is fundamentally a VAT + audit correctness problem, not just “sync data”
  • Who its for

    • UK solo founders / one-person companies / tiny teams
    • Using Stripe only (Payment Links + Subscriptions)
    • Using Xero
    • Not accountants, not agencies, not complex multi-channel setups
  • What the MVP does today

    • Stripe OAuth + Xero OAuth both working

    • Webhooks flow end-to-end (validated against real finance manager)

    • Automatically:

      • Creates clean Xero invoices from Stripe payments
      • Applies VAT correctly
      • Posts payments via a Stripe Clearing account
    • Validated by a finance manager → very happy (huge signal)

  • Key MVP constraints (intentional)

    • UK + GBP only

    • Stripe Payment Links + Subscriptions only

    • Xero contacts matched/created by email only

    • Willing to:

      • Run one-off scripts
      • Do manual fixes early
    • Goal: first ~5 paying customers, not scale yet


Recently fixed

  • Xero contact creation — Now checks for existing contacts by email first, reuses if found, only creates if missing
  • Stripe OAuth app reuse — Added unique constraints on userId and stripeAccountId to prevent duplicate connections
  • Smart redirect flow — Users are automatically routed based on connection state:
    • Both connected → /dashboard
    • Only Stripe → /connect/xero
    • No connections → /connect/stripe
  • Connection visibility — Dashboard now displays connected Stripe account ID and Xero tenant ID

Frontend Improvements Details

Smart Onboarding Flow

  • Automatic routing based on connection state
  • Users never see unnecessary steps
  • Seamless progression: Login → Stripe → Xero → Dashboard

Dashboard Enhancements

  • Connected account visibility (Stripe account ID + Xero tenant)
  • Account code configuration (sales + clearing accounts)
  • Real-time save confirmation
  • Clean, minimal UI

Development Experience

  • Development mode fallback for webhook testing
  • Comprehensive logging at each webhook stage
  • Environment-aware configuration

⚠️ Known issues

  • Account codes:

  • Missing UX guardrails:

    • No clear pre-payment checklist before enabling sync

🧪 Current mode youre in (important)

  • Youre correctly running this in “design partner / friend test” mode

    • Payments disabled
    • Banner: “Internal test not a commercial product”
    • Clear paper trail of non-commercial intent
  • CFO + finance manager already acting as design partners

  • This massively de-risks VAT/audit assumptions before charging anyone


What you should do next (ordered, ruthless, realistic)

1 Finish the last correctness blockers (highest ROI)

These unlock charging real money.

  • Fix Xero contact creation DONE

    • Check by email → reuse if exists → only create if missing
  • Fix Stripe OAuth app reuse (stop creating new apps) DONE

  • Re-enable "mark invoice as paid" via Stripe Clearing once accounts are valid DONE

Outcome: rock-solid, boring, accountant-approved flow


2 Add a tiny pre-flight checklist UI (not a full settings page)

  • Dashboard shows connected accounts DONE

    • Stripe account ID displayed
    • Xero tenant ID displayed
  • Smart redirect flow based on connection state DONE

  • VAT status detection

  • Sales account code shown (editable)

  • Stripe clearing account shown (editable)

Even basic connection visibility prevents 80% of future support pain


3 Implement subscription billing (enables first paid customer)

  • Integrate Stripe Billing for subscription management
  • Add usage tracking (invoice count per month)
  • Create pricing page and checkout flow
  • Implement subscription status checks in webhook handler
  • Remove "internal test" banner once billing is live

4 Switch from "design partner" → first paid customer mode

  • Pick one:

    • A founder you already know OR
    • A cold UK Stripe + Xero business with obvious VAT needs
  • Offer:

    • £15/month Starter plan
    • "Early access / founder pricing" (50% off for life)
    • Manual support included
  • Goal is money changing hands, not scale

You've said it yourself: getting paid energises you — lean into that.


5 Do targeted cold outreach (low volume, high signal)

  • 510 emails max, not a campaign

  • Target:

    • UK SaaS / indie founders
    • Stripe Payment Links or Subscriptions
    • Clearly VAT-registered
  • Lead with:

    • "I built this because my accountant hated existing tools"
    • Emphasise audit-safe, VAT-correct invoices
    • Not "automation", not "syncing"

6 Future UX polish + automation (after first paying customers)

  • Auto-detect or create Stripe Clearing account in Xero

  • Bulk historical invoice sync

  • Invoice preview before creation

  • Reduce manual fixes you find yourself repeating

  • Nothing else until:

    • You have ~35 paying users
    • And they're still using it after month 1

💳 SaaS Subscription Model (proposed)

Pricing Tiers

Starter — £15/month

  • Up to 50 invoices/month
  • Stripe Payment Links + one-off payments
  • Email support (48h response)
  • Perfect for: Solo founders, side projects, small consultancies

Professional — £35/month

  • Up to 200 invoices/month
  • Everything in Starter, plus:
    • Stripe Subscriptions support
    • Priority email support (24h response)
    • Custom account code mapping
  • Perfect for: Growing businesses, SaaS products, agencies

Business — £75/month

  • Unlimited invoices
  • Everything in Professional, plus:
    • Multi-currency support (planned)
    • Dedicated Slack support
    • Early access to new features
  • Perfect for: Established businesses, high-volume merchants

Implementation Notes

  • Billing via Stripe Checkout (dogfooding our own product)
  • Monthly recurring subscriptions with automatic renewal
  • 14-day free trial — no credit card required
  • Founder pricing lock-in — First 50 customers get lifetime 50% off
  • Usage tracking — Invoice count displayed in dashboard, soft warnings at 80% of limit
  • Graceful degradation — Over-limit users get notified but sync continues (no hard cutoff)

Revenue Model

  • Target: 100 paying customers in 6 months

    • 60% Starter (£900/mo)
    • 30% Professional (£1,050/mo)
    • 10% Business (£750/mo)
    • Total: ~£2,700/mo MRR
  • Conservative burn

    • Hosting: £50/mo (Vercel + DB)
    • Email: £10/mo (AWS SES)
    • Support: Founder time only
    • Net: ~£2,640/mo profit margin

Next Steps for Monetization

  1. Add Stripe Billing integration to the app
  2. Implement usage tracking in webhook handler
  3. Create pricing page on landing site
  4. Add subscription management in dashboard
  5. Enable payments and remove "internal test" banner

🧠 The big picture (sanity check)

  • Youre not early anymore — youre post-validation, pre-pricing
  • The hard bit (VAT correctness + finance approval) is already done
  • The remaining work is boring plumbing + selling
  • This is exactly where most side projects die — dont overbuild now

If you want, next we can:

  • Draft the first cold email
  • Write the “Why this exists” landing page copy
  • Or map a 2-week nights/weekends execution plan

Just say the word.