<?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: Karthikeyan NG</title>
    <description>The latest articles on DEV Community by Karthikeyan NG (@karthikeyan_ng_63dbf94689).</description>
    <link>https://dev.to/karthikeyan_ng_63dbf94689</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%2F2655158%2F3cbae07f-1cb5-42e2-a8bb-15ddc7e6c075.jpg</url>
      <title>DEV Community: Karthikeyan NG</title>
      <link>https://dev.to/karthikeyan_ng_63dbf94689</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karthikeyan_ng_63dbf94689"/>
    <language>en</language>
    <item>
      <title>The journal app that can't phone home</title>
      <dc:creator>Karthikeyan NG</dc:creator>
      <pubDate>Wed, 09 Sep 2026 03:26:14 +0000</pubDate>
      <link>https://dev.to/karthikeyan_ng_63dbf94689/the-journal-app-that-cant-phone-home-1k9i</link>
      <guid>https://dev.to/karthikeyan_ng_63dbf94689/the-journal-app-that-cant-phone-home-1k9i</guid>
      <description>&lt;p&gt;DailyVox, the voice journal I build, holds no network permission. There is no analytics call to remove and no upload path to audit, because the capability was never granted. That single constraint made most of my architecture decisions for me. This post walks through what it forced.&lt;/p&gt;

&lt;p&gt;The reasoning behind the rule is short. A diary is the most honest text a person produces, and I could not bring myself to be honest in an app that stored my entries on someone's server. "We promise not to look" is a policy. "The app has no way to send it" is a property. I wanted the property, so every model in the pipeline has to run on the phone, and every fallback that reaches for a server has to be treated as a bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speech first
&lt;/h2&gt;

&lt;p&gt;Recording is the whole interface. You talk for about 42 seconds, and everything downstream is built on what the recognizer returns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SFSpeechAudioBufferRecognitionRequest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requiresOnDeviceRecognition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That flag is load-bearing. Without it, &lt;code&gt;SFSpeechRecognizer&lt;/code&gt; is free to use Apple's servers when it judges the result would be better, and for connected iPhones it usually judges exactly that. With it, transcription runs on the Neural Engine or fails. When the on-device model for a language is missing, DailyVox shows an error that names the setting to fix, because a loud failure is cheaper than a quiet upload.&lt;/p&gt;

&lt;p&gt;The trade is real. Server-side models punctuate better and handle rare words better. In exchange you get transcription that works in airplane mode, latency that doesn't depend on your connection, and audio that dies inside the device that heard it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sentiment you can check
&lt;/h2&gt;

&lt;p&gt;Each transcript gets a mood score from &lt;code&gt;NLTagger&lt;/code&gt; plus a lexicon layer. When I correlated the scorer against self-reported mood labels, it came out at r = +0.663. Middling as correlations go, and about what a lexicon method earns on 42-second spoken entries. I publish the number anyway. A mood feature that has never been measured against ground truth is decoration.&lt;/p&gt;

&lt;p&gt;The scores feed a small forecasting model keyed on day of week. Mine found that my low days cluster on Sundays. Twenty years of paper diaries never showed me that, because nobody rereads twenty years of paper.&lt;/p&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%2Fojrkga3wujoanh808vaf.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%2Fojrkga3wujoanh808vaf.png" alt="The Insights screen in DailyVox, showing recent mood patterns and a 32-day writing streak" width="640" height="1391"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The name the tagger couldn't see
&lt;/h2&gt;

&lt;p&gt;The Twin builds a knowledge graph of the people in your life, which means named entity recognition. Apple's tagger handled "Sarah" fine and treated "Adyah" as noise. Names from outside its training distribution simply vanished, and on my entity test suite that blind spot cost 34.6% recall.&lt;/p&gt;

&lt;p&gt;The fix was to stop trusting the tagger's entity class as the source of truth. Capitalized tokens become entity candidates, and the graph decides over time which candidates are people, by watching how they recur across entries. It recovered the missing names.&lt;/p&gt;

&lt;p&gt;It also bought me a new dependency: the speech recognizer must capitalize names in the first place. Apple's does. Whether Android's does on real Samsung and Xiaomi hardware is the question currently standing between the finished Android port and its release.&lt;/p&gt;
&lt;h2&gt;
  
  
  Search with no server
