Skip to content

NicolasRenault/portfolio

Repository files navigation

Built with Astro Netlify Status

Welcome!

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.

Astro v3

The project is using Astro 3.0.7.

Projects CI/CD

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.

astro-i18n

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.

Projects custom translations

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.

Navigate on scroll Footer

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.

License

MIT © Nicolas Renault

About

My personal website build with Astro

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •