<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nirvik K.C.</title>
    <description>The latest articles on DEV Community by Nirvik K.C. (@nirvik_kc_a731b878dbe75).</description>
    <link>https://dev.to/nirvik_kc_a731b878dbe75</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3281466%2Fa19d077b-5bd1-4292-a5ce-8bb45f1e123a.png</url>
      <title>DEV Community: Nirvik K.C.</title>
      <link>https://dev.to/nirvik_kc_a731b878dbe75</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nirvik_kc_a731b878dbe75"/>
    <language>en</language>
    <item>
      <title>Building Personal Gemini Journal: A Secure AI Sanctuary Powered by Cloud Run &amp; Gemini API</title>
      <dc:creator>Nirvik K.C.</dc:creator>
      <pubDate>Sun, 06 Sep 2026 11:31:25 +0000</pubDate>
      <link>https://dev.to/nirvik_kc_a731b878dbe75/building-personal-gemini-journal-a-secure-ai-sanctuary-powered-by-cloud-run-gemini-api-16jf</link>
      <guid>https://dev.to/nirvik_kc_a731b878dbe75/building-personal-gemini-journal-a-secure-ai-sanctuary-powered-by-cloud-run-gemini-api-16jf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Submission for the Accelerate AI with Cloud Run APAC Ideathon 2026&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Private, intuitive, and insightful reflections and journal entries have proven to be the most useful ways of journaling and reflecting. As part of the &lt;strong&gt;Accelerate AI with Cloud Run APAC Ideathon&lt;/strong&gt;, I have developed a journaling application, Personal Gemini Journal, a full-stack conversational artificial intelligence journaling application that enables real-time voice inputs, mood analytics, and external automation webhooks through the Google Cloud serverless platform.&lt;/p&gt;




&lt;h2&gt;
  
  
  System Architecture &amp;amp; Google Cloud Integration
&lt;/h2&gt;

&lt;p&gt;The application combines serverless scale with security-first architecture:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Google Cloud Run:&lt;/strong&gt; A perfect place to host a stateless, container-based application which is autoscaling from zero.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini API (via Google AI Studio):&lt;/strong&gt; It is an excellent tool for processing conversations that require multiple rounds of dialogue. It also gives automated reflection summary, dynamic mood tag, and sentiment trajectory calculation. Resilient multi-model failover is also included among the capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firebase Authentication:&lt;/strong&gt;  Through Google OAuth SSO, Firebase authentication is the one securing all user identities and ensuring that every journaling session refers to an authenticated UID user only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud Firestore:&lt;/strong&gt; This feature is designed to give each user an isolated database. It uses very strict security rules for a path like (/users/{userId}/journals/{document=**}). So data leaks from tenants to tenants are blocked at the database level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Google Cloud Secret Manager:&lt;/strong&gt;  A place where server-side runtime secrets and keys are stored. These are kept outside the client bundles so their exposure risk is minimised.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Key Features &amp;amp; Enhancements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Per-User Data Isolation:&lt;/strong&gt;  Database-level features ensure complete user privacy without any interference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Voice-to-Text Dictation Mode:&lt;/strong&gt; Built-in dictation mode with the Web Speech API in the browser, providing speech-to-text functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mood Analytics &amp;amp; Sentiment Arc Tracker:&lt;/strong&gt; Emotional tag extraction and mood trajectory plotting between history entries in the Archive view are done automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;External Webhook Notifications:&lt;/strong&gt; Entry summary, mood tag, and time in the form of JSON payloads are dispatched asynchronously to selected Discord/Slack endpoints or HTTP receivers without affecting user operations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Application Walkthrough
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Conversational Journaling &amp;amp; Voice Input
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyl0hanxiizl5s4vrv0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyl0hanxiizl5s4vrv0b.png" alt="Gemini Journal Active Session" width="799" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Automated AI Summary &amp;amp; Mood Analytics
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifanfi1otc571q6vo66i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifanfi1otc571q6vo66i.png" alt="Gemini Journal AI Summary" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Architecture &amp;amp; Firestore Rules
&lt;/h2&gt;

&lt;p&gt;To enforce strict security and user privacy, Cloud Firestore access is restricted exclusively to authenticated owners:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;rules_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="nx"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firestore&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;databases&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;database&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/documents &lt;/span&gt;&lt;span class="err"&gt;{
&lt;/span&gt;    &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/journals/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="o"&gt;=**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;allow&lt;/span&gt; &lt;span class="nx"&gt;read&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;uid&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Webhook notification triggers execute in non-blocking try/catch wrappers to ensure third-party network failures never interrupt journaling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the Project
&lt;/h2&gt;

&lt;p&gt;Live Prototype: &lt;a href="https://geminijournalnirvik2026.ai.studio" rel="noopener noreferrer"&gt;https://geminijournalnirvik2026.ai.studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/Nirvik-49/personal-gemini-journal" rel="noopener noreferrer"&gt;https://github.com/Nirvik-49/personal-gemini-journal&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  AccelerateAIwithCloudRun
&lt;/h1&gt;

</description>
      <category>accelerateaiwithcloudrun</category>
      <category>googlecloud</category>
      <category>gemini</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
