The source code of my personal website.
The website is built with Next.js, WordPress as headless CMS and MDX. To translate the website in French, I use Formatjs. For syntax highlighting, I use Prism. Others dependencies are used, feel free to take a look at package.json
.
In addition to WordPress, the backend use:
- ACF
- acf-post2post
- apcom-cpt (the custom post types used)
- wp-graphql
- wp-graphql-content-stats
- wp-graphql-get-extended
- wp-graphql-gravatar
- wp-graphql-send-mail
Even if the source code and the contents are under free licenses, I don't want to see pure clones of my website. So I use a private repo as submodule to handle MDX content. Its structure looks like:
/
|--assets/
|-- image.jpg
|-- image2.jpg
|--pages/
|-- page1.mdx
|-- page2.mdx
|--projects/
|-- project1.mdx
Other contents come from WordPress as headless CMS.
Clone this repo, then:
cp .env.example .env
Then, in any case, you need a reverse-proxy if you want to bind the live app to a domain.
Make sure Docker and Docker Compose are installed then, you can run: sudo docker-compose up -d --build <service-name>
.
<service-name>
is optional. You don't need it the first time. However, if you want to rebuild and update only one container, it can be useful.
If you wish to use custom ports, you can edit your .env
file and specify APP_DOCKER_PORT
and APP_STAGING_DOCKER_PORT
variables. By default the ports are respectively 3000
and 3200
.
If you are using Docker Swarm, you can instead use the deploy script to ensure that environment variables are loaded:
sh ./bin/deploy.sh
Just run yarn build && yarn start
.
Clone this repo, then:
cp .env.example .env
And edit the different values.
Run the development server:
yarn dev
Open http://localhost:3000 with your browser to see the result. Then, you can make your changes.
You can search for a component or develop a new component in isolation thanks to Storybook.
yarn storybook
The different components are divided into 4 categories (atomic design):
- Atoms
- Molecules
- Organisms
- Templates
But, to be honest, between Molecules and Organisms some components may be misclassified.
When editing strings that require translation, run:
yarn run i18n:extract
Then copy/edit the corresponding strings inside src/i18n/fr.json
.
If you need another language:
cp src/i18n/en.json src/i18n/[locale].json
Replace [locale]
with your desired locale. Then edit this file to translate all the strings.
Once ready, run to update the website translation:
yarn run i18n:compile
This project is configured to support both Jest and Cypress tests with Testing Library.
You can run both tests with yarn test
.
The tests are located alongside components (src/components/
).
You can run Jest tests with yarn test:unit
.
The tests are located in tests/cypress/e2e/
. All texts (to find an element) needs to be written in French since Next.js is configured to only accept this language.
You can run Cypress tests with yarn test:e2e
.
The source code is licensed under the MIT license.
The contents are licensed under the CC BY SA license.