← Back to selected work

All projects

Applications I’ve shipped, tools I wanted to use, and games made along the way.

17 projects

Sane's Studio sample board, with tasks arranged in Backlog, Todo, In Progress, and Done columns.

Web App

Sane

A task manager for software teams, built around keyboard shortcuts and instant updates.

  • React
  • TypeScript
  • Vite
Details

Blazingly fast, keyboard-first task manager for software teams — the deliberate antithesis of Jira. One screen, one keystroke to anything, zero configuration, plus a hosted MCP server so AI agents can operate the product. Live at sane.today.

  • MCP server: 28 tools for AI agents
  • Optimistic realtime board/list/timeline
  • Keyboard-first: palette + single-key triage
  • Per-user hashed agent API keys
  • React
  • TypeScript
  • Vite
  • TanStack Router
  • Convex
  • Clerk
  • MCP
  • Tailwind CSS
ClipJect's searchable snippet picker open beneath a message field, with saved replies for that field and a global snippet library.

Browser Extension

ClipJect

A browser extension for saving reusable text and pasting it into the fields you choose.

  • React
  • TypeScript
  • Manifest V3
Details

Local-first Chrome and Firefox extension for replies, templates, and frequently used text. Save snippets for a specific field and page, or keep a global library across websites. Snippets stay in your browser profile, with no account or cloud sync.

  • Field-specific and global snippet libraries
  • Searchable picker with keyboard navigation
  • Local backups and manual snippet sharing
  • Native Undo/Redo when replacing field text
  • React
  • TypeScript
  • Manifest V3
  • Vite
  • Zustand
  • Tailwind CSS

Desktop Tool

Eavesdropper

A desktop app for local audio transcription and AI conversations with your transcripts.

  • Electron
  • Bun
  • React
Details

Local-first AI desktop app for audio transcription and transcript Q&A. Raw audio stays on-device in SQLite while a hosted web layer handles auth, settings, cloud sync, and authenticated installer downloads.

  • Context-isolated Electron IPC bridge
  • Local-first privacy boundary
  • Encrypted BYOK API key storage
  • Windows release automation
  • Electron
  • Bun
  • React
  • TanStack Start
  • SQLite
  • Drizzle
  • FFmpeg
  • OpenRouter
Lighting VTT displaying a sample dungeon map with circular and directional lights revealing areas through the fog of war.

Engine

Lighting VTT

A virtual tabletop that brings D&D maps to life with dynamic lighting and fog of war.

  • React
  • Pixi.js
  • WebGL
Details

Browser-based virtual tabletop for TV/table D&D setups. Renders large maps with pan/zoom, fog-of-war lighting, radial/conic/line light sources, mirror reflections, and token/combat tooling.

  • Dynamic 2D lighting (raycasting)
  • Line-of-sight & fog of war
  • 60fps WebGL rendering loop
  • Improved Initiative sync
  • React
  • Pixi.js
  • WebGL
  • Convex
  • Clerk
  • TypeScript

Web App

FreeRoam

Plan trips together on a shared map and calendar, with live cursors, comments, and itineraries.

  • TanStack Start
  • React
  • SpacetimeDB
Details

Collaborative trip-planning web app for groups. Plan itineraries on a map and calendar with labels, comments, history, and Figma-like live presence cursors — built on a zero-budget realtime architecture.

  • SpacetimeDB realtime collaboration
  • Budget-aware cursor throttling
  • Map planning without paid APIs
  • TanStack Start
  • React
  • SpacetimeDB
  • Better Auth
  • Leaflet
  • Drizzle
Unfurl showing the Lorcan sample dialogue as a branching graph, with connected story nodes and a project sidebar.

Desktop Tool

Unfurl

A visual dialogue editor that turns branching stories into game-ready data.

  • Electron
  • React
  • React Flow
Details

Desktop narrative graph editor that imports Twine and Markdown dialogue files, visualizes branching story graphs with React Flow, and exports game-ready JSON.

  • Electron
  • React
  • React Flow
  • TypeScript
  • Zustand

Mobile

LockIn

An Android app that helps you set and stick to daily limits for distracting apps.

  • React Native
  • Expo
  • Kotlin
Details

Android app usage limiter. Select installed apps, set daily time limits, and get a full-screen block when usage exceeds the budget — powered by UsageStatsManager and a native foreground service.

  • UsageStatsManager native bridge
  • Foreground service monitoring
  • Expo config plugin automation
  • React Native
  • Expo
  • Kotlin
  • Zustand
  • NativeWind

Web App

Chronicler's Desk

