Skip to content

Commit ba9bbfe

Browse files
committed
Add Projects section
Mirrors the Publications section: a YAML data file feeds a Liquid loop in projects.md, rendered with custom SCSS cards (light + dark theme). Seeded with 13 curated GitHub repositories — coursework from PoliMi and KTH, two ACM RecSys Challenge entries, and the HackaTUM hackathon. Navigation adds Projects between Publications and CV. https://claude.ai/code/session_01NUSWxY9PcC8Me7jqJPk7Cx
1 parent c7a8d00 commit ba9bbfe

4 files changed

Lines changed: 323 additions & 0 deletions

File tree

docs/_data/navigation.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
url: /publications/
77
icon: fa-graduation-cap
88

9+
- title: Projects
10+
url: /projects/
11+
icon: fa-code-branch
12+
913
- title: CV
1014
url: /cv/
1115
icon: fa-file-alt

docs/_data/projects.yml

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# Source of truth for the website's projects page.
2+
# Curated list of GitHub repositories Alessandro meaningfully contributed to —
3+
# mostly coursework from PoliMi and KTH, two ACM RecSys Challenge entries,
4+
# and one hackathon. Forks and throwaway sandboxes are intentionally excluded.
5+
# Sorted reverse-chronologically; the projects page sorts by `year` anyway.
6+
7+
- title: "RecSys Challenge 2022 — 11th place"
8+
repo: "https://github.com/Alexdruso/recsys2022"
9+
year: 2022
10+
role: "Team (3)"
11+
context: "ACM RecSys Challenge 2022 @ Politecnico di Milano"
12+
description: "11th-place solution to the ACM RecSys Challenge 2022. Three-stage pipeline: collaborative / content / graph recommenders, neural sequence models (Transformer, BiLSTM, GRU), and a 10-fold LGBM ranker on top — reached ~0.1965 MRR@100 on test."
13+
tags: ["Python", "TensorFlow", "LightGBM", "Recommender Systems"]
14+
15+
- title: "DD2437 — Artificial Neural Networks and Deep Architectures"
16+
repo: "https://github.com/Alexdruso/DD2437-ANNDA-Colasanti-Sanvito-Stuart"
17+
year: 2022
18+
role: "Team (3)"
19+
context: "DD2437 @ KTH Royal Institute of Technology"
20+
description: "Four lab assignments implementing classical and deep neural architectures from scratch: perceptron / MLP, RBF networks and SOMs, Hopfield networks, and Restricted Boltzmann Machines / Deep Belief Networks."
21+
tags: ["Python", "NumPy", "Jupyter", "Neural Networks"]
22+
23+
- title: "II2202 — Quantum Ridge Regression on D-Wave"
24+
repo: "https://github.com/Alexdruso/II2202-Research-Quantum-ML-Sanvito-Stuart"
25+
year: 2022
26+
role: "Team (2)"
27+
context: "II2202 Research Methodology @ KTH Royal Institute of Technology"
28+
description: "Empirical study of training Ridge regression on a D-Wave hybrid quantum annealer vs. classical Cholesky decomposition. Found that quantum-trained models do not match classical reliability across the datasets tested."
29+
tags: ["Python", "D-Wave", "Quantum ML"]
30+
31+
- title: "HackaTUMeme — gamified movie recommender"
32+
repo: "https://github.com/Alexdruso/HackaTUMeme"
33+
year: 2022
34+
role: "Hackathon team"
35+
context: "HackaTUM @ TU München"
36+
description: "Conversational movie recommender that explores MovieLens as a graph rather than as a static carousel: temporarily expands the user profile during a session and surfaces films through trivia and social context."
37+
tags: ["Python", "Django", "Lenskit", "TypeScript"]
38+
39+
- title: "ID2222 — Data Mining lab assignments"
40+
repo: "https://github.com/Alexdruso/ID2222-Data-Mining-Sanvito-Stuart"
41+
year: 2023
42+
role: "Team (2)"
43+
context: "ID2222 Data Mining @ KTH Royal Institute of Technology"
44+
description: "Five labs covering core data-mining algorithms: shingling + min-hash + LSH for near-duplicate detection, A-Priori association rules, the Triest streaming triangle counter, spectral clustering, and the JaBeJa graph partitioner."
45+
tags: ["Java", "Jupyter", "Algorithms"]
46+
47+
- title: "RecSys Challenge 2021 — Trial&Error team"
48+
repo: "https://github.com/Alexdruso/recsys-challenge-2021-twitter-1"
49+
year: 2021
50+
role: "Team (8)"
51+
context: "ACM RecSys Challenge 2021 @ Politecnico di Milano"
52+
description: "Tweet-engagement prediction pipeline for the ACM RecSys Challenge 2021. LightGBM / XGBoost / CatBoost gradient boosting on transformer-derived features, distributed with Dask on AWS GPU/CPU instances."
53+
tags: ["Python", "LightGBM", "XGBoost", "Transformers", "AWS"]
54+
55+
- title: "Quantum linear regression on Orquestra"
56+
repo: "https://github.com/Alexdruso/linear-regression-orquestra"
57+
year: 2021
58+
role: "Solo"
59+
context: "Independent project"
60+
description: "Orquestra component that trains an OLS linear regression model via simulated / quantum annealing — a stepping stone toward the later D-Wave Ridge regression study."
61+
tags: ["Python", "Orquestra", "Quantum ML"]
62+
63+
- title: "DB2 — JEE database application"
64+
repo: "https://github.com/Alexdruso/db2-project"
65+
year: 2021
66+
role: "Solo"
67+
context: "Databases 2 @ Politecnico di Milano"
68+
description: "Enterprise-Java web application built on JPA, JEE, and Thymeleaf — full DDL schema, persistence layer, and templated UI for a Databases 2 course assignment."
69+
tags: ["Java", "JEE", "JPA", "Thymeleaf"]
70+
71+
- title: "CLup — RASD & Design Document"
72+
repo: "https://github.com/Alexdruso/RivaSanvitoVecchio"
73+
year: 2021
74+
role: "Team (3)"
75+
context: "Software Engineering 2 @ Politecnico di Milano"
76+
description: "Requirements & Specification (RASD v1.2) and Design Document (DD v1.0) for the CLup queue-management application. Models written in Alloy and MagicDraw, mockups in Moqups."
77+
tags: ["LaTeX", "Alloy", "Requirements Engineering"]
78+
79+
- title: "Santorini — distributed multiplayer board game"
80+
repo: "https://github.com/Alexdruso/ing-sw-2020-Riva-Sanvito-Truong"
81+
year: 2020
82+
role: "Team (3)"
83+
context: "Software Engineering @ Politecnico di Milano"
84+
description: "Full implementation of the Santorini board game in Java SE 14: socket networking, multiple concurrent matches, CLI + GUI clients, five advanced god powers, and a CircleCI pipeline with ~95% server-side test coverage."
85+
tags: ["Java", "Maven", "Sockets", "CircleCI"]
86+
87+
- title: "RecSys Challenge 2020 — PoliMi"
88+
repo: "https://github.com/Alexdruso/recsys-challenge-2020-polimi"
89+
year: 2020
90+
role: "Solo"
91+
context: "Recommender Systems course challenge @ Politecnico di Milano"
92+
description: "5th / 8th (public / private) out of 66 in the in-class Kaggle challenge. Generalised N-score hybrid over MF-IALS, RP3-Beta and SLIM-ElasticNet, with a GPU-accelerated MF that cut training from ~10 min to 30 s."
93+
tags: ["Python", "Cython", "Recommender Systems", "GPU"]
94+
95+
- title: "Working-zones address decoder (VHDL)"
96+
repo: "https://github.com/Alexdruso/Progetto-di-reti-logiche-2019"
97+
year: 2020
98+
role: "Team (2)"
99+
context: "Reti Logiche @ Politecnico di Milano"
100+
description: "VHDL hardware module that decodes 8-bit memory addresses using the working-zones locality scheme to reduce switching activity. Verified with Vivado testbenches; graded 30/30 cum laude."
101+
tags: ["VHDL", "Vivado", "Digital Design"]
102+
103+
- title: "API — graph-relationship engine in C"
104+
repo: "https://github.com/Alexdruso/API-project"
105+
year: 2019
106+
role: "Solo"
107+
context: "Algoritmi e Principi dell'Informatica @ Politecnico di Milano"
108+
description: "Graph-mutation program (addent / addrel / delent / delrel / report) written in C and tuned for an automated grader on both runtime and memory budgets. Final score 30/30 cum laude."
109+
tags: ["C", "Algorithms", "Performance"]

