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

Share this project:

Updates

Submission history