A searchable tabletop reference for monsters, spells, and items, with custom monster storage.

  • Next.js
  • React
  • Convex
Details

Tabletop reference web app for browsing D&D-style bestiary, spells, and items through searchable data tables, split-panel detail views, and authenticated custom monster storage.

  • Next.js
  • React
  • Convex
  • Clerk
  • TanStack Table
  • Tailwind CSS

Web App

Trip Vote

Choose your next group trip by voting together on an interactive world map.

  • Next.js
  • React
  • Convex
Details

Realtime collaborative voting app that helps groups choose a travel destination. Share a session link, rank countries on an interactive world map, and reveal live results.

  • Next.js
  • React
  • Convex
  • Server Actions
  • Zustand
  • Tailwind CSS

Web App

Ghost Writer DnD

Generate quips and catchphrases for D&D characters using your own AI provider keys.

  • Next.js
  • Vercel AI SDK
  • Zustand
Details

BYOK AI writing utility for generating D&D character quips and catchphrases. Multi-provider model support with local character profiles, favorites, and JSON backup/restore.

  • Next.js
  • Vercel AI SDK
  • Zustand
  • shadcn/ui
  • TypeScript

Games

Tetromino99

A Tetris-style game with a functional Elixir engine and a server-authoritative Phoenix LiveView prototype.

  • Elixir
  • Phoenix LiveView
  • TypeScript
Details

Phoenix LiveView Tetris-style prototype with a pure Elixir game engine. Server-authoritative state with SRS rotation, 7-bag piece generation, hold, ghost piece, and canvas hook rendering.

  • Pure functional game engine
  • SRS rotation & 7-bag queue
  • Server-authoritative LiveView state
  • Property tests with StreamData
  • Elixir
  • Phoenix LiveView
  • TypeScript
  • ExUnit
  • Tailwind CSS

Desktop Tool

Vidalysis

A computer vision command-line tool that detects objects in videos and summarizes what happens.

  • Python
  • OpenCV
  • YOLO
Details

Python computer vision CLI for video analysis. Extracts frames, runs YOLO object detection, aggregates timeline segments, and generates natural-language summaries with optional annotated output.

  • Python
  • OpenCV
  • YOLO
  • PyTorch
  • Typer
  • Pydantic

Web App

AI Trolley

Explore how AI models answer trolley problems through searchable conversations and analytics.

  • TanStack Start
  • React
  • Recharts
Details

TanStack Start dashboard that parses LLM trolley-problem conversation exports into typed data, model/provider analytics, searchable tables, and manual classification overrides.

  • Markdown corpus parser
  • Model/provider analytics charts
  • Manual classification overrides
  • TanStack Start
  • React
  • Recharts
  • TanStack Table
  • TypeScript

Games

Wolf & Raven

A top-down Godot game prototype with stealth, persistent fog of war, and custom shaders.

  • Godot
  • GDScript
  • Shaders
Details

Godot 4 2D top-down game prototype with directional character movement, RTS-style camera controls, tall-grass stealth rendering, and shader-based persistent fog-of-war.

  • Persistent fog-of-war mask
  • 8-direction CharacterBody2D movement
  • Tall-grass stealth shaders
  • Godot
  • GDScript
  • Shaders

Games

Blood & Dominion

Lead an ancient vampire's cult to take over a city in a strategy game built in nine days.

  • Godot
  • Web
Details

A game where you play as an ancient vampire leading a cult in attempt to take over the fictional city of Respira. The game is a 2D top-down strategy game. Inspired by games like Plague Inc. and Cultist Simulator. It is a game jam game made in 9 days in Godot.

  • Godot
  • Web
Dullahan Dandi gameplay trailer.

Games

Dullahan Dandi

A rogue-lite action RPG about a dullahan trying to get her head back, with branching dialogue.

  • Unity
  • C#
  • Shader Graph
Details

A rogue-lite action RPG with branching dialogues where you play as a dullahan who is trying to get her head back. Inspired by games like Hades and Disco Elysium. Made in 3 months as my final project for the Diploma of Game and Interactive Media Design at the Open University of Israel.

  • Unity
  • C#
  • Shader Graph

Games

Cheating with a Mimic

Run a street gambling stand with a pair of mischievous mimic dice. Built for a 48-hour game jam.

  • React
  • TypeScript
  • MUI
Details

You play as a homeless person who has a pair of dice. The dice are small monstrous mimics. To get money you open a gambling stand in the street and use the mimics to cheat the customers. Made in 48 hours for a game jam.

  • React
  • TypeScript
  • MUI
  • MobX