A comprehensive Dutch tax automation platform with Revolut Business API integration for seamless transaction management and tax calculations.
- Dashboard Overview - Financial insights and key metrics
- Transaction Management - Import and categorize transactions
- Account Management - Multi-account support with balance tracking
- Invoice Management - Create and manage invoices
- Tax Calculator - Dutch tax calculations with VAT support
- Settings Management - User preferences and integrations
- Secure OAuth Flow - Industry-standard authentication
- Per-User Certificates - Individual RSA key pairs for each user
- Automatic Token Refresh - Seamless API access management
- Account Syncing - Real-time account and transaction data
- Multi-Environment Support - Sandbox and production ready
- Expert Tax Advice - Personalized Dutch tax guidance
- Transaction Categorization - AI-powered expense classification
- Tax Calculations - Intelligent tax liability computation
- Tax Optimization - Recommendations for tax efficiency
- Dutch Tax Compliance - Up-to-date 2025 tax rules
- Multi-Business Support - Eenmanszaak, BV, VOF, Maatschap
- Excel Integration - Upload and process Excel transaction files
- AI-Powered Categorization - Automatic Dutch tax categorization
- Batch Processing - Handle large transaction datasets efficiently
- Automated Tax Calculations - Generate tax liability from transactions
- Comprehensive Reports - AI-generated tax reports with recommendations
- Multi-Step Workflow - Upload β AI Processing β Calculate β Report
- Downloadable Reports - Export tax analysis in text format
- Frontend: Next.js 13+ with App Router, React 18, TypeScript
- Styling: Tailwind CSS with custom design system
- Authentication: Supabase Auth
- Database: Supabase PostgreSQL
- Banking API: Revolut Business API
- AI Integration: Google Gemini AI
- Excel Processing: XLSX library
- Icons: Lucide React
- Deployment: Vercel (recommended)
- Node.js 18+
- npm or yarn
- Revolut Business account (for API access)
- Supabase account (for authentication and database)
git clone https://github.com/yourusername/dutch-tax-platform.git
cd dutch-tax-platformnpm installCreate a .env.local file in the root directory:
# Supabase Configuration
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# App Configuration
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Revolut API Configuration (Optional - for production)
REVOLUT_SANDBOX_MODE=true
# Gemini AI Configuration
GEMINI_API_KEY=your_gemini_api_keynpm run devOpen http://localhost:3000 to view the application.
-
Sign up for Revolut Business Sandbox
- Visit Revolut Developer Portal
- Request sandbox access
- Create a sandbox business account
-
Configure OAuth Redirect
- Set redirect URI to:
http://localhost:3000/api/revolut/callback - Note your Client ID for later use
- Set redirect URI to:
-
Generate Production Certificates
cd revolut-certs openssl genrsa -out privatecert.pem 2048 openssl req -new -x509 -key privatecert.pem -out publiccert.cer -days 1825 -
Upload to Revolut Business
- Go to Revolut Business web app
- Navigate to Settings β APIs β Business API
- Upload your public certificate
- Set redirect URI to your production domain
dutch-tax-platform/
βββ src/
β βββ app/ # Next.js App Router
β β βββ api/ # API routes
β β β βββ revolut/ # Revolut integration APIs
β β βββ dashboard/ # Dashboard pages
β β βββ globals.css # Global styles
β βββ components/ # React components
β β βββ auth/ # Authentication components
β β βββ dashboard/ # Dashboard components
β βββ lib/ # Utility libraries
β βββ revolut-integration.ts # Revolut API client
βββ revolut-certs/ # Certificate storage (gitignored)
βββ public/ # Static assets
βββ package.json
- OAuth 2.0 Compliance - Secure authentication flow
- RSA Key Pairs - Individual certificates per user
- Token Management - Automatic refresh and secure storage
- Environment Isolation - Separate sandbox/production configs
- Input Validation - Comprehensive data validation
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage-
Connect Repository
- Push code to GitHub
- Connect repository to Vercel
- Configure environment variables
-
Environment Variables
NEXT_PUBLIC_SUPABASE_URL=your_production_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_production_anon_key SUPABASE_SERVICE_ROLE_KEY=your_production_service_role_key NEXT_PUBLIC_APP_URL=https://your-domain.vercel.app REVOLUT_SANDBOX_MODE=false
# Build for production
npm run build
# Start production server
npm startPOST /api/revolut/connect- Initialize connectionPOST /api/revolut/authorize- Create OAuth URLGET /api/revolut/callback- Handle OAuth callbackPOST /api/revolut/sync- Sync accounts and transactionsGET /api/revolut/sync- Get connection status
POST /api/ai/tax-advice- Get personalized tax advicePOST /api/ai/categorize- Categorize transactionsPOST /api/ai/calculate-tax- Calculate tax liability
POST /api/tax-flow/process-excel- Process Excel file with AI categorizationPOST /api/tax-flow/calculate-tax- Calculate tax from processed transactionsPOST /api/tax-flow/generate-report- Generate comprehensive tax report
POST /api/auth/login- User loginPOST /api/auth/logout- User logoutGET /api/auth/user- Get current user
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Documentation: Wiki
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Revolut Business API for banking integration
- Google Gemini AI for intelligent tax assistance
- Supabase for authentication and database
- Next.js for the React framework
- Tailwind CSS for styling
- Lucide for icons
Built with β€οΈ for Dutch entrepreneurs and businesses.