Academy projects
Shelved

AI Journal

A journal that thinks — and keeps it to itself.

A private iPad journal with a language model that runs entirely on the device, through Apple’s MLX. It reads what you write, reflects it back, and never sends a word anywhere.

On-device · 0 bytes sent
Role
Design & development
Context
Apple Developer Academy, 2025
Status
Shelved
Stack
Swift · SwiftUI · MLX

01The idea

The most private thing you write shouldn’t be the first thing you upload.

Typical AI journal

Your entry makes a round trip.

To get a summary or a mood, the words leave the device, get processed on a server you don’t control, and come back.

AI Journal

The model comes to the words.

A compact language model runs on the iPad’s own chip. Reflection, summaries and mood all happen locally — with the Wi-Fi off, if you like.

02Try it

Write something. Watch it think.

Type a few lines — or pick one — and press Reflect. Then flip the network off and do it again. Nothing about the result changes.

Today
0 words
On-device model Idle
Tokens0
Time0.0s
Sent0 B

Your reflection will appear here — generated where you are, not on a server.

Network: on · requests: 0

Honest footnote: this web demo uses a tiny word-list model running in your browser, just to show the flow. The app does the real thing — a language model running on the iPad through Apple’s MLX.

03Over time

A week, read back to you.

Each entry gets a quiet sentiment read, so patterns surface on their own — the good days, the heavy ones, and what they had in common. The same local model writes the summary.

Mood this week · example data

Low on Wednesday: “too many tabs open” High on Sunday: “rode to the beach”

04What it does

Four things, all of them local.

Privacy first

All AI processing happens on the device. No account, no upload, nothing sent to the cloud.

A local language model

Powered by Apple’s MLX framework, built for efficient machine learning on Apple silicon.

Smart insights

Summaries and gentle reflections generated from your own entries, not from a template.

Mood tracking

The sentiment of what you write, tracked over time, so the pattern shows up before you name it.

05How it works

Inference, in your hands.

MLX runs the model in the iPad’s unified memory, so the same chip that draws the interface also does the thinking — no round trip, no waiting on a connection.

InterfaceSwiftUI for iPadOS — a writing surface first, AI second.
ModelA compact language model run on-device with Apple MLX.
DataEntries stay on the device. Nothing leaves it — by design, not by setting.
Reflector.swift
import MLXLLM
import MLXLMCommon

/// Turns one entry into a short reflection — on-device.
@Observable final class Reflector {
    private var model: ModelContainer?

    func prepare() async throws {
        model = try await LLMModelFactory.shared
            .loadContainer(configuration: .journal)
    }

    func reflect(on entry: String) async throws -> String {
        guard let model else { return "" }
        return try await model.perform { context in
            let input = try await context.processor
                .prepare(input: .init(prompt: .reflection(entry)))
            return try generate(input: input,
                                parameters: .init(temperature: 0.4),
                                context: context) { _ in .more }
                .output
        }
    }
}

The snippet is illustrative: it shows the shape of the on-device path, not the app’s source.

06My role

What I built.

An exploration of what AI feels like when it never leaves the room. I’ve since shelved it: the idea carried on as A place to rant, a journal in the browser that works with whichever AI you already use.

  1. 01

    Privacy as the product

    Designed the app around one rule — the words never leave the device — and let every feature follow from it.

  2. 02

    On-device intelligence

    Built the offline AI layer with Apple MLX to run language-model features locally: reflections, summaries and sentiment.

  3. 03

    A calm iPad interface

    Designing a SwiftUI writing surface where the AI stays quiet until it’s asked — a journal first, a model second.