Paws is a distraction-free focus app for NextUI that pairs Pomodoro sessions, daily schedules, and music integration with a system that turns your focus time into budgeted gaming sessions. It comes with an unimpressed cat who has a particular habit of assigning tasks. Consider it corrective training.
![]() Main Screen |
![]() HUD Hidden |
![]() Terminal |
![]() Pomodoro |
![]() Routines |
![]() Purrcade |
At its core, Paws is a simple focus and time-management app for NextUI. I built it because I wanted a place to focus without using my phone as the center of that process. Phones are surely useful, but they are also where distraction lives.
Indeed, for years, I noticed my attention span getting worse. Even without social media (which I have never participated in), I still had the same pattern of checking my mails, looking up random things, losing contexts, restarting.
I’ve tried what feels like every focus and productivity app in existence. The serious ones, the lo-fi ones, the gamified ones. Simple timers, full-blown narrative games, anything with a Pomodoro timer built in. After years of testing and actually using them, this is probably the only topic where I can confidently call myself an expert.
Many of those apps are clearly made with care, and they absolutely work for most people. Unfortunately, not for me. My mind throws up constant, random thoughts at me; some are real inspirations related to my work, but they're distractions nevertheless. A task that should take one hour turns into two or three because I start researching, checking the time, reading emails, or chasing a super important topic before I forget. In practice, this is noise, and a genuinely brilliant trick by the brain to avoid staying still and focusing.
That is also why I picked this device format: you cannot truly multitask on it, so it is much harder to distract yourself. I also disabled music browsing behavior as much as possible, because my brain turned that into another avoidance pattern by constantly searching for the perfect track instead of focusing.
Paws started as a simple Pomodoro timer, and only as a timer, with no text label attached. Over time, I kept adding what I actually needed during real sessions: better tracking, visuals, music, and a system that actually tricks me, for once, into playing games on Brick. I don’t claim this is better than what already exists. It has plenty of faults, most of them stemming from my own limitations, but it undeniably separates the self from the phone, which, in my opinion, has great value.
That is still the point of this app.
The Main Screen is the center of Paws: timer state, focus status, music state, backgrounds, and quick access to the app's major flows.
Core purpose:
- Focus sessions with clear start/pause/resume flow
- Background and ambience control without leaving the session context
- Music and ambience control without turning the app into a full media browser
- Lightweight HUD plus optional text customizations
What you are seeing here in practice comes from four systems that work together:
- Focus sessions (Pomodoro + custom timer)
- Meditation
- Atmosphere and visual customization
- Music playback
Custom timer supports countdown or count-up and can be labeled for session tracking. Session history and stats are saved so you can see where your time actually went.
Pomodoro session setup and loop flow with saved behavior that is designed to be simple and repeatable.
Meditation includes three modes:
- Timed meditation with interval bells
- Guided meditation audio
- Guided box-breathing mode with visual pacing
Tasks are simple checklists with completion tracking. This stays intentionally lightweight.
Routines provide day and time-of-day planning with phase structure:
- Morning
- Afternoon
- Evening
- Night
And weekly scheduling from Monday to Sunday.
Booklets are plain text quick-reference files shown inside the app. They read .txt files from the booklets/ folder.
- Although there is no full Markdown support, the following styles are recognized: italics, bold, # h1, ## h2, ### h3, [main], [accent], and [highlight].
Protocol is optional, but it is also the most distinctive part of Paws because it connects focus tracking to your game library. It's probably one of a kind.
Terminal is the guidance interface, run by a cat who leans on puns and sarcasm a bit too much. His name is Paws, and he is the purroductivity and workmeow system itself, as he calls it.
-
Paws is the guidance interface. It continuously logs your focus and meditation sessions, then converts that history into two practical values: recuperation minutes (that you purchase tickets for game sessions with) and progression (for now, only rewards the user with titles). You can run this system strictly, keep it looser, or manually add and subtract time depending on how rigid you want the loop to be. You can find these under Settings → Gameplay.
-
You can start these quests under
Simulations → Ongoing(3rd icon) orProtocols → Assignments(5th icon). -
Guidance manages up to three active quests at a time, excluding narrative questlines. Each quest is a concrete play objective tied to a game, system, or achievement, and this is where recuperation minutes are actually spent. Recommendations are pulled from your ROM library and can be limited by your system whitelist. Quests can be generated automatically or selected manually through Protocol.
-
When RetroAchievements data is available, Paws attaches the first locked achievement for the selected game. If that data is unavailable, it falls back to a time-based objective. Abandon behavior is intentionally restricted: a quest can only be abandoned after at least five minutes of play, and only if no achievement has been unlocked.
- For RetroAchievements-only assignments, I REALLY suggest scanning RA-only games under Settings → RetroAchievements. Otherwise, Paws will look for an achievement and fall back to generic quests if none are available. This happens because achievement calls are generated only after a random game is selected, as there’s no feasible way around that. I did implement a partial workaround by blacklisting games that have no RetroAchievements in the database, so when a game is randomly picked, it will naturally favor one with achievements. This is why scanning your ROM directories is helpful, though less necessary if your library mostly consists of popular games that already support achievements.
- Scanning takes a significant amount of time because it uses your API key to actively check every single ROM in your library and cache its RetroAchievements data for quest suggestions. You only need to do this once. After that, if RA-only quests are enabled, Paws will suggest objectives exclusively from games that support RetroAchievements and correctly identify your locked achievements. If your ROM collection mostly consists of relatively popular titles and lacks obscure ones, this is less useful, but I still recommend doing it.
- Cross-checking your ROM directory against the RetroAchievements database requires a WebAPI key. These keys are long strings of numbers and letters and aren’t practical to enter using the embedded keyboard. Please open
./states/config.txtand edit the line containingra_api_key=to add your key manually.- Under RetroAchievements.org settings, navigate to Authentication to find your API key.
- For RetroAchievements-only assignments, I REALLY suggest scanning RA-only games under Settings → RetroAchievements. Otherwise, Paws will look for an achievement and fall back to generic quests if none are available. This happens because achievement calls are generated only after a random game is selected, as there’s no feasible way around that. I did implement a partial workaround by blacklisting games that have no RetroAchievements in the database, so when a game is randomly picked, it will naturally favor one with achievements. This is why scanning your ROM directories is helpful, though less necessary if your library mostly consists of popular games that already support achievements.
-
Paws also hosts built-in and custom narrative guidance, which is predefined narrative content written by me and delivered through this flow. Narrative chains take time to design, write, and test, so updates are planned regularly but not rushed. They are basically one long quest chain (10 stages) centered on RetroAchievements objectives.
- I have planned narrative scripts around seven themes. The first is Patience, and it’s already included in the initial release. I have titled it A Plumber’s Patience, and it guides the player through several Mario titles, gradually increasing in difficulty. As for the remaining six, I have handpicked the achievements and mapped out a rough progression, but I still need to write the scripts. The hardest part is already done for those, so it should not take much more to release them.
-
Custom narratives are plain
.txtfiles underterminal/narratives/, using an INI-style format with a[meta]block and staged nodes (stage.N.*). Supported task types areplay_game,play_console, andearn_achievement, and these can be combined across stages. A typical quest chain is structured as intro, optional user branch, objective, then completion text. I encourage people to write and share narratives, mostly because it is fun to do, but especially now that RetroAchievements support is in place for NextUI, and community-made quests can be a fun thing. I also built a node-based quest editor so anyone can create these quests, so please check it out here (this is an outdated build, but I will update the version when I find the time). Purrcade's RetroAchievements is my own port, so some edge-case behavior may differ slightly from NextUI and you may encounter bugs (I hope you don't). Core functionality is the same, so these narrative quests can be completed within Paws, or within NextUI's own MinArch, or anywhere really.
Balance manages recuperation minutes and minute economy behavior.
- Recuperation behavior is adjustable (rate + manual add/subtract)
- You can use Paws as a pure focus app, or use guidance only by manually adding time
Simulations are controlled play sessions inside the same ecosystem.
- Claimed balance minutes can be used for intentional, controlled play windows
- Minute countdown and remaining-time tracking are controlled by my customized MinArch (what Paws calls it, Purrcade)
- To make time tracking work correctly, launch games from Paw's Protocol/quest flow inside the PAK (not directly from NextUI's own)
- It is a simplified fork with Paws-specific modules, including RetroAchievements integration, online manual and game logo support, and a custom overlay system
Stress Test is a stricter challenge behavior for users who want harder rules than regular simulation sessions. Normally supports hardcore RetroAchievements, but I disabled it until the implementation is more complete and we get an okay from the developers.
Protocols are basically the quest board.
Baseline keeps records of your focus/meditation sessions.
I must say, if you only want timers, routines, meditation, and stats, you do not have to interact with this system at all.
Profile includes user/account-facing settings and service pairing details.
Spotify notes:
- Create a folder under
music/and usealbum.spotifywith the album URL. - In Paws, open
Settings -> Profile -> Spotify, set your device name (however you want), and useconnect / restart. - Pair from a signed-in phone or computer: start playback there first, open Spotify's device picker, and select your device name.
- After pairing, Spotify issues tokens for playback control. These are not permanent and may expire or be revoked.
- You don't need to pair it every time to use it, but I also don't know how long it can be stored for.
- Paws and your device will be in sync, which means you can continue listening on your mobile/computer, but not vice versa. That would defeat its purpose.
- Spotify account passwords are not stored by Paws.
- Spotify playback naturally requires Premium.
Security note:
Sensitive auth fields (including Spotify tokens, Screenscraper, and RetroAchievements) are stored in states/authentication.bin using the Paws auth format (SRAUTH01).
- Current format: AES-256-GCM (OpenSSL), 16-byte nonce, authenticated tag, and AAD-bound metadata (version + nonce + payload length).
- Key derivation: device-bound key material derived on-device from hardware/system fingerprint inputs and hashed with SHA-256.
- This is a little bit overkill, but if you wish to use the system, there is no reason not to.
Display covers visuals, backgrounds, atmosphere, and text presentation.
Almost all of the color settings are straightforward, except for color harmony. Color harmony is a rather unique feature: it samples UI colors from the currently displayed background image, allowing the text and interface tones to match the scene instead of relying solely on fixed palette choices.
It’s less relevant at the moment, since I’m using a fixed color theme, but users with custom backgrounds and color schemes may find it useful. To enable it, toggle color harmony in the color settings and press accord to randomly select dominant colors from the background.
Atmosphere features:
- Time of day and season aware background system
- Optional ambience overlays (that can be paried with ambience sounds)
- Stanza editor for dynamic top-right text lines
Current background structure (what Paws is using now):
scenes/
<location>/
<mood>/
<season>/ # optional (supports prefixes like "(i) ")
morning.png|jpg
afternoon.png|jpg
evening.png|jpg
night.png|jpg
morning(rain).png|jpg # optional effect/weather variant, sequential pngs are displayed as gifs.
Optional overlay frame paths (tags pair ambience sound with these backgrounds):
scenes/<location>/<mood>/overlays/<tag>/<tag>_001.png
scenes/<location>/overlays/<tag>/<tag>_001.png
overlays/<tag>/<tag>_001.png
Alternatively, if you do not wish to associate ambient variations with specific locations, but simply want to add ambient sounds, with or without corresponding overlays:
sounds/ambience/<tag> # tags must be put inside parentheses. you can rename the folder however you like to change the name displayed in the top-right HUD.
sounds/ambience/<tag>/<tag>.wav|mp3
sounds/ambience/<tag>/<tag>/overlays/<tag>_001.png
sounds/ambience/it's raining (rain)/overlays/rain_001.png
sounds/ambience/it's raining (rain)/rain.wav
Currently, Paws only has rain and storm overlays, but has many other ambient sounds (barn, birds, city, fire, park, rain, river, storm, vinyl, waterfall, ocean).
Current repo example:
scenes/miyajima/all is still/(iii) autumn/(i) morning.jpg
How I set up sync (and how you can change it):
- By default, I map phases to real seasons (
(i) spring,(ii) summer,(iii) autumn,(iv) winter). - I map backgrounds to time-of-day (
(i)morning,(ii)afternoon,(iii)evening,(iv)night). - With time/season detection enabled, Paws syncs these from your device clock and calendar month.
- You are not locked into this. You can rename folders, use different art, and build your own structure. This is just the default system I use because it keeps everything naturally in sync.
You can use defaults and ignore all of this, or customize deeply.
Sound controls bells, ambience, and music playback.
Music playback supports local files plus radio streams, Bandcamp, Spotify, and YouTube sources.
Supported sources:
- Local:
.mp3,.wav,.ogg, and.urlstream files - Radio: internet radio streams via
.urlfiles (first non-empty line = stream URL) - Bandcamp: album resolver via
album.bandcamp, with auto playlist generation (next/previous works) - Spotify: album resolver via
album.spotify, with auto playlist generation (next/previous works) - YouTube: album/video resolver via
album.youtube; chapters become a playlist when available, and live streams (aka Lofi Girl) are supported (live streams behave as a single stream, not chapter playlist)
How to use it:
- Create a folder under
music/(example:music/<album-name>/). - Choose one source style inside that folder:
- Local files: drop audio files directly in the folder.
- Radio stream: create a file like
station.urland put the station stream URL on the first non-empty line. - Bandcamp: create
album.bandcampand put the album URL on the first non-empty line. - Spotify: create
album.spotifyand put the album URL on the first non-empty line. - YouTube: create
album.youtubeand put the video/playlist URL on the first non-empty line.
- In Paws, switch to that music folder from the main screen and start playback.
- Use built-in controls to change folder/track, pause, and resume while you focus.
Recommended setup:
- Use one source file per folder for
album.bandcamp,album.spotify, andalbum.youtube. - Put multiple tracks in local folders when you want manual next/previous control.
- Put multiple
.urlstations in radio folders if you want to hop between stations.
Example:
music/
Focus Set/
album.bandcamp
Deep Work/
album.spotify
Ambient Coding/
album.youtube
Local Jazz/
01-intro.mp3
02-loop.wav
Radio Stations/
soma.url
jazz24.url
Please be understanding that if you are using Spotify or YouTube, the device may and will take up several seconds to fetch data, prepare chapters, and begin streaming. For some albums, this can take up to 7-8 seconds. Bandcamp, surprisingly, is incredibly fast.
Policy note:
I will not add download support. In fact, I modified the default behavior because it was downloading automatically, so it is unlikely that I will change my mind. Bandcamp integration is for preview/listening only, and I strongly recommend buying the albums you use.
I support background music, as it is central to the experience for most users, but I do not intend for this application to become a full-fledged music player. I am already well beyond the original scope. By tens of thousands of lines of code, in fact.
Gameplay covers focus-to-play behavior and runtime constraints.
- A balance rate of
1.0means every minute of focus earns one minute of playtime to spend in Protocol. I strongly recommend lowering it. - Game Library scanning caches titles from your ROM folders so simulation suggestions load faster.
- You can manually add focus time and bypass the system, but that goes against the purpose of the system itself. You can also extract time.
If this helps you do even one better session per day, it has done its job.
A: pause/resume active timer runSelect: open Timer Menu.Startopen Settings Menu.Menuopen Protocol MenuLeft/Right: cycle background base (time of the day, if available)Up/Down: cycle locationL1/R1: previous/next music folderL2/R2: previous/next trackL3: music on/off.R3: play/pause current music.Y: if a session is running, open end-session confirm.X: toggle meta selector.- In meta selector:
Left/Rightchange token,Up/Downchange selected value,Arandom background that matches the highlighted token,R3open stanza selector.
- In meta selector:
- Hold
B(~450ms) orPower: toggle HUD visibility.
1.Timer2.Pomodoro3.Meditation4.Tasks5.Routines6.Booklets
1.Terminal2.Balance3.Simulations4.Stress Test5.Protocols6.Baseline
1.Profile2.Display3.Sound4.Gameplay5.About6.Exit App
Y: backspace.X: insert space.R3: save/confirm text in most text-entry screens.Start: also saves in some text-entry screens (profile name, some auth fields).
L3deletes entries,R3creates, saves, or confirms entries.XandYtoggles the current selection in Timer and Meditation.- Timer/Pomodoro/Meditation pickers:
R3opens Focus Activity selection. - Routines:
L2/R2changes selected day,Left/Rightchanges time of the day. - Tasks list:
R3adds item,L3deletes selected item,Yresets completion marks for current list.
Guided Meditations
"Mindful Meditations" created by Diana Winston and others for the UCLA Mindful, Copyright (c) 2011-2024 The Regents of the University of California (The UC Regents).
Mindful Meditations are licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
Typography
Barlow Condensed
Copyright (c) 2017 The Barlow Project Authors
Licensed under SIL OFL 1.1
Ambience Sounds
Some ambience sounds are from Cymatics "Life Ambient Recordings".
Usage is subject to Cymatics terms and product licensing:
Third-Party Software
- Purrcade player frontend: based on MinArch from the MinUI/NextUI ecosystem, with Paws-specific modifications and integration.
- dr_mp3 / dr_wav: audio decoding in app runtime.
License: Public Domain or MIT-0 (see source headers insrc/dr_mp3.handsrc/dr_wav.h). - rcheevos: RetroAchievements runtime/client support in player.
License: see upstream project/license files inplayer/rcheevos/. - libretro-common: shared libretro support code in player.
License: see file-level notices inplayer/libretro-common/. - spotifyd: Spotify Connect receiver used by bundled music integration.
Source/license reference:bin/README_SPOTIFY.txt,references/spotifyd-master/LICENSE. - dbus-daemon / dbus-send: bundled D-Bus runtime tools for Spotify control.
Notice file:bin/dbus-send.copyright.txt. - yt-dlp: optional media metadata/resolution helper.
License: see upstream project license/distribution terms. - Linked system libraries (build/runtime): SDL2, SDL2_image, SDL2_ttf, libzip, pthread, dl, m, and optionally FFmpeg/OpenSSL depending on build flags.
License texts should be shipped in your Third-Party Licenses package.
Service Notice
Spotify, YouTube, Bandcamp, RetroAchievements, and ScreenScraper are trademarks/services of their respective owners.
Paws is an independent third-party project and is not affiliated with or endorsed by them.





