Skip to content
View teodea's full-sized avatar

Block or report teodea

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
teodea/README.md

Matteo De Angelis

Eleven friends, eight clubs, one football league.
At some point I started turning it into software.

Fantacarriera: a matchday scored side by side, the squad by position, the player catalogue and the league table

fantacarriera.app is open to anyone. Click Esplora la Lega and you're in, no signup.


Hi 👋, I'm Matteo. I studied Computer Engineering at the University of Miami and I build things from Italy.

Almost everything here started the same way: I wanted something to exist, nobody was selling it, so I made it. Sometimes that's a small page that answers one question well. Sometimes it gets out of hand and becomes a whole game with a legal system.


🏟️ The one that got out of hand

Fantacarriera is fantasy football where your club doesn't get wiped every August. It carries multi year contracts, a wage bill, a stadium, a youth squad and a trophy cabinet that remembers. Sell a striker in October and you'll still be feeling it two seasons later.

Eleven of us run eight clubs in there. The rules are a document we vote on, and the app is what makes them real. That's honestly my favourite part of the whole thing: taking something eleven people argue about and turning it into something they can't argue with.

It runs on Next.js, FastAPI and Firestore, up on Cloud Run, and it has been played on since the 2025-26 season. Built in the evenings, over 1,500 commits so far. Here's the longer story. The source stays private, since a real league lives in there.


🧰 Other things I made

🎥  automated soccer vision
Point it at TV footage of a match and it works out who's who, which team they're on, who has the ball and how fast everyone is actually running in real metres. My Master's capstone: I fine-tuned the YOLO11x detector (0.86 mAP50 on held-out frames) and built the rest on top of an open-source tutorial pipeline, with tracking, kit-colour clustering and a homography to flatten the pitch.

📄  arXiv paper classifier
Reads a paper's title and abstract and guesses its field, across all 2.4 million papers on arXiv. TF-IDF and a linear SVM get 82% on eight balanced fields; on the raw data the class imbalance is the real problem, and the README shows why accuracy hides it.

🛣️  traffic network centrality
Asks whether the roads that matter mathematically in Florida are the ones people actually drive on. (Sometimes yes.)

🔀  Randomizer
I sort music more than any reasonable person should. There's no "rap" in my library: there's Italian rap and English rap, and then rap from the 2010s and rap from the 2020s. The electronic side splits into house, deep, techno, chill, and a few more I'd struggle to defend. The trouble is that my mood rarely fits inside one of them, and Spotify only shuffles one playlist at a time. So Randomizer takes several, lets me decide how they mix (an equal say each, 70/30, or taking turns), and plays them as one queue, while every playlist stays exactly the way I sorted it. It also keeps the same artist from playing twice in a row, and clears its temporary playlist away when I'm done. Runs entirely in the browser, no backend. Spotify only lets five accounts in, so there's a demo with sample playlists for everyone else.

Randomizer: three playlists picked, each taking a third of the mix, and the shuffled queue beside them

🧾  gross to net salary calculator
Italian payslips are a black box. This one opens it: every line of the tax waterfall, each with a plain explanation and the actual law it comes from. It covers all 7.896 municipalities, because your comune quietly changes the answer. No build step, no dependencies, it's just a page that opens.

🕹️  digital wallet and 🐍  Snake on a DE1-SoC
From back when the fun was making hardware blink. A wallet protocol written straight onto TCP sockets, and Snake in C drawing straight into the board's VGA buffer through memory-mapped I/O.


🛠️ What I work with

BUILDING THINGS

TypeScript, JavaScript, Python, C, C++, React, Next.js, Vite, Tailwind, FastAPI, Flask, Firebase, Google Cloud, Docker, MySQL, Git

DATA AND MACHINE LEARNING

PyTorch, scikit-learn, OpenCV, MATLAB

and around them NumPy, pandas, Matplotlib and Jupyter · YOLO and Supervision for video
NLTK and spaCy for text · NetworkX and GeoPandas for graphs and maps


💬 A couple of things about me

⚽  most of my projects turn out to be football in disguise. Fantasy leagues, match footage, tactics. I've stopped fighting it.

🗒️  I write the decision down before I write the code. There are eighty of those notes sitting behind Fantacarriera, and they're the reason I can still find my way around it.

🌍  Italian, English and Spanish, in roughly that order of confidence.

📫  teodea99@gmail.com if you want to talk about any of this.

Pinned Loading

  1. fantacarriera fantacarriera Public

    A career-mode fantasy football manager for Serie A, running in production. Walk through the live app, no signup needed.

    JavaScript

  2. arxiv-paper-classifier arxiv-paper-classifier Public

    Classifying 2.4M arXiv papers into their field from title and abstract: TF-IDF with Naive Bayes, KNN and a linear SVM.

    Jupyter Notebook

  3. automated-soccer-vision automated-soccer-vision Public

    Automated soccer match analysis from broadcast footage using YOLOv11, ByteTrack and custom computer vision pipelines.

    Jupyter Notebook

  4. jethr-task jethr-task Public

    Calcolatore RAL to netto 2026: la cascata fiscale voce per voce, ognuna con la sua spiegazione e la sua fonte normativa. 7.896 comuni italiani.

    JavaScript

  5. covid19-ct-diagnosis covid19-ct-diagnosis Public

    ResNet-18 on 2,482 lung CT slices: training from scratch vs ImageNet transfer learning (93.0% vs 97.5% test accuracy), with Grad-CAM.

    Jupyter Notebook

  6. randomizer randomizer Public

    Shuffle across multiple playlists at once — a small web app for Spotify

    TypeScript