&lt;/h2&gt;

&lt;p&gt;Semantic search runs on &lt;code&gt;NLEmbedding.sentenceEmbedding&lt;/code&gt;. Apple ships those vectors for English, Spanish, French, German and Italian, which is why the interface ships in exactly those five languages. Shipping a language where search quietly returns nothing would be worse than waiting.&lt;/p&gt;

&lt;p&gt;Cosine similarity has no sense of time, so a pure vector search happily surfaces a three-year-old entry over last week's. The ranking blends similarity with recency, and below a similarity of roughly 0.37 the app says "no good match" instead of padding results. Teaching a search box to abstain took longer than teaching it to match.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Twin itself
&lt;/h2&gt;

&lt;p&gt;Everything lands in the model the app is named for: a Digital Twin, meaning baselines for emotional valence and arousal, a communication-style profile, the entity graph, and the mood forecaster. The whole state is Codable JSON inside a single Core Data entity, synced through the user's own iCloud container so a new phone doesn't mean a new stranger.&lt;/p&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%2Fffj6pi40l1pt2h5l6qyc.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%2Fffj6pi40l1pt2h5l6qyc.png" alt="The Digital Twin screen in DailyVox: entries rendered as a constellation of stars, one per entry, grouped around the people they mention" width="640" height="1391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can ask it questions. Answers come from Apple's Foundation Models framework, on-device, and every answer must cite the entries it drew from. A deterministic audit checks each claim against its citations and rejects answers that fail. That gate deserves its own post, and it will get one.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the constraint bought
&lt;/h2&gt;

&lt;p&gt;The App Store privacy label reads "Data Not Collected," and it reads that way as a build output rather than a marketing decision. Demos run in airplane mode. There are no retention pings and no A/B tests, so the only usage number I have is the App Store's install count, which is a strange feeling for someone who has shipped instrumented products for years. I recommend the feeling.&lt;/p&gt;
&lt;h2&gt;
  
  
  The honest split
&lt;/h2&gt;

