Pitzil Avila-Castellanos

Projects

CVBuilder: offline infrastructure for a Ugandan community school

Watoto, Intl. · Kampala, Uganda · Built February – June 2026

The community school this was built for doesn't have reliable power, and it doesn't have stable internet. Most software assumes both. CVBuilder is a resume-building application designed around the opposite assumption: that connectivity might never come, and the system still has to work.

Instead of relying on a remote server, the entire application runs on a LattePanda Iota, a single-board edge computer small and power-efficient enough to operate in a low-resource environment. A GL.iNet Opal router turns that device into its own private network, broadcasting a WPA3-secured hotspot that students connect to directly. There's no route to the outside internet because there doesn't need to be one. The app, the database, and the network it runs on are all self-contained on the same device.

The stack is a Django REST API backed by PostgreSQL, served through Gunicorn, with a React frontend and an Nginx reverse proxy handling HTTPS and captive-portal routing, so a student connecting to the hotspot is dropped straight into the app rather than having to find it themselves. Every architectural decision traces back to the same constraint: this has to keep working through power outages, with no IT support on hand, for students who have never had a reason to trust that a piece of technology would work for them.

The system is built and technically complete. Deployment is on hold until the team can travel to Uganda. More detail on the internship this came out of is on the Experience page.

Scorecast: predicting international soccer outcomes

Python, scikit-learn, Gradio · Built around the 2026 FIFA World Cup

Scorecast is a machine learning web app that predicts international soccer match outcomes, covering the full historical international match dataset back to 1990 and built around the 2026 FIFA World Cup.

Rather than predicting win, draw, or loss directly, Scorecast models the expected goals each team will score using two separate Poisson regression models, one for the home side and one for the away side, then builds a score probability grid to derive win, draw, and loss probabilities from it. That's more expressive than a direct three-class classifier because it captures the full distribution of possible scorelines, not just the single most likely outcome.

Each prediction draws on Elo ratings that update after every match with a competition-weighted K-factor, recency-weighted form and goals over the last ten matches, head-to-head history between the two teams, and match context like venue and competitiveness. All of it is built chronologically, replaying matches from 1990 onward so no future information leaks into training.

The Gradio app has a dedicated 2026 World Cup tab covering all 48 qualified nations, plus a general tab for any matchup in the dataset, each returning a win/draw/loss probability chart, team stats, and a key-factors summary. Built with Python, scikit-learn, scipy, pandas, NumPy, and Gradio, using Kaggle's historical match and FIFA ranking datasets.

Looking ahead: a data system for Bithiah's Family Services, replacing years of Google Sheets documentation, starting spring 2027.