@@ -118,9 +118,9 @@ That experience made me addicted to hackathons. After that I joined other events
A big turning point was my Erasmus in Valencia.
-I kept studying Computer Science at Universidad Politecnica, met people from everywhere, and got exposed to different cultures and languages.
+I kept studying Computer Science at Universidad Politecnica, met people from everywhere and got exposed to different cultures and languages.
-The tech environment there felt different compared to Italy. In that period there was a lot of energy: startups, new ideas, and a strong feeling that people wanted to build things.
+The tech environment there felt different compared to Italy. In that period there was a lot of energy: startups, new ideas and a strong feeling that people wanted to build things.
Valencia also helped me grow as a person. New country, new habits, new friends, new perspective.
@@ -137,9 +137,9 @@ Not as a “I give up” move. More like: I want a different balance.
I lived the fast pace, the rush, the always-online mindset. Coming back here was intentional: less noise, more space, more time.
-I work remote, and Sicily is perfect for that. Life is slower. Sometimes it’s frustrating, but often it’s exactly what I need.
+I work remote and Sicily is perfect for that. Life is slower. Sometimes it’s frustrating, but often it’s exactly what I need.
-Time here feels different. You can actually breathe. You can have “nothing special” days, and those days can still feel good.
+Time here feels different. You can actually breathe. You can have “nothing special” days and those days can still feel good.
diff --git a/src/content/blog/from-angular-to-astro.mdx b/src/content/blog/from-angular-to-astro.mdx
index d2f02fd..eff24e2 100644
--- a/src/content/blog/from-angular-to-astro.mdx
+++ b/src/content/blog/from-angular-to-astro.mdx
@@ -1,6 +1,6 @@
---
title: "From Angular to Astro: building a cheap (and fast) personal site with a blog"
-description: "I rewrote my website from Angular to Astro to have a Markdown blog with no backend, keep hosting costs low, and chase the four green Lighthouse scores."
+description: "I rewrote my website from Angular to Astro to have a Markdown blog with no backend, keep hosting costs low and chase the four green Lighthouse scores."
pubDate: 2026-01-09
heroImage: "../../assets/photos/from-angular-to-astro/cover.png"
tags: ["astro", "aws", "seo", "performance", "ai", "migration"]
@@ -12,7 +12,7 @@ import hostingDiagram from '../../assets/photos/from-angular-to-astro/hosting-di
I like technical challenges.
-I know Angular very well, and I used React a lot too. So at some point I wanted to try something different, and people kept telling me: "look at [Astro](https://astro.build/)".
+I know Angular very well and I used React a lot too. So at some point I wanted to try something different and people kept telling me: "look at [Astro](https://astro.build/)".
The main goal was simple:
@@ -24,7 +24,7 @@ So… I rewrote my site. Angular SPA → Astro static site.
## Why Astro (for me)
-For a personal website, most pages are content. Not "app".
+For a personal website, most pages are content. Not "app".
And for content, static generation is just great:
- fast pages
@@ -38,8 +38,8 @@ Astro also gives you a nice middle ground: you can keep the site mostly static,
I'm going to be super honest: I used an AI agent to do a big part of the work.
-I read the Astro docs (just enough), then I basically jumped into development using AI, staying quite "high level".
-I was more like a product owner: I described what I wanted, then I reviewed what the AI generated, and I fixed the parts where it got lost.
+I read the Astro docs (just enough), then I basically jumped into development using AI, staying quite "high level".
+I was more like a product owner: I described what I wanted, then I reviewed what the AI generated and I fixed the parts where it got lost.
This workflow was **fast**, but it has a cost: you can lose details if you don't stop and write things down.
@@ -47,7 +47,7 @@ Still, it was the right choice for this kind of project. I wanted results, not b
## Where the AI got lost (and where I had to step in)
-Most problems were not on the backend side (there is no backend 😄).
+Most problems were not on the backend side (there is no backend 😄).
The real issues were **UI** and **visual details**:
- moving layouts from Angular to Astro: spacing and alignment were often "almost right", but not correct
@@ -66,7 +66,7 @@ That last 20% is where you spend most of the time, really... this 20% cost me re
The biggest pain wasn't the framework. It was **content**.
-I had to rewrite pages and sections into **Markdown / MDX**, then make sure Astro renders them correctly (Astro has its own way, and content collections are powerful but different if you come from Angular).
+I had to rewrite pages and sections into **Markdown / MDX**, then make sure Astro renders them correctly (Astro has its own way and content collections are powerful but different if you come from Angular).
In the end it's worth it: now writing a post is literally creating a `.md` file and pushing it.
@@ -102,11 +102,11 @@ And if the site is light, you also reduce bandwidth and compute. Not saving the
One reason I went with a static setup (S3 + CloudFront) is cost predictability.
-For a personal site, storage on S3 is usually negligible (we’re talking cents/month for a few hundred MB).
+For a personal site, storage on S3 is usually negligible (we’re talking cents/month for a few hundred MB).
CloudFront also has a generous "always free" tier (1 TB data transfer out + 10M HTTP(S) requests per month), which is more than enough for a normal personal blog.
-The only “fixed” recurring cost I really consider is DNS: Route 53 hosted zone is $0.50/month (plus the domain).
-And cache invalidations are free for the first 1,000 paths/month, so regular deploys don’t cost anything.
+The only “fixed” recurring cost I really consider is DNS: Route 53 hosted zone is $0.50/month (plus the domain).
+And cache invalidations are free for the first 1,000 paths/month, so regular deploys don’t cost anything.
## Performance and the "four green gauges" obsession
@@ -117,8 +117,8 @@ At some point I started chasing Lighthouse scores like a videogame.
Lighthouse scores for lorenzoiovino.com
-Accessibility was the most fun one. Lighthouse kept telling me: **bad contrast**.
-So I had to choose better colors, especially for text and dark mode.
+Accessibility was the most fun one. Lighthouse kept telling me: **bad contrast**.
+So I had to choose better colors, especially for text and dark mode.
It's a small thing, but it makes the site nicer to read. And it's also just… the right thing to do.
Then there was performance, especially around:
@@ -132,22 +132,22 @@ Then there was performance, especially around:
Two things that helped a lot:
- make Google Fonts non-blocking (`font-display: swap`) and avoid [FOIT](https://fonts.google.com/knowledge/glossary/foit)
-- give priority to the hero image ([LCP](https://web.dev/articles/lcp)), and don't lazy load above-the-fold content
+- give priority to the hero image ([LCP](https://web.dev/articles/lcp)) and don't lazy load above-the-fold content
This kind of change is boring, but the result is visible (and Lighthouse stops yelling).
### Image optimization: the "Astro saved me" moment
-In the old site, images were not optimized. Some were huge.
+In the old site, images were not optimized. Some were huge.
My first thought was: "ok, I know this… I can build an AWS Lambda that resizes and optimizes images on the fly, then put CloudFront in front".
I did similar things at work.
-But… for my personal site it was too much.
+But… for my personal site it was too much.
More moving parts, more cost, more complexity.
-Then I discovered something very nice: **Astro can optimize images at build time** (Astro Assets).
-So I moved images into the project assets, used the `
` component, and let the build do the job.
+Then I discovered something very nice: **Astro can optimize images at build time** (Astro Assets).
+So I moved images into the project assets, used the `
` component and let the build do the job.
Result: smaller images, automatic formats (like [WebP](https://developers.google.com/speed/webp)), no extra infrastructure.
@@ -157,12 +157,12 @@ That was a big win: less complexity, better performance, cheaper hosting.
Lighthouse is great, but I also used tools like [**Screaming Frog**](https://www.screamingfrog.co.uk/seo-spider/) to see issues in a more "SEO crawler" way (missing meta, duplicated titles, broken stuff, etc.).
-It's a different view of the site, and sometimes it highlights problems you don't notice when you just browse your own pages.
+It's a different view of the site and sometimes it highlights problems you don't notice when you just browse your own pages.
## What I learned (and what I would do again)
- Astro is a great fit for content sites
-- static hosting is boring, and boring is good
+- static hosting is boring and boring is good
- AI can speed up the migration a lot, but you still need to review and fix the last details
- performance work is not "one big thing", it's a lot of small fixes
- accessibility is not optional -> it makes your site better
diff --git a/src/content/blog/going-back-to-fosdem-2026.mdx b/src/content/blog/going-back-to-fosdem-2026.mdx
index 61f66bd..c8345e1 100644
--- a/src/content/blog/going-back-to-fosdem-2026.mdx
+++ b/src/content/blog/going-back-to-fosdem-2026.mdx
@@ -6,9 +6,9 @@ heroImage: "../../assets/photos/going-back-to-fosdem-2026/cover.png"
tags: ["conference", "open-source", "community", "thoughts", "fosdem"]
---
-Last year I went to FOSDEM for the first time, and this year I'm going back, not because I "have to" but because I want to, and that's already different.
+Last year I went to FOSDEM for the first time and this year I'm going back, not because I "have to" but because I want to and that's already different.
-**I know that not everyone has this privilege, not everyone can follow their passions, and even fewer people are lucky enough to work in a field where their job and their curiosity overlap, so I don't take this for granted and I'm happy to have it.**
+**I know that not everyone has this privilege, not everyone can follow their passions and even fewer people are lucky enough to work in a field where their job and their curiosity overlap, so I don't take this for granted and I'm happy to have it.**
## What FOSDEM actually is
@@ -19,7 +19,7 @@ Many friends of mine ask *"How much does it cost? Do you need to register in adv
It's two days [January 31 - February 1](https://fosdem.org/2026/schedule/) where around 8,000 and more developers meet at the Université libre de Bruxelles (ULB) to talk about open source.
-There are keynotes, developer rooms, lightning talks, stands, and a lot of hallway conversations, beers (Belgian beers) really a lot of it 🍺.
+There are keynotes, developer rooms, lightning talks, stands and a lot of hallway conversations, beers (Belgian beers) really a lot of it 🍺.
@@ -35,12 +35,12 @@ It was my first time there, I had heard about FOSDEM many years ago but I was al
....anyway, something happen and i decided to book a plane!
-FOSDEM was different, it was chaotic, crowded, and noisy in the best way possible, it reminded me a kind of self-managed school days (in Italy we used to have these days where alumns self-manage the daily schedule of classes), same energy of people taking over his/her spaces, organizing themselves, doing their thing without much formal structure. The vibes were really like being back at university, that mix of chaos, learning, and random conversations over bad coffee... and I realized how much I miss that sometimes.
+FOSDEM was different, it was chaotic, crowded and noisy in the best way possible, it reminded me a kind of self-managed school days (in Italy we used to have these days where alumns self-manage the daily schedule of classes), same energy of people taking over his/her spaces, organizing themselves, doing their thing without much formal structure. The vibes were really like being back at university, that mix of chaos, learning and random conversations over bad coffee... and I realized how much I miss that sometimes.
I remember walking into a devroom about Rust and it was packed! People sitting on the floor, others standing in the back...BUT the talk was good and what stayed with me was the energy, *people were there because they wanted to be there, not because their company sent them*.
-At some point during the weekend I ended up in a talk about COBOL, yes COBOL in 2025 and the old-guy (probably it was a professore) was so passionate about it, explaining why it's still beautiful and relevant, and it was one of the most entertaining talks I attended, not because I'll ever write COBOL but because it's just *cool*, you know? Someone being genuinely excited about something most people consider dead.
+At some point during the weekend I ended up in a talk about COBOL, yes COBOL in 2025 and the old-guy (probably it was a professore) was so passionate about it, explaining why it's still beautiful and relevant and it was one of the most entertaining talks I attended, not because I'll ever write COBOL but because it's just *cool*, you know? Someone being genuinely excited about something most people consider dead.
That's rare.
@@ -51,18 +51,18 @@ There was also this [incredible lightning talk about honeypots for bots](https:/
## What I didn't expect
-I went to FOSDEM thinking I would attend a lot of talks, take notes, and learn a ton of new stuff, but what actually happened is that I attended some talks but spent most of the time talking with people in the hallways, at the stands, or in random corners of the campus and that was way more valuable than I expected.
+I went to FOSDEM thinking I would attend a lot of talks, take notes and learn a ton of new stuff, but what actually happened is that I attended some talks but spent most of the time talking with people in the hallways, at the stands, or in random corners of the campus and that was way more valuable than I expected.
I met people working on projects I use every day, talked with maintainers who were just there, available, happy to chat, no corporate filter, no marketing speak, just real conversations about real problems. One guy told me *"We broke production last week because of a stupid timezone bug, it happens"* and that kind of honesty? You don't get that in polished conference talks or LinkedIn posts.
-I also met some friends I only knew online, and it was weird in a good way, like *"oh, you're a real person!"* We ended up grabbing Belgian fries at some random food truck near the campus and between bites we talked about Nix, NixOS, and why declarative systems are super cool.
+I also met some friends I only knew online and it was weird in a good way, like *"oh, you're a real person!"* We ended up grabbing Belgian fries at some random food truck near the campus and between bites we talked about Nix, NixOS and why declarative systems are super cool.
Honestly, one of the best parts was realizing that when you feel a bit lonely or a bit crazy working on something "obscure" there's someone else from the other side of the world who came on purpose just to listen to you, to share that same weird excitement about some niche tool or some random problem.
-That's rare, and that's what makes it worth it.
+That's rare and that's what makes it worth it.
## The plan for 2026
@@ -71,16 +71,16 @@ Last year taught me something: FOSDEM is not really about the schedule, it's abo
-The schedule? is crazy, you can't attend all the talks, and even if you try to follow your plan strictly it becomes a mess because you start talking with somebody, you get into a conversation, and suddenly you realize you're late for the next talk, but it doesn't matter because you're happy and you're learning from people, not just from slides.
+The schedule? is crazy, you can't attend all the talks and even if you try to follow your plan strictly it becomes a mess because you start talking with somebody, you get into a conversation and suddenly you realize you're late for the next talk, but it doesn't matter because you're happy and you're learning from people, not just from slides.
-So this year I'm going back, but with a *different approach*: I'm not trying to attend everything because the schedule is huge and it's impossible to see it all, and that's fine, so I'll pick a few talks I really care about, then I'll spend the rest of the time wandering, meeting people, and seeing what happens.
+So this year I'm going back, but with a *different approach*: I'm not trying to attend everything because the schedule is huge and it's impossible to see it all and that's fine, so I'll pick a few talks I really care about, then I'll spend the rest of the time wandering, meeting people and seeing what happens.
I want to hang out more at the stands too, last year I rushed through them but this year I'll slow down. Also I want to talk with people working on tools and projects that I use but don't fully understand yet, sometimes the best way to learn is just to ask *"Hey, how does this actually work?"* it's a question that you can really ask!
### What I'm looking forward to
-A few things, but mostly the chaos:
+A few things, but mostly:
- **Developer rooms**: last year I loved the Rust, GCC and NixOs devrooms, this year I want to check out the Security tracks, but honestly I'll probably end up in some random talk about a language I've never heard of just because the room looked interesting from the outside.
@@ -88,7 +88,7 @@ A few things, but mostly the chaos:
- **More weird food experiences**: last year I ate way too many Belgian fries and I survived, but I also want to try more random street food around the campus.
-- **Meeting people**: I know some friends will be there again this year, and I'm excited to see them in person
+- **Meeting people**: I know some friends will be there again this year and I'm excited to see them in person
@@ -96,7 +96,7 @@ And I'm also really curious about how this world will evolve with the AI trend,
## Wrap up
-FOSDEM is not perfect. It's crowded, the Wi-Fi is terrible, and you will get lost trying to find the right room. But it's real.
+FOSDEM is not perfect. It's crowded, the Wi-Fi is terrible and you will get lost trying to find the right room. But it's real.
And in a world full of [synthetic noise and polished content](/blog/why-i-write-these-posts), real is rare.
diff --git a/src/content/blog/welcome-to-my-blog.md b/src/content/blog/welcome-to-my-blog.md
index 0ffb668..481e1cf 100644
--- a/src/content/blog/welcome-to-my-blog.md
+++ b/src/content/blog/welcome-to-my-blog.md
@@ -8,7 +8,7 @@ tags: ["personal", "welcome"]
Hi, I’m Lorenzo.
-I’ve been thinking about writing for a long time, and I finally decided to publish this blog.
+I’ve been thinking about writing for a long time and I finally decided to publish this blog.
Not to be “a creator” or something like that, just to keep track of what I learn and share it with whoever finds it useful.
## What you will find here
diff --git a/src/content/blog/why-i-write-these-posts.mdx b/src/content/blog/why-i-write-these-posts.mdx
index 3f5a06b..dd49263 100644
--- a/src/content/blog/why-i-write-these-posts.mdx
+++ b/src/content/blog/why-i-write-these-posts.mdx
@@ -7,7 +7,7 @@ tags: ["writing", "ai", "thoughts"]
---
-Most of the internet today feels like soup: warm, endless, and somehow always the same.
+Most of the internet today feels like soup: warm, endless and somehow always the same.
I’m writing this blog because I don’t want my own thoughts to become soup too.
@@ -60,7 +60,7 @@ It's not just an human problem, it's also a future LLM-problem!
## What I’m trying to do here in my blog
-I know that a *blog* is really anacrhonistic nowadays, and probably it's a way to make the LLM stronger and more humanized because i'm providing "human-generated content" to the crawlers, and i know that i'm just a drop in the *synthethic sea*, but it's a *drop of myself* that will be digested from an LLM and from some human (if somebody will read), and i'm happy in anycase, because in the worst case i'm contributing fix a problem that at some point we will face it.
+I know that a *blog* is really anacrhonistic nowadays and probably it's a way to make the LLM stronger and more humanized because i'm providing "human-generated content" to the crawlers and i know that i'm just a drop in the *synthethic sea*, but it's a *drop of myself* that will be digested from an LLM and from some human (if somebody will read) and i'm happy in anycase, because in the worst case i'm contributing fix a problem that at some point we will face it.
Joking a-part, maybe is not-a-problem and i'm just hallucinating 😝 and probably i'm acting like Don Chischiotte.
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index 918786e..4650f79 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -15,7 +15,7 @@ interface Props {
const {
title,
- description = "Lorenzo Iovino - Software Engineer based in Sicily. Passionate about technology, remote work, and life balance.",
+ description = "Lorenzo Iovino - Software Engineer based in Sicily. Passionate about technology, remote work and life balance.",
canonicalUrl,
image,
type = "website",
diff --git a/src/pages/blog.astro b/src/pages/blog.astro
index afd3eb8..49c0ba7 100644
--- a/src/pages/blog.astro
+++ b/src/pages/blog.astro
@@ -38,7 +38,7 @@ const initialPosts: BlogPost[] = sortedPosts.slice(0, 6);
Blog
- Thoughts, experiences, and insights about software engineering, technology, and life
+ Thoughts, experiences and insights about software engineering, technology and life
diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts
index 8edcda0..aadd7cd 100644
--- a/src/pages/rss.xml.ts
+++ b/src/pages/rss.xml.ts
@@ -11,7 +11,7 @@ export async function GET(context: APIContext) {
return rss({
title: "Lorenzo Iovino >> Blog",
description:
- "Thoughts, experiences, and insights about software engineering, technology, and life by Lorenzo Iovino",
+ "Thoughts, experiences and insights about software engineering, technology and life by Lorenzo Iovino",
site: context.site?.toString() || "https://lorenzoiovino.com",
items: publishedPosts.map((post) => ({
title: post.data.title,