Gentle

"You just write. Gentle does the rest."


Team AP

Athulya Vempati · Philip Samuel


What is Gentle?

Gentle is a mobile journaling app designed for people living with anxiety, depression, or grief. It's built around a single insight: most mental health apps fail their users by requiring them to already understand what's wrong before the app can help This is precisely what our app is supposed to teach.

Gentle removes this barrier entirely. You open the app and write whatever is on your mind. All therapeutic intelligence happens passively in the background via AI, and insights surface only when you have emotional distance from what you wrote.

The app is a private notebook first and a wellness tool second. Nothing interrupts the act of writing.


The Problem It Solves

Every existing CBT (Cognitive Behavioural Therapy) app requires the user to do the therapeutic work, like identifying distortions and logging moods, consciously and actively. This creates a cruel paradox: the people who most need help are least able to engage with the format when they're at their worst.

Gentle inverts this model. The AI does the pattern recognition. The user just writes. The result is an app that works hardest for the people who have the least capacity to engage with it.

Who it's for:

  • Adults managing anxiety, depression, or grief
  • People who've found CBT apps too rigid or clinical
  • Neurodivergent users for whom structured CBT homework is inaccessible
  • Existing journallers who want more from the habit
  • Therapy clients wanting to track patterns between sessions

How It Works

  1. Write freely: open the distraction-free canvas and write whatever is on your mind
  2. Save: the entry is sent transiently to the AI for analysis, then discarded server-side
  3. Wait: 24–72 hours later, gentle nudges surface based on what was detected
  4. Discover: patterns, themes, and reframes appear over time in your own language

AI Features

All AI features are passive and non-intrusive. Nothing interrupts writing.

Cognitive Distortion Detection Identifies patterns like catastrophizing, black-and-white thinking, mind reading, and overgeneralisation from entry text. Surfaces a warm nudge the next day referencing the user's own words, but never as a correction or diagnosis.

The Reframe Archive When a strong distortion is detected, an alternative first-person reframe is generated and stored. After 48–72 hours it surfaces as a card with intentional delay.

Recurring Theme Naming Over weeks, clusters emotional themes using the user's own language (e.g. "The Sunday Dread" rather than "Work Stress"). These appear as soft tappable tags across related entries.

Unsent Letter Detection Detects when an entry is emotionally directed at a specific person and quietly offers to reformat it as an unsent letter to support emotional externalisation.

Anchor Phrase Detection Identifies recurring phrases written in moments of distress and flags them as personal early-warning signals: "You've written 'what's the point' four times this month, always around Mondays. Just something to notice."

Progress Echoes Tracks self-critical language over time and, when genuine improvement is detected, surfaces a comparison between past and present writing.

Monthly Companion Summary Once a month, generates a private narrative summary written like a letter from a thoughtful friend, reflecting on the emotional arc of the month in plain, warm language.

Emotional Web (in development) An interactive spider web visualisation where journal entries are nodes connected to a central emotional theme. Cross-links between entries reveal hidden pattern relationships across themes.


Privacy

  • All journal entries stored locally on-device by default using encrypted storage
  • Text is sent to the AI transiently for analysis and never stored server-side
  • No account required to start
  • All cloud features can be disabled entirely for use as a plain offline journal
  • No ads, no data selling, no third-party analytics

Technologies

Layer Technology
Framework React Native (Expo SDK 55)
Navigation Expo Router (file-based)
Language TypeScript
State management Zustand with persist middleware
Local storage Expo SecureStore (encrypted)
AI Google Gemini 2.0 Flash API
Animations React Native Reanimated
Gestures React Native Gesture Handler
List rendering Shopify FlashList
Fonts Lora (serif), Inter, OpenDyslexic
Visualisation React Native SVG
Date handling date-fns

Accessibility

  • OpenDyslexic font option: toggle in settings, applies to all reading and writing surfaces
  • Three text size options: small, medium, large, applied to writing canvas and entry reader
  • Reduce motion support: all animations respect the system accessibility setting
  • VoiceOver / TalkBack compatible: all interactive elements labelled with accessibility roles
  • Minimum 44×44pt tap targets throughout

Running the Project

Prerequisites

  • Node.js 18+
  • Expo CLI: npm install -g expo-cli
  • Xcode (for iOS) or Android Studio (for Android)

Setup

git clone https://github.com/Avemp21/gentle.git
cd gentle
npm install --legacy-peer-deps

Create a .env file in the root:

EXPO_PUBLIC_GEMINI_API_KEY=your_gemini_api_key_here

Run

npx expo start

For full native module support (recommended over Expo Go):

npx expo run:ios
# or
npx expo run:android

Project Structure

gentle/
├── app/                    # Expo Router screens
│   ├── (tabs)/             # Tab navigator screens
│   ├── write/              # Writing canvas screens
│   ├── entry/              # Entry detail screens
│   ├── theme/              # Theme detail screens
│   ├── web/                # Emotional web visualisation
│   ├── unsent-letter/      # Unsent letter composer
│   ├── summary/            # Monthly summary reader
│   └── onboarding/         # First-launch onboarding flow
├── components/             # Reusable UI components
├── store/                  # Zustand state stores
├── lib/                    # AI client, analysis logic, utilities
├── constants/              # Design tokens (colours, typography, spacing)
└── types/                  # Shared TypeScript interfaces

Built With

Share this project:

Updates