llms.txt
# NoSleepLab
> One developer's studio: native macOS menu bar and desktop utilities, iPhone
> apps, web apps and a game. Generated from the catalog, so the counts are the
> real ones.
Of 62 entries in the catalog, 7 can be opened or
downloaded right now and 37 more have public source but no
packaged release. The other 18 are not released
and should not be described as available.
## You can use these today (7)
- [Ghostmark](https://nosleeplab.com/apps/ghostmark): Share your screen with your name and today's date tiled across it, so a leaked frame points home — download: https://github.com/markksantos/Ghostmark/releases/latest/download/Ghostmark.dmg
- [BEAROUT](https://nosleeplab.com/apps/bearout): An arcade-idle bear ranch: hunt, stack the haul, run it to the sell table, upgrade, repeat — open it: https://bearout.vercel.app
- [FableWatch](https://nosleeplab.com/apps/fablewatch): Watched one AI model around the clock and called it the moment it came back — then it did — open it: https://fablewatch.com
- [ArtificialWatch](https://nosleeplab.com/apps/artificialwatch): Know the minute a new AI model drops — every provider API swept every 60 seconds — open it: https://artificialwatch.com
- [Lore](https://nosleeplab.com/apps/lore): The wiki for all your agents: point it at the markdown folder they write to, and it tells you what changed and what is now true — open it: https://lore-delta-seven.vercel.app/
- [Tide](https://nosleeplab.com/apps/tide): A to-do app that takes the power features seriously — natural language, recurrence, focus, review — open it: https://azure-hill-3bv5.here.now/
- [streamcount](https://nosleeplab.com/apps/streamcount): One number for your live audience — viewers summed across YouTube, Twitch, and Kick — open it: https://pastel-hollow-jmxj.here.now/
## Public source, no packaged release (37)
These can be read and compiled. They are not downloadable builds.
- [Aware](https://nosleeplab.com/apps/aware): Glance at the menu bar and see how long you have actually been at the screen today — view source: https://github.com/markksantos/Aware
- [WindowTiler](https://nosleeplab.com/apps/windowtiler): Twelve windows scattered across the screen, and one hotkey that lines them all up — view source: https://github.com/markksantos/WindowTiler
- [Drip](https://nosleeplab.com/apps/drip): Know how much hotspot data is left while you can still do something about it — view source: https://github.com/markksantos/Drip
- [ExtensionManager](https://nosleeplab.com/apps/extensionmanager): See every extension and plugin quietly running on your Mac, and switch off the ones you did not ask for — view source: https://github.com/markksantos/ExtensionManager
- [GitPulse](https://nosleeplab.com/apps/gitpulse): See which repos have uncommitted work before standup, without cd-ing through all of them — view source: https://github.com/markksantos/GitPulse
- [Grip](https://nosleeplab.com/apps/grip): You meant Cmd+W and hit Cmd+Q — now the keys have to be held down before anything quits — view source: https://github.com/markksantos/Grip
- [SoundDeck](https://nosleeplab.com/apps/sounddeck): Drop a sound effect into a call or a stream by tapping one key, without unplugging anything — view source: https://github.com/markksantos/sounddeck
- [Watchdog](https://nosleeplab.com/apps/watchdog): See who walked up to your Mac while you were away — face and motion detection, with every capture staying on the device — view source: https://github.com/markksantos/watchdog
- [Peeky](https://nosleeplab.com/apps/peeky): Press Space on a Markdown, JSON, CSV or code file and actually see it instead of an icon — view source: https://github.com/markksantos/Peeky
- [Catch](https://nosleeplab.com/apps/catch): The banner slid away before you read it — Catch keeps every notification so you can go back — view source: https://github.com/markksantos/Catch
- [DesktopRecord](https://nosleeplab.com/apps/desktoprecord): Search for the thing you saw on screen last Tuesday and never saved anywhere — view source: https://github.com/markksantos/DesktopRecord
- [Flux](https://nosleeplab.com/apps/flux): Switch projects with one hotkey and get the right apps, files and notes back on screen — view source: https://github.com/markksantos/Flux
- [Haze](https://nosleeplab.com/apps/haze): The screen you are not looking at stops glaring at you — inactive monitors dim themselves — view source: https://github.com/markksantos/Haze
- [HookCut](https://nosleeplab.com/apps/hookcut): Find the moments worth keeping in a two-hour recording and hand your editor a timeline — view source: https://github.com/markksantos/HookCut
- [Shhh](https://nosleeplab.com/apps/shhh): One key mutes the mic, and the menu bar tells you which way it is without a test — view source: https://github.com/markksantos/Shhh
- [ChimeTime](https://nosleeplab.com/apps/chimetime): Notice it is 6pm and not 9pm — every hour arrives as a chime and a panel from the notch — view source: https://github.com/markksantos/ChimeTime
- [ClipShelf](https://nosleeplab.com/apps/clipshelf): The thing you copied three copies ago, back at your cursor without leaving the app — view source: https://github.com/markksantos/ClipShelf
- [FootageCalculator](https://nosleeplab.com/apps/footagecalculator): Drop a folder of rushes on it and get the total runtime before you quote the edit — view source: https://github.com/markksantos/FootageCalculator
- [Upscalr](https://nosleeplab.com/apps/upscalr): The only copy of the photo is 800 pixels wide — make it four times bigger, not four times blurrier — view source: https://github.com/markksantos/upscalr
- [Vault](https://nosleeplab.com/apps/vaultapp): Put the files you would rather nobody opened behind Touch ID, and one hotkey to seal them — view source: https://github.com/markksantos/VaultApp
- [EchoType](https://nosleeplab.com/apps/echotype): Find the paragraph you typed into a box that lost it, encrypted and searchable on your own Mac — view source: https://github.com/markksantos/EchoType
- [Anchor](https://nosleeplab.com/apps/anchor): Keep one corner of a window in sight — a live crop of it, floating above whatever you are doing — view source: https://github.com/markksantos/Anchor
- [Sentry](https://nosleeplab.com/apps/sentry): See which apps on your Mac are talking to the internet, to whom, and in which country — view source: https://github.com/markksantos/Sentry
- [Tempo](https://nosleeplab.com/apps/tempo): The Dock hides snappier in the morning and calmer at night, on a curve you set yourself — view source: https://github.com/markksantos/Tempo
- [Afterburn](https://nosleeplab.com/apps/afterburn): Start a long build and everything else steps out of the way until it has finished — view source: https://github.com/markksantos/Afterburn
- [1on1](https://nosleeplab.com/apps/1on1): Messages from the one person you cannot miss — they land center-screen, not in a banner — view source: https://github.com/markksantos/1on1
- [Canary](https://nosleeplab.com/apps/canary): Hear that your email turned up in a breach from your own Mac, not from a stranger's login — view source: https://github.com/markksantos/Canary
- [Deadbolt](https://nosleeplab.com/apps/deadbolt): Hand someone your Mac without handing over Messages — the apps you pick ask for Touch ID — view source: https://github.com/markksantos/Deadbolt
- [Carbon](https://nosleeplab.com/apps/carbon): See which app is drawing the most power right now, and what that costs in carbon — view source: https://github.com/markksantos/Carbon
- [Polaroid](https://nosleeplab.com/apps/polaroid): Turns a Mac screenshot into an instant-film Polaroid — paper grain, a develop animation, a handwritten caption, one-click export — view source: https://github.com/markksantos/Polaroid
- [Crossy Royale](https://nosleeplab.com/apps/crossy-royale): Crossy Road as a battle royale — thirty chickens on one start line, a fog wall behind them and a safe zone that keeps closing — view source: https://github.com/markksantos/crossy-royale
- [CORDEL](https://nosleeplab.com/apps/cordel): A one-on-one card game on classic Hearthstone-style rules, with a 66-card set from Brazilian folklore and an omen that rewrites every turn — view source: https://github.com/markksantos/cordel
- [SocializeAI](https://nosleeplab.com/apps/socializeai): Answers your iMessage and WhatsApp chats for you, one thread at a time, with ten seconds to stop every reply — view source: https://github.com/markksantos/SocializeAI
- [Plectrum](https://nosleeplab.com/apps/plectrum): A browser MIDI editor for plucked strings — thirteen instruments from nine musical cultures, every note synthesized, no samples — view source: https://github.com/markksantos/plectrum
- [Meridian 7](https://nosleeplab.com/apps/meridian7): A fictional 1989 workstation operating system that boots in your browser — eleven programs, six colour schemes, no audio files — view source: https://github.com/markksantos/meridian7
- [Zero-Point Energy](https://nosleeplab.com/apps/zero-point): An interactive Three.js tour of the quantum vacuum — fluctuations, the irreducible ½ħω, the Casimir effect and the 10¹²⁰ problem — view source: https://github.com/markksantos/zero-point
- [ARES](https://nosleeplab.com/apps/ares): A speculative 3D film of Mars being settled and terraformed from 2029 to 2140, rendered entirely in procedural shaders — view source: https://github.com/markksantos/mars-colony
## In the lab (14)
Built and running privately, with screenshots on their pages, but not released
and not downloadable.
- [ReceiptLog](https://nosleeplab.com/apps/receiptlog): Photograph a receipt, get a categorized expense, and hand your accountant one PDF at the end of the quarter
- [Vitality](https://nosleeplab.com/apps/vitality): Meals, pantry and training in one place, with the nutrition math done for you — and optional AI that runs on your own key
- [Workout](https://nosleeplab.com/apps/workout): A muscle map that shows which groups you actually trained this week, and an editor for writing the plans you actually do
- [First Bites](https://nosleeplab.com/apps/firstbites): An offline guide to baby-led weaning: 211 foods, how to cut each one by age, meal ideas, and a journal to share with your pediatrician
- [BabyHQ](https://nosleeplab.com/apps/babyhq): Contraction timer, hospital bag, feeds, diapers and sleep — one app for the last week of pregnancy and the first weeks at home
- [SwipeClean](https://nosleeplab.com/apps/swipeclean): Tinder for your camera roll — swipe left to clean, right to keep, and nothing is deleted until you confirm
- [DevLaunch](https://nosleeplab.com/apps/devlaunch): Open a project's editor, terminal and browser in one click instead of four
- [WordEraser](https://nosleeplab.com/apps/worderaser): Ctrl+W deletes the previous word in any text field, not just the terminal
- [MenuBarStats](https://nosleeplab.com/apps/menubarstats): SSD, CPU, and memory percentages, live in the menu bar
- [Mira](https://nosleeplab.com/apps/mira): Loops a recorded clip of you through a virtual camera so you can step away from a call
- [FolderPainter](https://nosleeplab.com/apps/folderpainter): Find the right folder by color instead of by reading — tint and label them like the system would
- [ArtificialMeter](https://nosleeplab.com/apps/artificialmeter): Every Claude subscription's session and weekly limits in the menu bar, read side by side — and a one-click switch to the one with room
- [Evergreen](https://nosleeplab.com/apps/evergreen): Birthday and relationship reminders — the people you love, never forgotten
- [Grimoire](https://nosleeplab.com/apps/grimoire): A local-only studio for a personal wiki — edit, graph, curate, and capture into it
## Planned (4)
In progress. Nothing to use yet.
- [ToggleNotch](https://nosleeplab.com/apps/togglenotch): Give any display a notch — for testing notch-aware layouts, or because you miss having one
- [PortMap](https://nosleeplab.com/apps/portmap): Port 3000 is already in use — see what is holding it and kill it without opening a terminal
- [BatteryBuddy](https://nosleeplab.com/apps/batterybuddy): The battery numbers macOS keeps to itself: cycle count, temperature, and how fast capacity is falling
- [Fuse](https://nosleeplab.com/apps/fuse): Menu bar icons disappearing behind the notch — put all of them in one dropdown instead
## Lab notes (20)
Engineering write-ups from building these apps: the symptom, the cause and the
fix, written from each app's source.
- [Anthropic API key in an iOS app binary: move it to the Keychain](https://nosleeplab.com/notes/anthropic-api-key-hardcoded-ios-app): A Swift string literal ships in the app binary, readable with strings. Store a user-supplied key in the Keychain with a ThisDeviceOnly class instead.
- [AudioContext was not allowed to start: make the click the UI](https://nosleeplab.com/notes/audiocontext-not-allowed-to-start-user-gesture): Chrome starts an AudioContext made before any user gesture suspended. Create or resume() it in a click or keydown handler, like Meridian 7's power button.
- [AXIsProcessTrusted false after rebuild: ad-hoc signing and TCC](https://nosleeplab.com/notes/axisprocesstrusted-false-after-rebuild-ad-hoc-signing): An ad-hoc signature's designated requirement is the build's cdhash, so changed code no longer matches its Accessibility grant. Sign with a stable identity.
- [CGWindowListCreateImage unavailable in macOS 15: use SCStream](https://nosleeplab.com/notes/cgwindowlistcreateimage-unavailable-macos-15-screencapturekit): CGWindowListCreateImage is deprecated in macOS 14 and a compile error from a macOS 15 target. Anchor still uses it; here is the SCStream replacement.
- [Check a password against Have I Been Pwned without sending it](https://nosleeplab.com/notes/check-password-have-i-been-pwned-k-anonymity): SHA-1 the password, send only the first 5 hex characters to the Pwned Passwords range API, match the suffix locally, and add Add-Padding: true.
- [Claude Code signed out by another app: refresh token rotation](https://nosleeplab.com/notes/claude-code-oauth-refresh-token-rotation): Anthropic rotates the refresh token on every refresh, so another app that refreshes Claude Code's login signs it out. Only Claude Code should refresh it.
- [CMIO camera extension: personal teams can't sign System Extension](https://nosleeplab.com/notes/cmio-camera-extension-personal-team-system-extension): A Core Media I/O camera is a system extension. Apple doesn't offer the System Extension capability to free accounts, so a personal team can't sign it.
- [Hide a macOS app the moment it activates, then ask for Touch ID](https://nosleeplab.com/notes/hide-macos-app-on-activation-touch-id): Hide the app inside the didActivateApplicationNotification handler, then run LAContext. It can't promise no flash: the app is already active.
- [Intercept Cmd+Q with a CGEventTap and repost it without a loop](https://nosleeplab.com/notes/cgeventtap-intercept-cmd-q-repost-without-loop): Drop Cmd+Q in an active session tap, then send a new key-down/up with CGEventPostToPid. It enters after session taps, so your own tap never sees it.
- [Karplus-Strong with tanh saturation never decays: normalise by drive](https://nosleeplab.com/notes/karplus-strong-tanh-feedback-gain): tanh(drive·x)/tanh(drive) has slope drive/tanh(drive) > 1 at zero, so a Karplus-Strong loop using it self-oscillates. Divide by drive instead.
- [Laplacian sharpness always 0 on iOS: Core Image and Vision traps](https://nosleeplab.com/notes/laplacian-sharpness-always-zero-core-image): Rendering a Laplacian to .RGBA8 with a grey colour space wrote nothing, and caught Vision errors became 0. Render to .Rf and return nil when Vision fails.
- [Mac Dock animation speed: autohide-time-modifier and killall Dock](https://nosleeplab.com/notes/mac-dock-animation-speed-autohide-time-modifier): defaults write com.apple.dock autohide-time-modifier sets the Dock's auto-hide speed; killall Dock applies it. On a schedule, restart only on real changes.
- [macOS global hotkey: RegisterEventHotKey vs an NSEvent monitor](https://nosleeplab.com/notes/global-hotkey-registereventhotkey-vs-nsevent-monitor): A Carbon hotkey that never fires may just be registered late. An NSEvent monitor needs Accessibility and can't stop the key reaching the frontmost app.
- [Neon never scales to zero under a one-minute cron job](https://nosleeplab.com/notes/neon-scale-to-zero-one-minute-cron): Neon suspends a compute only after 5 idle minutes, so a query every minute keeps it awake all month. We moved live state to Vercel Blob with gated writes.
- [NSWindow behind all app windows on macOS: use normal level minus one](https://nosleeplab.com/notes/nswindow-behind-all-windows-desktop-level): A window at the desktop-icon level + 1 painted over a maximized Chrome window in testing. NSWindow.Level.normal.rawValue - 1 kept it behind app windows.
- [Per-app power on Apple silicon: Mach ticks and ri_energy_nj](https://nosleeplab.com/notes/per-app-power-apple-silicon-mach-ticks-ri-energy-nj): proc_pidinfo CPU times on Apple silicon are Mach ticks: scale by 125/3, not 1. For per-process energy, proc_pid_rusage has ri_energy_nj from macOS 13.
- [StoreKit 2 refunded purchase still unlocked: use currentEntitlements](https://nosleeplab.com/notes/storekit-2-refunded-purchase-still-unlocked): Transaction.all still returns refunded purchases. Check Transaction.currentEntitlements instead, or in expo-iap pass onlyIncludeActiveItemsIOS: true.
- [Swift menu bar app stops updating: Timer run loop mode and App Nap](https://nosleeplab.com/notes/menu-bar-app-timer-stops-updating): A Timer in the default run loop mode doesn't fire while a menu is open, and App Nap throttles it later. Add it in .common and hold a beginActivity token.
- [THREE.Sprite ignores negative scale: how to flip a sprite in three.js](https://nosleeplab.com/notes/threejs-sprite-negative-scale-mirror): scale.x = -1 can't flip a THREE.Sprite: its shader uses the length of each matrix column. Flip the UVs, or draw on a camera-facing PlaneGeometry.
- [Why an approval queue for AI agent edits fails, and what works](https://nosleeplab.com/notes/ai-agent-edits-approval-queue-fails): Agents write with their own file tools, so a propose-edit MCP tool gets bypassed. Watch the folder, rank changes, and pin sign-offs to a content hash.
## Notes
- No analytics anywhere. The Mac and iPhone apps keep data on the device; the
hosted apps keep only what their feature needs.
- Ghostmark, the one packaged download, is an Apple silicon build that needs
macOS 26. It is signed ad hoc rather than notarized: on first launch, allow it
under System Settings › Privacy & Security › Open Anyway.
- Source: https://github.com/markksantos
- Release history: https://nosleeplab.com/changelog (RSS: https://nosleeplab.com/feed.xml)
- Full text of every app entry and lab note: https://nosleeplab.com/llms-full.txt
- Made by Mark Santos (https://markksantos.com) at Mark Studios (https://www.markstudios.com)