Inspiration
I have ASD. Being around people drains me — group study sessions, coworking spaces, even casual "let's work together" calls are exhausting. But here's the cruel part: I still get lonely. I've always envied people who can just... sit in a library with friends and study side by side.
There's a name for why that side-by-side thing works: body doubling. Having someone simply present while you work makes it dramatically easier to focus — it's a well-known technique, especially in the neurodivergent community. Services like human co-working matches and "study with me" streams exist because of it. But they all require the one thing that's hardest for me: a real person.
So I asked a different question: what if the presence didn't have to be human?
What it does
Oshi Focus Timer is a Pomodoro timer (25/5/15) where your oshi — a companion character — quietly sits with you while you work.
- She reacts to your attention. Using on-device gaze detection (ARKit), she notices when your eyes drift away from your work. Her usual expression is a relaxed, half-lidded deadpan — but when you drift, her eyes open and she looks at you. That's it. That's the whole intervention.
- She never says "work harder." No motivational quotes, no guilt. She communicates only through expressions. The design principle is: she doesn't cheer, she stays.
- Focus sessions are button-less. You can't stop a session with a casual tap — you hold for 1.5 seconds. No nagging dialogs asking "are you sure?"
- Bring your own oshi (Premium). Generate a companion from a single image of your favorite character, with a full expression set — powered by a monthly subscription through RevenueCat.
- Private by design. All face data is processed on-device and never stored, never uploaded. No account, no login.
How I built it
- SwiftUI, iOS-native. I actually started this app in Flutter — then made the painful call to rewrite it natively, because ARKit gaze tracking and battery efficiency demanded it.
- ARKit for gaze detection, tuned to tell the difference between "glancing at my notes" and "doomscrolling."
- RevenueCat SDK for the subscription, paywall, and purchase/restore flow — sandbox-tested end to end.
- An original companion IP. I designed her from scratch: white and light-blue, deadpan eyes ("jitome" in Japanese). The visual language is three layers — a flat, calm UI shell; one single "real" object (a tactile desk clock); and her, watching from behind it.
Challenges I ran into
- Gaze detection is easy to demo, hard to ship. False positives (looking at paper notes ≠ losing focus) took far more tuning than the happy path.
- Killing my own sunk cost. Abandoning the working Flutter prototype for a native rewrite hurt, but it was right.
- Designing encouragement without words. Expressing "come back" with nothing but an eye state — no text, no sound — went through many iterations.
- Camera + battery. A focus app that eats your battery breaks its own promise; on-device optimization was non-negotiable.
Accomplishments that I'm proud of
- I built the app I needed for years, and it actually works on me.
- A companion that supports you without a single word of pressure — I believe this restraint is the design.
- A camera feature with genuinely nothing leaving the device.
What I learned
The biggest irony: Shipaton itself is my first "studying together with everyone." Building in public, sharing progress with strangers on the internet, being part of a global cohort of builders — this is the closest I've ever felt to that library table I always envied. It turns out I can do it, when the structure is right. That's exactly what I want this app to be for someone else.
What's next for Oshi Focus Timer
- More expressions and more companions (she'll get friends)
- Paywall and pricing experiments with RevenueCat Experiments
- Localization beyond EN/JA
- And one day: session stats you can share — so even solo focus can feel a little less alone
Built With
- arkit
- firebase
- python
- revenuecat
- sprite-kit
- swift
- swiftui

Log in or sign up for Devpost to join the conversation.