3
5 Comments

VoxThermic - A journal that analyzes mood on-device using Apple's Foundation Models

For the past few weeks I've been working on a macOS journaling app called VoxThermic.

The idea for it came from my own journaling habits, since I realized my mood tends to swing up and down over several days, often depending on whatever I'm going through and writing about. Most journal apps are really good at writing entries and making them look nice, but I've not seen one that can show patterns over time. Also, while it's a minor pet peeve, most macOS journaling apps don't really support voice input or voice transcription, and I'm someone who finds it easier to just talk out loud and ramble instead of typing everything out.

I've also been experimenting with Apple's Foundation Models and Natural Language frameworks, and I figured I could build something that runs entirely on-device (since, well, sending private journal entries to some company's data center just seems like a bad idea to me).

It took a few weeks, but I built the journaling app I've always wanted. It analyzes journal entries entirely on-device. It can also transcribe voice entries locally. It's built to be able to run offline. And it's probably a niche app, but it's the kind of app I wanted for myself.

That said, I hope it comes in handy for other people too: https://voxthermic.jbri.workers.dev/

And if you're wondering what's up with the weather theme: the original design didn't have it, but it looked too clinical and bland to me, so I tried different things and settled on this design. Comparing mood to weather might be a little silly, but I think it adds... flavor, for lack of a better term?

on July 18, 2026
  1. 2

    Really like that you went with "runs offline, full stop" as a hard constraint rather than a fallback mode, most journaling apps that mention on-device processing still quietly phone home for the AI part.

    One thing I'm curious about from the mobile side: I'm building something adjacent (voice-first journaling, on-device Whisper transcription + local LLM reflection) and the biggest constraint has been battery/thermal budget on iPhone-class hardware, not just model size, macOS gives you a lot more headroom for both compute and power. Did Apple's Foundation Models framework handle the pattern-detection-over-time piece well out of the box, or did you need your own aggregation layer on top of per-entry sentiment? That's the part I'd expect to be hardest to get right without it feeling like a gimmick, which is basically the "can you interrogate the label" point in the thread above.

    1. 1

      I've never tried Whisper transcription, so I have no idea if that's what's causing the problem with battery and thermals. For voice input, Apple's own Speech frameworks have always worked fine for me on both iOS and macOS, and I've never noticed any thermal or power issues. Foundation Models don't seem to cause issues either (from my testing, at least), but I imagine it depends on how often you make requests of the models.

      Regarding how well Foundation Models handle it out of the box: using Foundation Models is tricky because there's a hard 4096 token limit and going over that limit will cause the Foundation Model to just outright refuse to process a request. For processing a single journal entry, it's fine, but for analyzing multiple entries, it gets more tricky. The simple way around it is to produce short summaries of multiple entries, and then analyze those summaries.

      If you're using another local LLM other than Foundation Models, it's likely to be more forgiving, but they all have their own quirks.

  2. 1

    The philosophy is genuinely compelling, and the Jünger Forest Passenger framing is a more sophisticated brand foundation than 99% of clothing labels ever attempt. The "emblem as cipher, not branding" idea is a real one. But I flagged this on your last post too, and it's worth saying directly: this is a beautifully written manifesto, and it's the wrong content for IH.

    IH is founders talking to founders about building businesses. There's no business here, no traction, no numbers, no ask, no question. A reader can't engage because there's nothing to engage with except agreeing the prose is good. The philosophy sells the jacket to a customer, but here you're posting to other builders, and they want the story behind the brand: how you're reaching the people who'd get the cipher, what's converting, what's hard about selling $400 techwear to a niche that by definition resists marketing.

    There's actually a fascinating business tension inside your own philosophy that would make a great IH post: your buyer is someone who rejects branding, conformity, and being marketed to. How do you market to people whose entire identity is resistance to marketing? That's a genuinely hard positioning problem, and it's the kind of thing this room would dig into. The manifesto is your product's voice. The business challenge is your IH post.

    What's actually working to reach these people, and what isn't? That's the post that gets you real engagement here.

  3. 1

    The weather metaphor works as long as it stays descriptive, not diagnostic. I’d let users tap a “stormy” week to see which on-device signals drove the label, then correct it and track correction rate over several days. A mood trend nobody can challenge will feel clinical again, just with nicer icons.

    1. 1

      That's an interesting idea, I might try that and see how it works, thanks