Cheria: Making Gift Exchanges Feel Personal Again
Category: Apps for Your Life
Most Secret Santa apps just draw names and stop there. But that's exactly where the real challenge starts: understanding the person you got, remembering their tastes, picking something meaningful, and staying within budget.
Cheria handles the entire gift-exchange journey, from a secure draw to finding a gift that actually fits the person behind the name.
Inspiration
Gift exchanges are supposed to be about connection, but they usually turn into messy spreadsheets, endless tracking messages, forgotten preferences, and last-minute generic gifts.
Current apps handle the logistics fine, but they completely miss the creative part of giving. I wanted to solve a different problem:
What if the draw were only the beginning?
That's how Cheria started: a mobile experience where users can organize exchanges, set their preferences, get smart gift inspiration from Lia, validate ideas, and keep the memories afterward.
What it does
- Create or join an exchange through a private invitation link.
- Configure dates, budgets, rules, exclusions, and draw behavior.
- Build a detailed gift profile with interests, hobbies, styles, sizes, collections, restrictions, and personal notes.
- Run a secure, server-authoritative draw that avoids self-assignments and respects custom exclusions.
- Get gift ideas from Lia based on the recipient's profile, wishlist, exchange context, and budget.
- Validate gift ideas using Match with Lia via text or photos.
- Create a shared memory mural and export a story-ready image after the exchange.
Lia is built to assist the thought behind a gift, not to replace it. When there isn't enough context, Cheria highlights the uncertainty, identifies what's missing, and asks clarifying questions instead of making wild assumptions.
More than a random shuffle
For a participant set \(P\), Cheria finds an assignment permutation \(\pi : P \rightarrow P\) subject to constraints such as:
$$ \pi(i) \neq i $$
$$ (i,\pi(i)) \notin E $$
Here, \(E\) contains organizer-defined exclusions. Previous assignments are also considered to reduce repeated pairings across editions. If history makes a complete draw impossible, older historical restrictions can be relaxed while manual exclusions remain strict.
The algorithm runs completely on the backend, ensuring participants can't inspect or bypass assignments from the client side.
How I built it
Cheria is built with Flutter and Dart for both iOS and Android, following a Feature-First Clean Architecture with Riverpod for state management and Freezed for immutable models.
The backend relies on Firebase for authentication, Firestore, Cloud Functions, Cloud Storage, push notifications, and App Check to enforce server-side operations.
The engineering includes:
- Secure invitation links.
- Scheduled and manual draws.
- Private gift profiles and wishlists.
- Structured AI responses.
- Multimodal gift evaluation.
- Idempotent usage ledgers.
- Subscriptions and consumable purchases.
- Transaction restoration and reconciliation.
- Refund and revocation handling.
- Firestore and Storage security rules.
- Platform-specific iOS and Android behavior.
Cheria is a fully functioning product with authentication, persistence, navigation, localization, robust loading/error states, backend enforcement, monetization flows, and recovery from partial operations.
Development with Codex
Every phase of Cheria was developed collaboratively through Codex.
The pre-Build Week foundation was built with Codex powered by GPT-5.5. When GPT-5.6 became available, I moved the same engineering workflow to Codex powered by GPT-5.6.
Cheria existed before OpenAI Build Week, so I set commit 84e2a1d from July 12 as the baseline. The new extension work starts from 364b6e3, committed on July 13 after the official submission period opened.
What I extended during Build Week
| Date | Commit | Build Week contribution |
|---|---|---|
| July 13 | 364b6e3 |
Stabilized purchase restoration, subscription management, frontend refresh, and Exchange Plus purchase states. |
| July 15 | 1be8b7c |
Hardened App Store transaction validation, completion, retries, reconciliation, and introductory-offer handling. |
| July 16 | 81724a3 |
Extended production AI integrations, purchase recovery, account-language synchronization, and tested one-time purchase flows. |
| July 17 | 6a215f2 |
Added a profile-aware local fallback engine and improved resilient AI and iOS interactions. |
| July 17 | 152d6b7 |
Added Premium Fast, Direct, and Deep modes, centralized model routing, optimized AI context, aligned quota costs, and expanded routing tests. |
| July 17 | a3cdf0d |
Ignored generated Kotlin cache files to keep Android build artifacts out of the repository. |
| July 18 | bfbf9f6 |
Refined Exchange Plus and account profile flows, added birth-date persistence, improved exchange detail UI, updated localized copy, and expanded tests. |
| July 18 | d8d98a6 |
Added platform-adaptive date pickers and integrated them across account settings, exchange creation, and exchange detail flows with widget tests. |
| July 18 | 9b4ca46 |
Polished invitation and wishlist flows, improved notification/dialog behavior, refreshed the web entry point, and added wishlist AI suggestion coverage. |
| July 20 | 7e29ce2 |
Added AI-powered exchange preset templates, customizable preset flows, improved secret-draw responses, refined Lia usage/copy, beta polish, and expanded regression coverage. |
This work meaningfully extended the pre-existing product in AI control, resilience, purchase reliability, iOS production readiness, exchange creation templates, wishlist polish, beta readiness, and regression coverage.
How I collaborated with Codex and GPT-5.6
I treated Codex as a true engineering collaborator, not just a simple code generator. A single feature often required touching Flutter state, Cloud Functions, Firestore rules, StoreKit, and syncing everything with the UI asynchronously.
My workflow was highly iterative:
- I defined the intended product behavior and constraints.
- Codex traced the current implementation across layers.
- We identified failure modes, race conditions, and security boundaries.
- Codex implemented scoped changes using the existing architecture.
- I tested the real product and challenged the results.
- Codex ran static analysis, targeted tests, and regression checks.
- We reviewed the final diff and corrected inconsistencies.
I stayed fully responsible for all product decisions—like how Cheria should feel, what context Lia can access, how quota limits work, and what features belong to Premium users or individual exchanges.
Challenges I faced
Securing the draw
Organizers need to manage the group without seeing who got who. This required strict relationship-based rules and a 100% backend-authoritative draw.
Personal AI without overreaching
Getting valid JSON back isn't enough. The recommendations must strictly respect preferences, budget limits, exclusions, and handle missing context without making wild assumptions.
Balancing quality, latency, and API cost
Premium users can switch between Fast, Direct, and Deep modes. Each one is a deliberate tradeoff between speed, depth, and cost, packaged cleanly without exposing raw model settings to the user.
Handling complex purchase lifecycles
In production, transactions get tricky—they can be pending, restored, renewed, refunded, or finish after an app restart. Building a reliable system required fully idempotent logic to sync the stores, our backend, and the UI.
Extending an existing product honestly
Because Cheria predates Build Week, the work completed during the event needed to remain clearly distinguishable and verifiable through dated commits and Codex sessions.
What I learned
I learned that great AI isn't about automating the whole experience. It's about giving users better tools to make their own decisions.
Also, raw model power is only half the battle. Context, latency, strict JSON structures, error handling, and cost control matter just as much for a real product.
Working with Codex reinforced another lesson: it becomes most valuable when it receives clear product intent, architectural constraints, and a reliable way to verify its work. The strongest results came from collaborating through implementation, testing, review, and repair.
Accomplishments I am proud of
I'm proud that Cheria feels like a polished consumer product, not just an AI wrapper built for a demo.
It combines:
- A real collaborative use case.
- Non-trivial assignment and privacy logic.
- Personalized and multimodal AI assistance.
- Production-oriented backend security.
- Cross-platform purchase-state handling.
- A polished mobile experience.
- A clear emotional purpose.
Most importantly, the technology supports the human goal instead of replacing it.
What’s next
Next up is launching Cheria's first closed beta with families and small groups. That real-world data will help fine-tune the recommendation quality, UX, latency, and where Lia needs better context.
My long-term goal is for Cheria to become more than a Secret Santa organizer.
I want it to become the place people use whenever they want to say:
I thought about you.
Log in or sign up for Devpost to join the conversation.