209 Commits

Author SHA1 Message Date
15d927febd Merge pull request #144 from Mastermindzh/renovate/sass-1.x-lockfile
chore(deps): update sass to 1.92.1
2025-09-08 14:19:23 +02:00
Renovate Bot
e90d95b1e2 chore(deps): update sass to 1.92.1 2025-09-08 12:41:55 +02:00
c1592d1d5a Merge pull request #145 from Mastermindzh/renovate/stylelint-16.x-lockfile
chore(deps): update stylelint to 16.24.0
2025-09-08 09:32:42 +02:00
0e6d3de292 Merge pull request #143 from Mastermindzh/renovate/eslint-monorepo
chore(deps): update eslint monorepo to 9.35.0
2025-09-08 09:28:33 +02:00
Renovate Bot
3c2ea09726 chore(deps): update stylelint to 16.24.0 2025-09-07 20:43:22 +02:00
Renovate Bot
23d87d13b3 chore(deps): update eslint monorepo to 9.35.0 2025-09-05 20:35:25 +02:00
f34aa1a43a Merge pull request #142 from Mastermindzh/renovate/node-24.x-lockfile
chore(deps): update @types/node to 24.3.1
2025-09-04 14:37:22 +02:00
Renovate Bot
43bdfef332 chore(deps): update @types/node to 24.3.1 2025-09-04 12:42:09 +02:00
ddd9d5b69e Merge pull request #140 from Mastermindzh/renovate/font-awesome
fix(deps): update font awesome to 7.0.1
2025-09-04 11:06:31 +02:00
03ed5dc411 Merge pull request #141 from Mastermindzh/renovate/sass-1.x-lockfile
chore(deps): update sass to 1.92.0
2025-09-04 11:06:05 +02:00
9db4f4a2d1 Merge pull request #139 from Mastermindzh/renovate/typescript-eslint-monorepo
chore(deps): update typescript-eslint monorepo to 8.42.0
2025-09-04 11:05:13 +02:00
Renovate Bot
fd88a753de chore(deps): update typescript-eslint monorepo to 8.42.0 2025-09-03 20:39:19 +02:00
Renovate Bot
a28c4fed8c chore(deps): update sass to 1.92.0 2025-09-03 20:39:03 +02:00
Renovate Bot
99bab4b66b fix(deps): update font awesome to 7.0.1 2025-09-03 20:38:50 +02:00
1d326acff7 Merge pull request #138 from Mastermindzh/renovate/jest-monorepo
chore(deps): update jest monorepo to 30.1.3
2025-09-03 17:12:14 +02:00
Renovate Bot
a27ef97e48 chore(deps): update jest monorepo to 30.1.3 2025-09-02 20:48:53 +02:00
567851895d Merge pull request #137 from Mastermindzh/renovate/lint-staged-16.x-lockfile
chore(deps): update lint-staged to 16.1.6
2025-09-02 08:59:51 +02:00
Renovate Bot
6e84cdc667 chore(deps): update lint-staged to 16.1.6 2025-09-01 20:47:20 +02:00
e6527d6e4d Merge pull request #136 from Mastermindzh/renovate/font-awesome
fix(deps): update @fortawesome/react-fontawesome to 3.0.2
2025-09-01 13:04:48 +02:00
Renovate Bot
2844a07d3e fix(deps): update @fortawesome/react-fontawesome to 3.0.2 2025-09-01 12:47:31 +02:00
e8ffeefaf8 Merge pull request #134 from Mastermindzh/renovate/browserslist-4.x-lockfile
chore(deps): update browserslist to 4.25.4
2025-09-01 11:34:30 +02:00
c333789cdb Merge pull request #135 from Mastermindzh/renovate/jest-monorepo
chore(deps): update jest monorepo to 30.1.2
2025-09-01 11:02:10 +02:00
Renovate Bot
859bc53ade chore(deps): update jest monorepo to 30.1.2 2025-09-01 04:40:21 +02:00
Renovate Bot
8221062b49 chore(deps): update browserslist to 4.25.4 2025-08-31 04:37:16 +02:00
6506e1d91e ci(husky): removed 2 deprecated lines pointing to the husky location 2025-08-28 08:24:48 +02:00
1c25f5ef05 ci(gh-jobs): jobs now run on PR to master too 2025-08-28 08:23:25 +02:00
d2488c8c1b Merge pull request #133 from Mastermindzh/renovate/gatsby-monorepo
fix(deps): update gatsby monorepo
2025-08-28 08:15:26 +02:00
9493a7b977 Merge pull request #132 from Mastermindzh/renovate/jest-monorepo
chore(deps): update jest monorepo to 30.1.1
2025-08-28 08:15:05 +02:00
Renovate Bot
d905036905 fix(deps): update gatsby monorepo 2025-08-28 01:33:32 +02:00
Renovate Bot
abab9ed263 chore(deps): update jest monorepo to 30.1.1 2025-08-27 17:36:13 +02:00
afeec5c499 Merge pull request #131 from Mastermindzh/renovate/jest-monorepo
chore(deps): update jest monorepo to 30.1.0
2025-08-27 17:33:14 +02:00
1da2b0fcf7 Merge pull request #130 from Mastermindzh/renovate/font-awesome
fix(deps): update @fortawesome/react-fontawesome to 3.0.1
2025-08-27 17:32:42 +02:00
Renovate Bot
aa6c0449a3 chore(deps): update jest monorepo to 30.1.0 2025-08-27 09:35:20 +02:00
Renovate Bot
38ab029ae2 fix(deps): update @fortawesome/react-fontawesome to 3.0.1 2025-08-27 09:35:00 +02:00
bdc4f5637f Merge pull request #129 from Mastermindzh/renovate/typescript-eslint-monorepo
chore(deps): update typescript-eslint monorepo to 8.41.0
2025-08-26 09:16:37 +02:00
909be554cc Merge pull request #128 from Mastermindzh/renovate/sass-1.x-lockfile
chore(deps): update sass to 1.91.0
2025-08-26 09:16:15 +02:00
Renovate Bot
1b698ff528 chore(deps): update typescript-eslint monorepo to 8.41.0 2025-08-26 01:32:32 +02:00
Renovate Bot
aad305d005 chore(deps): update sass to 1.91.0 2025-08-26 01:32:17 +02:00
9ae4290fe3 Merge pull request #127 from Mastermindzh/renovate/concurrently-9.x-lockfile
chore(deps): update concurrently to 9.2.1
2025-08-25 23:25:44 +02:00
Renovate Bot
ecb106c4c3 chore(deps): update concurrently to 9.2.1 2025-08-25 17:35:43 +02:00
1b299da29a ci(tests): reset snapshots since FA renders differently 2025-08-25 11:52:54 +02:00
070c5097d1 Merge pull request #126 from Mastermindzh/renovate/eslint-monorepo
chore(deps): update eslint monorepo to 9.34.0
2025-08-25 11:49:42 +02:00
912ab1e261 Merge pull request #124 from Mastermindzh/renovate/swc-monorepo
chore(deps): update @swc/core to 1.13.5
2025-08-25 11:48:24 +02:00
ebe2caa94e Merge pull request #100 from Mastermindzh/renovate/major-font-awesome
fix(deps): update font awesome (major)
2025-08-25 11:47:21 +02:00
Renovate Bot
1612836a1f fix(deps): update font awesome 2025-08-25 09:34:52 +02:00
Renovate Bot
c9a3153643 chore(deps): update eslint monorepo to 9.34.0 2025-08-25 09:34:21 +02:00
Renovate Bot
5b4e802e6c chore(deps): update @swc/core to 1.13.5 2025-08-25 09:33:43 +02:00
636614930d Merge pull request #114 from Mastermindzh/renovate/eslint-compat-1.x-lockfile
chore(deps): update @eslint/compat to 1.3.2
2025-08-25 09:13:25 +02:00
1e76f0bbdd Merge pull request #115 from Mastermindzh/renovate/stylelint-config-recommended-scss-16.x
chore(deps): update stylelint-config-recommended-scss to 16.0.0
2025-08-25 09:12:17 +02:00
d1d747b011 Merge pull request #118 from Mastermindzh/renovate/eslint-monorepo
chore(deps): update eslint monorepo to 9.33.0
2025-08-25 09:09:05 +02:00
cbe81a5dc9 Merge pull request #116 from Mastermindzh/renovate/node-24.x-lockfile
chore(deps): update @types/node to 24.3.0
2025-08-25 09:08:39 +02:00
c73ec86056 Merge pull request #117 from Mastermindzh/renovate/lint-staged-16.x-lockfile
chore(deps): update lint-staged to 16.1.5
2025-08-25 09:06:17 +02:00
2822cd8718 Merge pull request #120 from Mastermindzh/renovate/typescript-eslint-monorepo
chore(deps): update typescript-eslint monorepo to 8.40.0
2025-08-25 08:59:22 +02:00
e52ec71782 Merge pull request #119 from Mastermindzh/renovate/browserslist-4.x-lockfile
chore(deps): update browserslist to 4.25.3
2025-08-20 09:10:05 +02:00
6adc3fd57d Merge pull request #123 from Mastermindzh/renovate/font-awesome
fix(deps): update @fortawesome/react-fontawesome to 0.2.5
2025-08-20 08:59:44 +02:00
Renovate Bot
f0a3d10a1d fix(deps): update @fortawesome/react-fontawesome to 0.2.5 2025-08-20 03:58:16 +02:00
Renovate Bot
42bc5be209 chore(deps): update browserslist to 4.25.3 2025-08-19 12:06:49 +02:00
Renovate Bot
d68b3e51c4 chore(deps): update typescript-eslint monorepo to 8.40.0 2025-08-18 20:03:50 +02:00
Renovate Bot
4984dddc6b chore(deps): update lint-staged to 16.1.5 2025-08-17 12:04:57 +02:00
Renovate Bot
f1fd7f1c82 chore(deps): update @types/node to 24.3.0 2025-08-15 12:02:17 +02:00
Renovate Bot
96f224619c chore(deps): update eslint monorepo to 9.33.0 2025-08-09 06:34:11 +02:00
Renovate Bot
e3caf67f09 chore(deps): update stylelint-config-recommended-scss to 16.0.0 2025-08-08 12:49:07 +02:00
Renovate Bot
65b81509f9 chore(deps): update @eslint/compat to 1.3.2 2025-08-08 12:48:40 +02:00
d94d664f2f Merge pull request #111 from Mastermindzh/renovate/eslint-plugin-prettier-5.x-lockfile
chore(deps): update eslint-plugin-prettier to 5.5.4
2025-08-08 10:03:34 +02:00
aee00a1d89 Merge pull request #112 from Mastermindzh/renovate/gatsby-monorepo
fix(deps): update gatsby to 5.14.6
2025-08-08 09:59:05 +02:00
04b1f0c1bb Merge pull request #113 from Mastermindzh/renovate/stylelint-16.x-lockfile
chore(deps): update stylelint to 16.23.1
2025-08-08 09:58:32 +02:00
Renovate Bot
58d37e4941 chore(deps): update stylelint to 16.23.1 2025-08-07 20:41:24 +02:00
Renovate Bot
2740ec31e8 fix(deps): update gatsby to 5.14.6 2025-08-06 20:49:12 +02:00
Renovate Bot
709b0f21cf chore(deps): update eslint-plugin-prettier to 5.5.4 2025-08-06 12:44:31 +02:00
c73fa4773e Merge pull request #106 from Mastermindzh/renovate/typescript-5.x-lockfile
chore(deps): update typescript to 5.9.2
2025-08-06 11:04:44 +02:00
e8fb994aaf Merge pull request #109 from Mastermindzh/renovate/typescript-eslint-monorepo
chore(deps): update typescript-eslint monorepo to 8.39.0
2025-08-06 11:04:25 +02:00
51859f5fdb Merge pull request #110 from Mastermindzh/renovate/sass-1.x-lockfile
chore(deps): update sass to 1.90.0
2025-08-06 10:59:05 +02:00
0117b60f24 Merge pull request #107 from Mastermindzh/renovate/lint-staged-16.x-lockfile
chore(deps): update lint-staged to 16.1.4
2025-08-06 09:23:40 +02:00
Renovate Bot
fec5843cff chore(deps): update sass to 1.90.0 2025-08-06 04:45:13 +02:00
Renovate Bot
d723b29c4f chore(deps): update typescript-eslint monorepo to 8.39.0 2025-08-05 20:44:18 +02:00
Renovate Bot
f0fbd541ea chore(deps): update typescript to 5.9.2 2025-08-05 20:43:58 +02:00
Renovate Bot
917ab7d901 chore(deps): update lint-staged to 16.1.4 2025-08-05 20:43:42 +02:00
a56058027e Merge pull request #108 from Mastermindzh/renovate/node-24.x-lockfile
chore(deps): update @types/node to 24.2.0
2025-08-05 12:49:27 +02:00
Renovate Bot
f128512bfd chore(deps): update @types/node to 24.2.0 2025-08-04 12:44:51 +02:00
64ce161623 Merge pull request #105 from Mastermindzh/renovate/stylelint-16.x-lockfile
chore(deps): update stylelint to 16.23.0
2025-07-30 13:22:58 +02:00
Renovate Bot
4f39d58d3b chore(deps): update stylelint to 16.23.0 2025-07-29 20:44:17 +02:00
abdfc5c100 Merge pull request #104 from Mastermindzh/renovate/swc-monorepo
chore(deps): update @swc/core to 1.13.3
2025-07-29 13:03:34 +02:00
Renovate Bot
6f3a81e694 chore(deps): update @swc/core to 1.13.3 2025-07-29 12:45:18 +02:00
779c26cc9f Merge pull request #103 from Mastermindzh/renovate/eslint-monorepo
chore(deps): update eslint monorepo to 9.32.0
2025-07-28 09:40:05 +02:00
Renovate Bot
037bfc816d chore(deps): update eslint monorepo to 9.32.0 2025-07-25 20:58:10 +02:00
28591fe51c Merge pull request #102 from Mastermindzh/renovate/font-awesome
fix(deps): update @fortawesome/react-fontawesome to 0.2.3
2025-07-24 12:04:54 +02:00
05a571b8b2 Merge pull request #101 from Mastermindzh/renovate/swc-monorepo
chore(deps): update @swc/core to 1.13.2
2025-07-24 10:09:07 +02:00
Renovate Bot
b5b805e8eb fix(deps): update @fortawesome/react-fontawesome to 0.2.3 2025-07-23 20:54:49 +02:00
Renovate Bot
8b88c801cd chore(deps): update @swc/core to 1.13.2 2025-07-23 12:37:47 +02:00
a79549758b Merge pull request #99 from Mastermindzh/renovate/node-24.x-lockfile
chore(deps): update @types/node to 24.1.0
2025-07-22 21:16:50 +02:00
Renovate Bot
c63a9e0743 chore(deps): update @types/node to 24.1.0 2025-07-22 20:37:25 +02:00
7459a71ea1 Merge pull request #98 from Mastermindzh/renovate/jest-monorepo
chore(deps): update jest monorepo to 30.0.5
2025-07-22 20:03:09 +02:00
Renovate Bot
d48c4c078e chore(deps): update jest monorepo to 30.0.5 2025-07-22 12:37:29 +02:00
08eef25094 Merge pull request #97 from Mastermindzh/renovate/typescript-eslint-monorepo
chore(deps): update typescript-eslint monorepo to 8.38.0
2025-07-22 01:40:36 +02:00
Renovate Bot
ce84bbdd51 chore(deps): update typescript-eslint monorepo to 8.38.0 2025-07-21 20:49:06 +02:00
4ab8ccd715 Merge pull request #93 from Mastermindzh/renovate/eslint-plugin-prettier-5.x-lockfile
chore(deps): update eslint-plugin-prettier to 5.5.3
2025-07-21 09:06:46 +02:00
72acf4ab9e Merge pull request #95 from Mastermindzh/renovate/swc-monorepo
chore(deps): update @swc/core to 1.13.1
2025-07-21 09:06:07 +02:00
Renovate Bot
dc871724cd chore(deps): update eslint-plugin-prettier to 5.5.3 2025-07-20 23:08:43 +02:00
Renovate Bot
2047bc4424 chore(deps): update @swc/core to 1.13.1 2025-07-20 23:08:30 +02:00
1b08ff5443 Merge pull request #96 from Mastermindzh/renovate/prettier-plugin-packagejson-2.x-lockfile
chore(deps): update prettier-plugin-packagejson to 2.5.19
2025-07-20 22:45:37 +02:00
d650f7e643 Merge pull request #94 from Mastermindzh/renovate/node-24.x-lockfile
chore(deps): update @types/node to 24.0.15
2025-07-20 22:43:49 +02:00
3dd9b4c13b Merge pull request #92 from Mastermindzh/renovate/eslint-config-prettier-10.x-lockfile
chore(deps): update eslint-config-prettier to 10.1.8
2025-07-20 22:43:14 +02:00
Renovate Bot
cc470236e0 chore(deps): update prettier-plugin-packagejson to 2.5.19 2025-07-20 16:06:18 +02:00
Renovate Bot
8976100b00 chore(deps): update @types/node to 24.0.15 2025-07-19 02:52:09 +02:00
Renovate Bot
5679236b48 chore(deps): update eslint-config-prettier to 10.1.8 2025-07-18 20:50:20 +02:00
87979429dc Merge pull request #91 from Mastermindzh/renovate/stylelint-16.x-lockfile
chore(deps): update stylelint to 16.22.0
2025-07-18 13:51:47 +02:00
Renovate Bot
b9721ffdc6 chore(deps): update stylelint to 16.22.0 2025-07-18 13:20:04 +02:00
7c2233700f Merge pull request #81 from Mastermindzh/snyk-fix-fed777eff9597bb5c635f2c6581f95b5
[Snyk] Security upgrade prismjs from 1.29.0 to 1.30.0
2025-07-18 11:47:12 +02:00
7981e30496 Merge pull request #89 from Mastermindzh/renovate/husky-9.x
chore(deps): update husky to 9.1.7
2025-07-18 11:46:53 +02:00
848aaf890b Merge pull request #88 from Mastermindzh/renovate/node-19.x
chore(deps): update node.js to v19.9.0
2025-07-18 11:46:05 +02:00
c37b3fa824 Merge pull request #87 from Mastermindzh/renovate/swc-monorepo
chore(deps): update @swc/core to 1.13.0
2025-07-18 11:45:34 +02:00
Renovate Bot
b76ac17824 chore(deps): update husky to 9.1.7 2025-07-18 10:21:03 +02:00
Renovate Bot
7b5df78a2f chore(deps): update node.js to v19.9.0 2025-07-18 10:20:40 +02:00
Renovate Bot
682bf161a9 chore(deps): update @swc/core to 1.13.0 2025-07-18 10:20:23 +02:00
31597d25a6 Merge pull request #86 from Mastermindzh/feat/update
Feat/update
2025-07-16 19:51:51 +02:00
a7710a4c32 Merge branch 'feat/update' of github.com:Mastermindzh/rickvanlieshout.com into feat/update 2025-07-16 19:34:01 +02:00
1cb3ea2532 content: updated resume 2025-07-16 19:29:28 +02:00
0ad80becd6 content: updated the resume 2025-07-16 19:08:46 +02:00
02e4c01bd0 fix: updated sass to use @use instead of @import 2025-07-16 11:44:05 +02:00
a83befd5b2 chore: formatted, prettified, legacy deps 2025-07-16 10:52:08 +02:00
7c93cd76d9 chore: update 2025-07-15 17:28:41 +02:00
c7ef1146b3 Merge pull request #85 from Mastermindzh/snyk-fix-c34014cd133e9d6ef87f5aab9a4b79d5
[Snyk] Security upgrade gatsby from 5.14.3 to 5.14.4
2025-06-15 10:14:06 +02:00
snyk-bot
d07d7880bf fix: package.json & package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-MULTER-10185673
- https://snyk.io/vuln/SNYK-JS-MULTER-10299078
- https://snyk.io/vuln/SNYK-JS-MULTER-10185675
2025-06-13 11:29:41 +00:00
06784424ab Merge pull request #84 from Mastermindzh/content/iac2
Content/iac2
2025-05-05 03:46:11 +02:00
98249f0ddb content(grief): A deeply personal story about grief, memory, and the long road through the shadows 2025-05-05 03:21:42 +02:00
c326bfa87b content(homelab): Simplifying My Homelab Setup with Portainer GitOps
How I've simplified my homelab by combining the ease of Unraid storage management with Portainer's
GitOps feature to implement Infrastructure as Code.
2025-05-04 20:08:42 +02:00
47578d2411 Merge pull request #83 from Mastermindzh/snyk-upgrade-c4819bdb821692045bd1597bbd09cda6
[Snyk] Upgrade gatsby from 5.14.1 to 5.14.3
2025-05-02 11:53:09 +02:00
snyk-bot
9098e27cae fix: upgrade gatsby from 5.14.1 to 5.14.3
Snyk has created this PR to upgrade gatsby from 5.14.1 to 5.14.3.

See this package in npm:
gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2025-05-02 09:03:29 +00:00
b9d1b1ae13 Merge pull request #82 from Mastermindzh/snyk-upgrade-632e856fd2c1ab0ced167ec37b17f0fe
[Snyk] Upgrade disqus-react from 1.1.5 to 1.1.6
2025-03-21 10:23:36 +01:00
snyk-bot
0ce8af8cc7 fix: upgrade disqus-react from 1.1.5 to 1.1.6
Snyk has created this PR to upgrade disqus-react from 1.1.5 to 1.1.6.

See this package in npm:
disqus-react

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2025-03-21 08:20:39 +00:00
snyk-bot
6a9b948601 fix: package.json & package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-PRISMJS-9055448
2025-03-14 07:41:49 +00:00
6eee5ac150 Merge pull request #80 from Mastermindzh/hotfix/ssh-keys
fix(keys.json): Replaced the laptop, so replaced the key
2025-02-04 14:57:38 +01:00
7e897d7aa7 fix(keys.json): Replaced the laptop, so replaced the key
I got a new Framework laptop so its new SSH key is replacing the older HP key. The HP key has been
deleted

BREAKING CHANGE: Any access to accounts with the key has been revoked, the private key is also
destroyed.
2025-02-04 14:44:39 +01:00
2e65d236d0 Merge pull request #78 from Mastermindzh/snyk-upgrade-d3218fb0ee18a876d9b4ba4acb8bd8d3
[Snyk] Upgrade react-cookie-consent from 8.0.1 to 9.0.0
2025-01-18 17:12:49 +01:00
9b34c6226b Merge pull request #69 from Mastermindzh/snyk-upgrade-27d327840a423e659dc3f9d96c645de3
[Snyk] Upgrade gatsby-remark-images from 7.13.2 to 7.14.0
2025-01-18 17:10:54 +01:00
af3497f3d8 Merge pull request #79 from Mastermindzh/content/iac-uptimekuma
Content/iac uptimekuma
2025-01-18 15:09:45 +01:00
029e59c029 content(IaC uptime monitoring): exploring IaC uptime monitoring for UptimeKuma with AutoKuma 2025-01-18 00:15:39 +01:00
snyk-bot
07b36b5b06 feat: upgrade react-cookie-consent from 8.0.1 to 9.0.0
Snyk has created this PR to upgrade react-cookie-consent from 8.0.1 to 9.0.0.

See this package in npm:
react-cookie-consent

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2025-01-10 08:14:13 +00:00
snyk-bot
084a9cdfc2 fix: upgrade gatsby-remark-images from 7.13.2 to 7.14.0
Snyk has created this PR to upgrade gatsby-remark-images from 7.13.2 to 7.14.0.

See this package in npm:
gatsby-remark-images

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2025-01-10 08:13:22 +00:00
9f05d8a715 chore(adopting-conventional-commits): updated hook file to commit-ms 2025-01-02 22:55:56 +01:00
283c25681b build(deps): Updated node to 22 and others to latest except eslint (because of airbnb) 2025-01-02 14:05:53 +01:00
2d71d81e2d Merge pull request #57 from Mastermindzh/snyk-fix-b1e1d5ed2b46d2b2c0d0af1865c7336a
[Snyk] Security upgrade gatsby from 5.13.7 to 5.14.0
2024-11-07 08:51:13 +01:00
snyk-bot
ce1d321ca5 fix: package.json & package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-WEBPACKDEVMIDDLEWARE-6476555
- https://snyk.io/vuln/SNYK-JS-FOLLOWREDIRECTS-6141137
- https://snyk.io/vuln/SNYK-JS-AXIOS-6032459
- https://snyk.io/vuln/SNYK-JS-PATHTOREGEXP-7925106
- https://snyk.io/vuln/SNYK-JS-INFLIGHT-6095116
- https://snyk.io/vuln/SNYK-JS-BODYPARSER-7926860
- https://snyk.io/vuln/SNYK-JS-AXIOS-6124857
- https://snyk.io/vuln/SNYK-JS-MSGPACKR-6140431
2024-11-07 06:14:28 +00:00
e0e70ef02b Merge pull request #56 from Mastermindzh/snyk-upgrade-a36a46cf08ea4ece4caa560ba2c0d49f
[Snyk] Upgrade: gatsby-remark-copy-linked-files, gatsby-remark-images, gatsby-remark-prismjs, gatsby-remark-responsive-iframe
2024-09-26 11:17:25 +02:00
snyk-bot
6a68317467 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby-remark-copy-linked-files from 6.13.1 to 6.13.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-copy-linked-files
  - gatsby-remark-images from 7.13.1 to 7.13.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-remark-prismjs from 7.13.1 to 7.13.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-prismjs
  - gatsby-remark-responsive-iframe from 6.13.1 to 6.13.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-responsive-iframe

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-09-17 06:48:49 +00:00
bb9c60cae1 Merge pull request #55 from Mastermindzh/snyk-upgrade-54dcf2ee187f667843f5a367d6440ab6
[Snyk] Upgrade gatsby from 5.13.6 to 5.13.7
2024-08-12 08:56:21 +02:00
snyk-bot
68be00f203 fix: upgrade gatsby from 5.13.6 to 5.13.7
Snyk has created this PR to upgrade gatsby from 5.13.6 to 5.13.7.

See this package in npm:
gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-08-11 08:00:57 +00:00
4a2cda3b3a Merge pull request #53 from Mastermindzh/snyk-upgrade-b54ab616d98f54036a8343f0e7b527d9
[Snyk] Upgrade gatsby from 5.13.5 to 5.13.6
2024-08-10 14:48:43 +02:00
44f64093b7 Merge pull request #54 from Mastermindzh/snyk-upgrade-e67a34bafafef4e4c0ce6548fd03c3ad
[Snyk] Upgrade: ,
2024-08-10 14:48:25 +02:00
snyk-bot
c049550537 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - @fortawesome/fontawesome-svg-core from 6.5.2 to 6.6.0.
    See this package in npm: https://www.npmjs.com/package/@fortawesome/fontawesome-svg-core
  - @fortawesome/free-solid-svg-icons from 6.5.2 to 6.6.0.
    See this package in npm: https://www.npmjs.com/package/@fortawesome/free-solid-svg-icons

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-08-07 06:11:49 +00:00
snyk-bot
63358f9ae1 fix: upgrade gatsby from 5.13.5 to 5.13.6
Snyk has created this PR to upgrade gatsby from 5.13.5 to 5.13.6.

See this package in npm:
gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-07-17 05:32:58 +00:00
65b5a25d55 Merge pull request #52 from Mastermindzh/snyk-upgrade-3539d1b3f637236d715220fb7569b5cd
[Snyk] Upgrade @fortawesome/react-fontawesome from 0.2.1 to 0.2.2
2024-06-14 16:14:56 +02:00
snyk-bot
f388078e7b fix: upgrade @fortawesome/react-fontawesome from 0.2.1 to 0.2.2
Snyk has created this PR to upgrade @fortawesome/react-fontawesome from 0.2.1 to 0.2.2.

See this package in npm:
@fortawesome/react-fontawesome

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-13 18:05:09 +00:00
2001f3177f Merge pull request #50 from Mastermindzh/snyk-upgrade-97063be112e02539b5bf171f5e2b19a6
[Snyk] Upgrade @fortawesome/react-fontawesome from 0.2.0 to 0.2.1
2024-06-09 11:36:17 +02:00
ff05ed96ff Merge pull request #49 from Mastermindzh/snyk-upgrade-b093e6b1c28781ad570290496d1bea31
[Snyk] Upgrade: react, react-dom
2024-06-09 11:35:49 +02:00
f18dd8874f Merge pull request #51 from Mastermindzh/snyk-upgrade-1ec6f5ea75691615cd0ee105f6e608ea
[Snyk] Upgrade gatsby from 5.13.4 to 5.13.5
2024-06-09 11:35:28 +02:00
snyk-bot
65ee109e90 fix: upgrade gatsby from 5.13.4 to 5.13.5
Snyk has created this PR to upgrade gatsby from 5.13.4 to 5.13.5.

See this package in npm:
gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-08 05:58:30 +00:00
snyk-bot
9a2be8d95c fix: upgrade @fortawesome/react-fontawesome from 0.2.0 to 0.2.1
Snyk has created this PR to upgrade @fortawesome/react-fontawesome from 0.2.0 to 0.2.1.

See this package in npm:
@fortawesome/react-fontawesome

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-06-06 19:33:20 +00:00
snyk-bot
2dc8dc3ffb fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - react from 18.3.0 to 18.3.1.
    See this package in npm: https://www.npmjs.com/package/react
  - react-dom from 18.3.0 to 18.3.1.
    See this package in npm: https://www.npmjs.com/package/react-dom

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-17 20:34:05 +00:00
dcff39ec77 Merge pull request #48 from Mastermindzh/snyk-upgrade-1bbab3d8e545e434dc062af73ae8dfe3
[Snyk] Upgrade: react, react-dom
2024-05-17 09:08:15 +02:00
snyk-bot
aced724d40 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - react from 18.2.0 to 18.3.0.
    See this package in npm: https://www.npmjs.com/package/react
  - react-dom from 18.2.0 to 18.3.0.
    See this package in npm: https://www.npmjs.com/package/react-dom

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-16 23:12:09 +00:00
499897f894 Merge pull request #47 from Mastermindzh/snyk-upgrade-8c92ffecc0daf89adf949526cb1bd8b6
[Snyk] Upgrade gatsby from 5.13.3 to 5.13.4
2024-05-05 13:57:17 +02:00
snyk-bot
3b8b879bb1 fix: upgrade gatsby from 5.13.3 to 5.13.4
Snyk has created this PR to upgrade gatsby from 5.13.3 to 5.13.4.

