20 apps
Apps
Everything I've built, shipped or shelved.
Featured apps
All apps
20 apps
FiniteYour life in weeks. Make your days count.- Dart
- Flutter
LytmarkChangelog, roadmap and suggestion box for SaaS products.- JavaScript
- Cloudflare Workers
PicklySpin the wheel and let it decide.- Dart
- Flutter
QR & Barcode ScannerScan and create QR codes and barcodes.- Dart
- Flutter
LinkNest keeps bookmarks in separate workspaces, so different areas of work stay apart. A remote MCP server with 16 tools lets Claude read and organize the saved bookmarks.
Notable: Remote MCP server with 16 tools, so Claude can read and organize bookmarks.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Hono
- Backend & data
- D1
- Cron Triggers
- Extras
- PWA
- MCP server
Bookmark manager with multiple workspaces. A remote MCP server with 16 tools runs on the same Worker, and a weekly cron job checks for dead links.
Inkwell stores notes as plain text and organizes them in folders and notebooks. Images are kept separately in R2, so the notes themselves stay plain text. A remote MCP server with 18 tools gives Claude access to the same notes.
Notable: Remote MCP server with 18 tools; images live in R2 while notes stay plain text.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- R2
- Cloudflare Images
- Extras
- PWA
- MCP server
Plain-text notes stored in D1 with images in R2. A remote MCP server with 18 tools runs on the same Worker and resizes images through Cloudflare Images.
MindNotes connects notes to each other and shows them in a graph view. The notes and the links between them are rendered with Cytoscape.js as an interactive graph.
Notable: Notes and their links rendered as an interactive graph.
Tech stack
- Languages
- TypeScript
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- Cron Triggers
- Extras
- Cytoscape.js
- Workers AI
- MCP server
- PWA
Notes linked into a graph rendered with Cytoscape.js, with an MCP connector for AI assistants and a Workers AI chat that answers from the notes.
ScanSpark creates dynamic QR codes and records how often they are scanned. The scan analytics are stored in Cloudflare Analytics Engine.
Notable: Scan analytics stored in Cloudflare Analytics Engine.
Tech stack
- Languages
- JavaScript
- Framework
- Cloudflare Workers
- Backend & data
- D1
- KV
- Analytics Engine
Dynamic QR codes resolved at the edge through KV, with scan analytics in Analytics Engine.
PlayShot composes Google Play screenshots in the browser, on a canvas. It runs fully client-side, so no image is uploaded anywhere.
Notable: Runs fully client-side, nothing is uploaded.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Pages
- Extras
- Canvas API
- JSZip
Fully client-side. Screenshots are composed in the browser on a canvas, with no backend.
Vhirty Radar is a Telegram bot that checks tracked feeds on a schedule and reports what is new. Before sending, it summarizes the new items with Workers AI.
Notable: Summarizes new items with Workers AI before sending them.
Tech stack
- Languages
- JavaScript
- Framework
- Cloudflare Workers
- Backend & data
- D1
- Cron Triggers
- Extras
- Workers AI
- Telegram Bot API
A cron-triggered Worker checks RSS and Atom feeds every 30 minutes, stores what it has seen in D1 and sends only new items to Telegram, summarized with Workers AI.
ContentPilot plans social media content on a kanban board. Through MCP, Claude can move cards on the board.
Notable: Claude can move cards on the board through MCP.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- Extras
- MCP server
Kanban board for content planning, with an MCP server so an AI assistant can read and update the board. The MCP Worker reaches the API Worker through a service binding.
ModelHub tracks free AI models, their limits and how much of them has been used. It ranks the models per category and shows what is left of each free limit.
Notable: Ranks models per category and tracks remaining free limits.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- Workers Static Assets
- Cron Triggers
- Extras
- Workers AI
- Web Crypto
One Worker serves both the API and the frontend, so the whole tool deploys with a single command. Provider API keys are stored encrypted with AES-GCM, and a daily cron job syncs each provider's model catalog.
AppFactory plans app projects screen by screen. Every screen of a project has its own canvas for sketching it.
Notable: Every screen of a project has its own sketch canvas.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- Extras
- Canvas API
Sketch canvas with pencil, eraser, undo and redo. All data lives in D1, online only.
ASO Tool tracks keywords and rankings on Google Play. The scraping runs on a GitHub Actions schedule, so it needs no server of its own.
Notable: Scraping runs on a GitHub Actions schedule, no server needed.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Cloudflare Pages
- Backend & data
- D1
- Extras
- GitHub Actions
- google-play-scraper
A daily GitHub Actions scraper sends keyword rankings to a Worker, which stores them in D1 for the Pages frontend.
Klipa moves screenshots between a phone and a laptop, like a shared clipboard. Deleted items stay in a trash for seven days and are then cleaned up automatically.
Notable: Soft delete with a 7-day trash and automatic cleanup.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- R2
- Cron Triggers
- Extras
- PWA
Screenshots go to R2 with metadata in D1. Deleted items stay in a 7-day trash that a cron job empties.
Interchat is a personal archive for links and short notes. Links can be saved straight from the iOS share sheet.
Notable: Saves links straight from the iOS share sheet.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- Cron Triggers
- Extras
- PWA
- Share target
- REST API
Installable PWA that receives links from the system share sheet, plus a token-protected API for automations. A daily cron job empties the trash.
Journal keeps tasks, a journal and goals in one place. The three tools share one PWA that works well offline.
Notable: Three tools in one offline-friendly PWA.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Backend & data
- D1
- Extras
- PWA
Tasks, journal and goals in one installable PWA, served by a single Worker with all data in D1.
LazyPad is a note pad for desktop and mobile. One codebase is split into a Tauri desktop app and a mobile PWA.
Notable: One codebase split into a Tauri desktop app and a mobile PWA.
Tech stack
- Languages
- Rust
- JavaScript
- HTML
- CSS
- Framework
- Tauri
- Cloudflare Pages
- Extras
- PWA
- WebSocket
- jsQR
Desktop app built with Tauri and Rust that runs a token-protected WebSocket server on the local network. The phone side is a separate PWA that pairs by scanning a QR code.
FakturaRS is an invoicing app for small businesses in Serbia. It is built around Serbian invoicing rules.
Notable: Built around Serbian invoicing rules.
Tech stack
- Languages
- JavaScript
- HTML
- CSS
- Framework
- Cloudflare Workers
- Cloudflare Pages
- Backend & data
- D1
Static frontend on Cloudflare Pages that talks to a Worker API, which creates and stores the invoices in D1.
A personal tool that reads my laptop's hardware and shows RAM, GPU and CPU usage live in one place.


