A comprehensive financial transaction management and analytics platform built with React, TypeScript, and .NET.
- PDF Import: Drag-and-drop PDF bank statements for automatic transaction extraction
- Smart Categorization: Automatically categorize transactions with manual override
- Reconciliation: Map unmapped transactions with autocomplete suggestions
- Ledger Integration: Sync with Obsidian-format ledger files
- Real-time Statistics: Track total income, expenses, net balance, and transaction count
- Interactive Charts:
- Spending trends over time (line chart)
- Category breakdown (pie chart)
- Monthly income vs expenses comparison (bar chart)
- Time Period Filters: View data for 7 days, 30 days, 90 days, 1 year, or all time
- Full-text Search: Search across descriptions, categories, and accounts
- Date Range Filtering: Filter transactions by custom date ranges
- Category Filters: Multi-select category filtering
- Amount Filters: Filter by minimum and maximum amounts
- Transaction Type: Filter by income, expense, or view all
- Source Filtering: Filter by PDF imports or ledger entries
- Status Filtering: View mapped, unmapped, or all transactions
- Sorting: Click column headers to sort by date, amount, or category
- Pagination: Customizable page sizes (20, 50, or 100 transactions per page)
- CSV Export: Export filtered transactions to CSV format
- Bulk Operations: Select and update multiple transactions at once
- Frontend: React 18, TypeScript, Tailwind CSS
- Charts: Recharts for data visualization
- Backend: .NET 10, ASP.NET Core Web API
- Database: PostgreSQL with Entity Framework Core
- Authentication: JWT-based authentication
- Node.js (v16 or higher)
- .NET SDK 10.0
- PostgreSQL database
Run both frontend and backend with a single command:
# Option 1: Using the shell script
./run.sh
# Option 2: Using npm
npm startThe application will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:5101
- Swagger UI: http://localhost:5101/swagger
Run services separately:
# Frontend only
npm run frontend
# Backend only
npm run backend# Build frontend and backend
npm run publishThis will:
- Build the React frontend with optimizations (minified, no source maps)
- Copy the build to
api/wwwroot - Publish the .NET backend to
./publish
cd publish
dotnet api.dllThe production application will serve both frontend and API from http://localhost:5101
Interactive charts showing spending trends, category breakdown, and monthly comparisons.
Drag-and-drop interface for importing bank statements with real-time progress tracking.
REACT_APP_API_URL=/api
GENERATE_SOURCEMAP=false
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=FinStrive;Username=postgres;Password=postgres"
},
"JWT": {
"Issuer": "http://localhost:3000",
"Audience": "http://localhost:3000",
"SigningKey": "your-secret-key-here"
}
}FinStrive/
βββ frontend/ # React TypeScript application
β βββ src/
β β βββ Components/ # Reusable UI components
β β β βββ TransactionStats/
β β β βββ TransactionCharts/
β β β βββ TransactionList/
β β β βββ PdfImportModal/
β β βββ Pages/ # Page components
β β βββ Services/ # API service layer
β β βββ Models/ # TypeScript interfaces
β βββ public/
βββ api/ # .NET Web API
β βββ Controllers/ # API endpoints
β βββ Services/ # Business logic
β βββ Repository/ # Data access layer
β βββ Models/ # Entity models
βββ backend/ # Python FastAPI (legacy)
βββ run.sh # Development startup script
βββ build-production.sh # Production build script
FinStrive uses a modern glassmorphism design with:
- Color Palette: Primary blue (#3b82f6), with green for income and red for expenses
- Typography: Inter for body text, Outfit for headings
- Components: Glass cards with backdrop blur and subtle borders
- Animations: Smooth transitions and fade-in effects
Displays four key metrics in animated cards:
- Total Income
- Total Expenses
- Net Balance
- Total Transactions
Three interactive charts:
- Spending Trends: Line chart showing daily income and expenses
- Category Breakdown: Pie chart of expense categories
- Monthly Comparison: Bar chart comparing income vs expenses by month
Advanced table with:
- Real-time search
- Multi-criteria filtering
- Column sorting
- Pagination
- CSV export
Modern import interface with:
- Drag-and-drop support
- File validation
- Progress tracking
- Success/error notifications
The application uses JWT-based authentication:
- Register or login to receive a JWT token
- Token is stored in local storage
- All API requests include the token in the Authorization header
- Logged-in users are automatically redirected to the transactions page
id: Unique identifiertxnDate: Transaction datedescriptionRaw: Original description from bank statementdescriptionClean: User-edited descriptionamount: Transaction amount (positive for income, negative for expenses)accountFrom: Source accountaccountTo: Destination accountcategory: Transaction categorysource: Import source (PDF or Ledger)mapped: Whether the transaction has been categorized
- Update database connection string
- Configure JWT signing key
- Set up CORS for production domain
- Build production bundle:
npm run publish - Deploy
./publishdirectory to server - Configure reverse proxy (nginx/Apache)
- Set up SSL certificate
Docker support is planned for easier deployment.
This project is private and proprietary.
This is a personal project. Contributions are not currently accepted.
For questions or support, please contact the repository owner.
Version 1.0 - Built with β€οΈ for better financial management