See this package in npm:
https://www.npmjs.com/package/gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-05-02 22:26:14 +00:00
04717d6035 Merge pull request #46 from Mastermindzh/snyk-upgrade-e265bd1012d82605792e96e2c403c3a6
[Snyk] Upgrade: @fortawesome/fontawesome-svg-core, @fortawesome/free-solid-svg-icons
2024-04-25 10:26:08 +02:00
snyk-bot
271152db62 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - @fortawesome/fontawesome-svg-core from 6.5.1 to 6.5.2.
    See this package in npm: https://www.npmjs.com/package/@fortawesome/fontawesome-svg-core
  - @fortawesome/free-solid-svg-icons from 6.5.1 to 6.5.2.
    See this package in npm: https://www.npmjs.com/package/@fortawesome/free-solid-svg-icons

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-04-23 19:56:27 +00:00
41ed9dd34c Merge pull request #45 from Mastermindzh/snyk-upgrade-fc7a12211cdf35904d4c5a66812b82bd
[Snyk] Upgrade gatsby from 5.13.2 to 5.13.3
2024-02-16 22:31:37 +01:00
snyk-bot
03122f846a fix: upgrade gatsby from 5.13.2 to 5.13.3
Snyk has created this PR to upgrade gatsby from 5.13.2 to 5.13.3.

See this package in npm:
https://www.npmjs.com/package/gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-02-16 17:45:28 +00:00
fe9627da68 Merge pull request #44 from Mastermindzh/snyk-upgrade-b59feb0116922e3c06897939d6fb19da
[Snyk] Upgrade: gatsby-plugin-catch-links, gatsby-plugin-feed, gatsby-plugin-google-gtag, gatsby-plugin-manifest, gatsby-plugin-react-helmet, gatsby-plugin-sass, gatsby-plugin-sharp, gatsby-plugin-sitemap, gatsby-remark-autolink-headers, gatsby-remark-copy-linked-files, gatsby-remark-images, gatsby-remark-prismjs, gatsby-remark-responsive-iframe, gatsby-remark-smartypants, gatsby-source-filesystem, gatsby-transformer-remark, gatsby-transformer-sharp
2024-02-15 14:56:56 +01:00
snyk-bot
32536e64c7 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby-plugin-catch-links from 5.13.0 to 5.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-catch-links
  - gatsby-plugin-feed from 5.13.0 to 5.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-feed
  - gatsby-plugin-google-gtag from 5.13.0 to 5.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-google-gtag
  - gatsby-plugin-manifest from 5.13.0 to 5.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-manifest
  - gatsby-plugin-react-helmet from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-react-helmet
  - gatsby-plugin-sass from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sass
  - gatsby-plugin-sharp from 5.13.0 to 5.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sharp
  - gatsby-plugin-sitemap from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sitemap
  - gatsby-remark-autolink-headers from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-autolink-headers
  - gatsby-remark-copy-linked-files from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-copy-linked-files
  - gatsby-remark-images from 7.13.0 to 7.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-remark-prismjs from 7.13.0 to 7.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-prismjs
  - gatsby-remark-responsive-iframe from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-responsive-iframe
  - gatsby-remark-smartypants from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-smartypants
  - gatsby-source-filesystem from 5.13.0 to 5.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-source-filesystem
  - gatsby-transformer-remark from 6.13.0 to 6.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-remark
  - gatsby-transformer-sharp from 5.13.0 to 5.13.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-sharp

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-02-14 14:53:52 +00:00
a55a136087 Merge pull request #42 from Mastermindzh/snyk-upgrade-e6dc07e363c11a9059c334318d6558db
[Snyk] Upgrade classnames from 2.4.0 to 2.5.1
2024-02-08 09:30:36 +01:00
830b9cf4d8 Merge pull request #40 from Mastermindzh/snyk-upgrade-75c0790e6ef5eeea26de138effa88d2b
[Snyk] Upgrade gatsby-plugin-image from 3.12.0 to 3.13.0
2024-02-06 09:17:11 +01:00
aa87dd0be7 Merge pull request #41 from Mastermindzh/snyk-upgrade-9f3f21f27f1c9851222ea50e86aee75b
[Snyk] Upgrade: @fortawesome/fontawesome-svg-core, @fortawesome/free-solid-svg-icons
2024-02-06 09:15:52 +01:00
snyk-bot
a86aca1a71 fix: upgrade classnames from 2.4.0 to 2.5.1
Snyk has created this PR to upgrade classnames from 2.4.0 to 2.5.1.

See this package in npm:
https://www.npmjs.com/package/classnames

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-02-05 02:36:25 +00:00
snyk-bot
cf99cbf027 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - @fortawesome/fontawesome-svg-core from 6.4.2 to 6.5.1.
    See this package in npm: https://www.npmjs.com/package/@fortawesome/fontawesome-svg-core
  - @fortawesome/free-solid-svg-icons from 6.4.2 to 6.5.1.
    See this package in npm: https://www.npmjs.com/package/@fortawesome/free-solid-svg-icons

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-02-05 02:36:21 +00:00
snyk-bot
76fa1f530d fix: upgrade gatsby-plugin-image from 3.12.0 to 3.13.0
Snyk has created this PR to upgrade gatsby-plugin-image from 3.12.0 to 3.13.0.

See this package in npm:
https://www.npmjs.com/package/gatsby-plugin-image

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-02-05 02:36:17 +00:00
34d69891ca Merge pull request #36 from Mastermindzh/snyk-upgrade-cfdb84fe2c842e80e6d3b8ac03804839
[Snyk] Upgrade classnames from 2.3.3 to 2.4.0
2024-02-02 10:48:48 +01:00
3756a9c1c8 Merge pull request #38 from Mastermindzh/snyk-upgrade-571010967024a7d8c3d133c02637ef3e
[Snyk] Upgrade: gatsby-plugin-catch-links, gatsby-plugin-feed, gatsby-plugin-google-gtag, gatsby-plugin-manifest, gatsby-plugin-react-helmet, gatsby-plugin-sass, gatsby-plugin-sharp, gatsby-plugin-sitemap, gatsby-remark-autolink-headers, gatsby-remark-copy-linked-files, gatsby-remark-images, gatsby-remark-prismjs, gatsby-remark-responsive-iframe, gatsby-remark-smartypants, gatsby-source-filesystem, gatsby-transformer-remark, gatsby-transformer-sharp
2024-02-02 10:48:25 +01:00
snyk-bot
09019de153 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby-plugin-catch-links from 5.12.0 to 5.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-catch-links
  - gatsby-plugin-feed from 5.12.3 to 5.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-feed
  - gatsby-plugin-google-gtag from 5.12.3 to 5.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-google-gtag
  - gatsby-plugin-manifest from 5.12.3 to 5.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-manifest
  - gatsby-plugin-react-helmet from 6.12.0 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-react-helmet
  - gatsby-plugin-sass from 6.12.3 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sass
  - gatsby-plugin-sharp from 5.12.3 to 5.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sharp
  - gatsby-plugin-sitemap from 6.12.3 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sitemap
  - gatsby-remark-autolink-headers from 6.12.3 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-autolink-headers
  - gatsby-remark-copy-linked-files from 6.12.0 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-copy-linked-files
  - gatsby-remark-images from 7.12.3 to 7.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-remark-prismjs from 7.12.0 to 7.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-prismjs
  - gatsby-remark-responsive-iframe from 6.12.0 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-responsive-iframe
  - gatsby-remark-smartypants from 6.12.0 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-smartypants
  - gatsby-source-filesystem from 5.12.1 to 5.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-source-filesystem
  - gatsby-transformer-remark from 6.12.3 to 6.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-remark
  - gatsby-transformer-sharp from 5.12.3 to 5.13.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-sharp

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-01-25 10:56:12 +00:00
bc7e35b888 Merge pull request #37 from Mastermindzh/snyk-fix-989263256fa978c0a36c3a680579fe0d
[Snyk] Security upgrade gatsby from 5.12.9 to 5.13.2
2024-01-23 22:38:55 +01:00
snyk-bot
fd15d4ac18 fix: package.json & package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-INFLIGHT-6095116
2024-01-23 14:39:23 +00:00
snyk-bot
6148d98155 fix: upgrade classnames from 2.3.3 to 2.4.0
Snyk has created this PR to upgrade classnames from 2.3.3 to 2.4.0.

See this package in npm:
https://www.npmjs.com/package/classnames

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-01-17 17:39:52 +00:00
d6a7dbefde Merge pull request #34 from Mastermindzh/snyk-upgrade-34f91a234658d267e40b17fe8b484586
[Snyk] Upgrade classnames from 2.3.2 to 2.3.3
2024-01-16 13:20:04 +01:00
snyk-bot
f543e30e42 fix: upgrade classnames from 2.3.2 to 2.3.3
Snyk has created this PR to upgrade classnames from 2.3.2 to 2.3.3.

See this package in npm:
https://www.npmjs.com/package/classnames

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2024-01-15 23:11:03 +00:00
4be2bf852e Merge branch 'master' of https://github.com/mastermindzh/rickvanlieshout.com 2023-12-08 09:28:27 +01:00
ca2602f883 chore: update resume 2023-12-08 09:26:09 +01:00
e3aca41540 Merge pull request #30 from Mastermindzh/snyk-upgrade-ceb618917c420568f263bf24a4a4f70e
[Snyk] Upgrade: gatsby-link, gatsby, gatsby-plugin-feed, gatsby-plugin-google-gtag, gatsby-plugin-manifest, gatsby-plugin-sass, gatsby-plugin-sharp, gatsby-plugin-sitemap, gatsby-remark-autolink-headers, gatsby-remark-images, gatsby-source-filesystem, gatsby-transformer-remark, gatsby-transformer-sharp
2023-11-19 14:29:43 +01:00
snyk-bot
73534260f7 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby-link from 5.12.0 to 5.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-link
  - gatsby from 5.12.8 to 5.12.9.
    See this package in npm: https://www.npmjs.com/package/gatsby
  - gatsby-plugin-feed from 5.12.2 to 5.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-feed
  - gatsby-plugin-google-gtag from 5.12.2 to 5.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-google-gtag
  - gatsby-plugin-manifest from 5.12.2 to 5.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-manifest
  - gatsby-plugin-sass from 6.12.2 to 6.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sass
  - gatsby-plugin-sharp from 5.12.2 to 5.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sharp
  - gatsby-plugin-sitemap from 6.12.2 to 6.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sitemap
  - gatsby-remark-autolink-headers from 6.12.2 to 6.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-autolink-headers
  - gatsby-remark-images from 7.12.2 to 7.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-source-filesystem from 5.12.0 to 5.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-source-filesystem
  - gatsby-transformer-remark from 6.12.2 to 6.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-remark
  - gatsby-transformer-sharp from 5.12.2 to 5.12.3.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-sharp

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-11-16 19:53:27 +00:00
479a9225bc Merge pull request #29 from Mastermindzh/snyk-upgrade-ce87f98b97ed62d3285209ecee4dbfa5
[Snyk] Upgrade: gatsby, gatsby-plugin-feed, gatsby-plugin-google-gtag, gatsby-plugin-manifest, gatsby-plugin-sass, gatsby-plugin-sharp, gatsby-plugin-sitemap, gatsby-remark-autolink-headers, gatsby-remark-images, gatsby-transformer-remark, gatsby-transformer-sharp
2023-11-12 20:34:05 +01:00
snyk-bot
5dc76679ef fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby from 5.12.7 to 5.12.8.
    See this package in npm: https://www.npmjs.com/package/gatsby
  - gatsby-plugin-feed from 5.12.1 to 5.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-feed
  - gatsby-plugin-google-gtag from 5.12.1 to 5.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-google-gtag
  - gatsby-plugin-manifest from 5.12.1 to 5.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-manifest
  - gatsby-plugin-sass from 6.12.1 to 6.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sass
  - gatsby-plugin-sharp from 5.12.1 to 5.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sharp
  - gatsby-plugin-sitemap from 6.12.1 to 6.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sitemap
  - gatsby-remark-autolink-headers from 6.12.1 to 6.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-autolink-headers
  - gatsby-remark-images from 7.12.1 to 7.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-transformer-remark from 6.12.1 to 6.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-remark
  - gatsby-transformer-sharp from 5.12.1 to 5.12.2.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-sharp

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-11-10 16:23:27 +00:00
dd293bcc63 Merge pull request #28 from Mastermindzh/snyk-upgrade-536a7746bc855587ea09d6d01bfba017
[Snyk] Upgrade gatsby from 5.12.6 to 5.12.7
2023-11-07 22:07:40 +01:00
snyk-bot
71571bd7fb fix: upgrade gatsby from 5.12.6 to 5.12.7
Snyk has created this PR to upgrade gatsby from 5.12.6 to 5.12.7.

See this package in npm:
https://www.npmjs.com/package/gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-11-07 20:11:45 +00:00
6a2239aa2b Merge pull request #27 from Mastermindzh/snyk-upgrade-95bbcb4bfc6a96e18faddee951d6b0d0
[Snyk] Upgrade: gatsby, gatsby-plugin-feed, gatsby-plugin-google-gtag, gatsby-plugin-manifest, gatsby-plugin-sass, gatsby-plugin-sharp, gatsby-plugin-sitemap, gatsby-remark-autolink-headers, gatsby-remark-images, gatsby-transformer-remark, gatsby-transformer-sharp
2023-10-31 09:11:51 +01:00
snyk-bot
bac1e1d9d6 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby from 5.12.5 to 5.12.6.
    See this package in npm: https://www.npmjs.com/package/gatsby
  - gatsby-plugin-feed from 5.12.0 to 5.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-feed
  - gatsby-plugin-google-gtag from 5.12.0 to 5.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-google-gtag
  - gatsby-plugin-manifest from 5.12.0 to 5.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-manifest
  - gatsby-plugin-sass from 6.12.0 to 6.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sass
  - gatsby-plugin-sharp from 5.12.0 to 5.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sharp
  - gatsby-plugin-sitemap from 6.12.0 to 6.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sitemap
  - gatsby-remark-autolink-headers from 6.12.0 to 6.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-autolink-headers
  - gatsby-remark-images from 7.12.0 to 7.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-transformer-remark from 6.12.0 to 6.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-remark
  - gatsby-transformer-sharp from 5.12.0 to 5.12.1.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-sharp

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-10-31 04:43:07 +00:00
5329fdd6a4 Merge pull request #24 from Mastermindzh/snyk-upgrade-af1b404f0e811b24d2245c736ea39fec
[Snyk] Upgrade gatsby from 5.12.4 to 5.12.5
2023-10-29 19:32:54 +01:00
82115dd07a Merge pull request #25 from Mastermindzh/feature/various-issues
Feature/various issues
2023-10-29 15:54:59 +01:00
247a9a17e0 fix: added www 2023-10-29 15:41:11 +01:00
e7fae60efb chore(release): 1.3.1 2023-10-29 15:34:10 +01:00
1c4c9d058a fix: set current url tags in both ssr and browser space 2023-10-29 15:33:28 +01:00
e065f16fb5 fix: now setting og:url correctly as well as the canonical url 2023-10-25 23:59:16 +02:00
snyk-bot
dae867c1b0 fix: upgrade gatsby from 5.12.4 to 5.12.5
Snyk has created this PR to upgrade gatsby from 5.12.4 to 5.12.5.

