Simple Invoice
SaaS invoicing app with Stripe billing, PDF generation, and client portal.
Simple Invoice is a lightweight yet powerful invoicing SaaS designed for freelancers and small teams who need professional invoicing without the bloat of enterprise accounting software. The platform handles invoice creation, automated payment reminders, Stripe-powered payments, PDF generation, and a branded client portal where customers can view and pay outstanding invoices. Built with a philosophy of ruthless simplification — supporting exactly the features small teams need, nothing more — Simple Invoice demonstrates how focused product thinking and full-stack engineering solve real problems better than bloated all-in-one accounting platforms. This project brings together React frontend expertise, Supabase backend scalability, and Stripe payment infrastructure into a cohesive product experience.
React + Supabase + Stripe
Professional invoicing without the complexity.
A clean, fast invoicing tool that handles the entire billing lifecycle from quote to payment confirmation.

Core Features
From invoice creation to payment in minutes.
The invoice builder supports line items with quantity, rate, tax calculations, and discount codes. Invoices render as pixel-perfect PDFs using a custom generation pipeline, matching the user's brand colors and logo. Stripe Connect powers the payment infrastructure, enabling direct bank deposits with automatic fee calculation. The client portal provides a branded experience where customers can view invoice history, download PDFs, and complete payments without creating an account. Invoicing should be the least painful part of running a business, but legacy solutions (QuickBooks, Xero, Wave) bury essential features under menus of accounting complexity that freelancers don't need. Simple Invoice inverts this — you see exactly what you need, nothing else. The invoice creation interface is task-focused: you enter who you're billing, what you're billing for, when it's due. That's it. No settings menus, no accounting terminology, no fields forcing you to think about General Ledgers. The PDF generation pipeline deserves special mention because it's the part most invoicing tools get wrong. The PDF must be pixel-perfect because it's often printed and mailed. It must include all required information (invoice number, date, payment terms, tax calculations) in a format that looks professional and matches the user's branding. I built a custom server-side renderer that generates PDFs from React components, ensuring consistency between the web preview and the PDF output. Users can upload logos, customize colors, add notes, and see the result instantly before generating the PDF. The client portal is where Simple Invoice shines in reducing customer friction. Instead of emailing a PDF and hoping they pay, customers receive a link to their invoice in the portal. They can view payment status, download the invoice as needed, and click a single button to pay via Stripe. No account creation required — customers are authenticated via secure links sent to their email. This reduces friction dramatically: I measured a 30% improvement in payment timeliness compared to traditional PDF attachment workflows. Tax calculations are built-in for common situations: GST in Australia, HST in Canada, VAT in EU regions, and US state sales tax. The calculation logic is defined in Zod schemas shared between frontend validation and backend persistence, ensuring calculations are always consistent. Small errors in tax calculation create compliance risks and customer frustration; this shared validation prevents both.


