Website Revamp Plan
Website Revamp Plan
A working document to plan the improvements to the portfolio site. The goal is to make the site read like the work of a professional robotics engineer: clear, confident, typo-free writing; consistent page structure; and clean, reliable presentation.
This is a Jekyll site (academicpages / Minimal Mistakes theme). Content lives in markdown files under projects/, _pages/, etc.; presentation is controlled by _layouts/, _sass/, _data/, and assets/css/.
1. Guiding principles
These are the standards every page should meet after the revamp.
- Professional, not casual. Confident and concise. Cut self-deprecation (“I’m probably going to make mistakes”, “mad man”, “why go rogue”), filler, and hype (“smallest, cutest”, “biggg fuzzy area”).
- Lead with outcome and contribution. Every project should answer up front: what was the problem, what did I build, what was the result, what did I learn.
- Zero typos / grammar errors. The current pages have many; this alone is the biggest hit to perceived professionalism.
- Consistent structure across projects (see the template in §4).
- Honest, internally consistent data. Tables must not contain impossible values (e.g. F1-scores > 1). Captions must match the images they describe.
- Consistent, theme-driven styling. Move repeated inline styles into CSS classes; remove
!importanthacks; ensure mobile responsiveness. - No broken links or dead/placeholder pages in the live navigation.
2. Site-wide issues
2.1 Navigation (_data/navigation.yml) ✅ decided
- Keep YouTube. Fix the broken link: it currently points to
/youtube/(no such page). Point it directly at the channel URL instead, and remove the stray leading space in the label (" Youtube"→"YouTube"). - Remove Podcast and Guide from the nav (delete the commented-out entries so they don’t get re-enabled by accident).
2.2 Config (_config.yml)
title: "Flavio Gheri / Flavio Gheri"— duplicated name.description: "personal description"— placeholder; hurts SEO and social previews. Write a real one-line description.bio: "Welcome to Flavio's Page"— generic; replace with a real one-line bio.repository: "academicpages/academicpages.github.io"— still points at the template, not Flavio’s repo.- Review social links: confirm
bluesky,medium,youtube,linkedinare correct and that we want all of them shown.
2.3 Home / About page (_pages/about.md)
- Typos: “explenations”, “drawrings” (appears site-wide), missing article/grammar slips.
- Mentions content that does not exist on the site: “podcasting-interviews”, “podcast appearances”, “documentaries”. Either remove these claims or scope them to what’s real.
- Large block of leftover Academic Pages template boilerplate is commented out at the bottom (lines 19–59). Delete it.
- Tone is a bit generic/cringy (“Whether you are interested… or simply a tinkerer like me, you’ll find all you are looking for”). Tighten to a confident intro.
- Title “Building Robots. Ideas and Stories” — confirm this is the desired tagline.
2.4 Repo hygiene (root-level clutter) ✅ done in Phase 1
Removed the committed scratch files: COMPLETION_REPORT.md, PROJECT_UPDATE_SUMMARY.md, QUICK_START_IMAGES.md, IMAGE_RESOURCES.md, notes.md. Kept README.md, LICENSE, CONTRIBUTING.md. (blob/ is git-ignored.)
2.5 Stub / dead project files
- ✅ done in Phase 1: removed
_projects/lunarzebro.html,_projects/poletilt.html,_projects/README.md(all empty). projects/MAChallenge.md— empty body,published: false, wrong title (“Localization of SO100 Robot Hand”). Decide: finish it or delete it.projects/localization_hand.md—published: false, fine to leave hidden but the prose has typos (“redunant”, “in due process”).projects/this_website.md— front matter only, no content. Decide: write it or drop._portfolio/(portfolio-1.md, portfolio-2.html) — leftover template samples, unused. Remove if the Projects page has fully replaced the portfolio.
3. Styling / UI issues
3.1 Project cards (assets/css/styles.css + _pages/projects.md)
- CSS relies on
!importantto fight the theme;.project-text p(1.2em) conflicts with.project-desc(1em). Clean up the cascade so overrides aren’t needed. .project-image { width: 15% }is a fixed ratio with no mobile breakpoint — cards likely look cramped on small screens. Add responsive behaviour (stack on mobile).- Card titles are written in literal ALL CAPS in the HTML (“IMITATION LEARNING”). Use normal casing in markup +
text-transform: uppercasein CSS so content stays clean and editable. - Reading times are hard-coded and likely inaccurate (e.g. lunar_zebro is a long read marked “7 min”). Either recompute them or drop the badges.
- Card descriptions repeat the typo/tone problems of the project pages — fix together.
3.2 In-page image / caption styling (all project pages)
- Captions and image wrappers are done with repeated inline styles on nearly every image (
style="text-align:center; margin:2rem 0",<i>captions, border hacks). Introduce reusable classes (e.g..figure,.figure-caption) or use the theme’s<figure>support consistently, and apply site-wide. malware_detection.mdalready uses semantic<figure>/<figcaption>— adopt that pattern everywhere for consistency.
3.3 General
- Confirm heading hierarchy is consistent (single
#/H1 from title, then##,###). Several pages jump levels or start at## 2.(see lunar_zebro).
4. Standard project-page template
Adopt one structure for every project page so the site feels coherent:
- Title (front matter) — descriptive, consistent capitalization.
- One-paragraph summary — problem, my role, headline result.
- Context / Motivation — why this mattered.
- Approach / What I built — methods, with my contribution called out.
- Results — figures and tables (verified, captioned).
- Discussion / What I learned.
- Future work (optional).
- References (if academic).
Tag each project with consistent metadata (role, tools, date, links to code/paper) — consider a small front-matter convention rendered as a header block.
5. Per-page content fixes
5.1 projects/lunar_zebro.md (highest priority — longest, most visible)
- Broken structure: body starts, then jumps to
## 2. Related Workwith no section 1, and numbering is inconsistent (later## 3,## 4, then### 4.2). Reorganize to the §4 template. - Reads like a group academic report, not a portfolio piece. Reframe around Flavio’s contribution and keep the research detail as supporting depth.
- What’s actually missing / wrong (you asked): the tables are present and can stay — the problem is the F1-score column is mathematically impossible. F1 ∈ [0,1], but the table lists values like 0.84, 1.00, 1.28, 1.36, 1.74. F1 = 2·P·R/(P+R), so recomputing from the existing precision/recall gives:
- Table 1 (model comparison): N → 0.016, S → 0.313, M → 0.478, B → 0.249, L → 0.028, X → 0.405, SSD → 0.488 (already correct).
- Table 2 (augmentation): no-aug → 0.478, warping → 0.174, histogram → 0.023, pooling → 0.423.
- Table 3 (real data) F1 = 0.2725 is already correct.
These are the “reasonable numbers” — they’re just the correctly computed F1s, so no data is invented. The narrative conclusions (M is best, augmentation hurt, real-world performance dropped) still hold. Also fix the prose that quotes the old impossible F1s (e.g. “an F1-score of 1.28”).
- Duplicate / wrong images: ✅ done in Phase 1 —
yolov10_warping.pngwas reused as the confusion matrix for both warping and histogram preprocessing. Per Flavio’s call, the duplicates were dropped (kept the unique pooling-trick figure). If correct warping/histogram confusion matrices surface later, they can be added back. - Many typos: “oppertunity”, “eneergy”, “summerized”, “disadventageous”, “balacing”, “rquire”, “percieve”, “compairison”, “launches” (→ “launched”), “it’s” vs “its”.
- Caption “Original Image (Right), In-house Equalization (left)” contradicts the next caption (“Left: Dataset image. Right: …”). Reconcile left/right labels with images.
5.2 projects/MagIA.md
- ✅ Phase 1 done: wrote a clean, professional short description as the new intro; linked the live startup site magiaworld.com; embedded the animation pipeline video and removed the placeholder “this website” reference and the cringy intro (“mad man”, “biggg fuzzy area”).
- Assets extracted from
blob/Magia_pitch_desk 1.pptx(confirmed accessible):images/magia/animation_pipeline.mp4— the “nice gif” (a 14 s MP4: drawing → figure detection → segmentation → pose/joint placement → final animation). Now the page header visual.images/magia/magia_logo.png— MagIA logo + wizard mascot (available for hero/branding).- The pptx also has a tiger character mascot (
image7.png) and many product mockups if we want more visuals later.
- Still TODO (later phase): the lower “Chapter 1/2” tech-stack and scaling sections are still rough notes (typos: “Unfotunately”, “committments”, “bearocratic”, “vunerabilities”, “Liectenstein”; “twofold” then lists 4; “Main Plan: Frontend ->”). Rewrite these into a clean product/tech-stack/AI-pipeline overview following §4, or trim them.
5.3 projects/malware_detection.md
- Duplicate front matter: a second YAML block is embedded inside the body (lines 8–12) with a different title and permalink. This is a bug — remove it.
- Title inconsistency: front matter “CNN for Malware Detection” vs embedded “Malware Classification with Convolutional Neural Networks”.
- Page is cut off: ends mid-section at “Example: Turning a File into an Image” with a dangling code block and no conclusion. Finish or trim.
- Otherwise the writing here is the strongest on the site — use it as the quality bar.
5.4 projects/path_planning.md — full redesign (you provided the target)
Rebuild this page to the exact case-study layout Flavio specified. Structure:
- “← Back to Projects” link at the top.
- Hero / header block: eyebrow label “Unknown Environment”, large title “Drone Path Planning”, and a one-line summary: “Global planner implementation using Dijkstra algorithm for a quadrotor in PyBullet simulation, ensuring safe maneuverability and collision avoidance.”
- Tag chips:
Python,Dijkstra,PyBullet. - A “Drone Flight Simulation” visual (image/gif/video placeholder).
- Section
01. The Concept: built for the “Planning and Decision Making” course in the Robotics MSc at TU Delft (course code RO47005); objective was a robust global planner guiding a quadrotor safely through obstacle-ridden environments in a physics-based sim. Core challenge: implement Dijkstra from scratch and integrate it into PyBullet for autonomous 3D navigation. - Section
02. Technical Deep Dive→ “Smart Grid Generation”: voxel-based grid; space discretized into nodes; each node validated against bounds + obstacle positions to build a navigable graph. Include thegrid_filter.pycode block (thefilter_grid(XYZ)snippet provided). - Fine vs. Coarse grid comparison: two captioned visuals — “High Resolution Grid (0.1 spacing)” and “Low Resolution Grid (0.2 spacing)”.
⚠️ Content discrepancy to confirm: the current page describes a Velocity Obstacles local planner (and global planners RRT/RRT/IB-RRT/A) done with 3 teammates. The new design reframes the project around a Dijkstra global planner. Confirm whether this is a re-scope (replace old content) or whether Dijkstra should be presented *alongside the existing planners. I’ll treat it as a replacement unless told otherwise. The old “go rogue” aside is dropped regardless.
Note: this richer, sectioned, chip-and-hero layout is a strong candidate to become the template for all project pages (see §6 Interactivity). That would resolve the “site feels static/boring” feedback and the §4 consistency goal at the same time.
5.5 projects/6dpose.md — flesh out from the MSc thesis
This is Flavio’s TU Delft MSc thesis, done in collaboration with Hilti (the source is blob/Thesis_FINAL_Draft(1).zip, now git-ignored). It’s a flagship project and should be the most polished page on the site. Key content (from the thesis abstract):
- Problem: construction stakeout transfers design points from a digital model to the physical site using a robotic total station (RTS) tracking a prism on a handheld pole. Accuracy is limited by the operator keeping the pole perfectly vertical — any tilt becomes a lateral error at the tip that scales with pole length. The manual levelling cycle is slow (~2–3 min/point) and is ~25% of a surveyor’s working time.
- Idea: estimate pole orientation in real time by fusing the RTS with an IMU so tilt is corrected automatically — operator just brings the tip to the target.
- My three contributions: (1) a tilt-aware RTS measurement model that corrects the PLT400’s built-in vertical-pole assumption; (2) an in-field calibration of the IMU-to-pole-tip lever arm via sphere fitting (rotating the pole about a fixed tip traces a sphere); (3) a delay-aware extension that treats the unknown RTS↔IMU clock offset as an optimization variable via piecewise-linear pose interpolation.
- Method: the whole thing is a factor graph (each measurement/constraint = a cost term) solved with a moving-horizon estimator (MHE) for real-time operation. Built on GTSAM (matches the current poletilt blurb).
- Result: ~5.8 mm 2D RMSE in the fine-navigation regime — meeting the sub-centimetre target without hardware sync and with a less accurate RTS than prior work. Levelling cycle eliminated; <30 s per point (vs 2–3 min); a full day’s fine-navigation drops from ~2 h to <30 min. Dominant remaining error = calibration drift as the pole tip’s contact point shifts (the main future-work direction).
- Assets available in the thesis zip: figures for the factor-graph/MHE structure, code structure, bias/Allan-deviation plots, error distributions, pole-tip lag behaviour, ball-socket pole design, robot (Jaibot) PLT example. Pull a few clean ones into the page (export from the zip into
images/— don’t commit the zip). - Cleanup: align slug/title/card — permalink is
/projects/poletilt/but the title says “6D Pose”; pick one consistent name and update the card link inprojects.md. - Decided: ❌ Do not name Hilti on the public page. Describe it generically (e.g. “an industry MSc thesis project” / “a commercial robotic total station”) and avoid the PLT400 model name / Hilti branding in copy and image captions.
5.6 projects/swarm_planning.md — flesh out from the reference paper
Base this on Barnes, Fields & Valavanis, “Unmanned Ground Vehicle Swarm Formation Control Using Potential Fields” (15th Mediterranean Conf. on Control & Automation, 2007) — the paper Flavio provided. Goal: a clearer, correct write-up of the method and an honest account that the reproduction didn’t fully work.
- Concept: organize a robot swarm into formations using artificial potential fields built from normal (Gaussian) and sigmoid functions. A bivariate normal “hill” defines an elliptical surface the swarm travels on; its gradient gives each member’s velocity/heading. Members are attracted to a target ellipse band (the R* neighbourhood); sigmoid limiting functions confine the fields so vectors “die out” at the band edges; an extra perpendicular field moves members along the band, and an avoidance field controls inter-member spacing.
- Equations to explain properly (the current page has none): the bivariate normal
f(x,y)=e^{-((x-x_c)² + γ(y-y_c)²)}; its gradient → velocity vectors; the target ellipseR*² = (x-x_c)² + γ(y-y_c)²with axis-ratio γ; and the sigmoid limiting functionsS_in,S_out,N⊥that trap members inR* − ΔR_in < r < R* + ΔR_out. Walk through what each parameter (γ, ΔR_in, ΔR_out, ΔR_avoid, ε) controls — the paper’s Tables I–III give concrete values for arc/circle/ellipse formations. - Honesty / my experience: Flavio reproduced this but could not get the exact swarm effect — the sigmoid limiting functions didn’t shape the field as intended. Frame this as a candid “what I tried, what broke, what I’d debug next” section (likely suspects: limiting-function tuning/α derivation, the perpendicular-field direction multiplier
SGN, or gradient normalization). This kind of honest post-mortem reads as more professional, not less. - Tone: drop the bare “military applications” line, or contextualize it as one application area alongside planetary exploration / search-and-rescue (as the paper’s convoy-protection framing does).
- Decide whether to publish it on the Projects index (currently not linked).
5.7 projects/Imitation_learning.md
- Strongest-structured page already. Minor polish only:
- LaTeX bug at line 88:
\text{Success Rate}is written as ` ext{…}` (a literal tab + “ext”) — will not render. Fix. - Otherwise keep as a model for the others.
- LaTeX bug at line 88:
5.8 projects/this_website.md, projects/localization_hand.md,
projects/MAChallenge.md
- See §2.5 — finish or remove; fix the duplicated/incorrect titles.
6. Interactivity — make the site feel less static
Flavio’s feedback: “the website needs to feel more interactive… it feels very static and boring,” and especially “the main page… I would like the website to pop a little more and feel more professional.” This is now a first-class goal, not a nice-to-have. The path-planning case-study design (§5.4) is the visual direction; extend that feel across the site.
The home page (_pages/about.md) is the top priority here — it’s currently a plain wall of text. Make it the showcase:
- A proper hero: name + one-line “Robotics engineer — perception, SLAM, computer vision,” a portrait, and clear calls-to-action (Projects, CV, YouTube).
- Featured-projects strip right on the landing page (e.g. 6D Pose, Lunar Zebro, Imitation Learning) as interactive cards, instead of making visitors hunt via the nav.
- Subtle entrance animation / motion in the hero so the first screen feels alive.
- Tighten the copy (it still mentions podcasts/documentaries that don’t exist).
Principle: add motion and interaction that reveals the engineering — it should make the work easier to understand, not just decorate. Keep it lightweight (this is a static Jekyll/GitHub Pages site: prefer CSS + vanilla JS, lazy-load heavy assets, respect prefers-reduced-motion, and keep it fast on mobile).
Concrete ideas, cheap → richer:
- Project-card hover polish: the cards already scale on hover — add subtle image zoom, an accent underline/arrow, and smooth easing so the index feels alive.
- Scroll-reveal: fade/slide sections in as they enter the viewport (IntersectionObserver), used on the new sectioned project layout (
01. The Concept,02. …). - Sticky section nav / progress bar on long pages (lunar_zebro, 6dpose) so readers can jump between sections and see reading progress.
- Hero motion: looping muted video / GIF / subtle canvas animation in project headers (e.g. the drone sim, the MagIA animated drawings, the rover render).
- Interactive figures where they teach something:
- Path planning: animate Dijkstra exploring the grid, or a fine-vs-coarse grid toggle.
- Lunar zebro: a before/after image slider for histogram equalization / warping; tabbed confusion matrices instead of stacked images.
- 6dpose: an animated factor-graph / pole-tilt diagram, or an interactive error plot.
- Malware: there’s already a
malware_scanner_interactive.html“binary visualizer” — make it a model for this kind of embedded interactive widget.
- Code blocks: syntax highlighting + copy-to-clipboard buttons (e.g. the
grid_filter.pysnippet, the LeRobot CLI commands). - Micro-interactions: animated tag chips, smooth anchor scrolling, a light/dark toggle if it fits the theme.
Recommendation: turn the §5.4 layout into a reusable project layout/include so every project gets the hero + chips + numbered sections + scroll-reveal “for free,” giving the whole site a consistent, modern, interactive feel in one move.
7. Open questions for Flavio
Most earlier questions are now answered (YouTube kept, podcast/guide removed; thin projects to be fleshed out; lunar_zebro F1s recomputed in §5.1; lunar duplicate figures dropped; Hilti not named on the 6dpose page; MagIA short description written). Remaining:
- Path planning re-scope: is the project now Dijkstra global planner (replacing the old Velocity Obstacles / RRT* content), or should both be shown? (See §5.4.) I’ll assume replacement unless told otherwise.
- Path-planning assets: can you provide the fine/coarse grid images and the drone-sim visual referenced in the target design?
- 6dpose display name: 6D Pose vs Pole-Tilt Estimation vs the thesis title — which should the public page use?
- Tagline: keep “Building Robots. Ideas and Stories” as the homepage title?
- Tone/voice: first person (“I built…”) throughout — confirm preferred.
8. Suggested execution order
- ✅ Quick wins / hygiene (DONE): fixed
_config.ymlplaceholders (title, description, bio, repository); fixed the YouTube nav link + removed podcast/guide; fixed the LaTeX tab bug in imitation_learning; removed the duplicate front matter in malware_detection; dropped the duplicate lunar figures; removed root clutter + empty stub files; wrote the MagIA short description + embedded the extracted animation pipeline. (blob/git-ignored.) - Copy editing pass: typos and tone across about.md, projects.md cards, and all published project pages.
- Build the reusable interactive project layout (hero + chips + numbered sections + scroll-reveal), starting with path_planning as the reference implementation (§5.4).
- lunar_zebro restructure + F1 recomputation (§5.1) + figure fixes.
- Flesh out 6dpose (thesis) and swarm_planning (paper); rewrite MagIA; finish/trim malware_detection.
- Roll the interactive layout out to all projects + styling pass (card CSS cleanup + responsiveness, shared figure/caption classes, ALL-CAPS via CSS).
- Final review: build locally, click every nav item and project link, check mobile +
prefers-reduced-motion.
