Skip to main content
Journal

From single user to multi user: Pulso’s Postgres cutover

Turning a single-user app into a multi-user one is mostly not an authentication problem. Pulso, my watch collection tracker, had working accounts, magic-link sign-in and real sessions for days before I noticed that every route behind that login still read and wrote one shared file. The gate was real. Everything behind it was not. The practical version of that sentence:…
Yeison Ospina
August 10, 2026
Build Log

Pulso got a ceiling, an outbox and a delete button

Pulso now runs under a global monthly AI spend ceiling of $50, sends its own transactional email through Resend, and lets anyone delete their account and everything in it without asking me. Those were the three things that had to exist before I invited a single person off the waitlist. The ceiling is the one I care about. Credits already…
Yeison Ospina
August 7, 2026
Journal

Getting CPadel ready to launch

Getting CPadel ready to launch CPadel has been sitting in pre-launch mode for a while -- brand assets decided, a deposit paid, a tracker retired in favour of Orbit. This stretch was mostly the unglamorous work of getting the details right before anything goes live: deciding which of two near-identical logo files is actually canonical, reconciling exactly when the deposit…
Yeison Ospina
August 7, 2026
Build Log

Pulso’s iOS tab bar was fighting the system

Pulso's iOS app now uses a stock SwiftUI TabView instead of the custom tab bar it shipped with, which is what finally let Liquid Glass read the way it is supposed to. I had assumed the glass was missing. It was not. It was there and smothered, under an opaque pill, a hard white rim and a heavy shadow, and…
Yeison Ospina
August 5, 2026
Build Log

Pulso got a price, and your own collection is not part of it

Pulso now runs on a credits ledger: 25 one-time lookups when you first use it, and adding watches you already own is free, however many you have. The app moved onto per-user Postgres on 3 August, every route scoped to the signed-in user, and that unlocked the part that had been waiting behind it: deciding what actually costs something. Research…
Yeison Ospina
August 5, 2026
Build Log

Pulso stopped being a single-user app

Pulso now has real user accounts. As of 3 August it signs people in through Supabase Auth with email and magic links, and all seven collection tables in Postgres are scoped by user_id behind row-level security, which replaces the single shared token that had been standing in for a login since the app was built for exactly one person: me.…
Yeison Ospina
August 5, 2026
Journal

Per-User AI Limits: Making a Personal App Multi-User

Pulso, my watch collection app, had an AI budget that any one user could spend on behalf of everyone else. I found it on 30 July while wiring up the chat advisor, and fixing it turned into the actual work of the week: making an app I built for exactly one person safe for a second one. The bug was…
Yeison Ospina
August 5, 2026
Build Log

The SEO fields Pluma was writing and never actually sending

Pluma has been writing a target phrase and a meta description for every post since the Build Log went live, storing both in Supabase, and doing absolutely nothing with them. Yoast never saw them. WordPress never saw them. They sat in a column called seo_notes, which is a very reassuring name for a field that was, functionally, a diary. What…
Yeison Ospina
August 2, 2026