# Cat Pereira

Full stack software engineer. I bridge the gap between computer vision and the real world, building the dashboards and backend services that make CV work in production.

Site: https://catpereira.dev

## Projects

### Poorly Drawn Pokemon Interpretability

Interactive embedding map of how the Poorly Drawn Pokemon models place all 1025 Pokemon, with a write-up on how the models and their training data are made.
UMAP over each model's 1025 prototype vectors with cosine distance, so Pokemon the model considers similar land together
A spotlight panel lists each Pokemon's nearest neighbors in the full embedding space and connects them on the map
Compare zero-shot CLIP ViT-B/16 with the EfficientNet-B0 CNN trained on synthetic doodles

- [Project Link](https://reflect.cv/poorly-drawn-pokemon/how-it-works)
- [GitHub](https://github.com/catherinepereira/poorlydrawnpkmn)
- [GitHub (Model)](https://github.com/catherinepereira/poorlydrawnpkmn-model)

**Tech:** Computer Vision, Python, PyTorch, React, TypeScript

### satguessr

Similarity explorer and geolocation game over AlphaEarth Foundations satellite embeddings for the Lower 48.
Explore: click a place and the map shows everywhere whose 64-d embedding is closest, with a ranked list of matches and the nearest NAIP aerial image
Play: guess where a NAIP aerial image was taken and compare against a frozen DINOv3 encoder with a trained head that predicts the image's embedding
All 36M grid cells load onto the GPU as one fp16 tensor, so a query scores every cell by cosine similarity and serves the heatmap as tiles

- [Project Link](https://huggingface.co/spaces/catpereira/satguessr)
- [GitHub](https://github.com/catherinepereira/satguessr)
- [GitHub (Model)](https://github.com/catherinepereira/satguessr-model)

**Tech:** Computer Vision, Python, PyTorch, FastAPI, React, TypeScript

### Quadcraft

Pilotable drone for Minecraft Java whose camera feeds external programs, for recording flights and training models to fly it.
A Fabric mod with piloting, a job queue, battery and charging, and a bridge server that streams the drone camera
Jobs copy a region, build a schematic, mine, or harvest, set up from an in-game tablet or the dashboard
A learned block reader sees the world through the camera, and a drone brain runs the jobs from trained policies

- [GitHub](https://github.com/catherinepereira/quadcraft)

**Tech:** Computer Vision, Java, Python, PyTorch, React, TypeScript

### Poorly Drawn Pokemon

Two-player game where each player draws a Pokemon from memory and the better drawing wins the battle.
An EfficientNet-B0 CNN and CLIP zero-shot prototypes classify drawings among 1025 Pokemon in the browser with onnxruntime-web
Models train only on synthetic doodles generated from official artwork and sprites
A Train tab shows what each model predicts for a drawing, and a How it Works page maps every Pokemon in the embedding space

- [Project Link](https://reflect.cv/poorly-drawn-pokemon/)
- [GitHub](https://github.com/catherinepereira/poorlydrawnpkmn)
- [GitHub (Model)](https://github.com/catherinepereira/poorlydrawnpkmn-model)

**Tech:** Computer Vision, Python, PyTorch, React, TypeScript

### F1Guessr Interpretability

Grad-CAM interpretability site for the F1Guessr classifier, a multi-head model predicting the year and track from a race photo.
Heatmaps highlight the image regions that most support each year and track prediction, across a sample spanning every track and season.

- [Project Link](https://f1guessr.com/how-it-works)
- [Blog Post](/blog/f1guessr)

**Tech:** Computer Vision, Python, PyTorch, React, TypeScript

### The United Stats

Map of the United States that paints public statistics onto states and counties.
Enable any number of stats at once and they stack as translucent layers, reading as one blended map
168 stats across 15 categories, from life expectancy and broadband access to property tax rates
Renders committed JSON with MapLibre and d3-geo, no backend

- [Project Link](https://theunitedstats.com)

**Tech:** React, TypeScript

### Yoga Mirror

Hold a yoga pose in front of your webcam and the app classifies it live
BlazePose extracts 3D world landmarks in the browser and a small trained MLP on onnxruntime-web classifies the pose from them
Practice against a pose from the grid, or follow an instructor video and match their pose at the current playback time
Classifying body geometry using deep learning rather than joint angles makes scoring invariant to rotation, distance, and position in frame

- [Project Link](https://reflect.cv/yoga-mirror/)
- [GitHub (Model)](https://github.com/catherinepereira/yoga-mirror-model)

**Tech:** Computer Vision, PyTorch, Python, React, TypeScript

### DarkScrolls

Chrome extension that seals away distracting websites and counts the doomscrolls you dodged.
Manifest V3 blocking through declarativeNetRequest, redirecting blocked visits to a sealed-scroll page
Strict hours lock settings inside a daily window, with an optional 5-minute pause and live countdown
Per-site, daily, and all-time block counts, plus a one-click block for the current tab

- [GitHub](https://github.com/catherinepereira/darkscrolls)

**Tech:** JavaScript

### Sorty

Image classification dataset tool that runs entirely in the browser, with no server, account, or API keys.
Builds a dataset from a plain-English description, with images from iNaturalist, Openverse, and Wikimedia Commons
MobileCLIP checks labels and finds duplicates, and cross-validation sorts likely mislabeled images first
Trains a classifier on MobileCLIP features in the browser and exports the dataset and model as a zip

- [Project Link](https://reflect.cv/sorty/)
- [GitHub](https://github.com/catherinepereira/sorty)
- [Blog Post](/blog/sorty)

**Tech:** Computer Vision, LLMs, React, TypeScript

### Sign Cards

Browser game for learning ASL fingerspelling, with themed levels and webcam flashcards.
Per-letter recognition from MediaPipe hand landmarks and an ONNX alphabet classifier
Motion letters (J, Z) scored by a CTC fingerspelling model, sharing the OpenHand pipeline
Themed word lists that unlock in order, with letter tiles that fill in as you sign

- [Project Link](https://reflect.cv/sign-cards/)

**Tech:** Computer Vision, React, TypeScript

### Computer Vision Explorables (explorable.cv)

The home for my computer vision explorables!

- [Project Link](https://explorable.cv)
- [GitHub](https://github.com/catherinepereira/explorablecv-models)

**Tech:** Computer Vision, Python, PyTorch, React, TypeScript

### Otterwatch

Live status board that watches sea otter cams, detects when an otter is on screen, and notifies you when one appears.
Detection pipeline running a YOLO26s fine-tuned on frames from public otter cam feeds
Static React app on Vercel subscribing to Supabase Realtime for live sightings with thumbnails
Pushes sightings to both the website and Discord

- [Project Link](https://reflect.cv/otterwatch/)
- [GitHub](https://github.com/catherinepereira/otterwatch)

**Tech:** Computer Vision, Postgres, Python, React, TypeScript, Docker

### detstream

Modular object detection framework for live video feeds. The engine behind Otterwatch.
Pulls from YouTube and RTSP sources, detects with YOLO-World, and tracks with hysteresis and cooldown to avoid alert spam
Pluggable sinks for console, Supabase, and Discord, configured with a single YAML file

- [GitHub](https://github.com/catherinepereira/detstream)
- [PyPI](https://pypi.org/project/detstream/)

**Tech:** Computer Vision, Python, Docker

### Airship
*Easy Games (2025 - 2026)*

Worked on platform micro services, fully designing and implementing features across our stack from the database structure (Postgres, Prisma), to API design (NestJS, REST), and our user interfaces (TypeScript, React, Svelte).
Designed and built the Airship Developer Fund with fund distribution auditing, earnings breakdown, and payout tooling
Built a playtime tracking data pipeline using PubSub and BigQuery with Terraform-provisioned infrastructure
Built admin tooling for payouts and added user payout information forms and validation with Tipalti
Added multi-provider account linking with Firebase (Google, Apple, Steam) and automatic Steam friends detection and cross-platform friend request functionality using Steamworks API
Designed and built platform moderation tools and dashboards for internal moderation with auditing, along with game-scoped moderation tools for developers with a full permission system
Built a content moderation pipeline using GCP's moderation API, including confidence level and threshold tuning implemented across all visible text inputs
Added player count metrics using Prometheus with live display in Grafana
Added user-facing dashboards and webpages for features such as live queue times, organization member and data management, and account management

**Tech:** Google Cloud Platform, Nest.js, Postgres, React, TypeScript, Agones, BigQuery, BunnyCDN, CockroachDB, Docker, Firebase, Grafana, JWT, Kubernetes, Prisma, Prometheus, PubSub, Redis, Sentry, Steamworks, Svelte, Terraform

### OpenHand

Web app that converts American Sign Language fingerspelling to text in real-time using a webcam.
Per-frame letter detection (A-Z) using MLP and streaming phrase transcription using a CTC transformer
Learn screens with animated reference clips and optional text-to-speech output
Isolated word recognition against 250 common ASL signs (model only)

- [Project Link](https://reflect.cv/openhand/)
- [GitHub (Model)](https://github.com/catherinepereira/openhand-model)

**Tech:** Computer Vision, PyTorch, Python, React, TypeScript

### prompt2dataset

CLI tool that generates labeled image datasets from plain-English descriptions.
Fetches and deduplicates images from multiple sources (DuckDuckGo, Wikimedia, iNaturalist, Openverse)
Interactive image review and validation, then fine-tune image classifiers with automatic learning rate detection

- [GitHub](https://github.com/catherinepereira/prompt2dataset)
- [PyPI](https://pypi.org/project/prompt2dataset/)

**Tech:** Computer Vision, LLMs, Python, PyTorch

### airship.top

A website I hosted to track live player count statistics for the multiplayer game platform Airship using GCP Cloud Run, Cloud Scheduler, Firebase Hosting, and Neon.

- [GitHub](https://github.com/catherinepereira/airship-top)

**Tech:** Google Cloud Platform, Nest.js, React, TypeScript, Docker, Postgres, Prisma

### dinnote

Package building off my existing work with the dinscribe package to add speech diarization into my audio pre-preprocessing pipeline.

- [GitHub](https://github.com/catherinepereira/dinnote)
- [PyPI](https://pypi.org/project/dinnote/)

**Tech:** Audio ML, Python

### dinscribe

Package streamlining multiple steps of applying audio pre-processing libraries to clean noisy audio and detect speech.
Designed to optimize speed and accuracy of OpenAI's Whisper transcription model.

- [GitHub](https://github.com/catherinepereira/dinscribe)
- [PyPI](https://pypi.org/project/dinscribe/)

**Tech:** Audio ML, Python

### F1 Pit Wall

Website hosting transcriptions of all driver radio communications from the 2025 F1 season.
Transcriptions were processed from raw driver radio audio using a custom audio processing pipeline, Whisper model prompting, and post-transcription refinement using LLMs.

- [Project Link](https://f1pitwall.vercel.app)
- [GitHub (Full Dataset)](https://github.com/catherinepereira/f1-2025-radio-transcriptions)

**Tech:** Audio ML, LLMs, Python, React, TypeScript

### F1Guessr

Web game inspired by GeoGuessr for F1 fans to guess the year and grand prix from a photo of the race.
Screencaps were automatically collected from F1 highlight videos available on YouTube and filtered using a custom fine-tuned vision model for quality.

- [Project Link](https://f1guessr.com)
- [Blog Post](/blog/f1guessr)

**Tech:** Computer Vision, Python, PyTorch, React, TypeScript

## Explorables


