Details
Joined devRant on 11/14/2022
Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
-
Every note app now wants an account, a subscription, a "sync engine", and 300MB of Electron just to hold three bullet points. I only wanted somewhere to dump ideas that doesn't phone home.
So I built the boring version: markdown editor, instant full-text search, themes, keyboard shortcuts, autosaves straight to localStorage. No login, no server, works fully offline in the browser.
Groundbreaking concept, I know — a notes app that just keeps your notes.
https://github.com/p32929/notes -
Spent a weekend teaching my editor to catch processes that try to open their own OS window and drag them back in as a tab instead.
Not because it was technically interesting. Because I have watched a dev server confidently fling a fresh window across my screen one too many times, and I have run out of professional responses.
It's called Oxru. A small code editor in Rust that runs in the terminal, where every terminal a project needs lives as a tab inside it — Alt+T for a new one. Fuzzy file picker, tree-sitter highlighting, Ctrl+, for settings if you want to argue about font size.
Tested only on macOS, which is the polite way of saying I haven't tried it anywhere else and would rather not know yet.
github.com/p32929/oxru -
Spent a weekend teaching my editor to catch processes that try to open their own OS window and drag them back in as a tab instead.
Not because it was technically interesting. Because I have watched a dev server confidently fling a fresh window across my screen one too many times, and I have run out of professional responses.
It's called Oxru. Small code editor in Rust, runs in the terminal, and every terminal a project needs lives as a tab inside it - Alt+T for a new one. Fuzzy file picker, tree-sitter highlighting, Ctrl+, for settings if you want to argue about font size.
Tested only on macOS, which is the polite way of saying I have not tried it anywhere else and would rather not know yet.
github.com/p32929/oxru -
Ubuntu Server, no NetworkManager, needs WiFi. The official ritual: SSH in over the exact connection you're about to break, hand-edit a netplan YAML, get one space wrong, run netplan apply, and enjoy the silence that follows.
Did that enough times that I wrote a small Rust TUI instead. Lists nearby networks with signal strength, arrow keys to pick, Enter, type the password, done. It writes the netplan config, applies it, verifies connectivity, and rolls back to your previous network if the new one doesn't come up - so you don't strand yourself.
Called it oaifai, which is roughly how "WiFi" sounds in Bangla.
Not revolutionary. Just one less YAML file I have to be nervous about.
github.com/p32929/oaifai -
Every few months the same fight breaks out in my head: Obsidian for the local markdown I actually own, Notion for the pretty databases everyone else can see. So naturally I keep my notes in... both. Which means I keep them in neither, because the "source of truth" is whichever one I last remembered to update.
Tried the usual fixes — copy-paste, manual export, a cursed folder of half-synced markdown pretending to be a workflow. All great until the exact moment I needed them.
So I built a tiny Obsidian plugin that just does the boring part: push the whole vault up to Notion, or pull the Notion DB back down into the vault. One button each way. Cross-platform, MIT, no account, no "sync engine" fantasy. Turns out the fix for "which app owns my notes" was to stop making it a personality trait.
https://github.com/p32929/... -
My "focus system" for years: a browser tab labelled Pomodoro that I muted on day two, and the unshakeable confidence that I would take a break eventually. Turns out "eventually" arrives around hour four, right after the neck starts filing complaints.
The problem was never the timer. It's that every timer politely suggests a break and then lets me click "skip" like the responsible adult I clearly am not. So I ended up building a tiny desktop one that just... forces it. Work block ends, break block starts, no negotiation, no snooze to abuse.
It's a small Tauri app: set work/break minutes, a warning sound before the switch, and that's the whole feature list. No streaks, no accounts, no "productivity score" to feel bad about. Cross-platform, open source, does one thing.
Posting it here mostly so the next version of me can't pretend the tool didn't exist: https://github.com/p32929/pomota -
Spent a weekend building a workout tracker instead of, you know, working out. Turns out "yak shaving" also applies to your glutes. No login wall, no "connect your smartwatch," no onboarding carousel explaining what a rep is — you open it, log a set, close it. Runs on iOS, Android and Web off one React Native codebase, which felt like cheating. https://github.com/p32929/...
-
Spent years building dashboards that track uptime, latency, and error rates for systems I don't even own. My own sleep schedule? No dashboard, no logs, just vibes and regret.
So I built one for myself: tracks habits, mood, sleep, workouts, and life events, then actually shows you the correlations instead of just a guilt-inducing streak counter. Turns out "slept 5 hours" correlates suspiciously well with "shipped a bug that day." Who knew.
Open source, built entirely by talking to an AI, which feels about right for 2026: https://github.com/p32929/let -
Nothing says "modern web dev" like needing a CDN just to serve a JS file that's already sitting in a public git repo. jsDelivr works great, until you hit the rate limit at 2am and remember caching is "eventually" not "now." So naturally I did what any reasonable person does with a Tuesday: built my own. github.com/user/repo/blob/branch/file.js in, clean CDN URL out, self-hostable so the only rate limit is your own regret. https://github.com/p32929/ghcdn
-
Spent my Saturday setting up an Electron app with React + TypeScript + Tailwind + shadcn/ui. Four hours later I had achieved: one tsconfig that hates me, a shadcn CLI that refuses to detect my own project as a project, and a newfound respect for anyone who ships desktop apps for a living.
By hour five I wasn't debugging anymore, I was negotiating.
Eventually got it working, then did what any reasonable person does after suffering: turned it into a boilerplate so nobody else has to. Electron + Vite + React + TS + Tailwind + shadcn, all pre-wired, yarn && yarn dev and you're building instead of configuring.
github.com/p32929/electron-shadcn-typescript -
Spent a solid 20 minutes today alt-tabbing back to a terminal every 30 seconds to check if "npm install" was done, as if watching it would speed things up. Somewhere around the tenth glance I accepted that my attention span deserved better than that, so I wrote a tiny CLI wrapper that just pings me — sound, desktop notification, or a webhook if I'm feeling fancy — the moment any command actually finishes. Turns out "not checking" is a wildly underrated productivity feature. https://github.com/p32929/cmdn
-
macOS Force Quit: open the list, pick one frozen app, wait for the beachball, hit force quit, watch nothing happen, repeat 11 more times, slowly question your career choices. I got tired of the ritual, so I built a tiny menu bar app that nukes every user app in one click — Finder and Dock survive, everyone else goes boom. There's even a Force Shut Down button for days that are truly beyond saving. Swift, MIT, no dock icon, lives quietly in the menu bar: https://github.com/p32929/boom
-
Spent 40 minutes wiring up Postgres and an ORM to persist three config values for a side project. Then I remembered fjsondb exists — point it at a JSON file, then set / get / has / delete, done. Turns out not every prototype needs a connection pool to remember two strings.
https://github.com/p32929/fjsondb -
Spent the morning watching my brain outsource a two-digit addition to the calculator app. Twelve plus thirty-seven. Reached for the calculator. For real.
Turns out years of autocomplete, copilot, and "eh, the IDE will tell me" quietly nuked the one skill that used to make me feel clever in standups: doing math in my head before the analytics dashboard finishes loading.
So I built a thing to fight the rot. Quick mental-math drills, escalating difficulty, timer breathing down your neck — basically flashcards that judge you. Ten minutes a day and I no longer panic when someone asks "what's the rough p95 if we cut that in half."
Not a course, not a subscription, no account. Open tab, get humbled, close tab.
https://p32929.github.io/mathfinity -
Spent another evening pulling Ollama models by vibes — qwen2.5:7b? :14b-instruct-q4? who knows — only to delete half of them because they wouldn't fit in VRAM or turned out to have no vision after all. Got tired of it and made a single page that lists every model with params, sizes and tags, so I can filter and compare BEFORE wasting 9GB of bandwidth on the wrong quant. Nothing to install, it's just a table that actually searches. Groundbreaking, I know. https://ollama-models-explorer.vercel.app/...
-
Pushed a build to a friend to test. Two minutes later: "it's not loading, I think it's broken." Turned off his wifi, it loaded instantly. "...wait, that's it?"
Yeah. That's it. It's a tiny Flutter app — an offline collection of Islamic duas, Arabic + translation, clean UI, no account, no ads, no network calls at all. We've trained an entire generation to assume an app that doesn't show a spinner must be malfunctioning. The whole point was that it just works on a plane, in a tunnel, with airplane mode on forever.
The "hard" part was unglamorous: bundling everything so the first launch needs zero connection, and getting RTL Arabic to sit next to LTR translation without one of them flipping out. Turns out doing nothing fancy, correctly, is its own kind of effort.
Open source, does one thing, never phones home.
https://github.com/p32929/duas -
Spent more time writing retry-with-backoff wrappers around free LLM keys than writing the actual app. Every provider has its own 429, its own quota window, its own way of saying "no". So I caved and built a small zero-dependency Node proxy that holds all my keys (OpenAI/Gemini/Groq/OpenRouter), rotates to the next live one the moment a key gets rate-limited, and forwards streaming untouched — one endpoint, `node index.js`, no SDK zoo. The whole thing is basically "stop thinking about quotas" wearing a trenchcoat. Revolutionary stuff, I know.
https://github.com/p32929/rotato -
PM said "just switch us to the cheaper model real quick." Cool. That meant a new SDK, a new auth header, a new dashboard to bookmark, and a 30-minute detour into someone's billing portal to figure out why I was getting 429s. "Real quick."
Somewhere along the way building with LLMs stopped being about the app and became about babysitting five provider clients, each with its own quirks, its own key, and its own creative way of breaking on a Friday.
Eventually I gave up and routed everything through one gateway — one endpoint, one key, a whole catalog of models behind it. Now switching models is editing a string, not refactoring my client and re-reading three docs. Revolutionary, I know: I get to think about my code instead of someone's pricing page.
https://megallm.netlify.app -
Every dev I know has rebuilt their portfolio site at least four times and shipped it zero times. I'm no exception — I've "redesigned" mine more often than I've actually updated my resume.
This week I finally stopped chasing the perfect framework, the perfect scroll animation, the perfect dark-mode toggle. Just built the thing, listed the projects, and — radical concept — left the entire source open so the next person staring at a blank index.html at 2am can steal it instead of suffering.
Still not happy with the spacing. Never will be.
https://github.com/p32929/... -
Every URL shortener now: "Sign up, add a card, accept 47 cookies, and we'll happily resell your click data." All I wanted was to turn one cursed 200-char link into something I can paste in Slack without shame. So I built Shorts — short links + actual click analytics, free forever, no card, no upsell popup at 3am. Revolutionary concept, I know: a tool that just does the thing. https://sh0sh0.netlify.app
-
"Just send me the .env real quick"
Sure. Let me drop our prod secrets into a chat that keeps everything forever, indexes it, and helpfully shows it to every future teammate who scrolls far enough. Then I'll add "delete this after copying 🙏" — the security model of hope.
Spoiler: nobody deletes it. Six months later that DB password is sediment in the scrollback, fully searchable, immortal.
Got tired of the honor system, so I built a one-time link instead. Paste a secret, get a URL. Recipient opens it once — read, then gone. No account, no email, no "verify you're human" maze. The secret stops existing the moment it's been seen, which is, wildly, when a secret should stop existing.
Radical idea, I know: a credential that doesn't outlive the Slack thread it was born in.
https://s3cr3tm3.netlify.app -
Wanted to read Quran on my phone. Simple ask, right?
Every app I tried: splash-screen ad, banner ad, "rate us" modal, a 40MB tracking SDK, and somehow it still needs the network to render text that has not changed in 1400 years. One literally paywalled the translations.
So I did the only reasonable dev thing — got annoyed and built my own. Flutter, fully offline, no ads, no analytics, no account, no "premium tier." Multiple translations and recitations bundled in. Open it on a plane, in the desert, wherever — just works, because the data lives on-device, not behind someone's ad server.
Turns out the hard part was never the rendering. It was resisting the urge to bolt on all the garbage everyone else ships.
https://p32929.github.io/quran_flut... -
SSH into the box. Need to grab ONE log file off it.
scp? Wrong path. Retry. Permission denied. Sudo it. Now it's owned by root locally. chown. Oh and the file's 2GB so the terminal just sits there blinking at me like it's thinking about its life.
All I wanted was to click a file and download it. That's it. That's the whole dream.
So I got tired and dropped a single Node script on the server that gives me a web file explorer — browse dirs, upload, download (single or zipped), grid or list view, real-time progress. No FTP daemon, no SFTP client, no installing a package the size of a small planet. node server.js, open the IP, done.
Zero dependencies. Which means zero "npm install failed because the moon was full."
Not for prod, no auth, kill it when you're done — it's the "I just need files off this box" tool, not your forever home.
github.com/p32929/node_file_manager_server -
Spent 20 minutes today debugging why my <script src="raw.githubusercontent.com/..."> returned the file with Content-Type: text/plain, so the browser politely refused to run it. Right. GitHub serves raw files but not as files. Of course.
Then I remembered RawGit died years ago, jsDelivr wants me to think about which CDN path version I am pinning, and all I had was a one-off Gist I wrote at 2am.
Found this thing that just takes the blob/gist URL, hands back a link that actually loads in a <script>/<img>/fetch() — no build step, no API key, no "what is your team size" modal. Pasted, generated, copied, moved on with my life.
Wild that "serve a file as a file" is a product, but here we are.
https://ghcdn.vercel.app -
Every morning the same ritual: open GitHub trending, pick a language, look, change the dropdown, look again, repeat for the five languages I actually care about — because clearly one page showing everything at once was too much to ask. So I built it myself. One sortable table, ~28 languages merged, sort by stars-gained-today, filter by language, dupes stripped, hit refresh and watch it pull live. Turns out the cure for doom-scrolling Explore was just... a table.
https://ghtr.fly.dev -
Spent the morning watching my brain outsource a two-digit addition to the calculator app. Twelve plus thirty-seven. Reached for the calculator. For real.
Turns out years of autocomplete, copilot, and "eh, the IDE will tell me" quietly nuked the one skill that used to make me feel clever in standups: doing math in my head before the analytics dashboard finishes loading.
So I built a thing to fight the rot. Quick mental-math drills, escalating difficulty, timer breathing down your neck — basically flashcards that judge you. Ten minutes a day and I no longer panic when someone asks "whats the rough p95 if we cut that in half."
Not a course, not a subscription, no account. Open tab, get humbled, close tab.
https://p32929.github.io/mathfinity -
Spent 20 minutes today doing the thing I do every time I want a new local model: open the Ollama site, ctrl+F, squint at tags, open three tabs to compare param counts and sizes, forget which one had vision, close everything, repeat. Apparently "just pull a model" requires a research project.
So I got petty and built the thing I wanted: one page that lists every Ollama model with sizes, params and tags, searchable and filterable, so I can actually compare before I waste 12GB of disk on the wrong quant.
Turns out "I'll just make a quick lookup" is also a research project. Worth it though.
https://ollama-models-explorer.vercel.app/... -
Spent the weekend "just adding one screen" to a side project. You know how that ends.
It's a little duas app — offline collection of Islamic supplications, Flutter, clean UI, no ads, no tracking, no "rate us 5 stars" popup begging for its life. Built it because every existing one wanted location permissions to show me a prayer. For a text file. Sure.
The actual work was the boring 90%: making search not choke, getting Arabic + translation to render without fighting RTL, and keeping the whole thing usable with zero internet. Turns out the "simple" apps are the ones where every shortcut bites you later.
Anyway it's done, it's open source, and it does exactly one thing without phoning home. Revolutionary concept in 2026, apparently.
github.com/p32929/duas -
Today I caught myself writing the exact same "if this API key hits a 429, fall back to the next one" rotation logic for the fourth time, in a fourth project. At some point the universe is clearly trying to tell you something.
So I built it once and stopped: Rotato — a tiny zero-dependency Node proxy that holds all your LLM keys (OpenAI, Gemini, Groq, OpenRouter) and, the moment a provider starts sulking with rate limits, quietly rotates to one that still works. Streaming passes straight through, you hot-add/disable keys from an admin panel, last 100 requests logged. There's even a Telegram bot bolted on, naturally.
Free, MIT, no node_modules black hole to audit: https://github.com/p32929/rotato -
Spent my morning rotating API keys across five different LLM dashboards because one provider deprecated a model, another randomly throttled me, and a third decided my card needed "re-verification." Five SDKs. Five billing pages. Five places to check why my app is suddenly returning 429s.
The actual coding part of building with AI is fine. It's the provider babysitting that's slowly killing me — every model upgrade means a new SDK quirk, a new auth scheme, a new dashboard to bookmark and forget.
Finally caved and routed everything through one gateway. One endpoint, one key, many models. Swapping providers is now changing a string instead of refactoring my whole client. Wild concept: I get to think about my app instead of someone's billing portal.
https://megallm.netlify.app
