Personal Projects
Listly
Aug 2025
Golang, BoltDB, Cobra, Gemini API, TUI with BubbleTea & Bubbles  ]

Overview

Listly is a CLI utility for organizing todo lists with Vim-like keybindings. You can create and manage different lists with CLI commands and make changes to tasks within them with Vim-style keybindings in a TUI. Listly takes inspiration from Git’s branching with respect to switching between and editing different todo lists (not the VC part).

Each todo list resembles a Git branch: there is always a current list that you’re working on (unless you have no lists), similar to how Git always has a current branch checked out. Commands that operate on the “current list” implicitly affect this active list unless another list is explicitly specified.

This design allows seamless switching between multiple task contexts, enabling context-based task management or project-specific lists without losing track of your progress elsewhere. You can create new lists, switch between them, and keep tasks organized across different areas of your work or life while staying efficient with intuitive CLI commands and natural Vim-style keybindings.

Listly also includes a Google Gemini powered list generation feature that can create task lists based on a project description passed in via a text file.

Demos

Basic features and capabilities:



Google Gemini powered list generation:



Rugby Infinite Passing
Dec 2024 - Jan 2025
Python, Pygame  ]

An exploration of the infinite passing drill in rugby and the nature of “player oscillations” and how they occur (more details in the repository). While there is no substantial practical application, I find the exploration of this to be an interesting exercise in algorithms.

Features

  • A Pygame simulation of the drill to visualize passing patterns and player oscillations.
  • An algorithm to find if a player oscillation occurs and calculate the number of passes before the oscillation in addition to which lines the player oscillates between.
  • A brute force approach which was initially used to gain insight into the problem
  • Lemmas and proofs about the nature of player oscillations in the drill
  • Support for command line arguments to customize the drill and/or visualization
    • includes using yaml files for greater flexibility