&lt;p&gt;The iOS app is MIT. How it records, stores, encrypts and exports your words is readable by anyone, and so is the permission list. The Twin's analysis engine is a closed Swift package that lives inside that app. The part that touches your data is checkable; the part that models you is the product I'm betting on. Some people find that line unsatisfying. I'd rather draw it where you can see it than blur it.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/intrepidkarthi" rel="noopener noreferrer"&gt;
        intrepidkarthi
      &lt;/a&gt; / &lt;a href="https://github.com/intrepidkarthi/dailyvox" rel="noopener noreferrer"&gt;
        dailyvox
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Free open-source voice journal for iPhone with on-device AI. Every entry becomes a star in your private constellation. Built with SwiftUI, Apple Speech, NaturalLanguage, ActivityKit. MIT licensed.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/intrepidkarthi/dailyvox/.github/readme/hero-banner.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fintrepidkarthi%2Fdailyvox%2FHEAD%2F.github%2Freadme%2Fhero-banner.png" alt="DailyVox — speak, and watch your stars appear" width="840"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DailyVox&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Speak for 42 seconds. Watch your words become stars.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The free voice journal with on-device AI and a Digital Twin that learns who you are — entirely on your phone. iPhone today; Android in development.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Free forever&lt;/b&gt; &amp;nbsp;·&amp;nbsp; 100% on-device &amp;nbsp;·&amp;nbsp; No account, no servers, no analytics &amp;nbsp;·&amp;nbsp; MIT licensed &amp;nbsp;·&amp;nbsp; &lt;a href="https://www.producthunt.com/products/dailyvox" rel="nofollow noopener noreferrer"&gt;on Product Hunt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://apps.apple.com/app/id6760454642" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1e8260b654b4105c1afca442837505ca76e54c928b17a9235758525af1729e23/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f776e6c6f61645f467265652d41707025323053746f72652d3044393646363f7374796c653d666f722d7468652d6261646765266c6f676f3d6170706c65266c6f676f436f6c6f723d7768697465" alt="Download on App Store"&gt;&lt;/a&gt;
  &lt;a href="https://getdailyvox.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9df84dc540dab7a3b8ce4a51278087cd799ab56e41476bb751cff9adeac65dc5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f576562736974652d6765746461696c79766f782e636f6d2d3542374336423f7374796c653d666f722d7468652d6261646765" alt="Website"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3488cb6658704f31edd03b28bdcee7e8317834f181e8cbe5042e12ca9d0969b2/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562" alt="GitHub stars"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://www.producthunt.com/products/dailyvox" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2b02c255449c9eb07a7ee86f0ad5c3b4af3c13c273145f116b38fb715c19e50f/68747470733a2f2f6170692e70726f6475637468756e742e636f6d2f776964676574732f656d6265642d696d6167652f76312f66656174757265642e7376673f706f73745f69643d31313739383639267468656d653d6c69676874" alt="DailyVox on Product Hunt — upvote us" width="220" height="48" class="js-gh-image-fallback"&gt;&lt;/a&gt;
  &amp;nbsp;
  &lt;a href="https://getdailyvox.com/demo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0b54deabb07e925ccea8ce001ac73491b41492dddddbc8080cfb1f0b3a2b1ab7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5472795f7468655f496e7465726163746976655f44656d6f2d6765746461696c79766f782e636f6d25324664656d6f2d4434413534373f7374796c653d666f722d7468652d6261646765" alt="Try the interactive demo"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://getdailyvox.com/privacy.html" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2e617f03d40f8798bf2662ab6ea9bf0b5d87b092806b3b5ec01c27101191a73e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4170706c655f507269766163792d446174612532304e6f74253230436f6c6c65637465642d627269676874677265656e3f7374796c653d666c61742d737175617265266c6f676f3d6170706c65" alt="Privacy"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/8c3f80a07b292da104ca31a490034eb1c841fd4afe14f4f437a51b5e1cf23f98/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506c6174666f726d2d694f532532303137253242253230253743253230695061644f5325323031372532422d6c69676874677265793f7374796c653d666c61742d737175617265266c6f676f3d6170706c65"&gt;&lt;img src="https://camo.githubusercontent.com/8c3f80a07b292da104ca31a490034eb1c841fd4afe14f4f437a51b5e1cf23f98/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506c6174666f726d2d694f532532303137253242253230253743253230695061644f5325323031372532422d6c69676874677265793f7374796c653d666c61742d737175617265266c6f676f3d6170706c65" alt="Platform"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/82cfa825a1204ad7e03495a41cf2953515986c160d2cff80a45b0b507b6a4072/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f416e64726f69642d696e253230646576656c6f706d656e742d3344444338343f7374796c653d666c61742d737175617265266c6f676f3d616e64726f6964266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/82cfa825a1204ad7e03495a41cf2953515986c160d2cff80a45b0b507b6a4072/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f416e64726f69642d696e253230646576656c6f706d656e742d3344444338343f7374796c653d666c61742d737175617265266c6f676f3d616e64726f6964266c6f676f436f6c6f723d7768697465" alt="Android in development"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f3cd9467f1a2673efb050d325944267a717320385a6e45da3a19f994f9004339/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f773f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/f3cd9467f1a2673efb050d325944267a717320385a6e45da3a19f994f9004339/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f773f7374796c653d666c61742d737175617265" alt="License"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ae68c5e1ad99bdc33d8e94bfafa2896f3ef9301311cfda8a294f6eb358aa9591/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f50726963652d46726565253230466f72657665722d4434413534373f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/ae68c5e1ad99bdc33d8e94bfafa2896f3ef9301311cfda8a294f6eb358aa9591/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f50726963652d46726565253230466f72657665722d4434413534373f7374796c653d666c61742d737175617265" alt="Free Forever"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b8a58407b68b2b8c67471977d40f66e0af98c90f647784b3ba54344c3c9168e2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d3130302532352532304f6e2d2d4465766963652d3542374336423f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/b8a58407b68b2b8c67471977d40f66e0af98c90f647784b3ba54344c3c9168e2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41492d3130302532352532304f6e2d2d4465766963652d3542374336423f7374796c653d666c61742d737175617265" alt="On-Device AI"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox/network/members" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/659ef8a60014387856ac0ffeeddb2830a1bf70d644952d143eafaf0a3b2565a2/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666c61742d737175617265266c6f676f3d67697468756226636f6c6f723d354237433642" alt="Forks"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox/watchers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bf80ef3155cb81a867f11659f873df51d1afb3f044fefe48c420e3f56a7f81d6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f77617463686572732f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666c61742d737175617265266c6f676f3d67697468756226636f6c6f723d443441353437" alt="Watchers"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox/commits/main" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/10ba377e705a139bebf6f6364752991ddad22336d9c03fa9aaa222985cff86db/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666c61742d737175617265266c6f676f3d67697426636f6c6f723d323243353545" alt="Last commit"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox/pulse" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/591c1cbb5c707b3c618ccafaa2df159e45a0c288ef6cd16841aa00ca67b635ec/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666c61742d737175617265266c6f676f3d676974266c6162656c3d436f6d6d6974732532466d6f26636f6c6f723d463539453042" alt="Commit activity"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d9341293648f88017238efaa86f676f5db365c587eeb36ace74cb51097375aef/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7265706f2d73697a652f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666c61742d737175617265266c6f676f3d6461746162617365266c6162656c3d5265706f25323053697a6526636f6c6f723d443937373036" alt="Repo size"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox/issues" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/77aa8a9fa0ae30f524445a9171338748714ad3d3490da3f151cebd468e6c6708/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666c61742d737175617265266c6f676f3d67697468756226636f6c6f723d463937333136" alt="Open issues"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/intrepidkarthi/dailyvox/graphs/contributors" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/28a831e7ba62cf088a0a8c8792fa07b99cc42208b4ae3606582a1202a9bba813/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f696e7472657069646b61727468692f6461696c79766f783f7374796c653d666c61742d737175617265266c6f676f3d67697468756273706f6e736f7273266c6f676f436f6c6f723d7768697465266c6162656c3d436f6e7472696275746f727326636f6c6f723d454334383939" alt="Contributors"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c0470ddb45f802a39e4d9ba9b3dbb540c402cea1cec08633a04ac9c088e2a83f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53776966742d352e392d4641373334333f7374796c653d666c61742d737175617265266c6f676f3d7377696674266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/c0470ddb45f802a39e4d9ba9b3dbb540c402cea1cec08633a04ac9c088e2a83f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53776966742d352e392d4641373334333f7374796c653d666c61742d737175617265266c6f676f3d7377696674266c6f676f436f6c6f723d7768697465" alt="Swift"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ec408eec8c47974486dbd9acbebdfbcff15592d53e12aa5f2e14846e08cfc090/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537769667455492d352d3030383046463f7374796c653d666c61742d737175617265266c6f676f3d7377696674266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/ec408eec8c47974486dbd9acbebdfbcff15592d53e12aa5f2e14846e08cfc090/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537769667455492d352d3030383046463f7374796c653d666c61742d737175617265266c6f676f3d7377696674266c6f676f436f6c6f723d7768697465" alt="SwiftUI"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ea500ea90dca2be12cc54e6ca636490f9c4af7ced35d25b6e3a9bdadd839cd17/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f58636f64652d31352532422d3134374546423f7374796c653d666c61742d737175617265266c6f676f3d78636f6465266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/ea500ea90dca2be12cc54e6ca636490f9c4af7ced35d25b6e3a9bdadd839cd17/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f58636f64652d31352532422d3134374546423f7374796c653d666c61742d737175617265266c6f676f3d78636f6465266c6f676f436f6c6f723d7768697465" alt="Xcode"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e7e6e6f9b0a0783efe3d29174cf9b12c55deb51fce1369ee01f3fae5f59db1c0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f7265253230446174612d253242253230436c6f75644b69742d3337373641423f7374796c653d666c61742d737175617265266c6f676f3d69636c6f7564266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/e7e6e6f9b0a0783efe3d29174cf9b12c55deb51fce1369ee01f3fae5f59db1c0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f7265253230446174612d253242253230436c6f75644b69742d3337373641423f7374796c653d666c61742d737175617265266c6f676f3d69636c6f7564266c6f676f436f6c6f723d7768697465" alt="Core Data + CloudKit"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a6df87dfb214d6e0750960f74b9abbee5758b11e6dc6b65f91b6fdb09a93a714/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e657572616c253230456e67696e652d436f72652532304d4c2d4646364236423f7374796c653d666c61742d737175617265266c6f676f3d6170706c65266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/a6df87dfb214d6e0750960f74b9abbee5758b11e6dc6b65f91b6fdb09a93a714/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e657572616c253230456e67696e652d436f72652532304d4c2d4646364236423f7374796c653d666c61742d737175617265266c6f676f3d6170706c65266c6f676f436f6c6f723d7768697465" alt="Neural Engine / Core ML"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b2d6527a08a7664bdc8deb48073f509bd0ab4c7708c38f8f663aaa12e015920e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5370656563682d4f6e2d2d4465766963652d3542374336423f7374796c653d666c61742d737175617265266c6f676f3d6170706c65266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/b2d6527a08a7664bdc8deb48073f509bd0ab4c7708c38f8f663aaa12e015920e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5370656563682d4f6e2d2d4465766963652d3542374336423f7374796c653d666c61742d737175617265266c6f676f3d6170706c65266c6f676f436f6c6f723d7768697465" alt="On-device Speech"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What is DailyVox?&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;DailyVox turns your spoken thoughts into a &lt;strong&gt;constellation of stars&lt;/strong&gt;. Every journal entry becomes a point of light in your inner sky — mood-colored, connected by patterns only you can see.&lt;/p&gt;

