Projects

Focus Suite

Live BraveFill WindowFocus AppFocus

Three tiny resident macOS hotkey daemons for fast window and app switching — BraveFill snaps Brave windows onto an external display, WindowFocus jumps to named browser windows by number, and AppFocus focuses or launches apps by hotkey. Each is a single Swift file wrapped in a minimal .app bundle.

  • Swift
  • Carbon API
  • Accessibility API

GeoMap

Live GitHub

A narrative travel gallery site built on two years of personal location data, pairing trip journal entries with four analytical map views — walking-route playback, city footprint hulls, a 24-hour SVG rhythm clock, and hotel walking-reach isochrones computed live from routing data.

  • Leaflet.js
  • OSRM API
  • JavaScript

Vocapture

GitHub

A CLI running on a Raspberry Pi 5 that turns reading physical books into flashcards: type a word, the Pi photographs the page, OCRs the sentence, sends it to Claude for a context-correct definition, and syncs the result to Anki.

  • Python
  • OpenCV
  • Tesseract OCR
  • Anthropic API

ChronoMap

GitHub

A zero-install DataviewJS script for Obsidian that plots notes on an interactive Leaflet map and connects them chronologically using coord/date frontmatter, styled to match Obsidian's native graph view.

  • JavaScript
  • DataviewJS
  • Leaflet.js

Rummy

GitHub

A single-player Rummy card game built in Godot, playing a full draw/meld/discard round against a computer opponent on a stylized 2.5D table. Built as a minigame at UQCS Hackathon 2026.

  • Godot
  • GDScript

Definition Harvester

GitHub

A Chrome extension that scans every Google search tab open in the window, pulls each word's AI Overview definition out via a four-tier extraction fallback (highlight marks, manual selection, regex parsing, classic dictionary cards), and exports the harvested set to CSV, Google Sheets, or Anki for spaced-repetition study.

  • JavaScript
  • Chrome Extension APIs
  • AnkiConnect

Hermes

GitHub

A personal automation agent built on Nous Research's Hermes Agent CLI, running eight scheduled cron jobs that deliver daily news, market, tech, Thailand, and Australia briefs — five narrated as spoken audio — to Discord and log permanent copies to an Obsidian vault, plus a message-triggered feature that turns any Discord message into a journal to-do or kanban card.

  • Shell
  • Hermes Agent
  • OpenRouter
  • Discord API

Birdboard (UQCS Hackathon)

GitHub

A physical-controller arcade compilation built in Godot for UQCS Hackathon 2026, chaining six minigames — coin-collecting mazes, a 3D liminal-space maze with timed-puzzle loot chests, a hand-tracked Flappy Bird clone, and a keypad-driven poker duel — behind custom Arduino hardware: a joystick, a membrane keypad, and an ultrasonic distance sensor.

  • Godot
  • GDScript
  • Arduino
  • C++

CampusConnect

GitHub

A mobile app built for a university course that centralizes campus events and timetables, with schedule sharing, clash filtering, and recommendations based on free time, interests, and club memberships.

  • React Native
  • Expo
  • TypeScript

BombParty CLI

GitHub

A single-player terminal recreation of jklm.fun's BombParty — type a word containing the given letter chunk before the timer runs out, validated against a ~370k-word English dictionary.

  • Python

Dashboards

FinanceDash

GitHub

An offline-first personal finance dashboard that imports CSV/XLSX transaction exports and visualizes income, expenses, and category breakdowns entirely client-side — no server, no cloud, data stored only in browser local storage.

  • React
  • Tailwind CSS
  • Recharts

Market Dashboard

Live GitHub

A single-page market dashboard aggregating live TradingView widgets — ticker tapes, a sector heatmap, forex cross rates, and an interactive stock chart — with no backend of its own.

  • TradingView Embed API
  • JavaScript

Scripts

pdf2vault

GitHub

A dependency-free Node.js script that rasterizes a lecture PDF into right-sized per-page PNGs via Poppler's pdftoppm and writes an Obsidian note embedding every slide in order — replacing a manual screenshot-and-paste workflow, with sequential filenames and safe re-runs.

  • Node.js
  • Poppler

toc

GitHub

A command-line tool that adds, removes, and lists PDF outline entries directly in the file — Markdown-style nesting, page-order insertion, re-parenting of children on removal — so the table of contents shows up in Preview, Skim, Acrobat, and every other PDF reader's sidebar.

  • Python
  • pikepdf
  • qpdf

Obsidian Clipper

GitHub

Clipping templates for the Obsidian Web Clipper extension that turn GitHub repos, Goodreads books, and YouTube videos into structured notes by targeting page DOMs via stable data-testid hooks.

  • Obsidian Web Clipper
  • JSON

Obsidian Template

GitHub

A collection of Obsidian scripts and templates for managing university coursework — a DataviewJS dashboard that recursively maps a note's full connected subgraph, a Gantt chart plotting reading progress across the year and much more.

  • Obsidian
  • DataviewJS
  • Templater
  • Excalidraw

BraveFocus Shortcut

GitHub

A macOS Shortcuts / AppleScript script that focuses Brave Browser windows by title using Cmd+Shift+1–9 — the no-compile predecessor to the Swift-based WindowFocus.

  • AppleScript
  • macOS Shortcuts

Vocab Apps Script

GitHub

A Google Apps Script toolkit adding custom Sheets functions for dictionary lookups — definitions, synonyms, phonetics, and part of speech — pulled live from the Free Dictionary API. Later evolved into Vocapture.

  • Google Apps Script
  • JavaScript

TamperMonkey Distraction Util

GitHub

A pair of Tampermonkey userscripts that strip distracting feeds from the browser: redirecting away from Instagram Explore/Reels and continuously removing YouTube Shorts sections.

  • JavaScript
  • Tampermonkey

Configs

nvim

GitHub

A LazyVim-based Neovim configuration with custom fuzzy mark/buffer-jump plugins (snacks-mark, snacks-jump) and a hand-tuned Catppuccin Mocha colorscheme.

  • Lua
  • Neovim
  • LazyVim

dotfiles

GitHub

Zsh and Vim dotfiles: vi-mode keybindings, a git-aware prompt showing command timing and exit status, eza-based ls aliases, and a yazi wrapper that moves the shell to wherever you navigated to.

  • Zsh
  • Vim

tmux

GitHub

A tmux configuration with vim-style pane navigation, fzf-powered popups for jumping between windows and sessions by recency, and a minimal custom status bar.

  • tmux
  • fzf

yazi

GitHub

A yazi file manager configuration with a custom folder-sorting plugin, a Nord flavor, and a shell script for copying bracket-containing paths in a Zsh-queryable form.

  • Lua
  • Yazi

eza

GitHub

Tokyo Night theme for eza, covering file kinds, permissions, size units, and multiple stylings.

  • eza
  • YAML