The all-in-one finance toolkit for freelancers track income, manage expenses, send invoices, and estimate taxes.
FlowBooks is a freelance finance toolkit that consolidates income tracking, invoicing, and expense management into a single dashboard. Built for independent contractors and solo founders who need professional financial visibility without the complexity of enterprise accounting software.
- ๐ Dashboard Real-time overview with smoothed income tracking, expense breakdowns, and 6-month charts
- ๐ฐ Income Tracking Log payments, link to clients & projects, and track payment status
- ๐งพ Invoicing Create professional invoices with line items; mark paid with auto-income generation
- ๐ธ Expense Management Categorize expenses, attach receipts, and monitor spending patterns
- ๐ฅ Client & Project CRM Manage contacts, track project budgets and timelines
- ๐งฎ Tax Estimator Quarterly tax estimates based on configurable saving percentages
- ๐ง Onboarding Wizard 3-step guided setup: country & tax status โ income goals โ first client
- ๐ Authentication Email/password + Google OAuth with email verification
FlowBooks has undergone a comprehensive production readiness audit. Key improvements:
- โ
Type Safety TypeScript strict mode enabled, all
anytypes eliminated - โ Security Environment variable validation, security headers, RLS on all tables
- โ Error Handling Global error boundary, graceful error states, dev-only logging
- โ Performance Code splitting, optimized bundle size, efficient data fetching
- โ Code Quality ESLint passing, no dead code, consistent conventions
- โ Testing Vitest setup with example tests, ready for expansion
See PRODUCTION-AUDIT-REPORT.md for the complete audit report.
| Category | Technology |
|---|---|
| Frontend | React 18 + TypeScript 5.8 |
| Build Tool | Vite 5.4 with SWC |
| Styling | Tailwind CSS v3 + Radix UI + shadcn/ui |
| Animation | Framer Motion |
| Backend/DB | Supabase (Auth + PostgreSQL + RLS) |
| Charts | Recharts 2.15 |
| Forms | React Hook Form 7 + Zod 3.25 |
| Routing | React Router v6.30 |
| State | TanStack Query v5.83 |
| UI Components | Radix UI + Lucide Icons + Sonner (toasts) |
| Testing | Vitest 3 + Testing Library + jsdom |
| Code Quality | ESLint 9 + TypeScript ESLint |
- Type Safety Strict TypeScript configuration with no implicit
any - Code Splitting Manual chunks for React, UI, charts, and forms (optimized bundle)
- Authentication Supabase Auth with protected routes and session management
- Database Security Row-Level Security (RLS) policies on all tables
- Error Handling Global error boundary with graceful fallback UI
- Performance React Query for caching, optimistic updates, and efficient refetching
- Accessibility Radix UI primitives with ARIA attributes and keyboard navigation
- Developer Experience Hot module replacement, fast refresh, path aliases (
@/)
- Node.js 18+
- pnpm (
npm install -g pnpm) - Supabase account
# 1. Clone the repo
git clone https://github.com/MuhammadTanveerAbbas/flowbooks.git
cd flowbooks
# 2. Install dependencies
pnpm install
# 3. Set up environment variables
cp .env.example .env.local
# Fill in your Supabase credentials (see Environment Variables below)
# 4. Run the development server
pnpm devOpen http://localhost:8080 in your browser.
Create a .env.local file in the root directory with the following required variables:
VITE_SUPABASE_URL=https://your-project-ref.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=your-supabase-anon-keyGet your keys from Supabase Dashboard โ Project Settings โ API.
Note: The project uses
.env.localfor local development (already in.gitignore). The.env.examplefile is provided as a template.
Run the schema against your Supabase project to create all required tables:
Option A: Supabase Dashboard (recommended)
- Go to your Supabase project โ SQL Editor
- Paste and run the contents of
supabase/schema.sql
Option B: Supabase CLI
npx supabase login
npx supabase link --project-ref your-project-ref
npx supabase db pushThis creates the following tables (all with Row Level Security enabled):
- profiles User settings, tax preferences, onboarding status
- clients Client contact information and notes
- projects Project tracking with budgets and timelines
- invoices Invoice generation with line items
- income Income records linked to clients/projects/invoices
- expenses Expense tracking with categories and receipts
Key Features:
- โ Row Level Security (RLS) enforced on all tables
- โ Foreign key constraints for data integrity
- โ
Automatic
updated_attimestamps via triggers - โ Auto-profile creation on user signup
- โ UUID primary keys for security
To enable "Continue with Google" on the login/signup pages:
- Go to Google Cloud Console โ APIs & Services โ Credentials
- Create an OAuth 2.0 Client ID (Web application)
- Add your domain to Authorized redirect URIs:
- For local dev:
http://localhost:8080 - For production:
https://your-domain.com - Also add the Supabase callback URL:
https://your-project-ref.supabase.co/auth/v1/callback
- For local dev:
- In Supabase Dashboard โ Authentication โ Providers โ Google, enable it and paste your Client ID & Secret
flowbooks/
โโโ public/ # Static assets (favicon)
โโโ src/
โ โโโ components/
โ โ โโโ layout/ # AppLayout, Sidebar, TopBar, MobileNav
โ โ โโโ ui/ # 50+ shadcn/ui components (Radix UI based)
โ โ โโโ ErrorBoundary.tsx
โ โ โโโ FlowBooksLogo.tsx
โ โ โโโ NavLink.tsx
โ โ โโโ ProtectedRoute.tsx
โ โโโ hooks/ # useAuth, use-mobile, use-toast
โ โโโ integrations/
โ โ โโโ supabase/ # Supabase client & generated types
โ โโโ lib/ # Utility functions (cn, etc.)
โ โโโ pages/ # 13 route-level page components
โ โ โโโ LandingPage.tsx
โ โ โโโ Login.tsx
โ โ โโโ Signup.tsx
โ โ โโโ Onboarding.tsx
โ โ โโโ Dashboard.tsx
โ โ โโโ IncomePage.tsx
โ โ โโโ ExpensesPage.tsx
โ โ โโโ ClientsPage.tsx
โ โ โโโ ProjectsPage.tsx
โ โ โโโ InvoicesPage.tsx
โ โ โโโ TaxPage.tsx
โ โ โโโ SettingsPage.tsx
โ โ โโโ NotFound.tsx
โ โโโ test/ # Vitest setup & example tests
โ โโโ App.tsx # Root component with routing
โ โโโ main.tsx # App entry point
โ โโโ index.css # Global styles & Tailwind imports
โโโ supabase/
โ โโโ schema.sql # Complete database schema
โ โโโ config.toml # Supabase CLI config
โโโ .env.example # Environment variable template
โโโ .env.local # Local environment (gitignored)
โโโ components.json # shadcn/ui configuration
โโโ eslint.config.js # ESLint 9 flat config
โโโ tailwind.config.ts # Tailwind + typography plugin
โโโ tsconfig.json # TypeScript strict mode config
โโโ vite.config.ts # Vite with code splitting
โโโ vitest.config.ts # Vitest test configuration
โโโ package.json # Dependencies & scripts
| Command | Description |
|---|---|
pnpm dev |
Start development server on port 8080 |
pnpm build |
Build for production (optimized & minified) |
pnpm preview |
Preview production build locally |
pnpm lint |
Run ESLint on all source files |
pnpm test |
Run tests once (CI mode) |
pnpm test:watch |
Run tests in watch mode (development) |
- Click the button above and connect your GitHub account
- Add these environment variables in the Vercel dashboard:
VITE_SUPABASE_URLVITE_SUPABASE_PUBLISHABLE_KEY
- Deploy
- After deploy, add your Vercel domain to:
- Supabase Dashboard โ Authentication โ URL Configuration โ Site URL and Redirect URLs
- Google OAuth โ Authorized redirect URIs (if using Google login)
- Dashboard with 6-month income/expense charts
- Invoice creation with line items and auto-income generation
- Client & project CRM with budget tracking
- Quarterly tax estimator with configurable rates
- 3-step onboarding wizard
- Google OAuth + email/password authentication
- Email verification flow
- Row-level security on all database tables
- TypeScript strict mode with full type safety
- Global error boundary for graceful error handling
- Code splitting for optimized bundle size
- Security headers (X-Frame-Options, CSP, etc.)
- Production-ready audit completed
- Recurring invoices with automated generation
- CSV/Excel export for accountants
- Multi-currency support with exchange rates
- Receipt OCR for automatic expense entry
- Mobile app (React Native)
- Stripe integration for payment processing
- Email reminders for overdue invoices
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes and ensure:
- TypeScript compilation passes (
pnpm build) - Linting passes (
pnpm lint) - Tests pass (
pnpm test)
- TypeScript compilation passes (
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Code Standards:
- Use TypeScript strict mode (no
anytypes) - Follow existing code style and conventions
- Add tests for new features
- Update documentation as needed
Distributed under the MIT License. See LICENSE for more information.