Inspiration

Vesper started from a simple problem I kept having every payday.

I would open my Notes app, list my bills, credit-card dues, and loan payments, then use a calculator to check how much money was left. I had to repeat the same process every month just to answer one question: how much can I safely spend?

I wanted a better way to do this, but I did not want to rush a finance app. The numbers need to be correct. Bills, due dates, loan balances, payment schedules, and account balances are all connected. One wrong calculation can make the whole app hard to trust.

I also wanted my financial data to stay private. I did not want to connect my bank accounts or depend on a server just to check my budget.

That is why I built Vesper. It gives me one place to check my upcoming payments, loan balances, bills, and available money. I built it first for myself, and I now use it regularly to plan my finances.

What it does

Vesper is a private, offline-first budget and expense app.

It helps users:

  • Track accounts, income, expenses, transfers, and categories
  • Add and manage recurring bills
  • Track expected income
  • See upcoming and overdue payments
  • Track regular loans and credit-card installments
  • View remaining loan balances and payment progress
  • Check credit-card cutoff dates, due dates, and balances
  • See how upcoming payments affect Safe to Spend
  • Create local backup files
  • Use optional AI-assisted input without making AI required for the main app

Vesper does not connect to bank accounts or move money.

The main goal is to make financial information easier to understand, especially for people who already track their money manually using notes, calculators, or spreadsheets.

How I built it

Vesper is a solo project, but I did not build it without help.

I handled the product direction, project setup, architecture, UI and UX decisions, testing, review, mobile setup, store preparation, and release. I used ChatGPT for planning, product decisions, and edge cases, while Codex helped implement most of the code. My wife also helps with the testing and design decisions.

Vesper is built with Next.js, React, TypeScript, Capacitor, Zustand, and SQLite.

SQLite is the local source of truth. Important features such as transactions, bills, credit cards, loans, installments, and payment schedules work directly on the device. The app does not need a remote server or a constant internet connection for its main features.

I separated the app into UI components, state management, services, and SQLite repositories. I did this so the financial rules would not be placed directly inside the screens and become harder to maintain.

Codex became a major part of my development process. I would first explain the feature, rules, limits, and expected result. Codex would help with implementation, testing, refactoring, and finding issues in the code.

After that, I would review the changes, run the app, test real examples, and check if the result matched what I wanted. When something was wrong or unclear, I would update the instructions and repeat the process.

I also used ChatGPT for product planning, UX decisions, edge cases, writing, debugging ideas, and visual assets.

Vesper already existed before OpenAI Build Week. The loans and installments module was also already started before the event.

During Build Week, I focused on improving and making that part of the app more reliable.

I improved the loan payment flow so a payment can also record which local account it came from. I updated loan summaries to include credit-card installments and their due dates. I also improved how overdue items appear in Upcoming and made the dashboard and loan screens easier to understand.

I added and improved automated tests for loan payments, generated payment schedules, installment-principal calculations, dashboard values, and loan state management.

I also made other smaller improvements, including bill auto-recording, backup summaries, and animated currency values in some dashboard and planning sections.

Challenges I ran into

The hardest part was not building the screens. It was making sure the numbers stayed correct.

A payment can affect several parts of the app. For example, paying a loan can change the account balance, remaining loan balance, payment history, progress, next payment, and dashboard totals.

Credit-card installments were also difficult because they are connected to statement cycles, due dates, card balances, and loan progress. And not all banks has the same computation or offers on every loan.

Date handling was another challenge. An item can be due today, overdue, due later this month, or due early next month. The app needs to show enough information so the user can prepare, but it should not make the screen too busy or confusing.

Offline-first development also added more work. Since the app does not depend on a server, database migrations, calculations, backups, and other important flows need to work properly on the device.

Another challenge was using AI without depending on it too much. Codex helped me build faster, but I still needed to review every important change. It can write code, but it does not always understand the full product rule unless I explain it clearly.

Accomplishments that I'm proud of

I am proud that I was able to build and release Vesper by myself.

It started as a small idea to replace my payday notes and calculator, but it grew into a full app with accounts, transactions, bills, income, credit cards, loans, installments, upcoming payments, backups, and Safe to Spend calculations.

I am also proud that the app works offline and keeps the main financial data on the device.

Releasing it on both Android and iOS was another big accomplishment for me. Building the features was only one part of the work. I also had to handle mobile packaging, testing, database migrations, security, store screenshots, descriptions, privacy details, and release preparation.

Most importantly, Vesper now solves the problem that made me start the project. I can open the app and quickly check what I need to pay, how much is left on my loans, and how much money I can still use.

What I learned

I learned that AI-assisted development works best when it is used as a back-and-forth process.

The results were better when I gave clear rules, examples, limits, and expected behavior. It was not enough to ask Codex to build a feature and accept the first result.

I still needed to review the code, test the app, check real cases, and correct anything that did not match the product.

I also learned that finance apps become complicated very quickly. Even a simple action like marking something as paid can affect many parts of the system.

Because of this, clear rules and automated tests became more important as the app grew.

I also learned that solving my own problem is a good starting point, but other users may not understand the app the same way I do. The labels, explanations, empty states, and summaries are also important, not only the calculations.

What's next for Vesper: Budget & Expense

My next focus is improving reliability, clarity, and the overall user experience.

I want to continue improving loan and installment tracking, upcoming payment planning, notifications, and the way the app explains balance and schedule changes.

I also want to add more automated tests for financial calculations and database migrations.

Another goal is to improve onboarding so new users can understand the app faster and set up their first accounts, bills, and loans without feeling lost.

In the future, I may also explore optional encrypted sync and shared spaces. These features would remain optional because I still want Vesper to keep its offline-first and privacy-focused setup.

The main goal will stay the same: help users understand their money and upcoming payments without needing bank access, constant internet, or giving up control of their financial data.

Built With

Share this project:

Updates