Sentinel
In progressA minimalist Android home launcher that doubles as a self-control tool: scheduled app blocking, tamper notifications, and linked accountability partners who can see each other's status.
A collection of apps and tools I've made — Android apps, browser tools, and little utilities. Mostly for my family and myself.
A minimalist Android home launcher that doubles as a self-control tool: scheduled app blocking, tamper notifications, and linked accountability partners who can see each other's status.
A personal, ad-free games hub for Android — one app hosting several games (Minesweeper, a Jetpack side-scroller) with more designed to drop in later.
An Android TV app that loads a streaming site in a full-screen WebView and filters profanity in real time — masking profane subtitles and muting those lines. A D-pad virtual cursor makes the site usable with a remote.
The shared filter core, as a real Chrome/Firefox extension (Manifest V3): masks profanity in captions and mutes the audio in real time on Flixtor, Netflix, Prime Video and Crunchyroll. The TV, phone, and kiosk apps all bundle this same engine.
Turns a spare Linux PC into an Android-TV-style streaming box: a remote-navigable hub for Flixtor, Netflix, Prime Video and Crunchyroll with the same filter applied. Desktop Chrome's fully-provisioned Widevine CDM makes this work where the Android app can't.
An Android companion app for the Clean Viewing kiosk: discovers it on the LAN and sends navigation commands, so the TV box can be driven from a phone instead of a physical remote.
The phone companion to the TV app: a full-screen WebView that loads a streaming site and injects the same shared profanity filter, with a native touch UI and auto-rotation while a video is fullscreen.
A file-based D&D toolkit: a flexible character sheet today, with a campaign wiki, session log, and audio-to-summary pipeline planned. All data lives as plain JSON + markdown, versioned with git and rendered by a local dashboard.
Personal Android app that generates AI reflection questions for scripture passages and conference talks, using a bring-your-own-API-key model (OpenAI, Gemini, or Groq) with results cached locally.
A public Play Store fork of Scripture Study: the same AI-generated reflection questions, but backed by a shared Cloudflare Worker proxy with Google Sign-In, per-user quotas, content moderation and a cost cap instead of a personal API key.
A small, offline Android unit converter — length, weight, temperature, volume, cooking units and more — that copies the result to your clipboard so you can paste it wherever you need it.
Approve or deny Claude Code's permission prompts from your phone over Telegram. When you're away from the desk, "allow this command?" prompts arrive as a message with Approve / Deny buttons; your tap decides whether the tool runs.
A wall-mounted family dashboard for an Android tablet kiosk: a shared calendar synced from Google, a rotating chore board, a grocery list, a photo slideshow, weather, and voice input, backed by an Express API.
Post-surgery Android app for alternating Ibuprofen/Tylenol on a timer: confirming a dose schedules the next one via AlarmManager, with snooze and a repeating chime so a face-down phone doesn't get missed.
Android app that shows a full-screen "remember to pray" reminder on the first unlock of the day within a configurable window, with snooze, an optional sound, and a local gratitude journal.
A block-based note-taking Android app for tracking household projects: headings, checklists, drawings and other block types organized per project, stored locally with export/import.
An early-stage household PA system: offline text-to-speech announcements broadcast to Chromecast speakers around the house, built on FastAPI with a scheduler for recurring messages.
Turns a long recorded-audio file into individually tagged mp3 tracks for a kid's mp3 player: splits on silence, fingerprints each segment against AcoustID/MusicBrainz for title/artist/art, and flags low-confidence or duration-mismatched matches for manual review instead of mislabeling them.