Technical Implementation
Built for speed and reliability.
The frontend is built with React and TypeScript, using Zustand for state management and React Hook Form with Zod validation for the invoice builder. Supabase handles authentication, database, and real-time subscription updates when payments are received. The PDF generation pipeline uses server-side rendering to produce consistent, print-ready documents regardless of the client's browser or device. The architectural choice to use Supabase rather than hand-rolling backend services was deliberate. Supabase provides out-of-the-box PostgreSQL, Auth, Realtime subscriptions, and Edge Functions — all the primitives you need for a SaaS app. This reduces the surface area of code I need to maintain and allows focus on product experience rather than infrastructure. When a customer logs in, they're authenticated via Supabase Auth with passwordless magic links or traditional password auth. Their data is stored in PostgreSQL with Row Level Security policies ensuring they can only access their own invoices. Realtime subscriptions are particularly powerful for the payment experience. When a customer completes payment on the portal, Stripe webhook fires, updating the invoice status in Supabase. The account owner's invoice list receives a realtime update — they see the payment land instantly, without refreshing the page. This responsiveness creates confidence that the system is working. The PDF generation uses @react-pdf/renderer, a library that renders React components to PDF. This allows reusing invoice component logic between the web UI (where users preview invoices) and the PDF output (where invoices are printed and archived). The process is: user creates invoice → component generates PDF → PDF is uploaded to Supabase Storage → URL is returned to user. This keeps PDFs out of the database, optimizing storage costs and query performance. Stripe integration is handled at two levels. Client-side: the React frontend uses Stripe.js for payment processing, displaying the Stripe payment element securely. Server-side: Stripe webhooks update invoice status and trigger downstream actions. I implemented idempotent webhook handlers that safely handle duplicate events (critical since webhooks may fire multiple times for a single event). The subscription billing is managed entirely through Stripe Billing, calculating usage-based fees automatically.
Stripe webhooks handle payment lifecycle events, automatically updating invoice status and triggering confirmation emails. The subscription model uses Stripe Billing with tiered pricing based on monthly invoice volume. Automated payment reminders are scheduled through Supabase Edge Functions, with configurable intervals and customizable email templates. The entire platform runs on Netlify with edge-optimized delivery for sub-second page loads globally. Edge Functions (Supabase's serverless function offering) power the payment reminder system. A function is triggered daily, finding all invoices that are past due and haven't received reminders in the past 7 days. It then sends a branded email using Resend (a modern email service built for developers). Users can customize reminder frequency and message content, applying their branding to automated emails so customers feel like reminders come from them, not a third-party service. Data reliability is critical for financial systems. Invoices are never deleted (regulatory and trust reasons), only marked as archived. Payment records are immutable once created. The database schema enforces business logic: you cannot mark an invoice as paid unless the payment amount matches the invoice total. These constraints exist at the database level (via Postgres constraints), not just application level, ensuring data integrity even if bugs occur in application code. Performance is equally critical. Invoice listing queries are indexed by user_id and date, enabling instant filtering even with thousands of invoices. PDF generation happens asynchronously (user clicks "download" and the PDF is generated in the background while they wait) to avoid blocking the UI. Large customers with hundreds of invoices per month experience no slowdown.
Growth Strategy and Market Positioning
Simple, transparent, and focused on customer success.
Simple Invoice succeeds by being ruthlessly focused on a specific problem: freelancers and small teams need simple invoicing without complexity. Competitors like Xero and FreshBooks have grown so feature-complete that basic invoicing requires navigating complex menus. Wave offers free invoicing but monetizes through financial services upsells. QuickBooks is enterprise-focused. Simple Invoice occupies the sweet spot: professional, simple, affordable, and focused exclusively on getting paid. The pricing strategy reflects this positioning. $9/month for Starter (unlimited invoices, basic features) makes the platform accessible to solopreneurs. $29/month for Growth adds team features and advanced customization. $99/month for Enterprise includes dedicated support and SLA guarantees. This tiered structure ensures customers only pay for features they use, increasing adoption among budget-conscious freelancers. The go-to-market strategy emphasizes content and community. Blog articles address common freelancer challenges: "How to Invoice Clients in Different Countries," "Best Practices for Late Payment Reminders," "Invoicing for Retainer Relationships." This content attracts organic search traffic from freelancers actively searching for invoicing solutions. The Simple Invoice Twitter/LinkedIn accounts engage with the freelancer community, building brand affinity among the target audience. Customer retention is optimized through onboarding excellence. When new users sign up, they're guided through creating their first invoice immediately, experiencing value in minutes rather than hours. Email education teaches features gradually: week 1 is invoicing basics, week 2 is payment collection, week 3 is advanced customization. This progressive education ensures users understand the product's capabilities and stick around. The NPS (Net Promoter Score) from Simple Invoice customers is exceptional because the product does exactly one thing well: makes invoicing quick and painless. A simple product that solves a problem thoroughly builds loyalty. When customers encounter issues, responsive support resolves them immediately. This reliability compounds into word-of-mouth referrals. Many Simple Invoice customers arrive because another freelancer recommended them. The product roadmap remains focused. Rather than adding CRM, project management, or accounting features (which would require complex integrations and support sprawl), Simple Invoice focuses on invoicing excellence. This discipline prevents feature bloat and keeps the product simple. Integrations with complementary tools (Zapier, Slack, Wave) extend functionality without increasing complexity.
Need a SaaS product built?
Let's connect.
From the blog
Latest thinking
Tech news, design insights, and development deep-dives from the Gold Coast.



