<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: albilu</title>
    <description>The latest articles on DEV Community by albilu (@albilu).</description>
    <link>https://dev.to/albilu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4036364%2F4940ed06-66fa-47f6-a187-912a90eeccf1.jpg</url>
      <title>DEV Community: albilu</title>
      <link>https://dev.to/albilu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/albilu"/>
    <language>en</language>
    <item>
      <title>Open-Finance: Local-first, privacy-focused personal finance application.</title>
      <dc:creator>albilu</dc:creator>
      <pubDate>Sun, 19 Jul 2026 10:06:50 +0000</pubDate>
      <link>https://dev.to/albilu/open-finance-local-first-privacy-focused-personal-finance-application-57gk</link>
      <guid>https://dev.to/albilu/open-finance-local-first-privacy-focused-personal-finance-application-57gk</guid>
      <description>&lt;h2&gt;
  
  
  Building (and Using) a Local-First Personal Finance App with Java 21, Spring Boot, and React
&lt;/h2&gt;

&lt;p&gt;Most personal finance tools force you to choose between "modern but SaaS" (your data on their servers) and "private but dated" (GnuCash-style UIs). This article walks through &lt;strong&gt;Open-Finance&lt;/strong&gt;, an open-source alternative that gives you both: a polished web interface and complete data sovereignty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Local-First Matters
&lt;/h2&gt;

&lt;p&gt;Financial data is uniquely sensitive. Every cloud finance app is a potential target — and even "anonymous" usage data reveals your net worth, spending habits, and investment strategy. Open-Finance stores everything in a local SQLite database (WAL mode, encrypted), runs entirely on your machine, and never phones home.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React 19 UI → REST API → Spring Boot Services → JPA → SQLite (encryption at rest)
                              ↓
                    External Integrations
                    (Yahoo Finance, ECB, Ollama)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Java 21, Spring Boot 3.2, Hibernate/JPA, Flyway migrations, SQLite via Xerial JDBC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React 19 + TypeScript 5, Vite, Tailwind 4, shadcn/ui, Radix UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State:&lt;/strong&gt; TanStack Query (server), Zustand (client), react-hook-form + zod&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Local Ollama integration — no API keys, no data leakage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market Data:&lt;/strong&gt; Yahoo Finance wrapper with caching and rate limiting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exchange Rates:&lt;/strong&gt; Daily ECB rate fetch&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Import Pipeline
&lt;/h3&gt;

&lt;p&gt;Support for QIF, OFX, QFX, CSV, JSON, and even Skrooge exports. The import engine includes duplicate detection, per-file account mapping, and an interactive preview so you can see what lands before committing.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Multi-Currency
&lt;/h3&gt;

&lt;p&gt;Transactions support any currency with automatic ECB rate conversion. The dashboard shows consolidated net worth in your base currency with historical trends.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Local AI Assistant
&lt;/h3&gt;

&lt;p&gt;Connected to Ollama, the AI analyzes your actual portfolio and spending patterns — no context window limitations from cloud APIs, and zero data exposure. It can simulate scenarios ("what if I increase my monthly investment by 20%?") against real data.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Rich Financial Instruments
&lt;/h3&gt;

&lt;p&gt;Track stocks, crypto, real estate, vehicles, and liabilities with amortization schedules. Market prices auto-update for tradable assets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/openfinance-app/open-finance.git
&lt;span class="nb"&gt;cd &lt;/span&gt;open-finance
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Edit JWT_SECRET in .env (or generate with openssl rand -base64 48)&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;span class="c"&gt;# Open http://localhost:8080 — demo/demo123&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Development Setup
&lt;/h2&gt;

&lt;p&gt;The repo includes a DevContainer with Java 21, Maven, Node.js, and SQLite pre-configured. Open it in VS Code with the Dev Containers extension and you're ready to contribute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn spring-boot:run   &lt;span class="c"&gt;# Backend on :8080&lt;/span&gt;
npm run dev            &lt;span class="c"&gt;# Frontend on :5173&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Comparison to Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Open-Finance&lt;/th&gt;
&lt;th&gt;GnuCash&lt;/th&gt;
&lt;th&gt;Finary&lt;/th&gt;
&lt;th&gt;Wealthfolio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Modern UI&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local-first&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Assistant&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QIF/OFX Import&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encrypted&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-currency&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FOSS&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The project is on GitHub at &lt;a href="https://github.com/openfinance-app/open-finance" rel="noopener noreferrer"&gt;github.com/openfinance-app/open-finance&lt;/a&gt; under Elastic License v2 — free to self-host and modify.&lt;/p&gt;

&lt;p&gt;If you're interested in the architecture, I've written about specific components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/openfinance-app/open-finance/blob/main/docs/wiki/HOME.md" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Have questions? Drop them in the comments or open a GitHub issue.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>fintech</category>
      <category>ai</category>
      <category>programming</category>
      <category>gnucash</category>
    </item>
  </channel>
</rss>
