How DailyVox
actually works.
A deep technical breakdown of the on-device AI pipeline behind the Twin. Nine Apple frameworks. Zero third-party SDKs. No cloud calls. Every layer — capture, transcription, NLP, personality modeling, storage — runs on your phone.
Architecture overview.
pipelineEvery piece of data in DailyVox flows through a pipeline that runs entirely on the device. There are zero network calls for AI processing. Here is the full system architecture.
The key constraint: data never leaves the device for processing. Transcription runs on the Neural Engine. NLP runs locally. The Twin is computed and stored in Core Data. The only optional network path is Apple's encrypted iCloud sync — which the user can disable.
The on-device stack.
apple.frameworks[]On iPhone, DailyVox uses nine Apple frameworks to build a full AI pipeline without any third-party dependencies or server-side processing. The Android build reaches the same result differently, and §03 sets the two side by side.
SFSpeechRecognizer
The primary transcription engine in v1.0 – 1.x. Converts spoken audio to text entirely on-device.
requiresOnDeviceRecognition = trueensures zero network transmission- Input: AAC audio at 44.1 kHz via AVAudioEngine
- 60+ languages with on-device models
- Real-time partial results for live feedback
- Runs on Apple Neural Engine
SpeechAnalyzer
Apple's next-generation speech recognition framework — transcribes entries on iOS 26+ since v1.6, with the on-device recognizer as the fallback on earlier iOS.
- Significantly faster recognition, lower latency
- Native long-form audio without session timeouts
- No user setup required (no permission prompts for on-device)
- Volatile results for instant partial feedback
- Built for sustained recording — ideal for journaling
NLTagger
The core NLP engine that extracts meaning from transcribed text. Runs multiple analysis passes per entry.
- Sentiment scoring — sentence-level valence −1.0 → +1.0
- Named Entity Recognition — people, places, organisations, dates
- Part-of-Speech tagging — verb density, adjective richness
- Language ID — auto-detect entry language
- All tag schemes use on-device CoreML models
NLEmbedding
Dense vector representations of journal entries, powering on-device semantic search since v1.6.
- 512-dim sentence embeddings per entry
- Cosine similarity for search by meaning, with a measured abstention threshold
- Device-local index, excluded from backups, rebuildable from entries
- The grounding layer the v1.7 Twin chat retrieves from
Foundation Models
Apple's on-device large language model — the v1.7 Twin chat: free-text questions, answers grounded in and citing your own entries, audited before they render.
LanguageModelSession— multi-turn conversation with transcript memory- Tool calling — Twin autonomously queries Core Data via custom Tool protocol
@Generable— type-safe structured outputs (mood reports as Swift structs)streamResponse()— real-time streaming chat UI- Dynamic instructions from TwinEngine for tone matching
- Requires iPhone 15 Pro+. Entire pipeline on-device.
Core Data + CloudKit
Local-first persistence with optional encrypted cloud sync across devices.
- SQLite wrapped by NSPersistentCloudKitContainer
- Local-first: app works fully offline
- AIState entity stores the Twin as Codable JSON
- iCloud sync uses Apple's encrypted infrastructure
- Sync is optional — user can disable entirely
CryptoKit
Military-grade encryption for backup exports and sensitive data at rest.
- AES-256-GCM authenticated encryption for backups
- User passphrase for key derivation
- Encrypted JSON export for device migration
LocalAuthentication
Biometric authentication gating access to journal entries.
- Face ID and Touch ID via LAContext
- Biometric keys held in the Secure Enclave
- App lock with configurable auto-lock timeout
- Falls back to device passcode
WidgetKit + AppIntents
Home & Lock-screen widgets. AppIntents-powered Siri Shortcuts for hands-free entries.
- Mood and streak widgets
- Hands-free voice entry via Siri
- AppIntents make Siri aware of DailyVox operations
Two platforms, one Twin.
port.mapping[]DailyVox is live on iPhone. A native Android app is in development — not released, and not a wrapper around the iOS one. It is Kotlin and Jetpack Compose, built against the same Twin engine contracts, because the promise that has to survive the port is the one people actually chose the app for: nothing leaves the phone.
That promise turned out to be the hard part, and not for the reason you would guess. Apple hands you a whole on-device AI stack for free. Android does not — there is no system sentiment API, no system name recogniser, and the strong open NER models inherit training corpora that restrict commercial use. So every gap had to be closed with something measurable rather than something convenient.
| Capability | iPhone | Android |
|---|---|---|
| Transcription | SFSpeechRecognizer / SpeechAnalyzer |
createOnDeviceSpeechRecognizer — fails rather than falling back to a network |
| Sentiment | NLTagger sentiment score |
Full VADER lexicon, 7,517 entries, bundled as a 30 KB asset |
| Names & places | NLTagger named entities |
A model-free heuristic over capitalisation evidence |
| Storage | Core Data | Room, same schema shape so exports are portable |
| Lock | Face ID · Secure Enclave | BiometricPrompt · Keystore, StrongBox where present |
| Body signals | HealthKit | Health Connect — opt-in, read-only, four record types |
| Voice analysis | AVFoundation · Accelerate | MediaCodec, then autocorrelation pitch and energy in plain Kotlin |
| Home screen | WidgetKit · Live Activities | RemoteViews widget · Quick Settings tile · ongoing notification |
Two numbers we had to earn, not assume
Replacing a first-party framework with your own code is only defensible if you measure the replacement against the thing it replaces. Both substitutions were scored on the same real diary text, transcribed from actual recordings.
Sentiment. On 1,459 human-labelled entries, the VADER lexicon scored r = +0.663 with 87.1% sign accuracy, against NLTagger's +0.594 and 79.8%. Both shuffled controls collapsed to chance. The lexicon is not a compromise; on this register it reads the writer more accurately than the OS does.
Names. On 28 transcribed entries with 111 hand-annotated spans, the heuristic found 99.1% of them at 61.6% precision, against NLTagger's 94.6% at 32.5%. Every one of the 43 person names in that corpus is non-Anglo, and the heuristic found 100% of them where Apple's model found 97.7% — because it has no learned prior about what a name looks like, so it has none to be wrong about.
Neither number is a marketing claim. The corpus is one author's diary, 28 entries is small enough that a handful of spans moves a percentage point, and the person who wrote the heuristic also wrote its gold labels. Both are stated here with those limits attached because that is what makes them checkable.
What the port costs, stated plainly
Android's on-device recogniser needs a language pack that this app cannot download — it holds no internet permission of any kind, which is the entire point. On a phone without the pack, recording fails and the app says so, and points at the Android setting that fixes it. It does not quietly transcribe over a network instead.
There is also no free-form conversational Twin on Android. A model small enough to ship to every phone in the target audience would guess, and a Twin that guesses about your own life is worse than one that stays quiet. Ask answers structured questions from real statistics and cites the entries it used — which works on every device rather than only the newest ones.
The Twin Engine.
model cardThe TwinEngine is a custom personality-modeling system that builds a multi-dimensional profile of the user from their voice journal entries. It uses no external models or APIs. The entire model is computed from NLTagger output and stored as serialized JSON in Core Data's AIState entity.
The engine consists of four interconnected sub-models.
CommunicationStyle
STYLEHow the user expresses themselves. Updated with each entry.
- Type-Token Ratio (vocabulary richness)
- Expressiveness score (0 – 1)
- Directness score (0 – 1)
- Formality score (0 – 1)
- Signature words + frequency map
- Average sentence length
- Pronoun patterns (I vs we)
EmotionalSignature
EMOTIONThe user's emotional baseline and patterns over time.
- Valence baseline (positive / negative)
- Arousal baseline (energy level)
- Dominance baseline (control feeling)
- Morning vs evening mood patterns
- Weekday vs weekend patterns
- Trigger topics with correlation scores
- Emotional volatility index
PersonalKnowledgeGraph
GRAPHA network of people, places, and topics with emotional weights.
- NER-extracted entities (person, place, org)
- Emotional weight per entity (−1 → +1)
- Mention frequency over time
- Co-occurrence relationships
- Entity–mood correlation tracking
- Topic clusters from entity groupings
TwinPredictions
PREDICTForecasts based on temporal pattern analysis.
- Day-of-week mood forecasting
- Time-of-day emotional patterns
- Trend direction (improving / declining)
- Seasonal pattern detection
- Trigger anticipation from schedule
- Confidence scores per prediction
Codable structs serialized to JSON and stored in a single Core Data entity (AIState). The entire personality model can be loaded in one fetch, updated incrementally, and synced across devices as a single atomic object. No external database. No vector store until v1.5. Just Core Data.
Privacy architecture.
zero cloudPrivacy is not a feature of DailyVox. It is the architectural constraint every technical decision is built around. The system is designed so that private data physically cannot leave the device for processing.
Zero network processing
Every AI operation runs on the device's Neural Engine. Transcription uses requiresOnDeviceRecognition = true. NLTagger runs locally. The Twin is computed and stored in Core Data. There are no API calls, no cloud functions, no telemetry on journal content.
No third-party SDKs
DailyVox contains zero third-party dependencies for core functionality. No analytics SDKs. No crash reporting that sends journal content. No ad networks. The only external code is Google Analytics on this website (not in the app) and Apple's own frameworks.
Apple's "Data Not Collected"
DailyVox carries Apple's "Data Not Collected" privacy label on the App Store. This is the strictest category — the app collects no data, linked or unlinked to the user's identity.
Cloud AI journal vs DailyVox
| typical cloud AI journal | DailyVox | |
|---|---|---|
| audio processing | sent to cloud servers | on-device Neural Engine |
| AI model location | remote API (OpenAI etc) | Apple on-device models |
| text analysis | cloud NLP service | NLTagger (local) |
| data storage | company servers | Core Data · SQLite on device |
| account required | yes (email, password) | no |
| third-party SDKs | analytics, crash, ads | none |
| privacy label | "Data Linked to You" | "Data Not Collected" |
| works offline | no | yes, fully |
| subscription | $5–15 / month | free |
| who can read your journal | company, employees, sub-processors | only you |
Technical roadmap.
build logWhere DailyVox has been, what's being built now, and where it's going. Each version adds a layer to the on-device AI stack. Shipped items are live on the App Store; everything below the line is honest about not being finished. The full roadmap has the detail.
Voice journaling + on-device AI
Core voice journaling with fully on-device transcription, NLP, encrypted storage, biometric lock, widgets, Siri Shortcuts.
Twin + personality model
Custom TwinEngine with communication style, emotional signature, knowledge graph, and temporal mood forecasting.
Ask Your Twin + social sharing
TwinChatView with pattern-matched query system. ShareablePersonalityCardView renders at 3× for Instagram Stories and X. Review prompts via SKStoreReviewController at milestone entries.
The warm redesign
A complete visual rework to a warm, calm palette — sage, gold, and terracotta on ivory — applied app-wide across light and dark themes, with the Digital Twin moved to the center of the app. The unused HealthKit entitlement was removed; it returns with Body Twin in v1.5.
Body Twin — HealthKit
The Twin gains a body. HealthKit reads sleep, HRV, resting heart rate, steps, and mindful minutes as background context for every entry. Apple Watch companion records from the wrist and samples heart rate during the recording — but only when at rest, so a workout isn't mistaken for emotional stress. Activity context tag (at_rest / active / post_workout) tells the Twin how to interpret each entry. HR stored as delta from your personal hour-of-day baseline. "Data Not Collected" privacy label preserved.
The Twin learns from your day, not just your words
On-device Photos/Vision scene analysis turns the day's camera roll into context (derived labels only — never the photos, nothing leaves the device), plus on-device music-library listening patterns as a mood signal. Both flow through a review-and-discard queue. Off by default; "Data Not Collected" label preserved. Pulled forward from v2.3.
Find entries by meaning, not keywords
NLEmbedding for 512-dim sentence embeddings. Cosine similarity vector search. Z-score anomaly detection. K-means clustering. Foundation for v1.7 RAG. Embodied search builds on v1.5 — "show me entries where I was stressed but didn't say so."
Foundation Models + tool calling + SpeechAnalyzer
On-device 3B Foundation Model replaces template-based Twin chat. Tool calling lets the Twin autonomously query Core Data. @Generable for structured output. streamResponse() for streaming. RAG-grounded answers cite the entries they drew from. SpeechAnalyzer replaces SFSpeechRecognizer. Requires iPhone 15 Pro+. Zero network calls.
Hybrid retrieval — a Twin that actually answers
v1.7's whole-entry vector averaging scored realistic questions at cosine 0.02–0.25, under the 0.37 abstention threshold, so the chat abstained on nearly every genuine diary question while still working in demos. Retrieval became hybrid — per-sentence NLEmbedding similarity plus content-word overlap — with a re-measured threshold (τ=0.29, 98.2% balanced accuracy) on an eval leg authored from this exact failure. Honest abstention on unjournaled topics is preserved. Plus an opt-in research pilot: one-tap emotion labels after recording, on-device, exported only when the participant initiates it.
Twin Voice + a real accessibility pass
AVSpeechSynthesizer reads Twin replies aloud using voices already on the device, through a picker scoped to the user's language, deduplicated by name, ordered so an exact locale match leads. No permission, no entitlement, no enrollment. Personal Voice was built and then deliberately dropped: it carries a real accent but costs a ~30-minute, 150-sentence enrollment the app cannot do for you, so accent here is approximated rather than reproduced — a stated stopping point, not an oversight. Alongside: Dynamic Type across 138 call sites, constellation labels raised from 2.5:1 to 8.75:1 contrast, and VoiceOver values for the Twin Resolution ring and section picker.
The Twin speaks your language
The interface ships in Spanish, French, German and Italian, chosen because every feature works fully in them — search by meaning relies on on-device sentence embeddings Apple provides for a limited set of languages. Recording already worked in every language the iPhone can transcribe; this release changed the interface. iPhone-only by conviction: no macOS or visionOS targets. Depth on one platform, breadth in languages.
The same Twin, on the other half of the world's phones
A native Kotlin and Jetpack Compose app, not a wrapper. Every feature the iPhone app has, reached differently where Android gives you nothing to reach with: a bundled VADER lexicon instead of a system sentiment API, a model-free name detector instead of a licence-encumbered NER model, MediaCodec and plain arithmetic instead of Accelerate. Health Connect for body signals, opt-in and read-only. No internet permission of any kind — the same claim as iOS, verifiable the same way, in Android's own app info screen.
The Twin joins the system assistant — on your terms
Siri AI integration via App Intents: ask the system assistant and it consults your Twin. Cross-app context adoption as iOS 27 APIs open to third parties — context flows in, nothing flows out. Next-generation Foundation Models for deeper reasoning.
Persona conditioning — Twin learns to think like you
Validated Big Five personality scoring from journal narratives (language-based personality modeling). Multi-tier persona conditioning: the measured profile plus retrieved style exemplars — your actual phrasings — steer every reply. Monthly personality snapshots power identity-evolution diffs and "talk to your past self." Fully on-device; no desktop training step.
The most accurate mirror of yourself
After years of daily entries: a Twin that talks like you, sounds like you (in your own cloned voice, if a model ever qualifies on the phone), predicts your reactions, explains causality from past entries, and shows personality evolution over time. Full RAG, persona conditioning grounded in your measured personality, autonomous tool calling. Not a clone — it knows your narrated self, not your complete self. Thoughts you don't journal are invisible to it. Entirely on-device, exportable only by you.
Research context.
related workDailyVox exists at the intersection of on-device LLMs, personal AI, and mental-health technology. Several recent research papers explore adjacent ideas.
-
[1]
2026
Memory-Efficient Structured Backpropagation for On-Device LLM Fine-TuningEfficient fine-tuning under mobile memory constraints — the path back to weight-level personalization if on-device adapter training becomes practical.
-
[2]
2025
MoPHES: On-Device LLMs for Mobile Psychological HealthUsing on-device LLMs for psychological health applications — parallel to the Twin's emotional modelling.
-
[3]
2024
PocketLLM: On-Device Fine-Tuning for Personalized LLMsPersonal model adaptation on mobile hardware — foundational for v2.1's personal adapter.
-
[4]
2023
PLMM: Personal Large Language Models on Mobile DevicesEarly architecture proposal for personal LLMs running on phones — the direction DailyVox pursues.
Open source.
auditableThe DailyVox app is open source under the MIT License — the SwiftUI interface, recording and transcription pipeline, Core Data stack, and all app-side processing are on GitHub. The Digital Twin engine is a separate proprietary Swift Package; the app’s zero-network behavior is verifiable regardless: run it in airplane mode or packet-capture it.
Privacy-critical software should be auditable. If you claim data never leaves the device, people should be able to verify that claim by reading the code.
Build with us.
The DailyVox app is open source and contributions to the app are welcome — UI polish, accessibility, language support, app-side integrations. The Digital Twin engine itself is a separate proprietary Swift Package.
Try DailyVox.
Free. Private. No account needed. All AI runs on your device.
Download free on the App Store →