Piyush Grover

iOS — Personal Product · Live on the App Store

Shagunly — Tracking Tradition, One Gift at a Time

A private ledger for shagun — the gifts and cash exchanged at Indian celebrations — with a reciprocity engine at its heart. Designed end-to-end in Figma, then built AI-directed without writing code.

Role
Product & design lead — solo founder
Platform
iOS 17+ · SwiftUI · Supabase · Android in development
Status
Live on the App Store ↗
Design & build
Designed in Figma, built AI-directed — zero hand-written code
Shagunly Home screen on iPhone — balance summary and upcoming occasion
Shagunly New Shagun entry screen on iPhone
Shagunly app icon
01Overview

A Culturally-Native Ledger

Shagunly is an iOS app for tracking shagun — the cash and gift exchanges that are a core part of Indian weddings, festivals, and birthdays. Families still track it in paper registers or memory, and generic expense trackers don't understand the reciprocity at its heart — so Shagunly replaces the "who gave what" guesswork with a simple, culturally-native ledger.

The idea came from my father — tech-savvy, and done with the paper registers. He wanted the record off paper and onto a phone, where it could be pulled up in seconds instead of leafed through.

I designed it end to end in Figma — theme, design system, every component and flow — then directed the entire build without writing a line of code. This case study covers both halves: the design decisions, and what it takes to hand a finished design to an AI and ship it.

02Design Process

Insight-Driven, Then a Hard Platform Call

No formal research phase — this was insight-driven design, grounded in lived experience and validated early with family as real users. Every decision got pressure-tested against one question: would my own family actually use this at a wedding?

It began as a progressive web app, but a PWA has real ceilings here — no App Store presence, weaker offline reliability, a second-class feel for something used one-handed on spotty venue wifi. I rebuilt native in SwiftUI: the kind of build-vs-rebuild call a product designer has to own.

Structure came before style. Layout and hierarchy were resolved as greyscale wireframes first — one primary question per screen, direction chosen before amount. The visual language came later, on top of a structure that already worked.

Low-fidelity wireframes — Home, People and New Shagun core screens with structural annotations
Lo-fi core screens — Home, People, New Shagun
03Design System

A Token Set, Not a Pile of Screens

Because I'd be handing this to an AI rather than an engineer, the system had to be unambiguous: every colour, size and spacing step named and fixed in Figma first. Vague intent produces vague code — a defined token set produces the screen you drew. Components followed the same rule, drawn with every state before anything was built.

Two decisions drive the whole palette: a deep night base so celebratory colour can glow without shouting, and a serif display voice that brings warmth to what is, underneath, a money app.

Colour tokens — surfaces, brand and semantic colours, text tokens with hex values
Colour tokens
Type scale — serif display through mono tabular numerals
Type scale — serif display, mono numerals
Button components — primary gradient with default, pressed and disabled states, secondary and contextual variants
Buttons — all states
Auspicious amount chips in default and selected states
Auspicious amount chips
04Key Screens & Flows

Calm by Default, Fast Mid-Celebration

Five screens carry the whole app: Home, People, Occasions, entry detail and capture. Logging a shagun takes seconds — given or received, an auspicious preset, a person, an optional occasion.

Shipped as a responsive iPad layout too — same flows, adapted to a wider canvas rather than stretched. Explore both below.

Shagunly iPhone Home screen — balance summary, upcoming occasion, recent entries Shagunly iPhone People screen — relationships with running balance and whose turn it is Shagunly iPhone Occasions screen — upcoming and past occasions Shagunly iPhone New Shagun entry form — amount, person, date, occasion
Shagunly iPad Home screen, adapted for a wider layout Shagunly iPad People screen Shagunly iPad Occasions screen Shagunly iPad New Shagun entry, shown as an overlay panel

The home screen surfaces what matters first: net balance, the next occasion needing a gift, and recent activity. Every relationship is a running balance, not a transaction log — a glance tells you whose turn it is. Occasions split into Upcoming and Past, each carrying its own gift-tracking status — drilling into one totals what was given and received, and lists every gift logged against it. Logging a shagun takes seconds: given or received, an auspicious-amount preset, a person, and an optional occasion link.

