Personal journaling is useful, but it can be difficult to turn a collection of thoughts into meaningful insights or actionable goals.
I wanted to experiment with a different approach: what if an AI could act as a reflection companion while keeping each user's journal data isolated and securely managed?
That idea became Sanctuary AI, a cloud-native personal reflection and journaling application built with Google Cloud Run, Firebase Authentication, Cloud Firestore, and Google Gemini.
The core workflow is simple:
Reflect → Understand → Act → Review
What does Sanctuary AI do?
Sanctuary AI allows an authenticated user to:
✍️ Write and save personal reflections
🎙️ Create reflections using voice
🧠 Analyze reflections with Gemini
💭 Explore thoughts using Socratic questions
🔄 Get alternative perspectives and cognitive reframing
🤝 Chat with different AI Companion personas
🔎 Ask questions about previous journal entries
🎯 Convert insights into actionable goals
✅ Track goals and tasks
📊 Review recurring themes and insights
📦 Export personal data
🗑️ Delete their account and associated data
The idea is not to replace personal reflection with AI.
Instead, AI is used as a tool to help the user think more deeply about their own experiences.
Architecture
The application uses Google Cloud services for authentication, storage, backend processing, and AI.
Sanctuary AI
│
▼
┌───────────────┐
│ Web Client │
└───────┬───────┘
│
▼
Firebase Auth
│
ID Token
│
▼
┌───────────────┐
│ Cloud Run │
│ Backend │
└───────┬───────┘
│
┌──────────┴──────────┐
▼ ▼
Cloud Firestore Gemini API
User Data AI
│
▼
User-scoped data
Cloud Run handles the backend logic while Firestore stores application data.
Gemini provides the AI capabilities.
Firebase Authentication provides the identity layer.
Keeping User Data Isolated
Because this application deals with personal reflections, data isolation was one of the most important design considerations.
User data is organized using user-scoped Firestore collections:
/users/{userId}/journals
/users/{userId}/goals
/users/{userId}/insights
/users/{userId}/conversations
/users/{userId}/messages
Firestore security rules enforce ownership:
request.auth.uid == userId
The backend also validates the Firebase ID token and derives the authenticated user's identity from the token instead of trusting a user-provided user ID.
This creates a clear boundary between users.
Note: Firestore security rules provide authorization and data isolation. They should not be confused with end-to-end encryption.
Gemini-Powered Reflection
One of the main challenges was deciding how Gemini should actually be useful inside a journal.
Instead of creating only a general-purpose chatbot, I created focused AI workflows.
A reflection can be processed to generate:
Key themes
Socratic questions
Alternative perspectives
Summaries
Potential action items
Goal suggestions
For example, instead of simply telling the user what to do, the Socratic workflow can encourage deeper thinking by asking questions about assumptions, evidence, and possible alternatives.
This keeps the user involved in the reflection process.
AI Companion
Sanctuary AI also includes multiple interaction styles.
Socratic Guide
Designed to encourage deeper thinking through questions.
Compassionate Empath
Designed for supportive and empathetic reflection.
Execution Coach
Focused more on practical next steps and execution.
The purpose is to make the AI interaction more useful depending on what the user needs at that moment.
Ask My Journal
One of the features I particularly wanted to build was Ask My Journal.
Instead of asking Gemini general questions, the user can ask questions about their own previous reflections.
For example:
"What topics have I been thinking about repeatedly?"
"What goals have I mentioned recently?"
"What patterns appear across my reflections?"
"What did I write about this topic previously?"
The system uses the user's journal history to help answer these questions and can reference relevant reflection dates.
This turns the journal from a collection of individual entries into something that can be explored over time.
Voice Journaling
Sometimes writing isn't the easiest way to capture an idea.
Sanctuary AI supports voice journaling using browser speech capabilities.
The flow is:
Speak
↓
Speech Recognition
↓
Journal Text
↓
Save Reflection
↓
AI Analysis
This makes it easier to capture thoughts quickly.
From Reflection to Action
Another important part of the application is connecting reflection with action.
An insight can be converted into a goal containing tasks, priority, and progress.
Goal
├── Priority
├── Progress
├── Task 1
├── Task 2
└── Completion Status
This creates a bridge between:
"I realized something"
and
"I am going to do something about it."
Insights and Periodic Reviews
The application also looks beyond individual journal entries.
Over time, users can review recurring themes and insights from their reflections.
The workflow becomes:
Reflections
↓
AI Analysis
↓
Recurring Themes
↓
Insights
↓
Goals
↓
Periodic Review
This is where the Reflect → Understand → Act → Review model becomes useful.
Using Google AI Studio
I used Google AI Studio while developing and refining the AI workflows.
The development process looked roughly like this:
Idea
↓
Prompt Design
↓
Test in AI Studio
↓
Evaluate Response
↓
Refine Instructions
↓
Integrate into Application
This was especially useful for experimenting with the different AI Companion personas and reflection workflows before integrating them into the application.
Handling AI Reliability
AI APIs can occasionally experience latency or failures.
For that reason, I designed the AI integration with resilience in mind, including fallback and timeout/circuit-breaker concepts.
The basic idea is:
Primary Model
↓
Failure / Timeout?
↓
Fallback Model
↓
Failure?
↓
Next Fallback
This helps prevent a temporary AI service problem from making the entire application unavailable.
Security and Privacy
Privacy was considered throughout the application architecture.
Some of the key decisions include:
Firebase Authentication for user identity
User-scoped Firestore data
Ownership-based Firestore security rules
Server-side handling of Gemini credentials
Google Cloud Secret Manager for sensitive configuration
Backend token validation
User data export
Account/data deletion
There are also areas I would like to improve further, particularly around stronger encryption and minimizing sensitive information sent to external AI services.
Why Cloud Run?
Cloud Run provides a simple way to deploy the backend as a containerized service without managing traditional servers.
For this project, it fits well because the application needs a backend that can:
Authenticate requests
Communicate with Firestore
Communicate with Gemini
Manage application logic
Scale with demand
Run securely behind a public HTTPS endpoint
The deployment flow is essentially:
Application
↓
Container
↓
Cloud Run
↓
HTTPS Service
What I Learned
The biggest lesson from this project was that building an AI application is not just about calling an LLM API.
The surrounding engineering is equally important:
Authentication
Authorization
Data isolation
Prompt engineering
Secret management
AI reliability
Backend architecture
User experience
Data ownership
Gemini is one component of the application, not the entire application.
The final system combines:
Firebase Authentication
+
Cloud Firestore
+
Cloud Run
+
Gemini
+
Google AI Studio
+
Privacy & Security
↓
Sanctuary AI
Try the Application
🌐 Live Demo:
https://private-ai-journal-reflection.ai.studio
💻 Source Code:
https://github.com/KVedang/Stability-AI
The project is also part of my participation in the Accelerate AI with Cloud Run challenge.
What's Next?
Some improvements I would like to explore include:
More advanced semantic retrieval
Better long-term journal analysis
Additional privacy controls
Improved personalization
More sophisticated insights
Stronger encryption options
Improved goal analytics
Final Thoughts
Sanctuary AI started with a simple question:
Can AI help people understand their own reflections without taking the reflection away from them?
The result is a platform built around:
Reflect → Understand → Act → Review
The goal isn't to have AI make decisions for the user.
It's to provide a private space where AI can help users ask better questions, discover patterns, and turn their own reflections into meaningful actions.
This article was originally published by DEV Community and written by Vedang Kulkarni.
Read original article on DEV Community