&lt;p&gt;Behind the scenes, an &lt;strong&gt;on-device Digital Twin&lt;/strong&gt; learns how you think, how you feel, and who matters to you. It predicts your mood, answers questions about your patterns, and reveals meaning across months of entries. No accounts. No servers. No data collection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your thoughts never leave your device. Ever.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://apps.apple.com/app/id6760454642" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d7a37d1f19b816aa63dea5794ebca45c96dea436739960c78055fb4e21919ad8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f776e6c6f61645f467265655f6f6e5f7468655f4170705f53746f72652d3044393646363f7374796c653d666f722d7468652d6261646765266c6f676f3d6170706c65266c6f676f436f6c6f723d7768697465" alt="Download"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;App Screenshots&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/intrepidkarthi/dailyvox/.github/readme/speak.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fintrepidkarthi%2Fdailyvox%2FHEAD%2F.github%2Freadme%2Fspeak.png" width="160" alt="The Speak tab: today's entry, and a microphone docked where your thumb is"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/intrepidkarthi/dailyvox/.github/readme/twin.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fintrepidkarthi%2Fdailyvox%2FHEAD%2F.github%2Freadme%2Ftwin.png" width="160" alt="The Digital Twin sky: distance is how long ago, angle is the hour of day"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/intrepidkarthi/dailyvox/.github/readme/remembers.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fintrepidkarthi%2Fdailyvox%2FHEAD%2F.github%2Freadme%2Fremembers.png" width="160" alt="An entry with the names it caught underlined, and what the Twin filed beneath"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/intrepidkarthi/dailyvox/.github/readme/patterns.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fintrepidkarthi%2Fdailyvox%2FHEAD%2F.github%2Freadme%2Fpatterns.png" width="160" alt="Insights: a 32-day writing streak and the week's pattern"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/intrepidkarthi/dailyvox/.github/readme/reads.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fintrepidkarthi%2Fdailyvox%2FHEAD%2F.github%2Freadme%2Freads.png" width="160" alt="Ask your Twin: an answer that cites the entries it came from"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/intrepidkarthi/dailyvox/.github/readme/private.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fintrepidkarthi%2Fdailyvox%2FHEAD%2F.github%2Freadme%2Fprivate.png" width="160" alt="The Data Shield: transcription on device, DailyVox servers none exist"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Real screenshots from v1.11.0, seeded with a demo journal.…&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/intrepidkarthi/dailyvox" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;DailyVox is free, with no account and no ads, on iPhone. The no-network claim takes ten seconds to verify in the repo or in the app's own settings ledger. Check me.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>ios</category>
      <category>machinelearning</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