See this package in npm:
https://www.npmjs.com/package/gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-10-18 17:34:59 +00:00
8245e1f0d8 fix: several fixes to improve ahrefs site score 2023-10-04 23:52:29 +02:00
0e0d470ef5 Merge pull request #23 from Mastermindzh/snyk-upgrade-861d2c2a9d0f48a7a82e9adaed22da14
[Snyk] Upgrade gatsby from 5.12.3 to 5.12.4
2023-09-27 11:16:11 +02:00
snyk-bot
f13f40df35 fix: upgrade gatsby from 5.12.3 to 5.12.4
Snyk has created this PR to upgrade gatsby from 5.12.3 to 5.12.4.

See this package in npm:
https://www.npmjs.com/package/gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-09-26 22:04:09 +00:00
81dee3ad5c Merge pull request #22 from Mastermindzh/fixes/tags
Fixes/tags
2023-09-24 18:13:51 +02:00
7dc8aade23 Merge branch 'master' of github.com:Mastermindzh/rickvanlieshout.com into fixes/tags 2023-09-24 15:36:01 +02:00
7019f34005 fix: fixed tags and categories in several blog posts 2023-09-24 15:35:46 +02:00
167b70159c Merge pull request #21 from Mastermindzh/content/lego-league
Content/lego league
2023-09-24 13:31:23 +02:00
ed28488273 Merge pull request #20 from Mastermindzh/snyk-upgrade-5eb3a4375a49780aad6a02dba66f6bd2
[Snyk] Upgrade gatsby from 5.12.1 to 5.12.3
2023-09-20 13:51:16 +02:00
snyk-bot
043d08e58f fix: upgrade gatsby from 5.12.1 to 5.12.3
Snyk has created this PR to upgrade gatsby from 5.12.1 to 5.12.3.

See this package in npm:
https://www.npmjs.com/package/gatsby

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-09-19 05:03:53 +00:00
144 changed files with 17710 additions and 16101 deletions

View File

@@ -4,16 +4,16 @@ name: default
steps:
- name: install
image: node:19.4.0
image: node:19.9.0
commands:
- npm install
- name: test
image: node:19.4.0
image: node:19.9.0
commands:
- npm run test:coverage
- name: build
image: node:19.4.0
image: node:19.9.0
commands:
- npm run build

View File

@@ -1,4 +0,0 @@
*.*
!*.ts
!*.tsx
/public/

View File

@@ -1,53 +0,0 @@
{
"env": {
"browser": true
},
"extends": [
"plugin:import/typescript",
"plugin:import/errors",
"airbnb-typescript",
"@mastermindzh/eslint-config",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"plugins": [
"react",
"jest",
"@typescript-eslint",
"simple-import-sort",
"prettier"
],
"rules": {
"import/no-extraneous-dependencies": [
"error",
{
"devDependencies": [
"**/*.test.ts",
"**/*.test.tsx",
"**/internal/**/*.ts"
]
}
],
"@typescript-eslint/no-unused-vars": ["off"],
"@typescript-eslint/no-use-before-define": ["off"],
"@typescript-eslint/quotes": ["error", "double"],
"@typescript-eslint/naming-convention": ["error", {
"format": ["camelCase", "UPPER_CASE", "snake_case", "PascalCase"],
"leadingUnderscore": "allow",
"selector": "parameter"
}],
"react/static-property-placement": ["off"],
"react/prop-types": ["off"],
"no-shadow": "off",
"@typescript-eslint/no-shadow": ["error"]
},
"settings": {
"import/resolver": {
"typescript": {}
}
}
}

View File

@@ -5,6 +5,9 @@ on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
release:
@@ -19,15 +22,10 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 16.14.0
node-version: 22.12.0
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test
# - name: Release
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# run: npm run semantic-release

View File

@@ -1,6 +1,3 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no-install commitlint --edit "$1"
npm run lint:staged
npm run test

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
legacy-peer-deps=true

3
.nvmrc
View File

@@ -1 +1,2 @@
19.8.1
v22.12.0

View File

@@ -1,3 +1,4 @@
module.exports = {
...require("@mastermindzh/prettier-config")
...require("@mastermindzh/prettier-config"),
trailingComma: "all",
};

22
.prettierrc.json Normal file
View File

@@ -0,0 +1,22 @@
{
"printWidth": 100,
"useTabs": false,
"tabWidth": 2,
"singleQuote": false,
"jsxSingleQuote": false,
"quoteProps": "as-needed",
"trailingComma": "all",
"bracketSpacing": true,
"bracketSameLine": false,
"arrowParens": "always",
"requirePragma": false,
"insertPragma": false,
"proseWrap": "preserve",
"htmlWhitespaceSensitivity": "css",
"endOfLine": "lf",
"semi": true,
"singleAttributePerLine": false,
"embeddedLanguageFormatting": "auto",
"vueIndentScriptAndStyle": false,
"experimentalTernaries": false
}

View File

@@ -9,13 +9,16 @@
"font-weight-notation": "named-where-possible",
"function-url-no-scheme-relative": true,
"function-url-quotes": "always",
"max-empty-lines": 1,
"no-descending-specificity": true,
"no-duplicate-selectors": true,
"order/order": ["custom-properties", "declarations"],
"order/order": [
[
"custom-properties",
"declarations"
]
],
"order/properties-alphabetical-order": true,
"property-no-unknown": [true, { "ignoreProperties": ["/^lost-/"] }],
"string-quotes": "double",
"value-keyword-case": "lower"
}
}

13
.vscode/settings.json vendored
View File

