Anomaly Detected
Web platform to visualize, report and analyze paranormal phenomena (UFO sightings and haunted places) in the United States, using real data from NUFORC, Haunted Places and the US Census. It combines analytical dashboards with a collaborative module where users can submit and validate their own reports.
My role on the team
I joined the project with the assigned role of database and deploy, but ended up taking on much more than planned: designing and integrating the data model, backend logic, a full visual redesign of the Reports and Community sections, PDF report generation, and the project's technical documentation. In a team of 4, the workload wasn't always split evenly — several times some members didn't bring the same commitment or meet deadlines, which made coordination harder — and this project taught me as much about that (coordinating, taking initiative when something stalls) as it did about the technical side.
What I learned
- Working with real datasets: cleaning, format normalization (encoding, coordinates, dates) and analysis in Tableau
- Django in depth: the ORM, migrations, custom management commands, and the admin panel
- Supabase as a production PostgreSQL database, and how to connect it via environment variables
- Real deployment on Render: build commands, environment variables, and the typical headaches of shipping something to production
Technical decisions
- Migrated from local MySQL to PostgreSQL on Supabase for production
- Used dj-database-url to read the connection from an environment variable without hardcoding credentials
- Generated PDFs with ReportLab + matplotlib for individual per-chart reports
- Split datasets into idempotent import commands (can be run multiple times without duplicating data)
My personal takeBeyond the technical side (Django, Supabase, deploys that fell asleep every fifteen minutes, and charts I had to build almost by hand), I learned what it really takes to sustain a team software project: splitting up roles, coordinating deliveries, documenting so someone else can understand your code, and pushing something functional across the finish line even when the path wasn't tidy.