Projects

Selected projects

ViewerAtlas is the one I'd most like you to see. NYCDiscover is a live planning app built on public data, and Formiga and Delve Planner are desktop apps with public releases.

Highlighted project

My longest-running project, and the one I'd most like you to see.

Network analysis · 2025–present

ViewerAtlas

Which Twitch channels share an active audience, and do those shared audiences form communities?

Over 14 days of chat samples covering 897,865 chatters, the overlap graph split 2,748 channels into 36 communities. Most follow language, and English-language channels split further by game.

ViewerAtlas community map: 900 Twitch channels drawn as colored dots in about twenty clusters, labeled by community, such as Variety (ru), Variety (ja), and Variety (en) · Dota2ti, Caedrel.
Fig. 1The 14-day map: 900 of the 2,748 analyzed channels, colored by community. Rendered from the pipeline's public output for Aug 13–26, 2026.
surveys over 14 days
42
distinct chatters
897,865
channels in the graph
2,748
communities found
36

A live data product

A planning app built on public data sources, with a different kind of problem to solve.

Data service · 2026

NYCDiscover

Turns a free block of time in New York into a short same-day plan, in place of another long list of places.

It combines OpenStreetMap places, NYC Event Calendar listings, and the National Weather Service forecast, then searches for up to three plans that fit your time, budget, and the weather.

NYCDiscover's planner on the live site, with fields for a starting point, start time, time available, per-person budget, and group size, next to the headline New York, decided.
The planner on the live site.
How it works
You enter a starting point, how long you have, a per-person budget, your group size, and a mood. A beam search builds plans of up to three stops and drops any stop that would be closed when you arrive, run past your time window, push the plan over budget, or put you outside when rain is likely.
When a source fails
Every provider call is cached and rate-limited. If a source goes down, the app falls back to recent cached results or a neutral weather assumption and says so in the plan.
Status
Live as a guest-only beta. Plans cover the same day in New York City.

Python · FastAPI · Next.js · PostgreSQL · MapLibre

Desktop software

Two native desktop apps with public releases. They show the software side of my work.

Desktop app · 2026

Formiga

A desktop companion shares your screen for hours at a time, so it only works if it never gets in the way.

Procedurally generated pixel creatures live in a transparent layer over the macOS or Windows desktop, walk along the tops of windows, and grow over a few weeks into a colony of up to six with a small village of its own.

Five pixel-art Formiga creatures on and around two mock desktop windows: two pink four-legged ones on the window tops, a round blue one, a purple one asleep, and a blue one holding a nut.
Drawn by Formiga's own renderer from companions in the current generator. The windows are mock-ups.
Formiga's settings window drawn as a field notebook: leather cover with index tabs down the left, and a ruled page titled Your colony showing a companion named Mallow, its traits, and a tally of days together, pets received, treasures found, and windows climbed.
The settings window is a field notebook, with one page per tab. This is the colony register.
Twenty small pixel-art creatures in two rows, each with a different body, color, and markings.
Twenty of the 100 uncurated seeds on the project's contact sheet.
What I designed
Each creature comes from a 256-bit seed that sets its body plan, parts, palette, face, and personality. There are no premade sprites, and the same seed gives the same creature on any machine.
Constraints
It hides creatures behind windows using only window positions, so it needs no screen capture, no Accessibility permission, and no global input hooks. On the Mac it's developed on, a colony of five averages about 1.3% of one CPU core.
Works today
Version 0.64.0 (October 2026) is an unsigned preview for macOS 14+ and Windows 10/11. Recent releases added companions in different sizes, wings, horns and other details, and a settings window redrawn as a field notebook. It runs day to day on my Mac. The Windows build passes CI but hasn't been checked by hand yet.

Rust · wgpu · Procedural generation

Desktop app · 2026

Delve Planner

A notebook planner is quick but forgets the bigger project a task belongs to, and project-management suites are built for teams.

A local-first planner for macOS and Windows that ties longer-range plans to this week and today. You can ask for changes in plain language, and a local model proposes them for you to confirm.

  1. You

    Ask for a change in plain language.

  2. Local model

    Sees a trimmed context with no notes, locations, or descriptions. Returns one proposal of up to 12 typed operations, or one clarifying question.

  3. Rust backend

    Checks the reply against a strict schema. Unknown fields are rejected, and IDs must come from the request's own context.

  4. React interface

    Validates the reply again and shows a readable preview, where you can adjust a suggestion's title, day, time, or length.

  5. You confirm

    Rust checks any edits again, then applies the change once through a single-use proposal ID that expires after 10 minutes.

  6. SQLite

    A revision check makes a stale edit fail with a conflict before it can overwrite newer data.

How a plain-language request becomes a saved change. The model never gets a database handle.
What I designed
The boundary around the model. It never gets a database handle. It can return one proposal of up to 12 typed operations or one clarifying question, and both the Rust backend and the React interface validate the reply before you see a preview.
Constraints
Everything runs locally through a bundled Ollama runtime with cloud features turned off. The model never sees notes, locations, or descriptions, and there's no account or server.
Works today
v0.4.0 is a pre-release from September 2026 that added plan templates, repeating tasks, checklists, and quick capture from any app. Everything except the AI planner works without a model installed. In the last recorded evaluation, run on September 16 before this release, qwen3:8b returned the expected reply on all 111 test cases in each of three runs.

Rust · Tauri 2 · React · SQLite · Ollama

Coursework

A smaller project from my graduate program.

Graduate coursework · 2026

Feedback-TinySim

Simulates a feedback panel of AI personas with TinyTroupe, for my graduate Algorithms in Data Science course.

Personas are scored for consistency, role alignment, realism, depth, and tone before a run, and a Streamlit dashboard summarizes each conversation by participation, sentiment, and agreement.

Python · TinyTroupe · Streamlit

Take a look at how I build these projects.