joe / sukar
All projects

Voxora

Conversations, with context.

A conversation library that turns saved calls into searchable transcripts, useful follow-ups, and people insights with a clear path back to the evidence.

My work
Analysis, evidence, profiles, and product experience
Platform
Android
Stack
Kotlin / Jetpack Compose / Room / WorkManager / Media3 / whisper.cpp / Python
Try the interactive demo →
Have a related project? Let’s talk ↗
Voxora People Insights interface showing a person's saved conversation context
People Insights, shown with synthetic demonstration data.
Voxora conversation insights with contextual observations and supporting source material
Conversation insights using synthetic demonstration data.
The challenge
Saved recordings are difficult to revisit when the useful detail is buried in a long call.
My contribution
Analysis, evidence, profiles and product experience around the recording workflow.
The result
A conversation library that keeps transcripts, interpretations and supporting sources connected.

A recording is only the beginning.

Finding the important moment in a long call can take almost as much effort as having the conversation. A file name cannot tell you what was agreed, which question is still open, or what changed since the last time you spoke. Voxora makes that history easier to revisit.

My work develops the analysis, evidence, profile, and interface layers around the recording workflow. The aim is to make saved conversations useful without hiding the difference between a source, an interpretation, and something the app simply does not know.

From a call to something you can act on.

The call library connects playback, timed transcripts, summaries, and suggested follow-ups. A transcript segment can take you back into the audio. Today gathers completed analyses into a daily brief, while earlier days remain available as saved history.

Ask answers questions using source calls, keeping verification within reach. Suggested tasks remain reviewable records: finding a possible commitment in a conversation does not give the app permission to send a message, move money, or act on someone's behalf.

People, with context attached.

People Insights starts with a user-maintained directory of confirmed names, aliases, relationships, and notes. Person, You, and Together views keep each participant's observations distinct while making it easier to review what happened between them.

Claims, requests, changing topics, and possible recurring patterns retain supporting examples and uncertainty. Coverage and source links explain how much conversation history supports an observation. A missing analysis stays missing instead of quietly becoming a neutral score.

Three processing layers. Clear responsibilities.

The Kotlin and Compose app owns metadata, cached results, and recoverable job state through Room and WorkManager. Media3 keeps playback available across the interface. Speech recognition can run on the device through whisper.cpp or through a configured private speech service.

The Mac service handles transcription, speaker turns, voice enrollment, and optional acoustic measurements. Separately consented hosted analysis receives bounded text context, rather than raw audio. A completed transcript remains useful when that optional analysis service is unavailable.

Keeping yesterday's answer honest.

An analysis can finish after someone corrects a speaker, edits a transcript, renames a person, or changes a provider. I treat those changes as part of the data model: background work carries source, identity, and revision checks before a result can become current.

Cached profile reads are separate from extraction and projection work. When the evidence changes, affected results can be invalidated and rebuilt. This keeps a fast profile screen from depending on fresh model work while reducing the chance that an old answer looks newly authoritative.

Show the meaning. Keep the uncertainty.

Aura and Faces give saved call context a visual presence, with timelines, coverage, and explanations alongside them. Motion can be paused, and the interface adapts to narrow and wide displays without losing the playback workflow.

Recording quality, device behavior, language, and speaker attribution all affect the result. Voice-model scores are estimates over available samples, not diagnoses or certainty about another person's inner state. Those limits belong in the experience, where someone can see them while interpreting a result.

How it fits together.

  1. 01

    Capture & revisit

    Keep a searchable call library with audio and timed transcripts.

  2. 02

    Analyze with consent

    Run speech processing locally or privately; enable bounded text analysis separately.

  3. 03

    Check the evidence

    Open the source calls behind answers, follow-ups, and people insights.

Next project
JNC Suite

Got a good problem?

Tell me what you’re building—or what needs to work better.

Start a project ↗