This is the source code for my personal website. It is built with:
In addition to how Jigsaw normally works, I've written 2 listeners to add some niceties to the codebase.
The \App\Listeners\ImagesNextToBuiltFiles
class ensures that images that
are shown on a page (eg. /blog/example-blog-post
) are stored in the same folder as the post's index.html
file. So
in case of that example, the images would be built into /blog/example-blog-post/<image>
, next to index.html
.
The \App\Listeners\RelativeMarkdownLinks
class makes it so that I can
link to other collection items by using their relative links (so something like [link to post](./another-post.md)
).
This also works across collections, so I can [link to another collection](../collectionB/post.md)
.
The social image (og:image
and twitter:image
<meta>
tags) is determined in the following order:
- If there is an image with the
social-image
ID present on the<img>
tag, that will be used. - If there are images on the page, the first image on the page will be used.
- If none of the above conditions are met, the default image will be used.
This is all done thanks to the \App\Listeners\SetSocialImagesForCollectionItems
listener.
Deployments are handled by this workflow. When a commit is pushed onto main
, that
branch will automatically be built using jigsaw build production
and deployed onto Vercel. If anything happens to a
pull request (commit pushed, opened, rebased, ...), the workflow will deploy a preview build to Vercel which can be
seen from https://preview-<PR NUMBER>.website.sven.luijten.dev
.
Dependencies are automatically updated by Dependabot. Every week it will create new pull requests for dependencies that can be updated.