Case Study · Side Project · LLM

GraceMind — AI Journaling App

LLM-powered journaling and mindfulness app with guided prompts and a reflective AI assistant.

Role: Solo · Mobile (iOS + Android) · Stack: Flutter · Firebase · REST APIs · LLM integration

The core loop: a guided prompt, the user's reflection, and a careful LLM response that asks instead of advises.

The Problem

Most journaling apps treat the page as a passive surface — you write, it stores, and the only intelligence is in the search box. I wanted to see how an LLM could turn the prompt-and-reflection pattern into something closer to a conversation, without slipping into therapist territory or pretending to be one.

The harder part is what an LLM should not do here. It can't diagnose, it shouldn't escalate emotional states, and it shouldn't give advice. It should ask another question.

The Solution

A Flutter cross-platform app with Firebase for authentication and storage, and a REST API gateway in front of the LLM. The app talks to the gateway, never directly to the model — the gateway is where prompt construction, safety filtering, and rate limits live.

  1. Guided prompts. A small library of opening prompts categorised by the kind of reflection they invite (gratitude, decision, recap, friction).
  2. Reflection-not-advice prompting. System prompts that bias the model toward asking a follow-up question rather than producing answers.
  3. API gateway. Single REST surface the app talks to; handles prompt assembly, response filtering, and per-user rate-limits.
  4. Local-first journal. Entries store on-device and sync to Firebase; the LLM only sees the entries the user explicitly chooses to send.

Tech Stack

  • Flutter
  • Dart
  • Firebase · Auth
  • Firebase · Firestore
  • REST APIs
  • LLM integration

My Specific Contribution

  • Solo end-to-end. Auth, storage, prompts, the gateway, and inference path — all owned and shipped solo.
  • Cross-platform UI. One Flutter codebase for iOS and Android with shared theme tokens.
  • Prompt design. Iterated the system prompts for tone — reflective, never prescriptive.
  • Safety scaffolding. Response filters, escalation copy for sensitive content, and explicit user consent for sending entries.

Impact

LLM

Production integration in a shipping mobile app — gateway, prompts, filters.

2 → 1

iOS + Android from one Flutter codebase, shared theme tokens.

Solo

Auth, storage, prompts, and inference owned end-to-end.

Visuals

Screens: prompt picker, journal entry composer, and the reflection thread — same Flutter codebase on both platforms.
Architecture: Flutter app → REST gateway (prompt assembly, filters, rate-limit) → LLM provider. Entries live in Firestore; only what the user sends reaches the model.

Lessons

The interesting engineering wasn't in calling the model — it was in the layer between the app and the model. Prompt construction, response filtering, and rate-limiting belong on a server you own, not in the client. That gateway pattern is portable to any LLM-backed product, and it's the bit I'd reuse first if I built another one.

Like this work? Let's talk.

I'm open to Senior / Staff / Tech Lead roles at product companies — remote or Delhi-NCR hybrid.