All work

Cosmicly

A private reflection journal that turns feelings and context into findings people can save and revisit.

I built and shipped a reflection journal across iOS and Android, owning the experience, Flutter clients, APIs, backend, data, calculations, AI workflows, and subscriptions. I reached store-release readiness in roughly two to four months through 10+ builds, with a tested astronomy engine beneath nine structured AI workflows.

Role
Founder & Product Engineer
Platform
Flutter · TypeScript/Deno · Supabase/PostgreSQL · Vertex AI/Gemini
Status
Shipped on iOS and Android
Period
Nov 2025 to present
Visit Cosmicly (opens in a new tab)
Cosmicly check-in with an unselected list of feelings.
Cosmicly / first-party product interfaceCosmicly's current check-in begins with choosing a feeling.

Project evidence

2–4 months
to store-release readinessApproximate development window across clients, backend, subscriptions, and AI workflows.
10+ builds
on the path to releaseClient and backend behavior verified on the path to iOS and Android release.
9 workflows
schema-constrained text and visionGenerated interpretation layered over deterministic calculations.
5 languages
localized product deliveryShared Flutter clients for iOS and Android.

01 / The experience I built

Build a reflection journey people can save and revisit.

I built Cosmicly as a private reflection journal: a person starts with a feeling, adds a life area and optional situation context, then receives a Finding they can save and return to. I owned that journey together with the clients and services behind it.

I used astrology as an interpretive timing lens for reflection and kept the experience human and legible. The system combines exact sky calculations with structured model output to give each check-in its context.

I made situation details optional so a person could choose how much context to share. I carried that control into the product architecture, with authenticated journal access and Row-Level Security around private data.

02 / The architectural boundary

Keep exact calculations under engineering control.

I built and tested the astronomy engine for planetary positions, charts, and timing calculations, then separated it from the models that generate interpretation. This was a product decision: exact results needed a stable source of truth as the AI experience evolved.

I gave calculations their own tests and model workflows their own contracts, validation, retries, and observability. That separation let me investigate calculation defects and generated-output failures independently.

System model

Deterministic core, probabilistic experience

Exact calculations stay inside a tested boundary. Structured context feeds workload-specific model routing, while a separate recovery lane protects the client from incomplete or malformed output.

Trusted delivery pathExact calculations stay outside the model boundary.
  1. 01Product inputs

    User state, chart inputs, text, and vision

  2. 02Deterministic astronomy

    Tested positions, charts, and timing

  3. 03Structured context

    Calculated facts prepared for each workflow

  4. 04Workload router

    Flash-Lite, Flash, or Pro by task

  5. 05Schema-constrained output

    Validate the response contract

  6. 06Flutter client

    iOS and Android product flows

Recovery laneIncomplete or invalid output is repaired before the client accepts it.
  1. 01Truncation

    Detect incomplete long-form output

  2. 02JSON recovery

    Repair and revalidate malformed output

  3. 03Bounded retry

    Retry with explicit limits and timeouts

  4. 04Regional fallback

    Fail over to a healthy region-aware endpoint

  • Schema-constrained outputTruncationincomplete output
  • TruncationSchema-constrained outputrepair, then validate
  • Schema-constrained outputJSON recoverymalformed structure
  • JSON recoverySchema-constrained outputrepair, then validate
  • Workload routerBounded retrytransient failure
  • Bounded retryWorkload routerbounded retry
  • Bounded retryRegional fallbackendpoint unavailable
  • Regional fallbackWorkload routerhealthy endpoint

Each recovery branch returns to routing or schema validation. Valid output alone reaches the Flutter client.

Blueprint truncation
3,000 to 8,192 tokensThe immediate user-visible defect was fixed at the workflow limit.
Configuration design
One source of truthCentralized model settings prevent silent per-feature drift.

03 / Production LLM workflows

Make nine AI workflows behave like product features.

I designed nine schema-constrained Gemini text and vision workflows around specific product jobs. Prompt and context engineering, guardrails, and orchestration gave each workflow a known response shape the Flutter clients could use.

I routed work across Gemini Flash-Lite, Flash, and Pro according to the workload, with structured-output validation, malformed-JSON recovery, bounded retries, timeouts, and region-aware fallback. Per-feature token and cost observability let me judge reliability and spend at the feature boundary.

04 / Failure is part of the design

Fix the incomplete result and the configuration behind it.

When a long-form blueprint response was cut off, I traced the incomplete user result through the model path and found a workflow still carrying a 3,000-token limit. I corrected it to 8,192 so that workflow could return the full response.

I then centralized model configuration to stop individual features silently retaining inconsistent settings. The investigation became an architectural improvement as well as a fix for the immediate truncation defect.

05 / The product around the models

Take responsibility for the whole product, including billing and release.

I built the Flutter iOS and Android clients together with TypeScript/Deno APIs and a production Supabase/PostgreSQL backend. I owned authentication, Row-Level Security, realtime data, database functions and triggers, versioned migrations, and idempotent subscription webhooks.

I integrated RevenueCat billing, push notifications, analytics, crash reporting, and five-language localization, then built automated backend and client tests and staging/production CI/CD. These were parts of one product whose client, data, model, and subscription behavior had to work together.

I reached store-release readiness in roughly two to four months through 10+ builds and shipped on iOS and Android. The project extended my ownership from native clients into APIs, data integrity, model operations, and paid-product delivery.

Discuss the work

Bring me the next product problem.

I bring product judgment, hands-on leadership, and the engineering depth to take an important problem from the first decision through release. Let’s talk about what you want to build or improve.

Private 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.