@@ -1,10 +1,21 @@
{
"cSpell.words": [
"codepen",
"disqus",
"fontawesome",
"fortawesome",
"frontmatter",
"slsw"
"gitops",
"homelab",
"Jellyfin",
"Lieshoutt",
"Rickvan",
"rickvanlieshoutcom",
"slsw",
"soundcloud",
"todos",
"unraid",
"weibo"
],
"grammarly.selectors": [
{

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
# Rickvanlieshout.com
This is the repository for my personal blog/website [rickvanlieshout.com](https://rickvanlieshout.com).
This is the repository for my personal blog/website [rickvanlieshout.com](https://www.rickvanlieshout.com).
[![Build Status](https://ci.mastermindzh.tech/api/badges/Mastermindzh/rickvanlieshout.com/status.svg)](https://ci.mastermindzh.tech/Mastermindzh/rickvanlieshout.com)

View File

@@ -7,8 +7,9 @@ A list of categories used in the blog
| ----------- | -------------------------------------------------------- |
| blog | random blog stuff |
| IOT | anything to do with IOT |
| Homelab | anything to do with my homelab (including smart home...) |
| Development | anything to do with regular development |
| homelab | anything to do with my homelab (including smart home...) |
| development | anything to do with regular development |
| exploits | blogs about exploits and bugs in open-source software |
| Lego | blogs about Lego |
| lego | blogs about Lego |
| house | Content about the place I live |
| life | Posts about life |

View File

@@ -46,7 +46,7 @@
"author": {
"name": "Rick van Lieshout",
"photo": "/content/me.png",
"bio": "I'm a passionate software architect that bifurcates his love between great software development and leading others to learn and adopt new things.",
"bio": "I'm a passionate CTO who bifurcates his love between great software development and leading others in their continuous improvement journeys",
"contacts": {
"email": "info@rickvanlieshout.com",
"github": "mastermindzh",
@@ -66,4 +66,4 @@
"phone": "+31614436562"
}
}
}
}

Binary file not shown.

View File

@@ -18,18 +18,26 @@ template: "page"
**Open-source aficionado**<br />
_Always_<br />
A fair share of my private work is done through open-source media. I don't have a portfolio but I have a [Github](https://github.com/mastermindzh) where I share most things.
A fair share of my private work is done through open-source media. I don't have a portfolio but I have a [Github](https://github.com/mastermindzh) where I share most things. If you're interested in what else I do, or why, let me know and I'll share a detailed description.
**Tech lead / CTO at INFORIT**<br />
**CTO at Frontliners (previously INFORIT)**<br />
_2018 - Now_<br />
At INFORIT I am responsible for the entire technical architecture of the new TFX stack that I launched shortly after 2018. This involves setting up and maintaining a modern event-based microservice architecture on a Kubernetes-based SaaS cloud solution and migrating to modern programming languages such as dotnetcore and React.
At Frontliners I am responsible for the entire technical architecture of the new TFX stack that I launched shortly after 2018. This involves setting up and maintaining a modern event-based microservice architecture on a Kubernetes-based SaaS cloud solution and migrating to modern programming languages such as dotnetcore, Supabase and React. We've delivered a few smaller pieces of software but mainly focus on building a next-gen Transport Management System called TFX.
The other main responsibility I have is creating and maintaining a coherent team of lead developers by sharing knowledge, making decisions, and empowering leads to explore technologies outside of their comfort zone.
The other main responsibility I have is creating and maintaining, and hiring, a coherent team of (lead) engineers by sharing knowledge, making decisions, and empowering them to explore technologies outside of their comfort zone.
This includes everything from platform to e2e engineering.
During my time at Frontliners, the company has grown from 5-7 in-house developers on a single product to 35-40 technical engineers on multiple projects.
At INFORIT I also help with the recruitment of new employees, setting up and maintaining agile strategies including proper test management, and general software development.
During my time at INFORIT, we've grown from 5-7 in-house developers to 10, full-sized, SCRUM teams.
The teams I manage will be listed below. Some of the core concepts they work with will also be listed.
Apart from the last one I also play an active role in them:
Most relevant technologies used: dotnetcore, React, Angular, Kafka, RabbitMQ, Mongo, PostgreSQL, Growthbook, Docker & Kubernetes
- 4 Full-fledged (6-8 people) Scrum development teams working on the latest product.
- day-to-day management of people done by "Chapter leads"
- React, Docker, .NET 9+ (core), Mongo, Kafka, Debezium, DDD, CQRS
- Business Integration team (Supabase, Kysely, PostgreSQL)
- Platform team (Kubernetes, Terraform, ArgoCD, CI/CD pipelines, Vault, Keycloak, etc...)
- Legacy team (ASP.NET, MSSQL, MongoDB, Elasticsearch)
- Legacy team (Clarion, SQL-Sybase)
**Hanflex employee**<br />
_September 2015 - July 2018_<br />
@@ -64,6 +72,7 @@ Building an interactive and fully customizable dashboard on top of VAA's existin
I'll list some of the training courses I've had whilst working.
Some of these have (official) certificates, some don't, but all have brought value and knowledge.
- Domain Driven Design [Vijfhart](./DDD-vijfhart.pdf)
- Young Executive Program (YEP) - [De Baak](https://debaak.nl/trainingen/young-executives-program)
- Hiring & interview training ([icm.nl](https://www.icm.nl/opleidingen-en-trainingen/hrm/selectiegesprekken-voeren/))
- Conversation techniques & de-escalation ([TIJDwinst.com](https://gesprekstechnieken.com/cursus-gesprekstechnieken/)](<https://gesprekstechnieken.com/cursus-gesprekstechnieken/>)).

View File

@@ -2,7 +2,7 @@
title: "Raspberry pi cluster Step 1: Shopping"
date: "2014-09-05 23:00"
template: "post"
category: "Homelab"
category: "homelab"
tags:
- "raspberry"
- "cluster"

View File

@@ -2,7 +2,7 @@
title: "Raspberry pi cluster Step 2: Assembling the hardware"
date: "2014-09-10"
template: "post"
category: "Homelab"
category: "homelab"
tags:
- "raspberry"
- "cluster"
@@ -14,7 +14,7 @@ socialImage: "./media/improvising.jpg"
So today I finally received the required parts to finish up my Raspberry pi cluster and I was **extremely** excited! To share this excitement with you lot here's a picture of all the parts I'll be using:
![picture of all the parts spread on the mat](./media/pi_overview_full.JPG "all the bits!")
![picture of all the parts spread on the mat](./media/pi_overview_full.jpg "all the bits!")
I began by building the Raspberry pi "tower", sadly I forgot to take a picture with the DSLR so I only have this one cell image to show you guys:

View File

@@ -2,7 +2,7 @@
title: "Raspberry pi cluster Step 3: Installing the OS"
date: "2014-09-14"
template: "post"
category: "Homelab"
category: "homelab"
tags:
- "raspberry"
- "cluster"

View File

@@ -2,7 +2,7 @@
title: "Raspberry pi cluster Step 4: Setting up the master node"
date: "2014-09-17"
template: "post"
category: "Homelab"
category: "homelab"
tags:
- "raspberry"
- "cluster"

View File

@@ -2,14 +2,14 @@
title: "Raspberry pi cluster step 5: Expanding the cluster"
date: "2014-09-19"
template: "post"
category: "Homelab"
category: "homelab"
tags:
- "raspberry"
- "cluster"
- "pi"
description: "Today's blog post will be about expanding the cluster with more nodes."
disqusId: "6"
socialImage: "./media/pidark_full.JPG"
socialImage: "./media/pidark.jpg"
---
In today's post we'll have a look at expanding the cluster with more nodes! We will have a look at how to clone them and how we can set up a universal login using ssh keys.
@@ -40,7 +40,7 @@ sudo nano /etc/network/interfaces
After setting up all 4 pi's and plugging it all in you should see all 4 led's light up on the pi's. If this is not the case you might've forgotten to change either the ip address or the hostname. (which will lead to a conflict resulting in one of them not having internet access). Mine now looks like this (note the dramatic night picture taken at 10 past 12 am):
![picture of 4 Raspberry pi's stacked on a network switch serving as a cluster](./media/pidark_full.JPG "It's not quite RGB but it's beautiful!")
![picture of 4 Raspberry pi's stacked on a network switch serving as a cluster](./media/pidark.jpg "It's not quite RGB but it's beautiful!")
## Logging in to the nodes with ssh keys

View File

@@ -2,12 +2,12 @@
title: "The pi cluster, home automation & kickstarter monitoring"
date: "2014-09-27"
template: "post"
category: "Homelab"
category: "homelab"
tags:
- "python"
- "raspberry"
- "pi"
- "home automation"
- "home-automation"
description: "Today's blog is about home automation."
disqusId: "7"
---

View File

@@ -3,9 +3,9 @@ title: Scala Day 0 - What is Scala?
date: "2017-03-30"
template: "post"
draft: false
category: "Development"
category: "development"
tags:
- "Development"
- "development"
- "slsw"
description: "My final assignment for a school course is to learn a new language from a book (uh-oh). I picked Scala and here's why"
disqusId: "20"

View File

@@ -3,9 +3,9 @@ title: Scala Day 1 - The Basics
date: "2017-04-02"
template: "post"
draft: false
category: "Development"
category: "development"
tags:
- "Development"
- "development"
- "slsw"
description: "Let's take a deep dive into a programming book and Scala!"
disqusId: "21"

View File

@@ -3,9 +3,9 @@ title: Scala Day 2 - Let's get functional
date: "2017-04-03"
template: "post"
draft: false
category: "Development"
category: "development"
tags:
- "Development"
- "development"
- "slsw"
description: "Today we'll focus on the functional aspects of Scala"
disqusId: "22"

View File

@@ -3,9 +3,9 @@ title: Scala Day 3 - Concurrency is key!
date: "2017-04-04"
template: "post"
draft: false
category: "Development"
category: "development"
tags:
- "Development"
- "development"
- "slsw"
description: "A day full of functional joy and concurrency "
disqusId: "23"

View File

@@ -3,9 +3,9 @@ title: Scala Day 4 - A challenge!
date: "2017-04-05"
template: "post"
draft: false
category: "Development"
category: "development"
tags:
- "Development"
- "development"
- "slsw"
description: "The last day of my journey with Scala is said to be a challenge"
disqusId: "24"

View File

@@ -2,13 +2,13 @@
title: Adopting conventional commits and standard versions in a git and npm codebase
date: "2022-11-07"
template: "post"
category: "Development"
category: "development"
tags:
- "git"
- "conventional commits"
- "semantic commits"
- "INFORIT"
- "Standard releases"
- "conventional-commits"
- "semantic-commits"
- "inforit"
- "standard-releases"
description: "A dive into conventional commits and their benefit whilst releasing with standard versions."
socialImage: "./media/husky-error.png"
@@ -102,7 +102,7 @@ First, let's add a script to the `package.json` that will do our commit for us:
```json
{
"scripts": {
"commit": "git-cz",
"commit": "git-cz"
}
}
```
@@ -138,14 +138,7 @@ module.exports = {
"subject-full-stop": [2, "never", "."],
"type-case": [2, "always", "lower-case"],
"type-empty": [2, "never"],
"type-enum": [
2,
"always",
[
"first type",
"second type",
],
],
"type-enum": [2, "always", ["first type", "second type"]],
},
prompt: {
questions: {
@@ -155,7 +148,6 @@ module.exports = {
},
},
};
```
As you can see we have configured a whole bunch of things, but there are 2 things that matter for now:
@@ -234,8 +226,7 @@ module.exports = {
emoji: "💎",
},
refactor: {
description:
"A code change that neither fixes a bug nor adds a feature",
description: "A code change that neither fixes a bug nor adds a feature",
title: "Code Refactoring",
emoji: "📦",
},
@@ -274,12 +265,10 @@ module.exports = {
},
},
scope: {
description:
"What is the scope of this change (e.g. component or file name)",
description: "What is the scope of this change (e.g. component or file name)",
},
subject: {
description:
"Write a short, imperative tense description of the change",
description: "Write a short, imperative tense description of the change",
},
body: {
description: "Provide a longer description of the change",
@@ -340,7 +329,7 @@ Now, let's add a Husky git hook to combat future commits that are unconventional
npx husky-init && npm install
```
This will automatically create the `.husky/pre-commit` file. Let's edit it and add commitlint:
This will automatically create the `.husky/` directory. Let's create a file in it called `commit-msg` and add commitlint:
```sh
#!/usr/bin/env sh
@@ -377,7 +366,7 @@ First, let's add some npm scripts again:
"release": "standard-version",
"release:minor": "standard-version --release-as minor",
"release:patch": "standard-version --release-as patch",
"release:major": "standard-version --release-as major",
"release:major": "standard-version --release-as major"
}
}
```

View File

@@ -95,11 +95,11 @@ Below you'll find a list of some of the biggest things I've changed.
- I added a Dark mode with a little [react-toggle](https://github.com/aaronshaf/react-toggle) to switch between light/dark.
- Blog posts now show a header that includes the "back to articles" button and my name.
- Added code block theming for both light and dark mode
!["A block of code in both the dark and light themes"](/media/prism_styles.png)
!["A block of code in both the dark and light themes"](/media/prism_styles.png)
- I added support for tables with a bit of styling around them (slight indent and row styling)
![a table](/media/table.png)
![a table](/media/table.png)
- I added the ability to quote others in a beautiful way
![a quote](/media/quote.png)
![a quote](/media/quote.png)
- Medium like image zooming (click any of the images above)
#### The posts query bug

View File

@@ -2,19 +2,18 @@
title: Flashing the LSI-9211 to IT mode using an EFI shell
date: "2023-04-12"
template: "post"
category: "Homelab"
category: "homelab"
tags:
- "lsi"
- "lsi9211"
- "raid card"
- "storage"
- "SAS2000"
- "it mode"
- "it-mode"
description: "Flashing the LSI-9211 used to be way more difficult, luckily the EFI shell makes this task a lot simpler!"
socialImage: ./media/flash-result.jpg
---
I've been building a new storage-oriented server for a while now and have yet again decided to go with (3 +1 backup) LSI 9211 raid controllers.
The reason I keep going for these specific raid controllers is quite simple. The card can theoretically support (8x500MB) 4GB/s in throughput divided over 8 drives (2x SFF-8087) which is near the maximum for consumer hard drives.

View File

@@ -9,6 +9,7 @@ tags:
- "programming"
- "team"
- "work"
- "inforit"
description: "At INFORIT we love to play! Be it DND, board games or in this case... Legos. Read on to find out what we've been up to this past summer vacation"
socialImage: ./media/lego-spike-set.png
---

View File

@@ -4,7 +4,7 @@ date: "2023-02-14"
template: "post"
category: "blog"
tags:
- "Lego"
- "lego"
- "house"
description: "What started as a simple decoration piece to fill some empty space in my home quickly grew into a new hobby of which the remnants can be found throughout my house"
socialImage: ./media/building-the-owl.jpg

View File

@@ -0,0 +1,356 @@
---
title: "A Hidden Life of Pain, Sorrow, Misery and Rampant Emotions"
description: "A deeply personal story about grief, memory, and the long road through the shadows. For anyone whos lost someone they can never get back."
date: 2025-05-04
template: "post"
category: "life"
tags:
- life
- grief
- memory
- loss
- trauma
- healing
- personal
- poetry
coverImage: ./media/cover.png
---
![A vintage heart-shaped locket rests on an old hardcover book beside a wilted pink rose, softly lit in a nostalgic and emotional scene.](./media/cover.png)
<center>⚠️ <strong>Content Warning</strong><br/>
This blog contains themes of death, grief, mental health, and emotional trauma.<br />
It is raw, honest, and may be deeply triggering for some.<br />
Please read with care and stop if it becomes too heavy. You're not alone.</center>
## A Hidden Life of Pain, Sorrow, Misery and Rampant Emotions
Some kinds of missing are temporary. A friend you havent seen in a while. A conversation left unfinished. A plan postponed.
But then there's another kind.
The kind that settles into your bones. The kind that haunts you during the quiet hours. The kind that never finds a conclusion.
That kind is not absence. It's **_gone_**. Irrevocable, final, cruel. A door slammed shut that you still find yourself knocking on, long after youve forgotten why you started.
It never opens. And still, you try the handle every now and then.
## In the background of every moment
Losing a loved one doesnt stay in one room of your house though, it isn't one door that is locked. It leaks under doors and through cracks. You find it in the most unexpected places.
You're sipping coffee with someone, and they mention a trip they took. Suddenly, you're remembering the trip _you_ never took. The one you'd planned. The one that cancer took from you.
They talk about a shared playlist. You remember the song you danced to in the rain, soaking wet but laughing anyway. The same song you now skip every time it comes on because it hurts too much
Someone laughs about chipped mugs. You think of the one she cracked and called "vintage," and how it's still at the back of your cabinet. Untouched. Sacred.
Its like walking through a museum where only _you_ know whats behind the glass.
> They talk, they laugh, the world goes on,<br />
> Yet I sit with shadows, from dusk to dawn. <br />
> A smile here hides a silent scream,<br />
> A haunted heart, a broken dream.
<figure class="float-right" style="width: 240px">
<img src="/media/the-flashback-no-one-sees.png" alt="A foggy bathroom mirror with a red lipstick kiss at the center, surrounded by a shadowy, intimate atmosphere.">
</figure>
These are what I call _mind pops_. Short for Involuntary Autobiographical Memory Chains. I wrote a journal-like book once, and later a smaller one. I wanted to share them. I tried. But I was never brave enough to.
Mind pops come uninvited. And they come _hard_.
Here are some examples from my book:
- The eyeliner she never quite got even.
- The way she tucked me in, thinking I was asleep.
- The fake wedding we planned just to see what colors we'd choose.
- Your love for Twilight. And the moment we realized, quietly, you'd never get to read the next book—if there ever was one.
- The mole you've had removed and I pretended not to notice. I did miss it so.
- The mixture of guilt, remorse and happiness in your eyes as conscious life ebbed away.
Theyre not just memories. Theyre grenades. Quiet ones. You never know when they'll detonate. Nor whether they will ruin your entire day.
> A flicker in time, unbidden and wild,<br />
> A whisper of laughter, a memory smiled.<br />
> Then tears arrive with no request,<br />
> The hearts old wounds laid bare, unblessed.
## Unfair doesnt even begin to cover it
We grow up believing that the world has some kind of order to it. That bad things happen, sure—but not _this_ bad. Not _this_ unfair.
You lose someone who made life feel infinite. You watch them disappear into the haze of hospital lights and soft-spoken specialists.
Cancer doesnt care if youre young. Or kind.<br />
Or if you had a hundred plans left.
It just takes.<br />
And keeps taking.
And you're left with jewelry in a drawer. Her necklace still smells like her.<br />
Sometimes I take it out. I hold it. Smell it. Let it transport me. I dont even know if I should still be doing that. But its a thread. One of the last ones.
> This necklace, cold, rests in my hand,<br />
> The last soft echo of a silent land.<br />
> I breathe her in, though she's not near,<br />
> A ghost in scent, in touch, in tear.
## The masks we wear
For a long time, no one knew. Most don't, still.
People see the version of you they expect: Smiling. Joking. Coping. Existing.<br />
But behind the eyes, youre unraveling. Constantly. Because grief doesnt pause.<br />
Not **_really_**.
Sharing this is hard. Not because I dont want to, but because it makes you so vulnerable. Because as you're writing or speaking, memories pop up uninvited. They derail your words. They choke your sentences. They just pop in... bastards...
And even when you manage to share, others often dont understand. They compare. They say things like “I lost someone too,” but its different. This kind of grief? This kind of loss? Its heavier. It cuts deeper. And hearing it treated like its the same as all the rest—_that_ makes you angry.
Heres something I once wrote, when I thought no one would ever read it:
> I'm surrounded by many figures, but still alone...<br />
> No one sees me, nor the pain behind my mask.<br />
> They see the smiling, happy guy I show them.<br />
> You can't blame them though, how can I let them see the darkness in my heart? <br />
> It would scare them, for it has been torn apart.
I didnt want to scare people. Or burden them. So I said nothing.<br />
For years.
## Strange rituals of survival
<figure class="float-right" style="width: 240px">
<img
src="/media/strange-rituals-of-survival.png"
alt="A softly lit restaurant table for two. One plate is untouched, the other half-eaten. A single candle flickers between them, hinting at absence and memory.">
</figure>
Grief makes you do strange things too..<br />
One of my telltale behaviors is that I start eating, lots... but there are weirder ones.<br />
More unexpected ones...
Ive spoken out loud to pictures. Imagined new conversations. Tried to conjure her in dreams. Ive spent hours crafting memories that never happened, just to feel like I got one more day.
I name items, characters, and other things in games after her.
If I eat alone, at a restaurant, I order what she wouldve. (who do I kid, I sometimes do it with company too...)
And I wrote a song. Its unfinished though—like she was.
**🎵 (Refrain)**<br />
_A strand of blonde hair, as delicate as sun,_<br />
_A mystery found, in silence it's spun._<br />
_But memory, like a fleeting breeze,_<br />
_Fades away as a haze, in the time we seize._<br /><br />
**🎶(Verse)**<br />
_Days pass like rustling leaves,_<br />
_Stories fade, like quiet thieves._<br />
_How swiftly memory slips away,_<br />
_Like an old melody, lost in the fray._<br />
_A mysterious gate, in the labyrinth of the mind,_<br />
_Locked and hidden, what secrets behind?_
As I'm writing this blog however, I have a sudden urge to add sound to the lyrics, it'll still be unfinished, but a little farther along.
I used both a piano and a viola to give it a more interesting sound than just the piano.
<center>
<audio controls>
<source src="./media/a-strand-of-blonde-hair-as-delicate-as-sun.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<br />
<a href="./media/a-strand-of-blonde-hair-as-delicate-as-sun.pdf" target="_blank">score</a> |
<a href="./media/a-strand-of-blonde-hair-as-delicate-as-sun.mid" target="_blank">midi</a> |
<a href="./media/a-strand-of-blonde-hair-as-delicate-as-sun.flac" target="_blank">flac</a>
</center>
## The final moments and the words that stayed
There are memories too hard to sit with for long. But they come back, as clear as yesterday.
The quiet nights filled with endless conversation. Plans made, even though we both knew we'd never see them through. Fantasies of places we'd never travel, children wed never have, shows wed never finish.
She once told me something that still echoes today:
> "You have to grieve me, for a while... and then you move on. <br />
> You find someone else to love. Someone who makes you feel something again. <br /> You deserve that."
I shook my head. _"I cant. I **wont**. Not because I dont want to feel again. But because abstinence, to me, feels like remembering you as you are. Eternal."_ <br />
We both cried after that. For different reasons, I think.
### My words weren't true though
But life went on. And I did try. I did have relations after her.
And every single one felt... off. Wrong. Like stepping into a life that wasnt meant to fit me anymore.
They werent bad people. In fact, I think some of them really tried to care. But the weight of comparison was impossible to escape. The shadow she left was too wide.
Sometimes Im mad at myself for trying. Other times, Im mad at myself for failing to let them in.
And always,...always,.. I feel like I betrayed her just a little.
I know grief isnt rational. It doesnt follow clean lines.<br />
And maybe thats what hurts most of all—knowing I tried, and still came back to the same place. <br />
Alone, but full of someone who isnt here.
One day... _maybe_.
## Why Im finally speaking
Its taken me over a decade to find the strength to say any of this.
And maybe the only reason I can now… is her.
But also—my mother.<br />
Shes terminally ill. And while its “natural” for a parent to go before their child, its still excruciating. <br />
We don't know how long she's got left, but I know we'll make the best of it. For both of us.
I do find myself ashamed to admit that it hasnt hit me quite the same way. But its not lesser. Its just different. A different wound on the same, torn, body.<br />
And this time, Im watching it happen while knowing exactly whats coming. And I'm scared. <br />
For **everyone**.
I think often of my brothers. For them, this may be their first real loss. Their first brush with the permanence of death.<br />
And it breaks me in new ways to imagine them feeling what I felt, without ever seeing it coming. I'll try to be there for them, as you do.
But it's at least part of why Im writing now. Thats why Im finally saying all this.<br />
Because pain grows in the dark.
In a moment of foolish bravery, I once planned to publish my journaled thoughts. That book. That attempt to show what this kind of loss looks like.<br />
I didnt. I **couldnt**.
But maybe I can share this blog.
## On those who want(ed) to leave
I need to say something with a very serious tone now, and I do hope you read it gently and thoroughly:
Ive met people over the years whove carried this same grief. And some of them have found themselves teetering.
On the edge.
Wondering if theres peace on the other side of absence.<br />
Let me say this clearly: I have never thought of taking that road for myself. If anything, I would _ask_ for eternal life. Even with the grief.<br />
But if you are someone who has stood on that edge:
**Dont. Please.**
The pain is real. The grief is heavy. But life—_even broken life_—has light in it still. And sometimes, all you need is one person willing to sit with you in the dark.
Let me be that person for a moment. Just long enough to remind you: the door might be closed, but the room isnt empty.
If you are on the edge. Seek help. <sup>([dutch](https://www.113.nl) | [english](https://www.113.nl/english))</sup>
Whatever you do, don't pass on the pain.
## What help looks like
Over the past two years, Ive slowly—_achingly_—learned to live with it.
And honestly, I'm happier now than I've ever been since.
Ive had friends. Real ones. Some with the training to guide me through the murk. Others who simply sat there while I unraveled, trying their best.
They didnt try to fix me. They didnt rush me. They just showed up.
They had always been there, I just didn't allow them to be there for me before.
Ive learned that grief isnt a wall to climb or a puzzle to solve. Its a landscape.
You dont conquer it.<br />
You _walk it_. One aching step at a time.<br />
And if you're lucky... you dont walk it alone.
### To those who held me together
Theres a quiet kind of heroism in being the one who stays.
Not the one who fixes. Not the one with the right words.
Just… the one who stays.
To those of you who sat with me in silence,
who didnt flinch at the weight of my words,
who let me cry without needing to understand why.
thank you.
To those who asked how I was and meant it.
Who asked again when I lied the first time.
Who sent messages I never responded to, but always read.
Thank you.
To those who reminded me that it was okay to laugh.
To love again.
To mess up.
To heal slow.
Thank you.
And to the ones who didnt even know they helped—
you did.
You all held the thread when I couldnt anymore.
And maybe thats the reason Im still happy...
Still holding her memory, but not drowning in it.
## Before I finally sign off
This entire blog was something I never thought I could write.
And what comes next,this next part, is something I swore I _never_ would share.
But here we are.
What follows is the foreword and some pages from the book I wrote years ago. A raw collection of thoughts, pain, patterns, and memory. Ive always wanted to share it, and Ive always been too scared. Too protective. Too convinced no one would understand.
My grief has changed, not disappeared, never that. But shifted.
And time has a way of loosening things you once held too tight.
Of showing you that even pain deserves to breathe.
So this is me, still afraid—but doing it anyway.<br />
This is me, defiant in the face of silence.<br />
This is me, opening the door just a little wider.
What comes next is the truth as I once wrote it, in a different voice, at a different time (2021-2022)—but still very much me.
### A Peek into the Pain and Misery
**The foreword to a book I once wrote titled "A Peek into the Pain and Misery"**
We, humans, perceive the vast majority of other humans we encounter as bystanders, observers and otherwise side characters in our own lives. Yet, each and every one of them has a life of comparable complexity to our own. Realizing that for the first time is an emotion called "sonder".
This book will give you a small glimpse into my life. By the end, you might find that I'm more complex than you've thought till now. That there's another side to the happy, carefree guy I show the world for the majority of my time.
Truth is, that life hasn't always been easy. In fact, I'd say that after the turning point my life has never felt easy anymore. In fact, for at least 10 years now I've been living with prodigious amounts of a single emotion: bereavement.
And though I've tried not to let the bereavement take over my life, or in fact make it known to others. it's always been there. I've effectively come to think of it as a zit. Constantly there, constantly annoying and once it's gone away it's only a matter of time before it shows up again somewhere else on your body.
Ten years is truly a long time. In it, I've tried countless things to forget my sorrow. I've written songs and poetry. I've indulged in life's greatest things. I've thrown myself into the pursuit of knowledge and I've even tried to seclude myself, thinking that I'd become a burden to the world.
However, In trying to cope with it I've also made many mistakes. I've experienced more loss, extirpated meaningful connections and, to my deepest regret, hurt others.
And even now, 10 full years later I'm still burdened by the same emotions, though now compounded by the feelings and mistakes of the past 10 years.
Furthermore, During these 10 years, on nearly every day I've been haunted by something I've come to know as Involuntary Autobiographical Memory Chains, or as I now like to call them: mind pops.
Mind pops are sudden memory flashes, seemingly triggered at random, about things I've experienced prior. These mind pops never seem to go away and can alter my mood for the rest of the day with the emotions they invoke.
I've actually been able to capture the entire story of the past 10 years in a book, of sorts, titled "a hidden life of pain, sorrow, misery and rampant emotions". And though I've always wanted to share the entire story, I've never been strong enough to do so. Not 10 years ago, not now, and maybe not ever.
But... The urge to share... something... is still there.
So on the 1st of January 2021, I set out on a challenge. I wanted to, at least, share a part of the story. Not one from a distant past though, one of constant remembrance. One of pain and pleasure. One I've lived for every day of the entire year. One I'll live for every day for many years to come.
Every page henceforth will contain one "mind pop" that I've had on the date listed. So turn over this page and join me on my struggle from January 1st through December 31st of 2021.
<figure style="width: 240px">
<img
src="/media/pages/sept-12.png"
alt="page of september 12th, a teardrop at the bottom to indicate a sad memory, and the text: my colleagues and I went skiing. They didn't know it was something we had planned to do after our studies which made it infinitely more difficult for me. I didn't really like it, probably because you weren't there to share in my happiness. On the way there and back my colleague drove straight past a place where we had lunch, that hit home a just little too hard.">
</figure>
<figure style="width: 240px;">
<img
src="/media/pages/march-19.png"
alt="page of march 19th, a flower at the bottom to indicate a happy memory, and the text: The warmth you brought into a room.
A happy one">
</figure>
<figure style="width: 240px;">
<img
src="/media/pages/jan-11.png"
alt="page of january 11th, a teardrop at the bottom to indicate a sad memory, and the text: Your scared helplessness which slowly transitioned into anger, to violence and back to anxiousness again.">
</figure>
## A postscript
If youve read this far—thank you.
That alone means more than you know.
_- Rick, mastermindzh, lycan, xxxroosjexxx, and other alias' you might know me from._

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@@ -0,0 +1,50 @@
---
title: Infrastructure as Code - Simplifying My Homelab Setup with Portainer GitOps
date: "2025-05-03"
template: "post"
category: "homelab"
tags:
- "homelab"
- "portainer"
- "gitops"
- "iac"
- "docker"
- "unraid"
- "kubernetes"
description: "How I've simplified my homelab by combining the ease of Unraid storage management with Portainer's GitOps feature to implement Infrastructure as Code."
socialImage: ./media/portainer_gitops.png
---
After writing my last blog post about using Infrastructure as Code for uptime monitoring with UptimeKuma, I felt inspired to dive deeper into my broader homelab story.
## From Complexity to Clarity
When I started building my homelab, it was all about experimenting and having fun. Kubernetes, Ansible, HA clusters spread across multiple nodes... I dove into everything headfirst. The concept of Infrastructure as Code (IaC), something I fell deeply in love with thanks to Kubernetes, quickly became the backbone of my ideal setup.
Yet, as much as I enjoyed the complexity and elegance Kubernetes brought to my experiments, I soon realized something pretty obvious: when it comes to crucial services like Jellyfin for movies or Home Assistant for managing my smart home, the last thing I needed was an over-engineered, highly available Kubernetes cluster requiring constant babysitting.
## The Before Times
It reminded me of simpler times, the "before times", before Docker and Kubernetes even existed. Back then, my homelab consisted of multiple Ubuntu servers, each handling different parts of my setup, along with a single, reliable main server named "Erebus," using Greyhole for redundancy. Even when Docker came along (and later Kubernetes), I adopted them immediately for non-critical, experimental projects, but crucial services always remained comfortably on one stable server. After all, Kubernetes-level scalability was never really necessary for my home media or automation and I could still use all the benefits of Docker.
## Hades, the Storage Behemoth
Today, this philosophy still holds true. My critical services run smoothly on a single Unraid server, my trusted main storage server named "Hades." On Hades, its a pleasantly chaotic mix of Unraid's Docker plugin, community apps, and various Docker Compose files. Each container has decentralized configuration variables, with updates effortlessly handled by Unraid's auto-update plugin.
Here's the ironic twist: despite having Kubernetes nodes running non-critical, playful stuff, all my serious storage still ends up on Hades. Honestly, nothing else compares. Hades dwarfs every other node in my network storage-wise, think around 200TB of free space at any given time. Even Kubernetes relies heavily on Hades for its back-end storage.
## Simplifying with Portainer GitOps
![AI generated image depicting the sync process described below](./media/sync.png)
Still, this fragmented setup felt manual and messy. I missed the simplicity and clarity of Infrastructure as Code. Thankfully, Portainer's Ops feature came to my rescue, allowing me to blend the massive storage and ease of use from Unraid with structured IaC management. To fully leverage this, I registered for 3 free nodes of Portainer Business Edition, unlocking their powerful GitOps feature.
Portainer's GitOps polls my private Git repository for updates to Docker Compose files at regular intervals, automatically deploying any changes. It seamlessly integrates with Docker Hub, pulling the latest container images and ensuring my stacks remain updated without manual intervention. This automation keeps my services fresh and secure with minimal effort.
The UptimeKuma example from my last blog is one such stack I recently migrated to this new, cleaner workflow.
## The Best of Both Worlds
Now, I have the best of both worlds—a robust and neatly structured setup embracing Infrastructure as Code without sacrificing ease of use or storage headaches. In other words, I could keep the things I liked best about my Kubernetes (the predictability and IaC parts) and got rid of its worst (multiple nodes, manual updates). &#x20;
On to the next adventure!

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

View File

@@ -0,0 +1,130 @@
---
title: Infrastructure as code - Service uptime monitoring
date: "2025-01-18"
template: "post"
category: "homelab"
tags:
- "uptime"
- "kuma"
- "iac"
- "infrastructure"
- "code"
- "servers"
description: "In this post I demonstrate how I've moved from an old and simple UptimeKuma setup to a setup with AutoKuma so I can register my monitors with 'infrastructure as code'"
socialImage: ./media/uptimekuma.png
---
If theres one thing Ive always embraced, its the philosophy of working smarter, not harder. Infrastructure as Code (IaC) has been one of the cornerstones of my career. a perfect blend of laziness and the pursuit of predictability. From my earliest days experimenting with Docker back in 2014 to leading a platform team at my current company, IaC has proven invaluable for simplifying complexity, ensuring reproducibility, and enabling automation.
Below you'll find my journey and why I think every engineer should embrace it, eventually walking you through one of the latest automations I set up at home: Automatically creating uptime monitors in UptimeKuma based on Docker labels.
## The Early Days: Discovering Docker
Back in 2014, I stumbled upon Docker, and it was a game-changer. At the time, I was frustrated by the manual and error-prone process of setting up environments for my code (especially on other people's machines....). Docker offered a way to reliably recreate these environments with simple, declarative configuration files. Suddenly, I could spin up a development environment in minutes and be confident it would work exactly the same on another machine.
In 2017, I taught several university classes on Docker, emphasizing the importance of reproducibility. My students learned how to containerize applications and ensure their work could be shared and run anywhere, regardless of underlying infrastructure. Reproducibility wasnt just a technical advantage; it became a mindset I encouraged in every project.
And yes.. for those that know me well, I did go overboard in some of the details and even ended up explaining the entire Copy-On-Write (COW) nature of the Docker filesystem in those classes... But ah well, people learned a lot :P.
## Home Servers: The Personal Lab
My passion for IaC extended to my home servers. By 2017, nearly everything I ran at home was Docker-based. I created dozens of bash scripts and system services to orchestrate my personal infrastructure. Whether it was media servers, backup systems, or development environments, everything was automated and version-controlled. Even my own computers mostly became IaC based as I figured out that part of the Linux community was saving their setups (and install instructions, usually) in so called "dotfiles". To this day you can still find my setup (and its changes when I switch machine) in my [Dotfiles on Github](https://github.com/Mastermindzh/dotfiles/).
All in all, my home setup became a sandbox for testing new ideas and tools, many of which eventually found their way into my professional work as well.
## Scaling IaC in the Workplace
At my current company, I introduced Docker about eight years ago. It was a gradual process, but within a year, we had our first Kubernetes cluster running. This transition wasnt just about adopting new tools; it was about embedding the principles of IaC into the organizations culture.
Over time, I spearheaded the creation of a dedicated platform team. With an architect/Product Owner and four DevOps engineers, this team took IaC to the next level. They implemented robust CI/CD pipelines, infrastructure monitoring, and scalable deployment patterns. Some of these practices mirrored what I had done at home, while others were tailored to the unique needs of the business. The result was a resilient and predictable infrastructure that supports rapid development and deployment.
## Setting Up Uptime Monitoring with UptimeKuma
One of the most satisfying aspects of IaC is the ability to automate even the smallest tasks. Take uptime monitoring, for example. At home and at work, ensuring that services are available is critical. Recently, Ive been using my old UptimeKuma instance, a self-hosted monitoring tool thats as powerful as it is user-friendly, a lot more after introducing it to some friends (who started homelabbing) and at work.
Setting up UptimeKuma is straightforward, you can simply use our old friend Docker:
`docker run -d --name uptime-kuma -v ./data/uptimekuma:/app/data -p 3001:3001 louislam/uptime-kuma`
And access the Dashboard by navigating to <http://localhost:3001> to configure your monitors.
But that isn't automatic enough for me, I like to put my things in compose files for home usage.
## Automating uptime monitors with AutoKuma
[AutoKuma](https://github.com/BigBoot/AutoKuma) allows us to set labels on our Docker containers that will then automatically generate monitors in UptimeKuma.
One of my containers (UptimeKuma actually) has the following labels attached:
```yml
labels:
kuma.monitoring.group.name: "Monitoring"
kuma.uptime_kuma.http.parent_name: "monitoring"
kuma.uptime_kuma.http.name: "Kuma status monitoring"
kuma.uptime_kuma.http.url: "http://${HOST_IP}:3001"
```
This actually does 2 things:
- creates a group with the _key/id_ `monitoring` and the name `Monitoring`
- Adds a monitor with the _key/id_ `uptime_kuma` to UptimeKuma with the type `http`, name `Kuma status monitoring`, and url `http://${HOST_IP}:3001`
Adding these labels, whilst AutoKuma is running and configured to pick up labels starting with `kuma` is enough for monitors to show up (after restarting the containers).
All in all, my `docker-compose.yml` file for both UptimeKuma and AutoKuma now looks like this:
```yml
services:
autokuma:
image: ghcr.io/bigboot/autokuma:master
restart: unless-stopped
environment:
AUTOKUMA__KUMA__URL: http://${HOST_IP}:3001
AUTOKUMA__KUMA__USERNAME: ${KUMA_USERNAME}
AUTOKUMA__KUMA__PASSWORD: ${KUMA_PASSWORD}
AUTOKUMA__TAG_NAME: AutoKuma
AUTOKUMA__TAG_COLOR: "#42C0FB"
AUTOKUMA__DEFAULT_SETTINGS: |-
docker.docker_container: {{container_name}}
http.max_redirects: 10
*.max_retries: 3
AUTOKUMA__DOCKER__LABEL_PREFIX: kuma
AUTOKUMA__MIGRATE: true
volumes:
- ${APP_DATA}/autokuma:/data
- ${DOCKER_SOCKET}:/var/run/docker.sock
depends_on:
- kuma
kuma:
image: louislam/uptime-kuma:1
volumes:
- ${APP_DATA}/uptimekuma:/app/data
- ${DOCKER_SOCKET}:/var/run/docker.sock
ports:
- 3001:3001
restart: unless-stopped
labels:
kuma.monitoring.group.name: "Monitoring"
kuma.uptime_kuma.http.parent_name: "monitoring"
kuma.uptime_kuma.http.name: "Kuma status monitoring"
kuma.uptime_kuma.http.url: "http://${HOST_IP}:3001"
```
## Problems... the compose file doesn't work :O
If you'd try to run the compose file in the previous chapter, even after replacing all the variables, things likely still won't work.
This is because AutoKuma relies on the credentials for UptimeKuma which we setup during the initial launch of UptimeKuma.
Unfortunately, that account is the only account we can currently set up in UptimeKuma since it doesn't have user management.
And yes, that means we **have** to use these same credentials to get AutoKuma to work, which also prohibits us from enabling MFA.
Anyway, after setting up the kuma account, simply adjust both the `KUMA_USERNAME` and `KUMA_PASSWORD` variables and restart the containers.
After doing so we should see the monitor appear in UptimeKuma:
![a screenshot of the UptimeKuma monitors that were automatically created with AutoKuma](./media/uptimekuma.png "neat!")
## The Future of IaC
Infrastructure as Code isnt just a technical approach; its a philosophy that prioritizes automation, reproducibility, and simplicity. Whether youre managing a home lab or a global platform, IaC provides the tools and practices to build resilient systems with minimal effort.
For me, IaC has been a journey of continuous learning and experimentation. From Docker to Kubernetes, from bash scripts to dedicated platform teams, the principles remain the same: automate everything, document everything, and embrace the predictability that code brings to infrastructure.
If you havent already, give UptimeKuma and AutoKuma a try. Their combination is an excellent example of how IaC can simplify even the most mundane tasks, leaving you more time to focus on what really matters... or just to be a little lazier.

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

65
eslint.config.js Normal file
View File

@@ -0,0 +1,65 @@
const mastermindzhConfig = require("@mastermindzh/eslint-config");
const typescriptEslint = require("@typescript-eslint/eslint-plugin");
const typescriptParser = require("@typescript-eslint/parser");
const importPlugin = require("eslint-plugin-import");
const reactPlugin = require("eslint-plugin-react");
module.exports = [
// Global ignores (replaces .eslintignore)
{
ignores: [
"dist/**",
"build/**",
"public/**",
".cache/**",
"node_modules/**",
"*.config.js",
"*.config.ts",
],
},
...mastermindzhConfig,
{
// Only lint TypeScript files (matching your .eslintignore pattern)
files: ["**/*.ts", "**/*.tsx"],
languageOptions: {
parser: typescriptParser,
parserOptions: {
project: "./tsconfig.json",
},
},
plugins: {
"@typescript-eslint": typescriptEslint,
import: importPlugin,
react: reactPlugin,
},
// Your project-specific rules
rules: {
// Import rules
"import/no-extraneous-dependencies": [
"error",
{
devDependencies: ["**/*.test.ts", "**/*.test.tsx", "**/internal/**/*.ts"],
},
],
// TypeScript rules
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-use-before-define": "off",
// Use the correct rule name for quotes
quotes: ["error", "double"],
"@typescript-eslint/naming-convention": [
"error",
{
format: ["camelCase", "UPPER_CASE", "snake_case", "PascalCase"],
leadingUnderscore: "allow",
selector: "parameter",
},
],
// React rules
"react/static-property-placement": "off",
"react/prop-types": "off",
// Shadow rules
"no-shadow": "off",
"@typescript-eslint/no-shadow": "error",
},
},
];

View File

@@ -1,3 +0,0 @@
import "./src/assets/scss/main.scss";
import "./src/assets/scss/prism/github.scss";
import "./src/assets/scss/prism/prism-tomorrow.scss";

19
gatsby-browser.tsx Normal file
View File

@@ -0,0 +1,19 @@
import "./src/assets/scss/main.scss";
import "./src/assets/scss/prism/github.scss";
import "./src/assets/scss/prism/prism-tomorrow.scss";
export const onRouteUpdate = ({ location }: { location: { pathname: string } }) => {
const elements = document.querySelectorAll("[data-url]");
const currentUrl = `https://www.rickvanlieshout.com${location.pathname ?? ""}`;
const setAttributeIfAvailable = (element: Element, elementIdentifier: string) => {
if (element.hasAttribute(elementIdentifier)) {
element.setAttribute(elementIdentifier, currentUrl);
}
};
elements.forEach((element) => {
setAttributeIfAvailable(element, "href");
setAttributeIfAvailable(element, "content");
});
};

View File

@@ -164,13 +164,6 @@ export default {
start_url: "/",
},
},
{
resolve: "gatsby-plugin-react-helmet-canonical-urls",
options: {
siteUrl: config.url,
stripQueryString: true,
},
},
// remove the old service worker if it is available.
"gatsby-plugin-remove-serviceworker",
"gatsby-plugin-image",

View File

@@ -18,7 +18,19 @@ const setColorTheme = `
}
})();
`;
export const onRenderBody = ({ setPreBodyComponents }: RenderBodyArgs) => {
export const onRenderBody = ({
setPreBodyComponents,
setHeadComponents,
pathname,
}: RenderBodyArgs) => {
const currentUrl = `https://www.rickvanlieshout.com${pathname}`;
setHeadComponents([
<meta data-url="currentUrl" key="og:url" property="og:url" content={currentUrl} />,
<link data-url="currentUrl" key="canonical" rel="canonical" href={currentUrl} />,
<meta data-url="currentUrl" property="test:rick" key="test:rick" content={currentUrl} />,
]);
setPreBodyComponents([
React.createElement("script", {
key: "theme",

View File

@@ -1,18 +1,10 @@
import path from "path";
const templates = Object.freeze({
indexTemplate: path.resolve(
"./src/templates/IndexTemplate/IndexTemplate.tsx",
),
notFoundTemplate: path.resolve(
"./src/templates/NotFoundTemplate/NotFoundTemplate.tsx",
),
categoryTemplate: path.resolve(
"./src/templates/CategoryTemplate/CategoryTemplate.tsx",
),
categoriesTemplate: path.resolve(
"./src/templates/CategoriesTemplate/CategoriesTemplate.tsx",
),
indexTemplate: path.resolve("./src/templates/IndexTemplate/IndexTemplate.tsx"),
notFoundTemplate: path.resolve("./src/templates/NotFoundTemplate/NotFoundTemplate.tsx"),
categoryTemplate: path.resolve("./src/templates/CategoryTemplate/CategoryTemplate.tsx"),
categoriesTemplate: path.resolve("./src/templates/CategoriesTemplate/CategoriesTemplate.tsx"),
tagTemplate: path.resolve("./src/templates/TagTemplate/TagTemplate.tsx"),
tagsTemplate: path.resolve("./src/templates/TagsTemplate/TagsTemplate.tsx"),
pageTemplate: path.resolve("./src/templates/PageTemplate/PageTemplate.tsx"),

View File

@@ -99,7 +99,7 @@ const createPages: GatsbyNode["createPages"] = async ({ graphql, actions }) => {
const path = utils.concat(
constants.routes.categoryRoute,
"/",
utils.toKebabCase(category.fieldValue)
utils.toKebabCase(category.fieldValue),
);
for (let page = 0; page < total; page += 1) {

View File

@@ -28,7 +28,7 @@ const onCreateNode: GatsbyNode["onCreateNode"] = ({ node, actions, getNode }) =>
if (tags) {
const value = tags.map((tag) =>
utils.concat(constants.routes.tagRoute, "/", utils.toKebabCase(tag), "/")
utils.concat(constants.routes.tagRoute, "/", utils.toKebabCase(tag), "/"),
);
createNodeField({ node, name: "tagSlugs", value });
@@ -39,7 +39,7 @@ const onCreateNode: GatsbyNode["onCreateNode"] = ({ node, actions, getNode }) =>
constants.routes.categoryRoute,
"/",
utils.toKebabCase(category),
"/"
"/",
);
createNodeField({ node, name: "categorySlug", value });

View File

@@ -5,24 +5,12 @@ const gatsby = jest.requireActual("gatsby");
export default {
...gatsby,
graphql: jest.fn(),
Link: jest
.fn()
.mockImplementation(
({
activeClassName,
activeStyle,
getProps,
innerRef,
ref,
replace,
to,
...rest
}) =>
React.createElement("a", {
...rest,
href: to,
}),
),
Link: jest.fn().mockImplementation(({ to, ...rest }) =>
React.createElement("a", {
...rest,
href: to,
}),
),
StaticQuery: jest.fn(),
useStaticQuery: jest.fn(),
};

View File

@@ -1,5 +1,5 @@
export default [
{ label: "Articles", path: "/" },
{ label: "About Me", path: "/pages/about" },
{ label: "Contact Me", path: "/pages/contacts" },
{ label: "About Me", path: "/pages/about/" },
{ label: "Contact Me", path: "/pages/contacts/" },
];

View File

@@ -22,10 +22,7 @@ const jestConfig: Config.InitialOptions = {
"identity-obj-proxy",
"^gatsby-page-utils/(.*)$": "gatsby-page-utils/$1",
"^gatsby-core-utils/(.*)$": "gatsby-core-utils/dist/$1",
"^gatsby-plugin-utils/(.*)$": [
"gatsby-plugin-utils/dist/$1",
"gatsby-plugin-utils/$1",
],
"^gatsby-plugin-utils/(.*)$": ["gatsby-plugin-utils/dist/$1", "gatsby-plugin-utils/$1"],
},
transform: { "^.+\\.[jt]sx?$": ["@swc/jest", swc] },
setupFiles: ["<rootDir>/internal/testing/jest-setup.ts"],

View File

@@ -1,3 +1,3 @@
{
"MD033": false
"MD033": false
}

31107
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "rickvanlieshout-com",
"version": "1.3.0",
"version": "1.3.1",
"description": "My personal blog / website",
"keywords": [
"gatsby",
@@ -18,20 +18,21 @@
"author": "Rick van Lieshout <info@rickvanlieshout.com>",
"scripts": {
"build": "npm run clean && gatsby build",
"commit": "git-cz",
"clean": "rimraf .cache public",
"commit": "git-cz",
"format": "npm run format:ts && npm run format:scss",
"format:scss": "stylelint \"src/**/*.scss\" --fix",
"format:ts": "eslint \"src\" --ext .tsx,.ts --fix && prettier --write .",
"format:ts": "eslint \"src/**/*.{ts,tsx}\" --fix && prettier --write .",
"install:legacy": "npm install --legacy-peer-deps",
"lint": "npm run lint:ts && npm run lint:scss",
"lint:scss": "stylelint \"src/**/*.scss\"",
"lint:staged": "lint-staged",
"lint:ts": "eslint \"src\" --ext .tsx,.ts && prettier --check .",
"lint:ts": "eslint \"src/**/*.{ts,tsx}\" && prettier --check .",
"prepare": "husky install",
"release": "standard-version",
"release:major": "standard-version --release-as major",
"release:minor": "standard-version --release-as minor",
"release:patch": "standard-version --release-as patch",
"release:major": "standard-version --release-as major",
"reset-snapshots": "find -type f -name '*.snap*' -delete && npm run test",
"semantic-release": "semantic-release",
"serve": "gatsby serve",
@@ -48,115 +49,112 @@
"npm run format:scss"
]
},
"config": {
"commitizen": {
"path": "@commitlint/cz-commitlint"
}
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.4.2",
"@fortawesome/free-solid-svg-icons": "^6.4.2",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.2",
"disqus-react": "^1.1.5",
"gatsby": "^5.12.1",
"gatsby-link": "^5.12.0",
"gatsby-plugin-catch-links": "^5.12.0",
"gatsby-plugin-feed": "^5.12.0",
"gatsby-plugin-google-gtag": "^5.12.0",
"gatsby-plugin-image": "^3.12.0",
"gatsby-plugin-manifest": "^5.12.0",
"@fortawesome/fontawesome-svg-core": "^7.0.0",
"@fortawesome/free-solid-svg-icons": "^7.0.0",
"@fortawesome/react-fontawesome": "^3.0.0",
"classnames": "^2.5.1",
"disqus-react": "^1.1.7",
"gatsby": "^5.14.5",
"gatsby-link": "^5.14.1",
"gatsby-plugin-catch-links": "^5.14.0",
"gatsby-plugin-feed": "^5.14.0",
"gatsby-plugin-google-gtag": "^5.14.0",
"gatsby-plugin-image": "^3.14.0",
"gatsby-plugin-manifest": "^5.14.0",
"gatsby-plugin-optimize-svgs": "^1.0.5",
"gatsby-plugin-react-helmet": "^6.12.0",
"gatsby-plugin-react-helmet-canonical-urls": "^1.4.0",
"gatsby-plugin-react-helmet": "^6.14.0",
"gatsby-plugin-remove-serviceworker": "^1.0.0",
"gatsby-plugin-robots-txt": "^1.8.0",
"gatsby-plugin-sass": "^6.12.0",
"gatsby-plugin-sharp": "^5.12.0",
"gatsby-plugin-sitemap": "^6.12.0",
"gatsby-remark-autolink-headers": "^6.12.0",
"gatsby-remark-copy-linked-files": "^6.12.0",
"gatsby-plugin-sass": "^6.14.0",
"gatsby-plugin-sharp": "^5.14.0",
"gatsby-plugin-sitemap": "^6.14.0",
"gatsby-remark-autolink-headers": "^6.14.0",
"gatsby-remark-copy-linked-files": "^6.14.0",
"gatsby-remark-external-links": "0.0.4",
"gatsby-remark-images": "^7.12.0",
"gatsby-remark-images": "^7.14.0",
"gatsby-remark-images-medium-zoom": "^1.7.0",
"gatsby-remark-prismjs": "^7.12.0",
"gatsby-remark-responsive-iframe": "^6.12.0",
"gatsby-remark-smartypants": "^6.12.0",
"gatsby-source-filesystem": "^5.12.0",
"gatsby-transformer-remark": "^6.12.0",
"gatsby-transformer-sharp": "^5.12.0",
"prismjs": "^1.29.0",
"react": "^18.2.0",
"react-cookie-consent": "^8.0.1",
"react-dom": "^18.2.0",
"gatsby-remark-prismjs": "^7.14.0",
"gatsby-remark-responsive-iframe": "^6.14.0",
"gatsby-remark-smartypants": "^6.14.0",
"gatsby-source-filesystem": "^5.14.0",
"gatsby-transformer-remark": "^6.14.0",
"gatsby-transformer-sharp": "^5.14.0",
"prismjs": "^1.30.0",
"react": "^18.3.1",
"react-cookie-consent": "^9.0.0",
"react-dom": "^18.3.1",
"react-helmet": "^6.1.0",
"react-toggle": "^4.1.3",
"reading-time": "^1.5.0"
},
"devDependencies": {
"@commitlint/config-conventional": "^17.6.6",
"@commitlint/cz-commitlint": "^17.5.0",
"@jest/globals": "^29.5.0",
"@mastermindzh/eslint-config": "^1.0.2",
"@mastermindzh/prettier-config": "^1.0.0",
"@semantic-release/exec": "6.0.3",
"@semantic-release/git": "10.0.1",
"@swc/core": "^1.3.67",
"@swc/jest": "^0.2.26",
"@types/gatsby-transformer-remark": "^2.9.1",
"@types/jest": "^29.5.2",
"@types/node": "^18.15.11",
"@types/react": "^18.2.14",
"@types/react-dom": "^18.2.6",
"@types/react-helmet": "^6.1.6",
"@types/react-test-renderer": "^18.0.0",
"@types/react-toggle": "^4.0.3",
"@typescript-eslint/eslint-plugin": "^5.60.1",
"@typescript-eslint/parser": "^5.60.1",
"autoprefixer": "^10.4.14",
"browserslist": "^4.21.9",
"@commitlint/config-conventional": "^19.8.1",
"@commitlint/cz-commitlint": "^19.8.1",
"@eslint/compat": "^1.3.1",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.31.0",
"@jest/globals": "^30.0.4",
"@mastermindzh/eslint-config": "^3.1.0",
"@mastermindzh/prettier-config": "^1.1.0",
"@swc/core": "^1.12.14",
"@swc/jest": "^0.2.39",
"@types/gatsby-transformer-remark": "^2.9.4",
"@types/jest": "^30.0.0",
"@types/node": "^24.0.14",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@types/react-helmet": "^6.1.11",
"@types/react-test-renderer": "^18.3.1",
"@types/react-toggle": "^4.0.5",
"@typescript-eslint/eslint-plugin": "^8.37.0",
"@typescript-eslint/parser": "^8.37.0",
"autoprefixer": "^10.4.21",
"browserslist": "^4.25.1",
"codecov": "^3.8.3",
"commitizen": "^4.3.0",
"commitlint": "^17.6.6",
"concurrently": "^8.2.0",
"eslint": "^8.43.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^17.0.0",
"eslint-config-prettier": "^8.8.0",
"eslint-config-react-app": "^7.0.1",
"eslint-import-resolver-typescript": "^3.5.5",
"eslint-plugin-flowtype": "^8.0.3",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^27.2.2",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-simple-import-sort": "^10.0.0",
"husky": "^8.0.3",
"commitizen": "^4.3.1",
"commitlint": "^19.8.1",
"concurrently": "^9.2.0",
"eslint": "^9.31.0",
"eslint-config-prettier": "^10.1.5",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jest": "^29.0.1",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-prettier": "^5.5.1",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-simple-import-sort": "^12.1.1",
"globals": "^16.3.0",
"husky": "^9.0.0",
"identity-obj-proxy": "3.0.0",
"jest": "^29.5.0",
"jest-cli": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"jest": "^30.0.4",
"jest-cli": "^30.0.4",
"jest-environment-jsdom": "^30.0.4",
"jest-svg-transformer": "^1.0.0",
"lint-staged": "^13.2.3",
"lost": "9.0.1",
"markdownlint": "^0.29.0",
"postcss": "^8.4.24",
"postcss-scss": "^4.0.6",
"prettier": "^2.8.8",
"prettier-plugin-packagejson": "^2.4.3",
"react-test-renderer": "^18.2.0",
"rimraf": "^4.4.1",
"sass": "^1.63.6",
"lint-staged": "^16.1.2",
"lost": "9.0.2",
"markdownlint": "^0.38.0",
"postcss": "^8.5.6",
"postcss-scss": "^4.0.9",
"prettier": "^3.6.2",
"prettier-plugin-packagejson": "^2.5.18",
"react-test-renderer": "^18.3.1",
"rimraf": "^6.0.1",
"sass": "^1.89.2",
"source-map-support": "^0.5.21",
"standard-version": "^9.5.0",
"stylelint": "^15.9.0",
"stylelint-config-recommended-scss": "^9.0.1",
"stylelint-order": "^6.0.3",
"stylelint-scss": "^4.6.0",
"ts-node": "^10.9.1",
"typescript": "^5.1.6",
"unist-util-find": "1.0.2"
},
"config": {
"commitizen": {
"path": "@commitlint/cz-commitlint"
}
"stylelint": "^16.21.1",
"stylelint-config-recommended-scss": "^16.0.0",
"stylelint-order": "^7.0.0",
"stylelint-scss": "^6.12.1",
"ts-node": "^10.9.2",
"typescript": "^5.8.3",
"unist-util-find": "3.0.0"
}
}

11
renovate.json Normal file
View File

@@ -0,0 +1,11 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"ignoreDeps": [
"react",
"react-dom",
"@types/react",
"@types/react-dom",
"@types/react-test-renderer",
"react-test-renderer"
]
}

View File

@@ -1,6 +1,6 @@
@charset "UTF-8";
@import "base/generic";
@use "base/generic";
.showInPrintView {
display: none;

View File

@@ -1,6 +1,6 @@
@charset "UTF-8";
@import "mixins/breakpoints";
@import "mixins/line-height";
@import "mixins/padding";
@import "mixins/margin";
@forward "mixins/breakpoints";
@forward "mixins/line-height";
@forward "mixins/padding";
@forward "mixins/margin";

View File

@@ -1,5 +1,5 @@
@import "../variables";
@import "../mixins";
@use "../variables" as *;
@use "../mixins" as *;
html {
font-size: $typographic-root-font-size;

View File

@@ -1,5 +1,5 @@
@charset "UTF-8";
@import "variables";
@import "mixins";
@import "base";
@use "variables";
@use "mixins";
@use "base";

View File

@@ -1,4 +1,4 @@
@import "../variables";
@use "../variables" as *;
@mixin breakpoint-xs {
@content;

View File

@@ -1,4 +1,4 @@
@import "../variables";
@use "../variables" as *;
@mixin line-height($number) {
line-height: #{$number * $typographic-leading + "px"};

View File

@@ -1,4 +1,4 @@
@import "../variables";
@use "../variables" as *;
@mixin margin-auto($number: 0) {
margin: #{$number * $typographic-leading + "px"} auto;

View File

@@ -1,4 +1,4 @@
@import "../variables";
@use "../variables" as *;
@mixin padding-left($number) {
padding-left: #{$number * $typographic-leading + "px"};

View File

@@ -1,4 +1,4 @@
@import "../../assets/scss/variables";
@use "../../assets/scss/variables" as *;
$shadow: 0px -1px 5px rgba(50, 50, 50, 0.75);

View File

@@ -1,5 +1,5 @@
@import "../../assets/scss/variables";
@import "../../assets/scss/mixins";
@use "../../assets/scss/variables" as *;
@use "../../assets/scss/mixins" as *;
.feed {
.item {

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Feed renders correctly 1`] = `
<div>

View File

@@ -3,7 +3,6 @@ import React from "react";
import * as styles from "./Icon.module.scss";
import { ICONS } from "@/constants";
interface Props {
name: keyof typeof ICONS;
icon: {

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Icon renders correctly 1`] = `
<svg

View File

@@ -1,11 +1,7 @@
import React, { FC } from "react";
import { graphql, StaticQuery } from "gatsby";
import {
GatsbyImage,
GatsbyImageProps,
IGatsbyImageData,
} from "gatsby-plugin-image";
import { GatsbyImage, GatsbyImageProps, IGatsbyImageData } from "gatsby-plugin-image";
import { FileSystemNode } from "gatsby-source-filesystem";
interface Props extends Omit<GatsbyImageProps, "image"> {
@@ -28,9 +24,7 @@ const Image: FC<Props> = ({ path, ...rest }: Props) => (
<StaticQuery
query={graphql`
query {
images: allFile(
filter: { ext: { regex: "/png|jpg|jpeg|webp|tif|tiff/" } }
) {
images: allFile(filter: { ext: { regex: "/png|jpg|jpeg|webp|tif|tiff/" } }) {
edges {
node {
absolutePath

View File

@@ -1,5 +1,5 @@
@import "../../assets/scss/variables";
@import "../../assets/scss/mixins";
@use "../../assets/scss/variables" as *;
@use "../../assets/scss/mixins" as *;
.layout {
lost-center: $layout-width;

View File

@@ -20,7 +20,6 @@ const Layout: React.FC<Props> = ({
description,
socialImage = "",
noIndex = false,
slug,
}: Props) => {
const { author, url } = useSiteMetadata();
const metaImage = socialImage || author.photo;
@@ -35,7 +34,7 @@ const Layout: React.FC<Props> = ({
<meta property="og:description" content={description} />
<meta property="og:site_name" content={title} />
<meta property="og:image" content={metaImageUrl} />
{slug && <meta property="og:url" content={`${url}${slug}`} />}
<meta property="og:title" content={title} />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Layout renders correctly 1`] = `
<div>

View File

@@ -1,5 +1,5 @@
@import "../../assets/scss/variables";
@import "../../assets/scss/mixins";
@use "../../assets/scss/variables" as *;
@use "../../assets/scss/mixins" as *;
.page {
@include margin-bottom(2);

View File

@@ -11,9 +11,7 @@ describe("Page", () => {
title: mocks.markdownRemark.frontmatter.title,
};
const tree = renderer
.create(<Page {...props}>{props.children}</Page>)
.toJSON();
const tree = renderer.create(<Page {...props}>{props.children}</Page>).toJSON();
expect(tree).toMatchSnapshot();
});
});

View File

@@ -1,8 +1,8 @@
import React, { useEffect, useRef } from "react";
import type { Nullable } from "@/types";
import { Helmet } from "react-helmet";
import * as styles from "./Page.module.scss";
import type { Nullable } from "@/types";
interface Props {
title?: string;

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Page renders correctly 1`] = `
<div>

View File

@@ -1,7 +1,7 @@
@use "sass:color";
@import "../../assets/scss/variables";
@import "../../assets/scss/mixins";
@use "../../assets/scss/variables" as *;
@use "../../assets/scss/mixins" as *;
.pagination {
display: flex;

View File

@@ -1,8 +1,8 @@
import { PAGINATION } from "@/constants";
import classNames from "classnames";
import { Link } from "gatsby";
import React from "react";
import * as styles from "./Pagination.module.scss";
import { PAGINATION } from "@/constants";
type Props = {
prevPagePath: string;

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Pagination renders correctly 1`] = `
<div

View File

@@ -1,5 +1,5 @@
@import "../../../assets/scss/variables";
@import "../../../assets/scss/mixins";
@use "../../../assets/scss/variables" as *;
@use "../../../assets/scss/mixins" as *;
.author {
border-top: 1px solid $color-gray-border;

View File

@@ -11,9 +11,7 @@ const mockedUseStaticQuery = useStaticQuery as jest.Mock;
describe("Author", () => {
beforeEach(() => {
mockedStaticQuery.mockImplementationOnce(({ render }) =>
render(mocks.siteMetadata),
);
mockedStaticQuery.mockImplementationOnce(({ render }) => render(mocks.siteMetadata));
mockedUseStaticQuery.mockReturnValue(mocks.siteMetadata);
});

View File

@@ -1,6 +1,6 @@
import { useSiteMetadata } from "@/hooks";
import React from "react";
import * as styles from "./Author.module.scss";
import { useSiteMetadata } from "@/hooks";
const Author = () => {
const { author } = useSiteMetadata();
@@ -9,10 +9,11 @@ const Author = () => {
<div className={styles.author}>
<p className={styles.bio}>
Written by:{" "}
<a href="/pages/about">
<a href="/pages/about/">
<strong>{author.name}</strong>
</a>
{typeof window !== "undefined" ? (
// eslint-disable-next-line no-undef
<span className="showInPrintView"> {window ? `@ ${window.location}` : ""}</span>
) : (
""

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Author renders correctly 1`] = `
<div>
@@ -6,7 +6,7 @@ exports[`Author renders correctly 1`] = `
Written by:
<a
href="/pages/about"
href="/pages/about/"
>
<strong>
Rick van Lieshout

View File

@@ -11,9 +11,7 @@ const mockedUseStaticQuery = useStaticQuery as jest.Mock;
describe("Comments", () => {
beforeEach(() => {
mockedStaticQuery.mockImplementationOnce(({ render }) =>
render(mocks.siteMetadata),
);
mockedStaticQuery.mockImplementationOnce(({ render }) => render(mocks.siteMetadata));
mockedUseStaticQuery.mockReturnValue(mocks.siteMetadata);
});

View File

@@ -1,3 +1,3 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Comments renders correctly 1`] = `null`;

View File

@@ -1,5 +1,5 @@
@import "../../../assets/scss/variables";
@import "../../../assets/scss/mixins";
@use "../../../assets/scss/variables" as *;
@use "../../../assets/scss/mixins" as *;
.content {
@include margin-auto();

View File

@@ -1,8 +1,8 @@
import { Content } from "@/components/Post/Content";
import * as mocks from "@/mocks";
import { StaticQuery, useStaticQuery } from "gatsby";
import React from "react";
import renderer from "react-test-renderer";
import * as mocks from "@/mocks";
import { Content } from "@/components/Post/Content";
const mockedStaticQuery = StaticQuery as jest.Mock;
const mockedUseStaticQuery = useStaticQuery as jest.Mock;

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Content renders correctly 1`] = `
[
@@ -69,19 +69,15 @@ exports[`Content renders correctly 1`] = `
>
<svg
aria-hidden="true"
className="svg-inline--fa fa-moon "
className="svg-inline--fa fa-moon"
data-icon="moon"
data-prefix="fas"
focusable="false"
role="img"
style={{}}
viewBox="0 0 384 512"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
d="M223.5 32C100 32 0 132.3 0 256S100 480 223.5 480c60.6 0 115.5-24.2 155.8-63.4c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6c-96.9 0-175.5-78.8-175.5-176c0-65.8 36-123.1 89.3-153.3c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z"
d="M256 0C114.6 0 0 114.6 0 256S114.6 512 256 512c68.8 0 131.3-27.2 177.3-71.4 7.3-7 9.4-17.9 5.3-27.1s-13.7-14.9-23.8-14.1c-4.9 .4-9.8 .6-14.8 .6-101.6 0-184-82.4-184-184 0-72.1 41.5-134.6 102.1-164.8 9.1-4.5 14.3-14.3 13.1-24.4S322.6 8.5 312.7 6.3C294.4 2.2 275.4 0 256 0z"
fill="currentColor"
style={{}}
/>
</svg>
</div>
@@ -102,19 +98,15 @@ exports[`Content renders correctly 1`] = `
>
<svg
aria-hidden="true"
className="svg-inline--fa fa-sun "
className="svg-inline--fa fa-sun"
data-icon="sun"
data-prefix="fas"
focusable="false"
role="img"
style={{}}
viewBox="0 0 512 512"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 576 512"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
d="M178.2-10.1c7.4-3.1 15.8-2.2 22.5 2.2l87.8 58.2 87.8-58.2c6.7-4.4 15.1-5.2 22.5-2.2S411.4-.5 413 7.3l20.9 103.2 103.2 20.9c7.8 1.6 14.4 7 17.4 14.3s2.2 15.8-2.2 22.5l-58.2 87.8 58.2 87.8c4.4 6.7 5.2 15.1 2.2 22.5s-9.6 12.8-17.4 14.3L433.8 401.4 413 504.7c-1.6 7.8-7 14.4-14.3 17.4s-15.8 2.2-22.5-2.2l-87.8-58.2-87.8 58.2c-6.7 4.4-15.1 5.2-22.5 2.2s-12.8-9.6-14.3-17.4L143 401.4 39.7 380.5c-7.8-1.6-14.4-7-17.4-14.3s-2.2-15.8 2.2-22.5L82.7 256 24.5 168.2c-4.4-6.7-5.2-15.1-2.2-22.5s9.6-12.8 17.4-14.3L143 110.6 163.9 7.3c1.6-7.8 7-14.4 14.3-17.4zM207.6 256a80.4 80.4 0 1 1 160.8 0 80.4 80.4 0 1 1 -160.8 0zm208.8 0a128.4 128.4 0 1 0 -256.8 0 128.4 128.4 0 1 0 256.8 0z"
fill="currentColor"
style={{}}
/>
</svg>
</div>

View File

@@ -1,5 +1,5 @@
@import "../../../assets/scss/variables";
@import "../../../assets/scss/mixins";
@use "../../../assets/scss/variables" as *;
@use "../../../assets/scss/mixins" as *;
.meta {
.date {

View File

@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Meta renders correctly 1`] = `
<div>

View File

@@ -1,5 +1,5 @@
@import "../../assets/scss/variables";
@import "../../assets/scss/mixins";
@use "../../assets/scss/variables" as *;
@use "../../assets/scss/mixins" as *;
.post {

Some files were not shown because too many files have changed in this diff Show More