docs/projects.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
title: Projects | Alessandro Sanvito
3+
layout: page
4+
permalink: /projects/
5+
---
6+
7+
<div class="projects">
8+
<p class="projects-header">
9+
Selected GitHub projects — coursework from Politecnico di Milano and KTH, two ACM RecSys Challenge entries, and a hackathon.
10+
Full list on
11+
<a href="https://github.com/Alexdruso" target="_blank" rel="noopener">GitHub</a>.
12+
</p>
13+
14+
{% assign projects = site.data.projects | sort: "year" | reverse %}
15+
{% for project in projects %}
16+
<article class="project-card">
17+
<div class="project-meta">
18+
<span class="project-year">{{ project.year }}</span>
19+
{% if project.role %}<span class="role-chip">{{ project.role }}</span>{% endif %}
20+
</div>
21+
22+
<h2 class="project-title">
23+
<a href="{{ project.repo }}" target="_blank" rel="noopener">{{ project.title }}</a>
24+
</h2>
25+
26+
{% if project.context %}<p class="project-context">{{ project.context }}</p>{% endif %}
27+
28+
<p class="project-description">{{ project.description }}</p>
29+
30+
{% if project.tags %}
31+
<p class="project-tags">
32+
{% for tag in project.tags %}<span class="tag-chip">{{ tag }}</span>{% endfor %}
33+
</p>
34+
{% endif %}
35+
36+
<p class="project-links">
37+
<a href="{{ project.repo }}" target="_blank" rel="noopener"><i class="fab fa-github"></i> View on GitHub</a>
38+
</p>
39+
</article>
40+
{% endfor %}
41+
</div>

