A few months ago, I caught myself doing something embarrassing.
I had placed a heavy book on my MacBook keyboard to stop my status from switching to Away during a long call.
Not my proudest engineering moment.
The problem was simple: I was working, but not always touching my keyboard. Sometimes I was on a video call. Sometimes I was reading documentation. Sometimes I was sketching something on a whiteboard. Sometimes I was just thinking through a bug before writing code.
But to tools like Microsoft Teams and Slack, “not touching the keyboard” often means “away”.
After a few too many “Are you there?” messages, I started looking for better solutions.
The suggestions I found were… creative.
Move your mouse every few minutes.
Use a hardware mouse jiggler.
Put a coin on the trackpad.
Place a spoon on the scroll wheel.
Actual advice. From real people. In 2025.
So I built NoAway.
The problem I wanted to solve
I didn’t want to fake productivity.
I wanted to fix a small but annoying mismatch between how people work and how presence indicators behave.
A lot of work does not involve constant keyboard or mouse input:
- joining long meetings
- reading specs or documentation
- reviewing architecture
- debugging mentally before touching code
- using a physical notebook or whiteboard
- stepping away briefly without wanting to look unavailable
Yet many workplace tools still use system idle state as a signal for presence.
That signal is convenient, but it is not always accurate.
So the idea was simple: build a tiny desktop utility that prevents false “Away” states during the hours when I actually want to be shown as available.
What NoAway does
NoAway is a lightweight background app for macOS and Windows.
It runs in the menu bar on Mac and the system tray on Windows. You can enable or disable it with one click.
The core feature is simple: while enabled, it helps prevent Teams and Slack from switching you to Away just because the operating system thinks you are idle.
But the feature I ended up caring about most was the scheduler.
Instead of manually turning the app on and off, you can define when it should run.
For example:
Monday to Friday, 9:00 to 18:00
Outside those hours, NoAway stays inactive.
That was important to me. I didn’t want another utility I had to babysit. I wanted something I could configure once and forget.
Why I didn’t want to simulate random input
The most obvious approach would be to simulate a mouse movement or a key press every few minutes.
That works, but it also feels fragile.
Fake input can interfere with the user’s actual work. It can move the cursor at the wrong moment. It can trigger unexpected UI behavior. And if you choose keyboard input, things can get weird very quickly.
I once tested a naive version that sent a harmless key event at intervals.
It was harmless right up until it wasn’t.
Let’s just say one Slack message almost became:
aaaaaaaaaaaaaaaa
That was enough for me.
I wanted an approach that felt more like how presentation apps prevent the display from sleeping: interact with the operating system at the system level, without injecting random input into whatever the user is doing.
So NoAway avoids browser extensions, injected scripts, and fake typing. It runs as a small native background process and uses documented operating system APIs where possible.
The goal was not to hack Teams or Slack.
The goal was to prevent the OS from reporting an idle state too aggressively during configured working hours.
⸻
The app structure
At a high level, the app has four parts:
- A tiny background process This is responsible for keeping the session active while the app is enabled.
- A tray/menu bar UI The interface is intentionally boring: enable, disable, open settings, quit.
- A scheduler Users can define days and time ranges when the app should be active.
- A login item The app can start automatically when the user logs in, so the schedule works without manual steps.
The hardest part was not the core functionality. The hardest part was making it feel invisible.
For a utility like this, good UX means the user almost never has to open it.
⸻
What I learned while building it
- Small utilities need a clear boundary
When you build a tool like this, it is tempting to keep adding features.
Per-app rules.
Profiles.
Statistics.
Team settings.
Advanced automation.
Notifications.
Status history.
I resisted most of that.
The product becomes easier to understand when the promise is narrow:
Prevent false Away states during the hours you choose.
That’s it.
The narrower the tool, the easier it is to explain, support, and improve.
⸻
- Scheduling matters more than I expected
At first, I thought the app only needed an on/off switch.
But an always-on tool creates a new problem: you have to remember to turn it off.
The scheduler made the app feel much more responsible.
It also made the use case clearer. NoAway is not meant to keep your status green forever. It is meant to run during the time periods you define.
That small distinction changed how I thought about the product.
⸻
- Distribution is harder than development
The first version took a few weekends to build.
Getting people to find it is taking much longer.
This is the part indie developers often underestimate. Building the app is only one part of the work. You also need to explain the problem, find the right search terms, write a landing page, answer objections, and show up where people are already looking for solutions.
In this case, the search intent is very specific.
People are not searching for “presence management utility”.
They are searching for things like:
- stop Teams from going away
- keep Slack active
- prevent Teams away status
- mouse jiggler alternative
That shaped the landing page, the copy, and the way I explain the app.
⸻
- Be honest about what the app does
There is a temptation to describe small utilities with vague productivity language.
I tried to avoid that.
NoAway does one thing: it helps prevent Teams and Slack from marking you Away when your system becomes idle.
That’s the product.
It does not make you more productive.
It does not replace communication.
It does not solve bad management.
It does not decide whether using it is appropriate in your workplace.
Users should follow their company policies. But from a product perspective, I think it is better to describe the tool plainly than to hide behind buzzwords.
⸻
Pricing
I priced NoAway at €4.99, one time.
- No subscription.
- No trial.
- No upsell.
I spent more time thinking about this than I expected.
Too cheap, and the app feels disposable. Too expensive, and it becomes hard to justify for a tiny utility.
€4.99 felt like the right price for a small tool that solves a specific annoyance.
⸻
Final thoughts
This was a fun reminder that not every useful product needs to be big.
Sometimes the best ideas are small, slightly annoying problems that people have already tried to solve with books, coins, spoons, scripts, or mouse jigglers.
NoAway started as a personal fix for a silly problem.
Now it is a tiny product.
If you have ever been marked Away while still working, reading, thinking, or sitting in a meeting, you might understand why I built it.
You can try it here:
👉 noaway.app
Available for macOS and Windows. One-time price: €4.99.
I’d also be curious to hear from other developers: have you ever built a small utility around an annoyance that felt too niche at first, but turned out to be more common than expected?
Top comments (0)