🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
🔧 AI Nachrichten ChatGPT automatically logged out [Fix](12.09.2026 um 17:09 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
🪟 Windows TippsServertimeout in Outlook über 10 Minuten verlängern(12.09.2026 um 15:10 Uhr)
🪟 Windows ServerSchatten-KI: Verborgene Sicherheitsrisiken minimieren - BornCity(13.09.2026 um 00:31 Uhr)
🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
🔧 AI Nachrichten ChatGPT automatically logged out [Fix](12.09.2026 um 17:09 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
🪟 Windows TippsServertimeout in Outlook über 10 Minuten verlängern(12.09.2026 um 15:10 Uhr)
🪟 Windows ServerSchatten-KI: Verborgene Sicherheitsrisiken minimieren - BornCity(13.09.2026 um 00:31 Uhr)

🔧 Programmierung 🕛 vor 3 Monaten 3 Min Lesezeit
0

How I built a desktop budgeting app with Flask, SQLite, and Chart.js

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

I'm a finance student, not a CS major. Last year, I realized I was paying $180 annually to a budgeting app. So I decided to build my own. Here's how it went.






Why a Desktop App?



I wanted three things:




  • No cloud. My financial data stays on my machine.

  • No subscription. Pay once, use forever.

  • No setup. Double-click and it works.



A local web app (Flask + browser) checked all three boxes.






The Stack
































Layer Technology
Backend Python + Flask
Database SQLite
Frontend HTML, CSS, vanilla JavaScript
Charts Chart.js
Packaging PyInstaller


I chose Flask because it's lightweight. SQLite because it's zero-config. Chart.js because it looks great out of the box.






What the App Does




  • Monthly budget with auto-generated bar and pie charts

  • Daily transaction tracking with keyword-based category matching

  • Multi-currency support with real-time exchange rate preview

  • Savings goals with progress bars and milestone celebrations

  • Subscription manager with billing countdowns

  • Debt payoff comparison (Snowball vs Avalanche)

  • Asset and liability tracking for net worth overview

  • Full bilingual support (English and Chinese)






The Architecture



The app runs a local Flask server. On startup, it opens the user's browser automatically. All data lives in a single database.db file next to the executable.



Here's a simplified view of the project structure:



budget_tracker/

├── app.py

├── models.py

├── routes.py

├── templates/

│ ├── base.html

│ ├── index.html (dashboard)

│ ├── budget.html

│ ├── transactions.html

│ ├── annual.html

│ ├── savings.html

│ ├── subscriptions.html

│ ├── debt.html

│ ├── assets.html

│ └── settings.html

├── static/

│ ├── css/style.css

│ └── js/

│ ├── charts.js

│ └── app.js

└── database.db






Key Design Decisions



1. Keyword Auto-Categorization



Users can set rules in Settings. Type "Starbucks" in the note field, and the category auto-fills to "Food." This is done with a simple dictionary lookup, no AI required.



2. Multi-Currency Handling



The Settings page stores exchange rates. When a user logs a transaction in EUR, the app converts it to their base currency (e.g., USD) in real time. The converted value is stored in a separate base_amount column.



3. Proactive Alerts



The dashboard auto-refreshes every 30 seconds via AJAX. If a budget category exceeds 80%, the card turns red. If a subscription bill is due within 7 days, it shows a countdown. No user action needed.






Packaging with PyInstaller



The final step was turning the Python project into a single .exe file:



pyinstaller --onefile --add-data "templates;templates" --add-data "static;static" app.py



The output is about 21 MB. Users download, unzip, double-click, and their browser opens automatically. No Python, no pip, no terminal.






What I Learned





  • Start simple. My first version was just a budget table and a transaction log. I added features one by one based on my own needs.


  • SQLite is enough. For a local single-user app, you don't need PostgreSQL.


  • Chart.js is wonderful. Responsive, customizable, and the CDN link is all you need.


  • Ship before you feel ready. I wanted to add bank sync and a mobile app. Instead, I launched with what I had. Glad I did.






Try It



Fortune Desk is available on itch.io for a one-time purchase. No subscription, no cloud, no accounts.



If you're a developer thinking about building your own tool — do it. The skills you gain are worth more than any app you'll replace.

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
The Gemini desktop app is now available for Windows
1 Quelle
ChatGPT automatically logged out [Fix]
1 Quelle
Windows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten How I built a desktop budgeting app with Flask, SQLite, and Chart.js

Thematisch verwandte Begriffe: built, desktop, budgeting, with · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...