05Decisions

The Calls Behind the Screens

Every screen is the survivor of options drawn out in Figma. The calls that mattered:

01 Auspicious presets

Shagun amounts end in ₹1 by convention, so ₹501 / ₹1,100 / ₹2,100 sit above the keyboard — the culturally correct amount is one tap.

02 Relationships, not ledgers

Each person is a running balance with a “your turn / their turn” cue. Shagun is reciprocity, not bookkeeping.

03 Direction first

Received / Given is the first, colour-coded choice — it’s the meaning of the transaction, and it frames every field after it.

04 Calm read, deliberate edit

Detail views are read-only; editing hides behind a pencil tap. Most opens are checks — and a crowded function is no place for an accidental edit.

05 Flipping the book

Host Dad’s 60th and gifts flow toward you — marking an occasion “my family’s” flips the whole app to logging gifts received. One boolean, every screen rethought.

06 One book per family

A household shares one gift book by code. Only an entry’s author can edit — everyone else can ask — enforced in the UI and again in Postgres row-level security.

07 Privacy as the product

No analytics, no ads, no tracking. Export everything in two taps; delete removes it all atomically.

The alternates, side by side

Exploration — plain numeric field versus auspicious amount presets
Plain field vs auspicious presets
Exploration — transaction log versus running relationship balance
Transaction log vs running balance
Exploration — editable by default versus calm read-only detail
Editable by default vs calm read state
Exploration — amount-first capture versus direction-first capture
Amount first vs direction first
06Handoff

Figma → Spec → AI Build

This is the join between the two halves of the project. I redlined each screen in Figma the way I'd spec it for an engineer — component, size, radius, token, state, edge case — and that spec became the brief for the build.

The discipline mattered more here than it would with a human engineer: a person asks when something's ambiguous, an AI just picks. Anything I left vague came back as something I didn't design, so the spec had to carry the decision, not just the look.

Design decided in Figma. The build followed the spec.

Annotated redline spec of the New Shagun sheet — component sizes, radii, token references and state rules
Redlined spec — the New Shagun sheet, as handed to the build
07Building It

Directing the Build, Not Designing in Code

I have no coding background. Every screen, flow and backend interaction was built by directing Claude against the Figma spec — describing intent, reviewing output, iterating — the same way I’d direct an engineer. I thought in components and states, not SwiftUI structs.

What that produced, not just prototypes: a working auth system with a real forgot-password flow on Supabase, a read/edit view architecture wired into the app’s root navigation, and a build that cleared Beta App Review and then full App Review — tested on TestFlight with family as real external testers along the way.

Shagunly sign-in screen — email/password with Apple and Google sign-in
Shipped auth — email/password, Apple & Google sign-in
Shagunly app icon — default appearance
Default
Shagunly app icon — dark appearance
Dark
Shagunly app icon — tinted appearance (iOS 18 icon tinting)
Tinted

The bugs that mattered were the quiet ones

Swift’s synthesized Encodable omits nil keys, so clearing a photo or a note silently survived in Postgres — the classic PATCH-semantics trap. Fixed with explicit payloads that write SQL NULL on purpose, now across all five mutating tables.

These aren’t things I coded. They’re things I had to understand well enough to direct.

08Reflection

Product Judgment, End to End

The interesting decisions weren’t about corner radii. Rebuild native or stay web? Strip the paywall or protect revenue during validation? Ship a calm read-only view or a noisier editable one?

Directing an AI didn’t replace design thinking — it removed the bottleneck between making a decision and seeing it live in a real, installable product. The same person who decided what to build also shipped how it works.

Shagunly is out in the world. Get it on the App Store ↗

Next: calendar sync, widgets, a shareable Wrapped card, per-relationship insights, Hindi localisation — and Android, already scaffolded in Flutter on the same backend.