JM
All projects

Jarbas

A native iPhone personal assistant with a butler persona that connects your bank, health and location data and uses a language model to turn it into active care: it organizes your finances on its own and only speaks when it has something useful to say.

2026 · iOS

Credits

Product and design
Josue Macedo
iOS and backend development
Josue Macedo
ToolsSwiftUI · SwiftData · Supabase · Pluggy · Claude API · ElevenLabs · HealthKit · MapKit · Figma · Claude Design · Claude Code

Context

Jarbas is a native iPhone personal assistant with a butler persona that connects the three layers of data that already exist in anyone’s life: the bank statement (via Open Finance), the watch’s health data (Apple Health), and the places you go (geolocation). A language model turns that into active care: it organizes finances on its own, tracks life goals, and nudges at the right time and place.

It grew out of a personal project with a question behind it: what would an app look like if it were designed from scratch assuming a language model sits at its core, as the engine that categorizes, names, decides and talks, instead of a chatbot tucked into a tab. It’s also a method experiment: I built the whole app in pair with AI, from the backend to the design system, and part of the case is that development experience.

Challenge

Personal finance apps make the user do the work: categorize, rename “PIX RECEBIDO CP :60701190” into something readable, flag what’s a subscription, remember to open the app. Habit apps live in another silo, and voice assistants know nothing about your real life. The result is that everyone drops off.

The data for a real assistant already exists, bank, watch and location, but no product crosses the three. The opportunity was to flip the load: instead of the user feeding the app, the app understands on its own and only speaks when it has something useful to say.

Process & decisions

The first rule was to never duplicate the iPhone. If Jarbas did something identical to what iOS already does, or asked the user to hand-enter data that already lives in a system screen, it would be useless. That cut entire features, from a plain reminders list to screen-time control by manual input, and forced the right native integrations: HealthKit with background delivery, geofencing and contextual notifications.

Proactivity with no brake becomes spam, and spam gets you deleted. Jarbas’s brain runs non-negotiable rules (silence overnight, at most three nudges a day) and decides in two layers: a cheap model judges whether it’s worth interrupting, a strong model decides what and how to say it. Most evaluations end in silence, and that’s a feature, not a failure.

That layering carries over to cost. Each task uses the smallest model that can handle it: the cheap one does the batch enrichment of transactions (title, category, emoji), the mid-tier one handles conversation, and the strong one steps in only as the judge of interventions. That keeps operating cost negligible without sacrificing quality where the user feels it.

No heuristic goes it alone. Every automatic decision the system makes, whether something is a subscription, a debt, or the store’s name, has a one-tap manual override. AI gets things wrong, and the design owns that in the interface instead of hiding it. Some trade-offs were deliberate: the strict definition of a subscription (same charge, same amount, same day) kills false positives but delays detecting new ones, which the manual flag solves; and since free Open Finance syncs about once a day, I designed the app for cycles, not real time.

Conversation is the interface, and voice is a mode of it. That’s where the app learns: the entire onboarding is a dialogue that pulls out routine, goals and memories. Voice and text are the same conversation in different modes, with an on-device TTS fallback when the remote one fails. And Jarbas has its own writing rules, it talks like a person, without assistant jargon.

How I led it

A solo project, end to end: product, design (a mockup before every screen and a custom neumorphic design system), iOS development and backend, all in pair with AI through the whole cycle, with Claude Code as a copilot for architecture, code and review. The first version came out of a spec-driven process, the spec before the code; once it was solid, I moved to a vibe-coding posture for improvements and evolution. The method is part of the result: one person can take a product of this scope to production when AI is in the execution, not just in the conversation.

Outcome

It’s in active development and running in personal production, in my daily use as user zero, with real data from two banks. At this stage, the AI has already named and categorized around 700 places on its own, and operating cost sits in the range of cents a day.

The biggest lesson so far is that a product with AI at its core is 20% prompt and 80% reliability engineering: retry, fallback, output validation, manual override. The second version of almost every feature came out of a real model error in the first.