Fincore is an open-source, beautifully designed personal financial management tool built with self-hosting in mind. Specifically tailored for seamless integration with Casa OS, it allows you to take full control of your financial data without relying on third-party cloud services.
To provide a fast, privacy-first, and highly visual way to track income, expenses, and budgets—all living safely on your own personal server.
- 📊 Interactive Dashboard: Visual insights into your cash flow, net worth, and spending habits.
- 💸 Expense & Income Tracking: Easily categorize and log your daily transactions.
- 🎯 Smart Budgeting: Set limits on categories and receive alerts as you approach them.
- 🏠 Casa OS First: Designed to be a 1-click install on Casa OS.
- 🔒 Privacy Focused: 100% self-hosted. Your financial data never leaves your home network.
- 📱 Responsive UI: Looks great on desktop, tablet, and mobile.
Fincore is structured as a modern monorepo using pnpm workspaces. The frontend is a high-performance Single Page Application (SPA) strictly adhering to a feature-sliced architectural blueprint.
- Core: React 19, TypeScript, Vite
- Routing: TanStack Router (File-based routing)
- State Management: TanStack Query (Server State), Zustand (Client State)
- Forms & Validation: TanStack Form, Valibot
- Data Grids: TanStack Table, TanStack Virtual
- Styling & UI: Tailwind CSS v4, Radix UI, Motion, class-variance-authority (CVA)
- Testing: Vitest, MSW (Mock Service Worker), Testing Library
The frontend application (apps/frontend/src) enforces strict dependency boundaries across the following layers:
core/: Technical foundation (API clients, query configurations, global stores, auth, i18n).ui/: Pure design system and reusable primitives (dumb components, no business logic).pattern/: Shared mid-level components built on top ofui/andcore/(e.g., form infrastructure, complex data grids).layouts/: Pure structural layouts composing the application's visual shell.features/: Self-contained business modules grouping their own components, hooks, schemas, and utilities.routes/: Thin route definitions handling guards, data prefetching, and layout/feature composition.mocks/: MSW handlers and setup for reliable development and testing.
(Details pending backend implementation)
- Database: SQLite / PostgreSQL (Planned)
- Deployment: Docker / Docker Compose (Optimized for Casa OS)
To run Fincore on your CasaOS home server, use the Custom Install feature:
- Copy the contents of the
docker-compose.casaos.ymlfile. - Open your CasaOS Dashboard.
- Click App Store -> Custom Install (top-right corner).
- Click the Import button (top-right of the dialog).
- Paste the copied YAML content and click Submit.
- CasaOS will automatically populate all metadata (icon, description, ports, environment variables).
- (Optional) Customize the Database setting:
DATABASE_URL: Set this to your external/shared PostgreSQL connection string (e.g.postgresql://user:pass@192.168.1.100:5432/fincore).
Note: Fincore will automatically create the database if it doesn't already exist on your shared PostgreSQL server!
- Click Install. CasaOS will pull the image and launch Fincore!
If you want to run Fincore on a standard Docker server using Docker Compose:
- Create a
docker-compose.ymlfile with the following configuration:version: '3.8' services: app: image: ghcr.io/danielboso/fincore:latest container_name: fincore-app restart: unless-stopped ports: - "3000:3000" environment: - DATABASE_URL=postgres://fincore_user:fincore_pass@db:5432/fincore_db - PORT=3000 depends_on: - db db: image: postgres:18-alpine container_name: fincore-db restart: unless-stopped environment: POSTGRES_USER: fincore_user POSTGRES_PASSWORD: fincore_pass POSTGRES_DB: fincore_db volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data:
- Run the deployment command:
docker compose up -d
- Fincore will be available at
http://localhost:3000. Database migrations will automatically run on startup.
To run Fincore on your local machine for development:
- Clone the repo:
git clone https://github.com/danielboso/fincore.git cd fincore - Install dependencies:
npm install # or yarn/pnpm - Start the development server:
npm run dev
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.