# Fintal: Personal finance insights from bank exports, without bank passwords

Side project · Live · Jordão Qualho, Senior Software Engineer

> A personal finance dashboard built on bank CSV exports instead of bank logins. Imports Nubank, C6 and Wise statements, categorizes spending and tracks installments, subscriptions and budgets.

Technologies: Next.js, TypeScript, NestJS, Tailwind CSS, Radix UI, Vitest, Playwright

Live: https://fintalapp.vercel.app

## Overview

Fintal is a privacy-focused personal finance app. Instead of asking for bank credentials, it imports the CSV exports banks already provide, organizes transactions, installments and subscriptions, and turns them into a dashboard of trends, budgets and diagnostics.

## What it does

- CSV import with automatic format detection for Nubank, C6 Bank and Wise (including multi-currency ZIP exports), and column mapping for other banks.
- Automatic categorization, with custom categories.
- Accounts and cards, and a transaction list with search, filters, bulk edit and infinite scroll.
- Installments and subscriptions tracked as recurring spend.
- A dashboard with a financial health score, month-over-month charts, an intensity heatmap and category breakdowns.
- Privacy mode that blurs every monetary value in the app, toggled from the header or with P.
- Command palette (⌘K) and global keyboard shortcuts, guided onboarding missions, and an installable PWA.

## How it's built

- No bank login: data enters only through files the user exports, parsed by bank-specific detectors with a generic column-mapping fallback.
- Privacy mode is a React context persisted in localStorage. It sets a data attribute on the document, and a PrivacyAmount wrapper applies the blur in CSS, so any amount on any screen can be hidden consistently.
- Theme preference (light, dark or system) is applied by a boot script before first paint, and Tailwind runs in class mode so the app's choice wins over the operating system's.
- The Next.js App Router frontend talks to a NestJS API. Sign-in uses Google OAuth with JWT.
- Quality gates: ESLint, Prettier, Vitest unit tests and Playwright end-to-end tests, with Husky running lint, type-check and a full build before every push.

---

Canonical: https://jordaoqualho.com/projects/fintal/ · Full profile: https://jordaoqualho.com/llms-full.txt · Contact: jordaoqualho@gmail.com
