Multilingual Reflective Journaling

Entry to Portrait

Capture → screen → reflect → analyse → remember
Zone 01
Capture
& Confirmation
✍️
Free writing
any language, no prompts
no streaks, no minimum
🎙️
Voice recording
captured in the browser
length checked server-side
🧾
Confirmed, then real
draft
review
submit
invisible and unanalysed
until its author confirms
🧹
Draft lifecycle
cancel deletes the audio
stale drafts expire
a wrong transcript never
reaches the portrait
confirmed
entry
Zone 02
Live Turn
🌐
Language resolution
ambiguous Cyrillic goes
to the likelier-missed one
🚦
Screened before generated
a deterministic layer runs
first and can end the turn
🧠
Context in parallel
portrait · similar entries
session turns · trend
🎚️
Mode, then words
listen · reflect · explore
support · resource · silence
the reply streams while
nothing analytical blocks it
escalate
on a signal
resources
not a turn
Zone 03
Risk
Cascade
🪜
Cost-ordered layers
rules instant
model on a hit
intent rarely
each layer runs only when
the cheaper one is silent
📶
Graded response
warmer tone · check-in
human help · turn closed
🕰️
Longitudinal watch
silence after a hard entry
distress that keeps rising
🔒
A hash, not the text
the writing is not kept
and nobody is alerted
code constants,
never runtime settings
cleared
entry
Zone 04
Deferred
Analysis
🎭
Emotion cascade
lexicons on every entry
a model on longer text
🔍
Pattern counters
absolutism · obligation
avoidance · isolation
📈
Prosody features
speech and pause structure
pitch, loudness, voice quality
⚖️
Asymmetric fusion
text owns valence
voice owns arousal
a calm voice over glad words
flags conflict, never averages
🧭
Embeddings
multilingual vectors:
meaning over wording
voice is a weak signal,
never a label of its own
signals
+ vectors
next turn's
context
Zone 05
Memory
& Portrait
🗂️
Three horizons
this session · recent months
the whole history
🎯
Semantic recall
vector search in the main
store, scoped to one writer
🪞
Incremental portrait
counters updated per entry
a rebuild reconciles drift
〰️
Voice drift
distance between period
centroids, month over month
inferred from behaviour,
never from answers to a quiz
Single store
Vectors, flexible documents and relational rows share one transactional database, so an entry and the portrait it updates commit together or not at all.
Engine portability
Generation, embeddings and transcription sit behind one contract - which engine answers, hosted or local, is a deployment choice rather than a code dependency.
Boundaries
No diagnosis, no clinical labels, no pretending to be human, and an honest pointer to people whenever the conversation reaches its limit.
Register
The reflective voice comes from adapter-based tuning on counselling dialogue plus preference pairs that reward reflection over advice.
Entry confirmed by its author
Escalated for a closer look
Ends the turn instead of answering
Cleared for analysis
Emotion signals and vectors
Read back as context