A beautiful, modern cashflow projection app built with React 19 and TypeScript. Track your income, expenses, and visualize your financial future with interactive charts and multi-currency support.
- π Interactive Dashboard - Visualize your cashflow with beautiful area charts
- π± Multi-Currency Support - Track transactions in GBP, USD, EUR, AED, and ZAR
- π Recurring Transactions - Set up daily, weekly, monthly, or yearly recurring items
- π·οΈ Category Management - Organize transactions with customizable categories
- π Smart Scheduling - Automatically shift weekend payments to weekdays
- π Projections - See your balance projections up to 3 years in the future
- πΎ Data Export/Import - Backup and restore your data as JSON
- π₯ CSV Import - Bulk import transactions from CSV files
- π Live Exchange Rates - Fetch current exchange rates automatically
- π¨ Modern UI - Built with shadcn/ui and Tailwind CSS
- π± Responsive Design - Works beautifully on desktop and mobile
# Clone the repository
git clone https://github.com/yourusername/flowcash.git
cd flowcash
# Install dependencies
pnpm install
# Start development server
pnpm devVisit http://localhost:5173 to see the app running!
# Build the app
pnpm build
# Preview production build locally
pnpm previewThe built files will be in the dist/ directory, ready to deploy to any static hosting service.
- Framework: React 19.2
- Language: TypeScript 5.9
- Build Tool: Vite 7
- Styling: Tailwind CSS 4.1
- UI Components: shadcn/ui (Radix UI + Tailwind)
- State Management: Zustand
- Database: Dexie.js (IndexedDB wrapper)
- Charts: Recharts
- Date Handling: Day.js
- Animations: Framer Motion
- Recurring Rules: RRule
flowcash/
βββ src/
β βββ components/ # React components
β β βββ ui/ # shadcn/ui components (Select, Checkbox, Button)
β β βββ Dashboard.tsx
β β βββ Transactions.tsx
β β βββ TransactionForm.tsx
β β βββ Settings.tsx
β βββ hooks/ # Custom React hooks
β β βββ useProjection.ts
β βββ lib/ # Utility functions
β β βββ db.ts # Database setup & migrations
β β βββ currency.ts # Currency utilities
β β βββ projection.ts # Cashflow projections
β β βββ csvImport.ts # CSV import logic
β β βββ exchangeRates.ts # Live exchange rates
β βββ store/ # Zustand store
β β βββ useStore.ts
β βββ types/ # TypeScript types
β β βββ index.ts
β βββ App.tsx # Main app component
βββ public/ # Static assets
βββ dist/ # Production build (generated)
βββ package.json
- Click "Add Transaction" on the Transactions page
- Fill in the details:
- Title (e.g., "Salary", "Rent")
- Type (Income or Expense)
- Amount & Currency
- Start date
- Account
- Category (optional)
- Optional: Check "Recurring transaction" to set up:
- Frequency (Daily, Weekly, Monthly, Yearly)
- Interval (e.g., every 2 weeks)
- Day of month (for monthly)
- Weekend handling
- End date (optional)
- Click "Add Transaction"
- Go to the Dashboard
- Use the time range selector (3 months to 3 years)
- Toggle "Show categories" to see breakdown by category
- Click category pills to show/hide specific categories
- Toggle "Show Balance Line" to overlay total balance
- Go to Settings β Data Management
- Click "Export Data (JSON)"
- Save the file to a safe location
- Go to Settings β Data Management
- Click "Import Data (JSON)"
- Select your backup file
- All data will be restored
- Click "Download Template" to see the format
- Create your CSV file:
description,amount,date,currency Salary,3500,2025-01-15,GBP Rent,-1200,2025-01-01,GBP
- Positive amounts = Income
- Negative amounts = Expenses
- Click "Import CSV" and select your file
- Go to Settings β Exchange Rates
- Click "Fetch Current Rates"
- Rates are updated automatically
- Go to Settings β Exchange Rates
- Adjust individual rates as needed
- Click "Save All Settings"
- Go to Settings β Categories
- Click "Add Category"
- Enter:
- Name (e.g., "Travel")
- Type (Income/Expense/Both)
- Color (pick from color picker)
- Categories appear automatically in transaction forms
The app comes with 13 default categories:
- Income: Salary, Freelance, Investment Income, Other Income
- Expenses: Housing, Food & Dining, Transportation, Utilities, Entertainment, Shopping, Healthcare, Education, Other Expenses
You can edit or delete any category in Settings.
- 100% Local Storage - All data stays in your browser (IndexedDB)
- No Account Required - No sign-up, no tracking
- Optional Cloud Features - Only exchange rate fetching connects to internet
- Export Anytime - Download your data as JSON whenever you want
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel# Build
pnpm build
# Drag and drop the 'dist' folder to Netlify# Add to vite.config.ts:
# base: '/flowcash/'
# Build
pnpm build
# Deploy dist/ folder to gh-pages branchIssue: Database is empty after clearing browser data
Solution: Use Export/Import to backup before clearing data
Issue: Exchange rates fail to fetch
Solution: Check internet connection or enter rates manually
Issue: Recurring transactions not showing
Solution: Check transaction is "Active" and start date is in the past
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - feel free to use this for personal or commercial projects!
- shadcn/ui for the beautiful component library
- Radix UI for accessible primitives
- Recharts for the charting library
- Currency data from @fawazahmed0/currency-api
- Dark mode support
- Multiple accounts
- Budget tracking
- Cloud sync (optional)
- Mobile app (React Native)
- Bill reminders
- PDF export
- Custom categories with icons
Built with β€οΈ using React and TypeScript
For questions or suggestions, please open an issue.