Cosmicly
A multimodal AI product built on deterministic ground truth.
A production Flutter product spanning iOS and Android clients, Supabase/PostgreSQL services, and Vertex AI/Gemini workflows. Its central architectural decision was to keep astronomy calculations deterministic while using schema-constrained models for the text and vision experiences built around them.
Visit Cosmicly
Project evidence
- 9
- schema-constrained AI workflowsText and vision workflows layered over deterministic calculations.
- 3
- workload-specific model tiersGemini Flash-Lite, Flash, and Pro.
- iOS + Android
- production Flutter clients
- End to end
- product ownershipClient, backend, AI workflows, testing, and production delivery.
The architectural boundary
Facts should not depend on a model deciding to be consistent.
Planetary positions, charts, and timing calculations have deterministic answers. I built and tested an astronomy engine for that work, then kept it separate from the probabilistic layer that creates explanations and multimodal product experiences.
That boundary made each side easier to reason about: calculations could be tested as calculations, while model behavior could be constrained, observed, retried, and evaluated as model behavior.
Production LLM workflows
Nine workflows, each with a bounded job and a known shape.
I layered nine schema-constrained Gemini text and vision workflows on top of the deterministic engine. Structured outputs gave the clients a contract and kept generated content from leaking into the parts of the product that required exact computation.
The workflows used prompt and context engineering, guardrails, and model orchestration rather than treating every request as the same generic completion.
System map
Deterministic core, probabilistic experience
Exact astronomy calculations remain a tested source of truth. Constrained model workflows interpret that data, while routing and recovery protect the client from model and regional failures.
- 01User and chart inputs
Product state · text · vision
- 02Astronomy engine
Deterministic positions, charts, and timing
- 03Structured context
Calculated facts prepared for each workflow
- 04Model router
Flash-Lite · Flash · Pro
- 05Reliability layer
Schemas · retries · fallbacks · recovery
- 06Flutter experience
iOS and Android product flows
- User and chart inputs connects to Astronomy engine.
- Astronomy engine connects to Structured context.
- Structured context connects to Model router.
- Model router connects to Reliability layer.
- Reliability layer connects to Flutter experience.
First-party product material
Cosmicly, in product.


Failure is part of the design
Route by workload, bound every retry, recover what is recoverable.
The production reliability layer routes work across Gemini Flash-Lite, Flash, and Pro. It includes region-aware fallbacks, bounded retries and timeouts, truncation handling, malformed-JSON recovery, and cached authentication.
Per-feature token and cost observability makes model use visible at the product boundary, where reliability and spend can be judged feature by feature.
The product around the models
Authentication, data, subscriptions, notifications, and release paths all had to hold together.
I built the production Supabase/PostgreSQL backend with Row-Level Security, realtime data flows, database functions and triggers, version-controlled migrations, and TypeScript/Deno Edge Functions.
The broader delivery included authentication, subscriptions, push notifications, localization, idempotent subscription webhooks, automated backend and client tests, and staging/production CI/CD.
Private production code
About the source code.
The production repository is private. I'm happy to walk through relevant source code, architecture, testing strategy, trade-offs, and implementation decisions during a technical interview.