docs/style.scss

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,3 +1122,172 @@ footer {
11221122
font-size: 0.8em;
11231123
}
11241124
}
1125+
1126+
// Projects
1127+
.projects {
1128+
margin-bottom: 3rem;
1129+
}
1130+
1131+
.projects-header {
1132+
color: $gray;
1133+
font-size: 0.95em;
1134+
margin: 0 0 2rem;
1135+
padding-bottom: 1rem;
1136+
border-bottom: 1px solid $lightGray;
1137+
}
1138+
1139+
.project-card {
1140+
padding: 1.25rem 0 1.5rem;
1141+
border-bottom: 1px solid $lightGray;
1142+
1143+
&:last-child {
1144+
border-bottom: none;
1145+
}
1146+
}
1147+
1148+
.project-meta {
1149+
display: flex;
1150+
flex-wrap: wrap;
1151+
align-items: center;
1152+
gap: 0.5rem;
1153+
margin-bottom: 0.4rem;
1154+
font-size: 0.85em;
1155+
}
1156+
1157+
.project-year {
1158+
color: $gray;
1159+
font-weight: 500;
1160+
}
1161+
1162+
.role-chip {
1163+
background-color: $lightBlue;
1164+
color: $accentBlue;
1165+
padding: 0.1rem 0.5rem;
1166+
border-radius: 4px;
1167+
font-weight: 600;
1168+
font-size: 0.8em;
1169+
}
1170+
1171+
.project-title {
1172+
font-size: 1.2em;
1173+
margin: 0.2rem 0 0.4rem;
1174+
line-height: 1.35;
1175+
1176+
a {
1177+
color: $darkerGray;
1178+
text-decoration: none;
1179+
border-bottom: none;
1180+
1181+
&:hover {
1182+
color: $blue;
1183+
}
1184+
}
1185+
}
1186+
1187+
.project-context {
1188+
color: $gray;
1189+
font-style: italic;
1190+
font-size: 0.95em;
1191+
margin: 0 0 0.5rem;
1192+
}
1193+
1194+
.project-description {
1195+
margin: 0 0 0.5rem;
1196+
color: $darkGray;
1197+
}
1198+
1199+
.project-tags {
1200+
display: flex;
1201+
flex-wrap: wrap;
1202+
gap: 0.4rem;
1203+
margin: 0 0 0.6rem;
1204+
}
1205+
1206+
.tag-chip {
1207+
display: inline-block;
1208+
background-color: $lightGray;
1209+
color: $darkGray;
1210+
padding: 0.1rem 0.5rem;
1211+
border-radius: 4px;
1212+
font-size: 0.75em;
1213+
font-weight: 500;
1214+
}
1215+
1216+
.project-links {
1217+
margin: 0;
1218+
font-size: 0.9em;
1219+
1220+
a {
1221+
color: $blue;
1222+
text-decoration: none;
1223+
margin-right: 1rem;
1224+
1225+
i {
1226+
margin-right: 0.25rem;
1227+
}
1228+
1229+
&:hover {
1230+
text-decoration: underline;
1231+
}
1232+
}
1233+
}
1234+
1235+
// Dark theme adjustments for projects
1236+
.dark-theme {
1237+
.projects-header {
1238+
color: $dark-gray;
1239+
border-bottom-color: $dark-border;
1240+
}
1241+
1242+
.project-card {
1243+
border-bottom-color: $dark-border;
1244+
}
1245+
1246+
.project-title a {
1247+
color: $dark-text;
1248+
1249+
&:hover {
1250+
color: $dark-accent-hover;
1251+
}
1252+
}
1253+
1254+
.project-context {
1255+
color: $dark-gray;
1256+
}
1257+
1258+
.project-description {
1259+
color: $dark-text;
1260+
}
1261+
1262+
.project-year {
1263+
color: $dark-gray;
1264+
}
1265+
1266+
.role-chip {
1267+
background-color: $dark-border;
1268+
color: $dark-accent-hover;
1269+
}
1270+
1271+
.tag-chip {
1272+
background-color: $dark-border;
1273+
color: $dark-text;
1274+
}
1275+
1276+
.project-links a {
1277+
color: $dark-accent;
1278+
1279+
&:hover {
1280+
color: $dark-accent-hover;
1281+
}
1282+
}
1283+
}
1284+
1285+
@include mobile {
1286+
.project-title {
1287+
font-size: 1.1em;
1288+
}
1289+
1290+
.project-meta {
1291+
font-size: 0.8em;
1292+
}
1293+
}

0 commit comments

Comments
 (0)