featmigrate from Angular to Astro static site

BREAKING CHANGE: Complete rewrite from Angular SPA to Astro

- Replace Angular 18 with Astro 5.16.7 + Tailwind CSS
- Convert all Angular components to Astro components
- Add content collections for blog with markdown support
- Setup S3 deployment with CloudFront invalidation
- Add RSS feed and sitemap generation
- Configure Prettier and Biome for code formatting
- Switch from npm to pnpm
- Remove Amplify backend (now fully static)
- Improve SEO and performance with static generation
This commit is contained in:
Lorenzo Iovino 2026-01-08 16:46:17 +01:00
parent 7be49ba73a
commit 7cf2e858a2
192 changed files with 7829 additions and 21756 deletions

88
src/pages/bio.astro Normal file
View file

@ -0,0 +1,88 @@
---
import type { CollectionEntry } from "astro:content";
import { getEntry } from "astro:content";
import Footer from "../components/Footer.astro";
import Navbar from "../components/Navbar.astro";
import BaseLayout from "../layouts/BaseLayout.astro";
import "../styles/prose.css";
type BioEntry = CollectionEntry<"bio">;
const bioEntry: BioEntry | undefined = await getEntry("bio", "my-story");
if (!bioEntry) {
throw new Error("Bio entry not found");
}
const { Content } = await bioEntry.render();
---
<BaseLayout
title="Lorenzo Iovino >> Bio"
description="Biography and life story of Lorenzo Iovino"
canonicalUrl="https://www.lorenzoiovino.com/bio"
>
<Navbar />
<div class="min-h-screen pt-16 bg-secondary">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12 md:py-20">
<div class="mb-16 text-center">
<h1 class="text-white mb-4">{bioEntry.data.title}</h1>
<p class="text-xl text-white/90 max-w-2xl mx-auto">
{bioEntry.data.description}
</p>
<div class="h-1 w-20 bg-white rounded-full mx-auto mt-6"></div>
</div>
<div class="bg-white rounded-2xl shadow-soft-lg p-8 md:p-12 lg:p-16">
<div class="prose prose-xl max-w-none">
<Content />
</div>
</div>
<div
class="mt-16 bg-gradient-to-br from-white to-gray-50 rounded-2xl shadow-soft-lg p-10 md:p-14 lg:p-16 text-center border border-gray-100"
>
<h3 class="text-3xl md:text-4xl font-bold text-gray-900 mb-6">Let's Connect!</h3>
<p
class="text-gray-700 text-xl md:text-2xl leading-relaxed mb-10 max-w-3xl mx-auto font-light"
>
I'm always excited to connect with fellow developers, discuss interesting projects, or
just have a chat about technology and life. Feel free to reach out!
</p>
<div class="flex flex-wrap gap-5 justify-center">
<a
href="https://www.linkedin.com/in/lorenzoiovino/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center px-10 py-5 bg-white hover:bg-gray-50 text-gray-700 font-semibold text-lg rounded-xl transition-all duration-200 shadow-lg hover:shadow-xl border-2 border-gray-200 hover:border-gray-300 transform hover:-translate-y-1 hover:scale-105"
>
<img
src="/linkedin.svg"
alt="LinkedIn"
class="h-6 w-6 mr-3 opacity-80"
width="24"
height="24"
/>
LinkedIn
</a>
<a
href="https://github.com/thisloke"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center px-10 py-5 bg-white hover:bg-gray-50 text-gray-700 font-semibold text-lg rounded-xl transition-all duration-200 shadow-lg hover:shadow-xl border-2 border-gray-200 hover:border-gray-300 transform hover:-translate-y-1 hover:scale-105"
>
<img
src="/github.svg"
alt="GitHub"
class="h-6 w-6 mr-3 opacity-80"
width="24"
height="24"
/>
GitHub
</a>
</div>
</div>
</div>
</div>
<Footer />
</BaseLayout>