paiseh apps.paiseh.sg
← All apps

Gift Guide SG

On-device gift picking for Singapore

Answer a short set of questions, set a budget in SGD, and get three concrete, locally-buyable suggestions — filtered for cultural and dietary landmines. No accounts, no server, nothing leaves the device.

Status
Both platforms implemented
Platforms
iOS · Android
Role
Spec, design and build
Source
PaisehSG/giftr (private)
What it does
Runs on the device Apple Foundation Models on iOS, Gemini Nano on Android. No accounts, no server, nothing leaves the phone.
Shows its workings A drawer lists what was ruled out and why — clocks, sharp objects, the wrong flowers — which turns out to be the part people trust.
One shared contract Both native apps read the same question set, design tokens and prompt contract, so the two platforms can't quietly drift apart.

Buying a gift in Singapore has failure modes that a generic recommender doesn’t know about. Clocks, sharp objects, certain flowers, anything containing pork or alcohol for the wrong recipient — get one wrong and the gift is worse than no gift. Gift Guide SG encodes those as rules.

You answer eight short questions about the person, set a budget, and get exactly three ranked suggestions — plus a drawer showing what was ruled out and why, which turns out to be the part people trust. A returning user reaches results in three taps.

Everything stays on the device. No accounts, no server, no sync.

How it’s built

A native monorepo. Both iOS (SwiftUI) and Android (Kotlin + Jetpack Compose) are fully implemented, and both generate gift ideas on-device — Apple Foundation Models on Apple Intelligence hardware, Gemini Nano via the ML Kit GenAI Prompt API on supported Android flagships.

The interesting constraint is keeping two native apps from drifting apart. One shared/ directory is the single source of truth: questions.json and design-tokens.json for the flow and the look, and a written prompt contract covering the system instructions, the per-answer checklist of rule lines, the output shape, and the app-side post-filter backstop. The native GiftPrompt and GiftPostFilter units on each platform mirror that document line for line, and drift between them is treated as a bug rather than a fact of life.

The question flow is loaded at runtime from Firestore, so the questionnaire and budget tiers stay identical across both platforms without shipping a client release.

No fallback, on purpose

Generation only runs where the on-device model is genuinely available. Anywhere else the app shows a plain notice instead of silently degrading to a canned catalogue — recipients, gift history and settings all keep working regardless.

On iOS, guided generation enforces the output shape structurally. Android has no equivalent, so the prompt appends a JSON schema sketch and a few-shot example, and the post-filter catches what slips through.

The screens

All eight from the spec: a launch note about on-device storage, a home screen of saved recipients with a Peranakan-tile header, the eight-step question flow with visible progress and back-without-losing-answers, an ang-bao reveal animation while generating (respecting reduced-motion), the three results with their ruled-out drawer, a gift detail with rationale and lead time and a sold-out backup, a recipient profile with gift-history timeline, and settings with JSON export and clear-all.

Scope

Version one is deliberately narrow: no accounts, no checkout, no live price or stock, no sharing, Singapore only.