Things I've built
Indie iOS apps, Neovim plugins, and developer tools — some still shipping, some open-sourced, all things I use myself.
-
Ledvo
Live · FreeFree local-first accounting book that runs in the browser
SolidJSTypeScriptWebAssemblyZigOPFSFree browser accounting app that stores one book per browser profile, uses a real double-entry engine, rejects unbalanced postings, blocks closed periods, and exports/imports portable JSON without signup or tracking.
- One local book per browser profile; no account, no backend, no analytics tracking
- Double-entry journal flow with multi-line entries and balance checks
- Period lifecycle controls for open, soft-close, close, reopen, and lock
- Trial balance, income statement, balance sheet, general ledger, aging, and equity-change views
- JSON export and import for user-controlled backups
- Embedded WebAssembly accounting engine
-
Namna
Live on the App Store · ₱99 one-timePrivate financial planning app for Filipinos on iPhone
React NativeExpoTypeScriptSQLitePrivate, local-first iPhone app that estimates when your current money and future monthly contributions may be enough for the life you want. Compare What If changes, add MP2/PERA/RTBs/SSS/GSIS manually, and keep everything on device.
- Current plan estimate built around take-home pay and Money Today
- Presets for MP2, PERA, PSE, RTBs, SSS, GSIS, and more
- What If changes for tuition, repairs, family support, and savings shifts
- Automatic local snapshots and progress history on the same phone
- Excel workbook export for records or sharing only — not restore
- English and Filipino throughout
- All data stays on the device — SQLite, no backend
-
obsidian-cli.nvim
Open sourceThin Neovim wrapper over the official Obsidian CLI
LuaNeovimObsidian CLIPlenaryDrives the live Obsidian app from inside Neovim instead of reimplementing the vault format in Lua. ~2,000 LOC, 44 commands, 122 plenary tests, and real Obsidian search, backlinks, templates, and Bases via IPC.
- Wraps the official obsidian CLI instead of a 4-5k LOC Lua reimplementation
- Real Obsidian search index, backlinks, templates, and Bases via IPC
- 122 plenary tests across 12 spec files with CI integration
- blink.cmp wiki link completion and Snacks picker integration
- Plugin manager that installs Obsidian community plugins from Neovim
-
sajj
LiveAI workflow analyzer with research-backed criteria and exportable build specs
React 19ViteVercel ServerlessSupabaseGemini 2.0 FlashDescribe any business process — sajj decomposes it into steps, scores each against four boolean criteria (structured, deterministic, low-risk, no authority), and generates a full build spec you can paste into Claude Code or Cursor. Free, no signup, feeds graduate research on AI-human workflow boundaries at AIM.
- Four-criteria assessment model (green / yellow / red tiers derive directly from the booleans)
- Build Spec exporter generates a full context-engineering prompt for Claude Code or Cursor
- 208 workflow suggestions across 24 industries, 10-language UI
- 72 Playwright end-to-end tests covering landing, analysis, feedback, corrections
- Correction feedback loop feeds a Supabase research dataset on LLM decomposition accuracy
-
citruszest-ghostty.nvim
Open sourceDark Neovim colorscheme inspired by Citruszest and Ghostty terminal colors
LuaNeovimTreesitterLSPVibrant citrus accents on a true-dark ground. Treesitter and LSP semantic highlights, plugin support for Telescope, Snacks, Lazy, Which-key, Noice, GitSigns, Mini, and IndentBlankline. Terminal colors exported so your shell, editor, and terminal all agree.
- Single palette shared between Neovim and Ghostty
- Mint green (#00cc7a), cyan (#48d1cc), sky blue (#00bfff), warm orange (#ff8c00) citrus accents
- Treesitter + LSP semantic token coverage
- Terminal colors exported for shell + editor consistency
-
dev-session-manager
Open sourceAutomate tmux session creation
BashtmuxYAMLHomebrewEliminates repetitive terminal setup with pre-configured tmux sessions from YAML configs. One command creates your entire development environment.
- Published as Homebrew tap
- Declarative YAML configurations
- Idempotent session management
- Zero-friction context switching
-
pyworks.nvim
Open sourceZero-config Python notebooks in Neovim
LuaPythonNeovim APIJupyterEliminates setup friction for Python development in terminal. Auto-creates venvs, detects missing packages, renders matplotlib plots inline.
- Auto venv creation and package detection
- Inline matplotlib plots via Kitty protocol
- 10-100x faster installs with uv
- Jupytext integration for .ipynb files