<?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>Forem: pizidavi</title>
    <description>The latest articles on Forem by pizidavi (@pizidavi).</description>
    <link>https://forem.com/pizidavi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3758152%2F170a4330-bac4-4b58-ac8b-efaa4222c90b.jpeg</url>
      <title>Forem: pizidavi</title>
      <link>https://forem.com/pizidavi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pizidavi"/>
    <language>en</language>
    <item>
      <title>Jurnal: A Voice-First Journal App with On-Device Whisper + LLM Note</title>
      <dc:creator>pizidavi</dc:creator>
      <pubDate>Sun, 15 Feb 2026 21:18:42 +0000</pubDate>
      <link>https://forem.com/pizidavi/jurnal-a-voice-first-journal-app-with-on-device-whisper-llm-note-36le</link>
      <guid>https://forem.com/pizidavi/jurnal-a-voice-first-journal-app-with-on-device-whisper-llm-note-36le</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Jurnal is a simple mobile journaling app that makes it easy to capture "what happened today" using your voice. Instead of starting from a blank page, you record a short voice note, and the app turns it into a clean, structured journal entry you can skim later.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Jurnal&lt;/code&gt; is a &lt;em&gt;Romanian&lt;/em&gt; term that translates into English as &lt;em&gt;diary&lt;/em&gt; or &lt;em&gt;journal&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The core flow is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Record audio in-app&lt;/li&gt;
&lt;li&gt;Transcribe locally on-device using a Whisper model &lt;/li&gt;
&lt;li&gt;Send the transcription to a larger LLM to turn it into a real note, with sections like summary/highlights/intentions in Mardown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I like about this approach is the combination of privacy-first transcription with the "writing assistant" part happening after: I still speak naturally, and the app handles organizing the content into something readable.&lt;/p&gt;

&lt;p&gt;Teck stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native with Expo&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;react-native-executorch&lt;/code&gt; to handle local transcription model&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@tanstack/ai&lt;/code&gt; to provide online LLM utility&lt;/li&gt;
&lt;li&gt;TailwindCSS by Uniwind for styling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future improvements I'm excited about:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Custom templates for different styles&lt;/li&gt;
&lt;li&gt;Choosing custom models for transcription and enrichment&lt;/li&gt;
&lt;li&gt;Manual editing of the final note in-app&lt;/li&gt;
&lt;li&gt;Smarter search with local &lt;strong&gt;RAG&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A background queue for long-running processing&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🔗 Repo: &lt;a href="https://github.com/pizidavi/jurnal-app" rel="noopener noreferrer"&gt;https://github.com/pizidavi/jurnal-app&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Home&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;th&gt;Recording&lt;/th&gt;
&lt;th&gt;Settings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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.amazonaws.com%2Fuploads%2Farticles%2Fcz8ebp3czyt3zzx445jp.jpg" alt="Home screen" width="591" height="1280"&gt;&lt;/td&gt;
&lt;td&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.amazonaws.com%2Fuploads%2Farticles%2Fmxfkui33xnbu950cm9xz.jpg" alt="Recording new note" width="591" height="1280"&gt;&lt;/td&gt;
&lt;td&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.amazonaws.com%2Fuploads%2Farticles%2Fey8t58jk4uyx6vvpu9t5.jpg" alt="Note screen" width="591" height="1280"&gt;&lt;/td&gt;
&lt;td&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.amazonaws.com%2Fuploads%2Farticles%2Ftzwu5vzs7sykxbqhcrvh.jpg" alt="Setting screen" width="591" height="1280"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;Copilot CLI was most helpful when I treated planning as a first-class step, not a formality. The biggest productivity boost came from writing a tight plan, implementing in small slices, and then letting the AI validate (and correct) itself.&lt;/p&gt;

&lt;p&gt;To support that workflow, I made the project intentionally strict: ESLint rules are restrictive, TypeScript is in strict mode with other custom strict types, and I pushed the assistant to run &lt;code&gt;lint&lt;/code&gt; and &lt;code&gt;typecheck&lt;/code&gt; command before considering anything as done. That created fast feedback loops and prevents subtle regressions from piling up.&lt;/p&gt;

&lt;p&gt;I also built a custom &lt;strong&gt;Orchestrator&lt;/strong&gt; agent that follows a &lt;code&gt;plan → implement → review&lt;/code&gt; cycle and repeats until the plan is completed. It was really fun to see the agents correct themselves when they missed a step or introduced a bug.&lt;/p&gt;

&lt;p&gt;I'm extremely positive about the future of Copilot CLI: the UI is good and the interaction model fits real development.&lt;br&gt;
One thing I'd love to see next is a persistent &lt;strong&gt;allowlist for safe commands&lt;/strong&gt; (like lint/typecheck/format), so that I don't have to approve them every time.&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
