Personal Portfolio

My personal portfolio developed with Astro and TailwindCSS. Let's see why I chose this stack. In the meantime, enjoy the content I regularly publish in the blog section 😁.

Project Overview: Personal Portfolio

This portfolio is a personal project designed to showcase my work and share my IT knowledge. It highlights my projects with a clear presentation and includes a blog section for publishing technical and educational content.

Completed entirely independently, this project was a particularly enriching experience. It allowed me to assess my technical skills, strengthen my autonomy, and practice thorough project management, in this case for a full end-to-end web project.

One of the key aspects of this project was discovering and adopting a new technical stack and a new production deployment method. Using the Astro framework, along with deployment on Netlify, simplified implementation while allowing me to deepen essential concepts such as best practices, search engine optimization (SEO), and website performance optimization.

Requirements Specification

Functional Part

Project Goals
Present my profile, skills, and projects professionally.
Centralize and share technical knowledge via a blog.
Provide an online support platform accessible to recruiters and potential collaborators.
Main Features
Home page presenting the portfolio and developer identity.
”Projects” section detailing achievements (description, technologies, links).
”Blog” section allowing the publication and consultation of technical articles.
Dark/Light Mode and multilingual support
Responsive design for desktop, tablet, and mobile screens.

Technical Part

Technologies Used
FrameworkAstro
LanguageHTML, CSS, TypeScript
DeploymentNetlify

The site architecture is fully based on static site generation (SSG), avoiding server-side rendering (SSR) or client-side rendering (CSR) whenever possible. For features requiring browser interaction, such as LocalStorage, sessions, or cookies, JavaScript is executed directly on the client side.

The site is optimized for maximum performance: fast loading times, lightweight images and resources, and static page generation. SEO is taken into account with semantic tags, complete metadata, and a logical content hierarchy. The code is structured to be readable and maintainable, facilitating future updates or improvements.

Deployment is done on Netlify with a simple and efficient workflow. Content or feature updates can be performed quickly without affecting the site structure. The architecture is designed to facilitate future evolution, addition of new pages or features, while maintaining simple and secure maintenance.

Lighthouse Audit

Dark mode illustration

Audit performed on January 19, 2026: Google Lighthouse

Simplified Project Architecture

The project structure was generated with the following command

tree -L 3 -v -I "node_modules|dist" --dirsfirst

The project architecture provides an overview; some parts are hidden for security and clarity reasons.

β”œβ”€β”€ public
β”‚Β Β  β”œβ”€β”€ fonts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Roboto.ttf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ RobotoCondensed.ttf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ RobotoFlex.ttf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ RobotoSlab.ttf
β”‚Β Β  β”‚Β Β  └── SairaStencilOneRegular.ttf
β”‚Β Β  β”œβ”€β”€ js
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ header.js
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ language.js
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ navigation.js
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ search.js
β”‚Β Β  β”‚Β Β  └── theme.js
β”‚Β Β  β”œβ”€β”€ favicon-16x16.svg
β”‚Β Β  └── robots.txt
β”œβ”€β”€ src
β”‚Β Β  β”œβ”€β”€ assets
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ blog
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ projects
β”‚Β Β  β”‚Β Β  └── avatar.png
β”‚Β Β  β”œβ”€β”€ components
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ article
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ icons
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ project
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ CategoryAside.astro
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ LanguageModal.astro
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ OverlayBlur.astro
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ SearchAside.astro
β”‚Β Β  β”‚Β Β  └── TagAside.astro
β”‚Β Β  β”œβ”€β”€ config
β”‚Β Β  β”œβ”€β”€ content
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ blog
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ categories
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ projects
β”‚Β Β  β”‚Β Β  └── config.ts
β”‚Β Β  β”œβ”€β”€ i18n
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ui.ts
β”‚Β Β  β”‚Β Β  └── utils.ts
β”‚Β Β  β”œβ”€β”€ layouts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ footers
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ headers
β”‚Β Β  β”‚Β Β  └── BaseLayout.astro
β”‚Β Β  β”œβ”€β”€ pages
β”‚Β Β  β”‚Β Β  └── [lang]
β”‚Β Β  └── styles
β”‚Β Β      └── global.css
β”œβ”€β”€ PROJECTS.md
β”œβ”€β”€ README.md
β”œβ”€β”€ astro.config.mjs
β”œβ”€β”€ chart.blog.mdx
β”œβ”€β”€ package-lock.json
β”œβ”€β”€ package.json
└── tsconfig.json