This is my portfolio built with Astro. Feel free to visit it at https://nicolasrenault.com!
This project is under the MIT Licence. Feel free to take inspiration but remember this is a personal website so try not to copy/paste the texts in it. You don't want to talk about me on your website.
Otherwise here are some details about the project.
The project is using Astro 3.0.7.
All the projects you find in the /projects are from two JSON files on /src/data.
-
projects.json: A list of almost all my projects from GitHub (name, description, url, createdAt, languages, year, pinned?).
-
contributions.json: The list of all the projects I have contributed to by commit, issue, and pull request.
Those two files are dynamically generated by a CI/CD called Generate project list running the ts script generate-project-list.ts scheduled once a month.
The script runs two GraphQL queries to GitHub APIs to get data. It uses project-static-data.json to sort projects that I want to hide, change the year of creation, and add info like an icon or a "pinned" boolean. It then creates the two files and commits them and opens a new PR.
This is heavily inspired by https://github.com/kevinzunigacuellar/web.
The website is fully translated using the astro-i18n library.
Because of a bug (#36), I had to edit my package.json to make it work. See fix.
Since the project data are dynamically generated I have created my own translation implementation just to translate it, based on astro-i18n.
I have created a method in utils.ts called getTranslatedDescription() that gets the translation in project-descriptions-translated.ts.
The Footer component has a special purpose to change the page when scrolling to the end of the file.
Mapping is made in redirect-targets.ts file and using a key (source), target, and text in astro-i18n format.
In the pages, the key is defined directly on the MainLayout and passed to the Footer component.