Reverie
A cross-platform emotional journaling platform that combines mood tracking, AI-powered reflections, memory capsules, analytics, and mindful journaling across web and mobile applications backed by a unified API and database.
Screenshots




Key Metrics
Web · Android
Monorepo (Backend + Web + Mobile)
JWT Access Tokens · Refresh Token Rotation
Weekly AI Reflections
Overview
Reverie is a private emotional archive that allows users to journal their thoughts, track moods, receive AI-generated weekly reflections, analyze emotional trends, and create time-locked memory capsules. The platform provides a consistent experience across web and mobile devices while maintaining secure authentication and offline capabilities.
Problem
Most journaling applications focus solely on writing entries and fail to provide meaningful reflection, emotional pattern analysis, or long-term engagement mechanisms. Users often lack tools that help them understand and revisit their emotional journey.
Solution
Built a cross-platform journaling ecosystem that combines mood-based entries, AI-generated reflections, analytics dashboards, mood calendars, memory capsules, and offline-first mobile support to create a more meaningful and reflective journaling experience.
Architecture
Three-tier architecture consisting of a TypeScript Express API, a Next.js web application, and an Expo React Native mobile application. MongoDB Atlas serves as the primary database, Cloudinary manages media storage, and Gemini powers AI reflections. Authentication uses JWT access and refresh token rotation with different storage strategies for web and mobile clients. :contentReference[oaicite:0]{index=0}
Challenges
- Maintaining consistent authentication across web and mobile platforms.
- Implementing secure refresh token rotation and device tracking.
- Building reliable offline synchronization for mobile journaling.
- Creating graceful AI fallback mechanisms when Gemini is unavailable.
- Managing shared data contracts across three separate application surfaces.
- Handling state hydration between Zustand and React Query.
Lessons Learned
- Cross-platform application architecture.
- Secure authentication and token lifecycle management.
- Environment validation using Zod.
- Offline-first mobile development patterns.
- AI integration and fallback design strategies.
- Rate limiting and API security practices.
- Managing shared contracts across web, mobile, and backend systems.
- Building production-inspired TypeScript applications.
Future Improvements
- End-to-end encrypted journal entries.
- Semantic and vector-based journal search.
- Gamified streak and achievement systems.
- Reflection history timeline visualization.
- Shared memory capsules for multiple recipients.
- Conversational AI reflection assistant.
- Apple Health and Google Fit integration.
- Redis caching layer.
- Automated testing suite.
- CI/CD pipelines.
- Docker containerization.
Development Log & Engineering Decisions
One Backend, Two Token Strategies — Dual-Surface Auth in Reverie
How I designed a single Express authentication service to serve HttpOnly cookies to a Next.js web app and body-delivered tokens to an Expo mobile app, without duplicating auth logic.
When the AI Is Down — Building a Graceful Degradation System for Gemini
How I designed the AI reflection pipeline in Reverie to never surface a raw API error to the user, including error normalization across inconsistent Gemini SDK failure shapes and structured fallback content generation.