Inspiration
I spend a lot of time in front of a screen — assignments, side projects, reading I'm behind on, emails I keep meaning to send. And at some point during a long stretch, I'll notice I've been staring at the same line for five minutes, or I've typed and deleted the same sentence three times, or I have this low-level hum of twelve different things I need to do but I can't start any of them because they're all competing for the same headspace.
The usual advice is "take a break" or "write a to-do list." Both are fine. But a pomodoro timer doesn't know if I'm in flow or stuck — it just knows 25 minutes passed. And when I'm genuinely overloaded, the last thing I want to do is open a blank to-do app and organise my thoughts neatly. That's the problem. My thoughts aren't neat. That's why I'm stuck.
I wanted to build something that meets you in that moment — when your brain is full and your rhythm has gone wrong — and helps you put things down, pick one thing up, and maybe stand up for twenty seconds.
What UNLOAD Does
UNLOAD is a desk companion built around one loop: unload your mind, organise what's there, focus on one thing, take a small reset, keep going.
The core feature is the Brain Dump — a big empty text box where you type everything that's rattling around in your head. You don't have to organise it. Half-sentences, worries mixed with errands, whatever. The app takes that mess and turns it into a short prioritised list with categories, a summary, and one recommended thing to focus on first.
That list feeds into the Mental Parking Lot, which is the key idea: one item sits in a "Focus Now" lane, and everything else is explicitly parked. You're not forgetting about them — they're written down, they have priorities — but they're not your problem right now. Only the focus item is.
From there you can enter Focus Mode — a timer, a goal, and a big "I'm stuck" button for when you need it.
When you do need a reset, UNLOAD offers two flavours. Micro Breaks are guided 30–60 second exercises: breathing, shoulder rolls, looking away from the screen, standing up. Micro Quests are the same idea wearing a slightly sillier hat — hold your arms up for 15 seconds (the "Yoda Reset"), drink a glass of water, name the one thought that keeps interrupting you. They have names and XP because for a lot of people, that framing is the difference between doing it and closing the tab.
And through all of this, there's Mochi.
How It Works
The flow goes like this: you're working and you hit a wall. Mochi — the small companion that lives in the margins of the app — notices and walks over with a speech bubble. You get three options: Unload (dump your brain), Break (a guided reset), or Quest (a small challenge). You can also dismiss it or snooze.
If you choose Unload, you type out everything on your mind. The AI (or the local fallback) organises it. You get back a summary, a prioritised list, and a recommended focus. That populates your parking lot. You pick your focus, start a session, and work. When you finish or get stuck again, the cycle repeats.
The whole thing is designed to take under two minutes from "I'm stuck" to "I'm back at it with one clear thing to do."
AI
OpenAI does exactly one job in UNLOAD: it takes the messy brain dump and returns a structured list. That's it. It's not a chatbot, it doesn't coach you, it doesn't interpret your mood. You dump text in, you get items with priorities and categories back.
The model I'm using is gpt-4o-mini, called through a small Express backend running on localhost. The backend exists so the API key never has to be in the browser code — it stays server-side.
What I'm most glad I built is the local fallback. If there's no API key configured, a deterministic organiser runs entirely in the browser: it splits clauses, cleans up the phrasing, and scores priority from keyword evidence. It's not as smart as the model, but it works, and it means anyone who clones the repo can use the full app without signing up for anything. During development that fallback saved me constantly — I wasn't burning API calls every time I tested the dump flow.
Meet Mochi
Mochi is a small round companion drawn in SVG. It lives in a layer above the app and wanders around the empty margins — sitting, stretching, yawning, dozing off. It has different poses and expressions that change depending on what's happening: ears up when it notices something, a concerned face when things look rough, a little celebration after you finish a reset.
The whole point of Mochi is that it's not a notification. It doesn't dim the screen. It doesn't trap focus. It doesn't block what you're doing. It walks over, says something in a speech bubble, and you can ignore it. That took a lot of tweaking to get right — the line between "helpful companion" and "annoying popup" is thin, and most of the design work went into staying on the right side of it.
Mochi also participates in the flows: it's present during brain dumps, it stretches alongside you during physical breaks, and it cheers when you complete a quest. Five personality options (Calm, Cozy, Chaotic, Nerd, Zen) change how Mochi talks without changing what it does.
A Companion Beyond the Browser
UNLOAD also has an Electron desktop companion. Mochi can appear as a small frameless, transparent, always-on-top window that floats above your other applications. You can drag it anywhere on your screen.
This matters because the web app only sees you when its window is focused. The desktop Mochi stays visible while you're working in your editor or browser, and clicking it brings the main UNLOAD window forward so you can start a dump, a break, or a quest. The desktop companion and the main app stay in sync — when Mochi has something to say in the app, the desktop version shows the same speech bubble.
Designing for Less Intrusion
One decision I made early was that UNLOAD would not use a webcam. A lot of wellness tools track your posture or your face or your eye movements, and that's valid, but I didn't want the core experience to depend on someone having a camera pointed at them while they work. That felt like the opposite of the goal.
The interventions are meant to be lightweight. Mochi notices patterns in your activity — not what you're doing, just the rhythm of it — and offers help without watching your physical environment. You can dismiss it, snooze it, or turn it off entirely. The app is designed to be something you want open, not something that monitors you.
Challenges
The hardest part was Mochi's behaviour. Making a character wander around the screen without covering up the content you're trying to read required figuring out where the safe spots actually are — the side gutters on wide screens, the bottom edge on narrow ones — and routing walks so Mochi goes around the content area instead of through it.
The desktop companion introduced its own set of problems. Synchronising state between two Electron windows (the main app and the tiny pet window) without overcomplicating the architecture took some iteration. Getting the transparent frameless window to feel right — growing when the speech bubble appears, shrinking when it goes away, staying draggable — was finicky.
Building the local fallback organiser was more work than I expected. Splitting messy stream-of-consciousness text into distinct items, stripping filler phrases, and scoring priority from keywords is straightforward in concept but full of edge cases.
The biggest design challenge was making the Brain Dump, Focus Mode, Micro Breaks, Micro Quests, and the Parking Lot feel like one cohesive product rather than five separate features bolted together. Mochi ended up being the thread that ties them together — it's the thing that connects the detection to the action to the reward.
What I Learned
Building the Electron desktop companion taught me more about cross-window communication than I expected. I learned that keeping the IPC surface tiny — the main process handles window positioning and nothing else — makes everything more predictable.
The AI integration reinforced something I already half-knew: always build the experience that works without the API first. The local fallback isn't a stub; it's the default path, and having it meant I could design the whole UI before worrying about model output.
The biggest lesson was about restraint. Every feature I added made the next one harder to fit in without the app feeling cluttered. I cut more ideas than I shipped, and the project is better for it.
What's Next
Some things I'd like to explore but haven't built yet:
- Voice input for the brain dump, so you can talk through what's on your mind instead of typing it
- Richer activity detection via the Electron shell, so the app can see system-wide interaction patterns instead of only focused-window events
- Weekly patterns — which hours you tend to get stuck, kept entirely on-device
- Parking lot history beyond the current day
These are future ideas, not current features.
Built With
- React
- TypeScript
- Vite
- Node.js
- Express
- Electron
- OpenAI
Links
Built With
- electron
- express.js
- node.js
- openai
- react
- typescript
- vite
Log in or sign up for Devpost to join the conversation.