summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConstantijn Bicker Caarten <git@bickercaarten.com>2026-09-28 20:47:23 +0200
committerConstantijn Bicker Caarten <git@bickercaarten.com>2026-09-28 20:47:23 +0200
commit88efb4dfdca2fb68d016b9cb9838046b09270d6c (patch)
tree48f95b889f4d902a413581867c17bf727f44982b
Initial commit
-rw-r--r--.well-known/security.txt4
-rw-r--r--apple-touch-icon.pngbin0 -> 608 bytes
-rw-r--r--css/style.css1089
-rw-r--r--favicon.icobin0 -> 15086 bytes
-rw-r--r--favicon.svg16
-rw-r--r--files/bachelor-thesis.constantijn-bicker-caarten.pdfbin0 -> 753661 bytes
-rw-r--r--files/cv.constantijn-bicker-caarten.pdfbin0 -> 124268 bytes
-rw-r--r--fonts/m6x11.woff2bin0 -> 2600 bytes
-rw-r--r--index.html158
-rw-r--r--og-image.pngbin0 -> 2176 bytes
-rw-r--r--robots.txt4
-rw-r--r--sitemap.xml7
12 files changed, 1278 insertions, 0 deletions
diff --git a/.well-known/security.txt b/.well-known/security.txt
new file mode 100644
index 0000000..60db4a6
--- /dev/null
+++ b/.well-known/security.txt
@@ -0,0 +1,4 @@
+Contact: mailto:security@bickercaarten.com
+Expires: 2027-09-26T00:00:00.000Z
+Preferred-Languages: en
+Canonical: https://bickercaarten.com/.well-known/security.txt
diff --git a/apple-touch-icon.png b/apple-touch-icon.png
new file mode 100644
index 0000000..bc30234
--- /dev/null
+++ b/apple-touch-icon.png
Binary files differ
diff --git a/css/style.css b/css/style.css
new file mode 100644
index 0000000..b7a163c
--- /dev/null
+++ b/css/style.css
@@ -0,0 +1,1089 @@
+:root {
+ --main-bg-color: #222;
+ --main-color: #c8c8c8;
+ --secondary-color: #969696;
+ --highlight-color: #fff;
+ --toggle-label: "light";
+ color-scheme: dark;
+}
+
+:root:has(#theme-toggle:checked) {
+ --main-bg-color: #f0efe9;
+ --main-color: #333;
+ --secondary-color: #666;
+ --highlight-color: #000;
+ --toggle-label: "dark";
+ color-scheme: light;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ --main-bg-color: #f0efe9;
+ --main-color: #333;
+ --secondary-color: #666;
+ --highlight-color: #000;
+ --toggle-label: "dark";
+ color-scheme: light;
+ }
+
+ :root:has(#theme-toggle:checked) {
+ --main-bg-color: #222;
+ --main-color: #c8c8c8;
+ --secondary-color: #969696;
+ --highlight-color: #fff;
+ --toggle-label: "light";
+ color-scheme: dark;
+ }
+}
+
+@media (prefers-contrast: more) {
+ :root {
+ --secondary-color: #b0b0b0;
+ }
+
+ :root:has(#theme-toggle:checked) {
+ --secondary-color: #4d4d4d;
+ }
+
+ @media (prefers-color-scheme: light) {
+ :root {
+ --secondary-color: #4d4d4d;
+ }
+
+ :root:has(#theme-toggle:checked) {
+ --secondary-color: #b0b0b0;
+ }
+ }
+
+ :root .grid-item-header::before {
+ color: var(--main-bg-color);
+ }
+}
+
+@font-face {
+ font-family: m6x11;
+ src: url(../fonts/m6x11.woff2) format("woff2");
+ font-display: swap;
+}
+
+html {
+ scrollbar-color: var(--main-color) var(--main-bg-color);
+}
+
+body {
+ cursor: crosshair;
+ font-family: 'm6x11';
+ font-size: 18px;
+ color: var(--main-color);
+ background: var(--main-bg-color);
+ margin: 0;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+}
+
+a {
+ color: var(--highlight-color);
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a:focus-visible {
+ outline: 2px solid var(--main-color);
+ outline-offset: 2px;
+}
+
+code {
+ font-family: 'm6x11';
+}
+
+::selection {
+ background: var(--main-color);
+ color: var(--main-bg-color);
+}
+
+.grid-item-header::selection,
+.grid-item-header ::selection,
+footer::selection,
+footer ::selection {
+ background: var(--main-bg-color);
+ color: var(--main-color);
+}
+
+[aria-hidden="true"] {
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+#header,
+.title,
+.grid-item,
+.secret,
+footer {
+ cursor: auto;
+}
+
+#header {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 8px 4px;
+ padding: 24px;
+ margin-bottom: 16px;
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background:
+ linear-gradient(90deg, var(--main-color) 8px, transparent 8px) left bottom / 12px 2px repeat-x,
+ var(--main-bg-color);
+}
+
+#header a,
+#header .nav-toggle {
+ color: var(--main-color);
+ text-decoration: none;
+ padding: 8px 16px;
+}
+
+#header a:not(.nav-home)::before {
+ content: "[";
+ content: "[" / "";
+}
+
+#header a:not(.nav-home)::after {
+ content: "]";
+ content: "]" / "";
+}
+
+#header .nav-home {
+ margin-right: 8px;
+}
+
+#header a:hover,
+#header a:focus-visible,
+#header .nav-toggle:hover,
+#theme-toggle:focus-visible + .nav-toggle,
+body:has(#about:target) #header a[href="#about"],
+body:has(#projects:target) #header a[href="#projects"],
+body:has(#files:target) #header a[href="#files"],
+body:has(#contact:target) #header a[href="#contact"],
+body:has(#credits:target) #header a[href="#credits"] {
+ background: var(--main-color);
+ color: var(--main-bg-color);
+}
+
+#header a:not(.nav-action) + .nav-action {
+ margin-left: auto;
+}
+
+.nav-toggle {
+ cursor: pointer;
+}
+
+.theme-toggle::before {
+ content: "[" var(--toggle-label) "]";
+ content: "[" var(--toggle-label) "]" / "";
+}
+
+#theme-toggle:focus-visible + .nav-toggle {
+ outline: 2px solid var(--main-color);
+ outline-offset: 2px;
+}
+
+.nav-action {
+ display: inline-flex;
+ align-items: center;
+}
+
+.nav-action .arrow {
+ order: 1;
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ margin-left: 4px;
+ background: currentColor;
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7 7' shape-rendering='crispEdges'%3E%3Cpath d='M2 0h5v5h-1v-4h-4zM5 1h1v1h-1zM4 2h1v1h-1zM3 3h1v1h-1zM2 4h1v1h-1zM1 5h1v1h-1zM0 6h1v1h-1z'/%3E%3C/svg%3E") no-repeat center / contain;
+}
+
+.title {
+ width: fit-content;
+ max-width: 100%;
+ box-sizing: border-box;
+ margin: 40px auto;
+ padding: 0 24px;
+}
+
+.title h1 {
+ text-transform: uppercase;
+ font-size: 64px;
+ margin: 0;
+}
+
+.grid-container {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(min(512px, 100%), 1fr));
+ gap: 48px;
+ align-content: start;
+ align-items: start;
+ justify-items: center;
+ padding: 0 40px 48px 24px;
+ flex: 1 0 auto;
+}
+
+@media (min-width: 1300px) {
+ .grid-container:not(.grid-single) {
+ --channel: 80px;
+ grid-template-columns: repeat(2, minmax(0, 620px));
+ column-gap: calc(2 * var(--channel));
+ justify-content: center;
+ align-items: start;
+ --side: clamp(36px, 7.5vw, 144px);
+ padding-left: var(--side);
+ padding-right: calc(var(--side) + 16px);
+ position: relative;
+ padding-bottom: 72px;
+ flex: none;
+ }
+
+ .grid-container:not(.grid-single) + .secret {
+ margin-top: auto;
+ }
+
+ .grid-container:not(.grid-single)::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ bottom: 48px;
+ left: calc(50% - 8px - 2px);
+ width: 4px;
+ background: repeating-linear-gradient(to bottom, var(--secondary-color) 0 8px, transparent 8px 12px);
+ pointer-events: none;
+ }
+
+ .grid-container:not(.grid-single)::after {
+ content: "EOF" / "";
+ position: absolute;
+ bottom: 12px;
+ left: calc(50% - 8px);
+ translate: -50% 0;
+ font-size: 16px;
+ line-height: 16px;
+ letter-spacing: 2px;
+ color: var(--secondary-color);
+ pointer-events: none;
+ }
+
+ .grid-container:not(.grid-single)::before {
+ bottom: 32px;
+ }
+
+ .grid-container .zz-col {
+ display: flex;
+ flex-direction: column;
+ gap: 56px;
+ justify-self: stretch;
+ }
+
+ .zz-left {
+ align-items: flex-end;
+ }
+
+ .zz-right {
+ align-items: flex-start;
+ margin-top: 96px;
+ }
+
+ .grid-container:not(.grid-single) .grid-item:is(#about, #projects, #files, #contact, #credits) {
+ max-width: min(520px, 100%);
+ translate: none;
+ }
+
+ #about { --addr: "0x00"; }
+ #projects { --addr: "0x20"; }
+ #files { --addr: "0x40"; }
+ #contact { --addr: "0x60"; }
+ #credits { --addr: "0x80"; }
+
+ .zz-col > .grid-item::before {
+ content: var(--addr, "") / "";
+ position: absolute;
+ top: -8px;
+ box-sizing: border-box;
+ width: var(--channel);
+ height: 20px;
+ font-size: 16px;
+ line-height: 16px;
+ color: var(--secondary-color);
+ background: linear-gradient(var(--secondary-color), var(--secondary-color)) left bottom / 100% 2px no-repeat;
+ pointer-events: none;
+ }
+
+ .zz-col > .grid-item:is(:hover, :focus-within)::before {
+ color: var(--main-color);
+ }
+
+ .zz-col > .grid-item:target::before {
+ color: var(--highlight-color);
+ }
+
+ .zz-left > .grid-item::before {
+ left: calc(100% + 4px);
+ text-align: right;
+ padding-right: 6px;
+ }
+
+ .zz-right > .grid-item::before {
+ right: calc(100% + 4px);
+ text-align: left;
+ padding-left: 6px;
+ }
+
+ @media (hover: hover) {
+ .zz-col > .grid-item:hover::before {
+ translate: 0 -8px;
+ }
+
+ .zz-left > .grid-item:hover::before {
+ width: calc(var(--channel) - 8px);
+ }
+
+ .zz-right > .grid-item:hover::before {
+ width: calc(var(--channel) + 8px);
+ }
+ }
+}
+
+.grid-single {
+ width: 100%;
+ max-width: 720px;
+ margin: 0 auto;
+ box-sizing: border-box;
+}
+
+.grid-item {
+ position: relative;
+ background: var(--main-bg-color);
+ scroll-margin-top: 104px;
+ border: 4px solid var(--main-color);
+ --shadow: 16px;
+ box-shadow: var(--shadow) var(--shadow) 0px var(--secondary-color);
+ --mark-color: var(--secondary-color);
+ --mark-gap: 14px;
+ max-width: 90%;
+}
+
+.grid-item::after {
+ content: "";
+ position: absolute;
+ top: calc(-1 * var(--mark-gap));
+ left: calc(-1 * var(--mark-gap));
+ right: calc(-1 * var(--mark-gap) - var(--shadow));
+ bottom: calc(-1 * var(--mark-gap) - var(--shadow));
+ --arm: 10px;
+ --w: 2px;
+ background:
+ linear-gradient(var(--mark-color), var(--mark-color)) left top / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) left top / var(--w) var(--arm),
+ linear-gradient(var(--mark-color), var(--mark-color)) right top / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) right top / var(--w) var(--arm),
+ linear-gradient(var(--mark-color), var(--mark-color)) left bottom / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) left bottom / var(--w) var(--arm),
+ linear-gradient(var(--mark-color), var(--mark-color)) right bottom / var(--arm) var(--w),
+ linear-gradient(var(--mark-color), var(--mark-color)) right bottom / var(--w) var(--arm);
+ background-repeat: no-repeat;
+ pointer-events: none;
+}
+
+#about { translate: -8px 6px; }
+#projects { translate: 10px -8px; }
+#files { translate: 6px 12px; }
+#contact { translate: -10px -4px; }
+#credits { translate: 8px 4px; }
+
+.zz-col {
+ display: contents;
+}
+
+#about { order: 1; }
+#projects { order: 2; }
+#files { order: 3; }
+#contact { order: 4; }
+#credits { order: 5; }
+
+.grid-item:target {
+ border-color: var(--highlight-color);
+ --mark-color: var(--highlight-color);
+}
+
+@media (hover: hover) {
+ .grid-item:hover {
+ transform: translate(8px, 8px);
+ box-shadow: 8px 8px 0px var(--secondary-color);
+ }
+}
+
+.grid-item-header {
+ display: flex;
+ cursor: pointer;
+ list-style: none;
+ justify-content: space-between;
+ text-transform: uppercase;
+ color: var(--main-bg-color);
+ background-color: var(--main-color);
+}
+
+.grid-item { --window-id: "0x3f"; }
+#projects { --window-id: "0xa7"; }
+#files { --window-id: "0x1c"; }
+#contact { --window-id: "0xe2"; }
+#credits { --window-id: "0x5b"; }
+
+.grid-item-header::before {
+ content: var(--window-id) / "";
+ flex-shrink: 0;
+ text-transform: none;
+ margin-left: 4px;
+ font-size: 16px;
+ letter-spacing: 2px;
+ color: var(--secondary-color);
+}
+
+.grid-item-header::-webkit-details-marker {
+ display: none;
+}
+
+.grid-item-header:focus-visible {
+ outline: 2px dashed var(--main-bg-color);
+ outline-offset: -4px;
+}
+
+.grid-item:target .grid-item-header {
+ background-color: var(--highlight-color);
+}
+
+.window-title::after {
+ content: attr(data-cmd) / "";
+ position: absolute;
+ inset: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ background: var(--main-color);
+ visibility: hidden;
+}
+
+.grid-item:target .window-title::after {
+ background: var(--highlight-color);
+}
+
+.window-title {
+ position: relative;
+ flex: 1;
+ margin-left: 10px;
+ font-size: 16px;
+ letter-spacing: 2px;
+ margin-right: 8px;
+ text-transform: none;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.close {
+ flex-shrink: 0;
+}
+
+.close::after {
+ content: "[+]";
+ content: "[+]" / "";
+ margin-right: 4px;
+ font-size: 16px;
+ letter-spacing: 2px;
+}
+
+.grid-item[open] .close::after {
+ content: "[-]";
+ content: "[-]" / "";
+}
+
+.grid-item-content {
+ padding: 16px;
+ position: relative;
+}
+
+.grid-item-content > .command::after {
+ content: attr(data-took) " 0" / "";
+ white-space: pre;
+ position: absolute;
+ right: 16px;
+ color: var(--secondary-color);
+}
+
+.grid-item-content a:hover,
+.grid-item-content a:focus-visible {
+ background: var(--highlight-color);
+ color: var(--main-bg-color);
+ text-decoration: none;
+}
+
+.command-result {
+ color: var(--secondary-color);
+}
+
+#projects > .grid-item-content { --ghost: ghost-projects 37s step-end calc(var(--cursor-delay) + 1s) infinite; }
+#contact > .grid-item-content { --ghost: ghost-contact 43s step-end calc(var(--cursor-delay) + 1s) infinite; }
+
+.grid-item-content::after {
+ content: ">";
+ content: ">" / "";
+ display: block;
+ width: fit-content;
+ margin-top: 3px;
+ padding-right: 12px;
+ background: linear-gradient(var(--main-color), var(--main-color)) right bottom 4px / 6px 2px no-repeat;
+}
+
+.listing {
+ margin-top: 3px;
+ line-height: 24px;
+ border-spacing: 0;
+}
+
+.listing td {
+ padding: 0 14px 0 0;
+ vertical-align: top;
+ white-space: nowrap;
+}
+
+.listing td:nth-child(2) {
+ text-align: right;
+}
+
+.ls-total {
+ display: block;
+ margin-top: 3px;
+ color: var(--secondary-color);
+}
+
+.ls-total + .listing {
+ margin-top: 0;
+}
+
+.listing .ice {
+ color: var(--secondary-color);
+}
+
+.link-target {
+ color: var(--secondary-color);
+ white-space: pre;
+}
+
+.listing td:nth-child(3) {
+ white-space: pre;
+}
+
+.listing a {
+ text-decoration: none;
+}
+
+.redacted {
+ background: var(--main-color);
+ color: transparent;
+ white-space: nowrap;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+.contact-list {
+ margin-top: 3px;
+ line-height: 24px;
+ border-spacing: 0;
+}
+
+.contact-list td {
+ padding: 0 16px 0 0;
+ white-space: nowrap;
+}
+
+.contact-list td:first-child {
+ color: var(--secondary-color);
+}
+
+.contact-list a {
+ text-decoration: none;
+}
+
+.secret {
+ margin: 0 0 16px;
+ text-align: center;
+ color: var(--main-bg-color);
+}
+
+footer {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ background: var(--main-color);
+ color: var(--main-bg-color);
+ font-size: 16px;
+ padding: 4px 8px;
+ margin-top: 10px;
+}
+
+.status-left,
+.status-right {
+ white-space: nowrap;
+}
+
+.status-message {
+ flex: 1;
+ text-align: center;
+}
+
+.glitch {
+ position: relative;
+ --glitch-shift: 6px;
+ --glitch-delay: 2s;
+}
+
+span.glitch {
+ display: inline-block;
+}
+
+.glitch::before,
+.glitch::after {
+ content: attr(data-text);
+ content: attr(data-text) / "";
+ position: absolute;
+ inset: 0;
+ background: var(--main-bg-color);
+ clip-path: inset(100% 0 0 0);
+ pointer-events: none;
+}
+
+.glitch::after {
+ color: var(--secondary-color);
+}
+
+.command-result .glitch {
+ --glitch-shift: 3px;
+ --glitch-delay: 5.5s;
+}
+
+.command-result .glitch::after {
+ color: var(--main-color);
+}
+
+.typed {
+ -webkit-user-select: text;
+ user-select: text;
+}
+
+.visually-hidden {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+ clip-path: inset(50%);
+ white-space: nowrap;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+@media (min-width: 601px) and (max-width: 999px) {
+ #header {
+ font-size: 16px;
+ }
+
+ #header .nav-action {
+ display: none;
+ }
+
+ #header a,
+ #header .nav-toggle {
+ padding: 8px 10px;
+ }
+}
+
+@media (max-width: 600px) {
+ #header {
+ position: static;
+ justify-content: center;
+ gap: 8px 0;
+ padding: 16px 4px;
+ font-size: 16px;
+ }
+
+ #header a,
+ #header .nav-toggle {
+ padding: 8px 2px;
+ }
+
+ #header .nav-action {
+ display: none;
+ }
+
+ #header .nav-home {
+ display: none;
+ }
+
+ .title {
+ margin: 24px auto;
+ padding: 0 12px;
+ }
+
+ .title h1 {
+ font-size: 36px;
+ }
+
+ .grid-container {
+ gap: 48px;
+ padding: 0 24px 32px 16px;
+ }
+
+ #about { translate: -3px 4px; }
+ #projects { translate: 4px -3px; }
+ #files { translate: 3px 5px; }
+ #contact { translate: -4px -2px; }
+ #credits { translate: 3px 3px; }
+
+ .grid-item {
+ max-width: 100%;
+ scroll-margin-top: 16px;
+ --shadow: 8px;
+ --mark-gap: 8px;
+ }
+
+ @media (hover: hover) {
+ .grid-item:hover {
+ transform: translate(4px, 4px);
+ box-shadow: 4px 4px 0px var(--secondary-color);
+ }
+ }
+
+ .listing td:first-child,
+ .listing td:nth-child(3) {
+ display: none;
+ }
+
+ .redacted {
+ white-space: normal;
+ }
+
+ footer {
+ flex-wrap: wrap;
+ justify-content: space-between;
+ }
+
+ .status-message {
+ order: 1;
+ flex-basis: 100%;
+ }
+}
+
+.grid-item { --boot-delay: 0.25s; }
+#projects { --boot-delay: 0.4s; }
+#files { --boot-delay: 0.55s; }
+#contact { --boot-delay: 0.7s; }
+#credits { --boot-delay: 0.85s; }
+
+:root {
+ --type-speed: 28ms;
+ --type-pause: 80ms;
+ --type-gap: 0.1s;
+ --jitter: 0.6ms;
+ --typo-cost: 0.4s;
+ --tab-pause: 0.15s;
+}
+
+.title {
+ --type-start: 0.1s;
+ --out1: calc(var(--type-start) + var(--n1, 0) * var(--type-speed) + var(--s1, 0) * var(--type-pause) + var(--type-gap));
+}
+
+.grid-item-content {
+ --out1: calc(var(--boot-delay) + var(--n1, 0) * var(--type-speed) + var(--s1, 0) * var(--type-pause) + var(--x1, 0s) + var(--type-gap));
+ --cmd2: calc(var(--out1) + 0.15s);
+ --out2: calc(var(--cmd2) + var(--n2, 0) * var(--type-speed) + var(--s2, 0) * var(--type-pause) + var(--type-gap));
+ --cursor-delay: calc(var(--out1) + 0.1s);
+}
+
+.grid-item-content:has(.command ~ .command) {
+ --cursor-delay: calc(var(--out2) + 0.1s);
+}
+
+.grid-item-content > .command {
+ --type-start: var(--boot-delay);
+}
+
+.grid-item-content > .command ~ .command {
+ --type-start: var(--cmd2);
+}
+
+.typed > span:nth-child(1) { --i: 0; --j: 0; --jn: 14; }
+.typed > span:nth-child(2) { --i: 1; --j: 14; --jn: -6; }
+.typed > span:nth-child(3) { --i: 2; --j: -6; --jn: 20; }
+.typed > span:nth-child(4) { --i: 3; --j: 20; --jn: -10; }
+.typed > span:nth-child(5) { --i: 4; --j: -10; --jn: 8; }
+.typed > span:nth-child(6) { --i: 5; --j: 8; --jn: -4; }
+.typed > span:nth-child(7) { --i: 6; --j: -4; --jn: 16; }
+.typed > span:nth-child(8) { --i: 7; --j: 16; --jn: -12; }
+.typed > span:nth-child(9) { --i: 8; --j: -12; --jn: 6; }
+.typed > span:nth-child(10) { --i: 9; --j: 6; --jn: 18; }
+.typed > span:nth-child(11) { --i: 10; --j: 18; --jn: -8; }
+.typed > span:nth-child(12) { --i: 11; --j: -8; --jn: 10; }
+.typed > span:nth-child(13) { --i: 12; --j: 10; --jn: -14; }
+.typed > span:nth-child(14) { --i: 13; --j: -14; --jn: 4; }
+.typed > span:nth-child(15) { --i: 14; --j: 4; --jn: 12; }
+.typed > span:nth-child(16) { --i: 15; --j: 12; --jn: -6; }
+.typed > span:nth-child(17) { --i: 16; --j: -6; --jn: 16; }
+.typed > span:nth-child(18) { --i: 17; --j: 16; --jn: -10; }
+.typed > span:nth-child(19) { --i: 18; --j: -10; --jn: 2; }
+.typed > span:nth-child(20) { --i: 19; --j: 2; --jn: 14; }
+.typed > span:nth-child(21) { --i: 20; --j: 14; --jn: -8; }
+.typed > span:nth-child(22) { --i: 21; --j: -8; --jn: 10; }
+.typed > span:nth-child(23) { --i: 22; --j: 10; --jn: 0; }
+.typed > span:nth-child(24) { --i: 23; --j: 0; --jn: 0; }
+
+.typed > span {
+ --p: 0;
+ --dp: 0;
+ position: relative;
+ --type-at: calc(var(--type-start) + var(--i) * var(--type-speed) + var(--j) * var(--jitter) + var(--p) * var(--type-pause) + var(--t, 0s));
+}
+
+.typed > .tab.tab {
+ --i: var(--tab-i);
+ --j: 0;
+ --t: var(--tab-pause);
+}
+
+.typed > .typo {
+ font-size: 0;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+.typed > .typo ~ span {
+ --t: var(--typo-cost);
+}
+
+.typed > .sp ~ span { --p: 1; }
+.typed > .sp ~ .sp ~ span { --p: 2; }
+.typed > .sp { --dp: 1; }
+
+.typed > span::after {
+ content: "";
+ position: absolute;
+ left: calc(100% + 1px);
+ bottom: 3px;
+ width: 8px;
+ height: 14px;
+ background: var(--main-color);
+ visibility: hidden;
+ --cursor-for: calc(var(--type-speed) + (var(--jn) - var(--j)) * var(--jitter) + var(--dp) * var(--type-pause));
+}
+
+.typed > span:last-child::after {
+ --cursor-for: calc(var(--type-speed) + var(--type-gap));
+}
+
+.typed > .typo::after {
+ --cursor-for: calc(var(--type-speed) + var(--typo-cost));
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ #header a,
+ #header .nav-toggle,
+ .grid-item-content a {
+ transition: background-color 0.5s, color 0.5s;
+ }
+
+ #header a:hover,
+ #header .nav-toggle:hover,
+ .grid-item-content a:hover {
+ transition: none;
+ }
+
+ .grid-item::before {
+ transition: color 0.5s;
+ }
+
+ .grid-item:is(:hover, :focus-within)::before {
+ transition: color 0s;
+ }
+
+ .typed > span {
+ animation: boot 1ms var(--type-at) backwards;
+ }
+
+ .typed > span::after {
+ animation: type-cursor var(--cursor-for) steps(1) var(--type-at);
+ }
+
+ .typed > .tab:not(:last-child)::after {
+ animation: none;
+ }
+
+ .typed > .typo {
+ animation: typo-flash calc(var(--typo-cost) - var(--type-speed)) step-end var(--type-at);
+ }
+
+ .window-title::after {
+ animation: title-cmd calc(var(--n1, 0) * var(--type-speed) + var(--s1, 0) * var(--type-pause) + var(--x1, 0s) + var(--type-gap)) step-end var(--boot-delay);
+ }
+
+ .title h1 {
+ animation: boot 1ms var(--out1) backwards;
+ }
+
+ .glitch::before {
+ animation: glitch-a 7s steps(1) var(--glitch-delay) infinite;
+ }
+
+ .glitch::after {
+ animation: glitch-b 7s steps(1) var(--glitch-delay) infinite;
+ }
+
+ .grid-item-content > :not(.command, br) {
+ animation: boot 1ms var(--out1) backwards;
+ }
+
+ .command ~ .command {
+ animation: boot 1ms var(--cmd2) backwards;
+ }
+
+ .grid-item-content > .command::after {
+ animation: boot 1ms var(--out1) backwards;
+ }
+
+ .grid-item-content > .command ~ .command::after {
+ animation: boot 1ms var(--out2) backwards;
+ }
+
+ .grid-item-content > .command ~ .command ~ :not(br) {
+ animation: boot 1ms var(--out2) backwards;
+ }
+
+ .grid-item-content::after {
+ animation:
+ boot 1ms var(--cursor-delay) backwards,
+ var(--ghost, none);
+ }
+
+ .grid-item:is(:hover, :focus-within, :target) .grid-item-content::after {
+ animation:
+ boot 1ms var(--cursor-delay) backwards,
+ var(--ghost, none),
+ blink 1.06s steps(1) infinite;
+ }
+}
+
+@keyframes boot {
+ from {
+ visibility: hidden;
+ }
+}
+
+@keyframes blink {
+ 50% {
+ background-size: 0 0;
+ }
+}
+
+@keyframes glitch-a {
+ 0%, 94%, 100% { clip-path: inset(100% 0 0 0); translate: 0; }
+ 95% { clip-path: inset(15% 0 60% 0); translate: calc(var(--glitch-shift) * -1) 0; }
+ 96% { clip-path: inset(55% 0 20% 0); translate: calc(var(--glitch-shift) * 0.83) 0; }
+ 97% { clip-path: inset(35% 0 45% 0); translate: calc(var(--glitch-shift) * -0.5) 0; }
+ 98% { clip-path: inset(70% 0 5% 0); translate: calc(var(--glitch-shift) * 0.67) 0; }
+}
+
+@keyframes glitch-b {
+ 0%, 94%, 100% { clip-path: inset(100% 0 0 0); translate: 0; }
+ 95% { clip-path: inset(65% 0 10% 0); translate: calc(var(--glitch-shift) * 0.83) 0; }
+ 96% { clip-path: inset(10% 0 70% 0); translate: calc(var(--glitch-shift) * -0.67) 0; }
+ 97.5% { clip-path: inset(45% 0 30% 0); translate: var(--glitch-shift) 0; }
+}
+
+@keyframes type-cursor {
+ from, to {
+ visibility: visible;
+ }
+}
+
+@keyframes ghost-projects {
+ 0.000% { content: ">" / ""; background-size: 6px 2px; }
+ 10.811% { content: "> m" / ""; background-size: 8px 14px; }
+ 11.243% { content: "> mk" / ""; background-size: 8px 14px; }
+ 11.568% { content: "> mkd" / ""; background-size: 8px 14px; }
+ 12.108% { content: "> mkdi" / ""; background-size: 8px 14px; }
+ 12.486% { content: "> mkdir" / ""; background-size: 8px 14px; }
+ 12.973% { content: "> mkdir " / ""; background-size: 8px 14px; }
+ 13.270% { content: "> mkdir d" / ""; background-size: 8px 14px; }
+ 13.730% { content: "> mkdir da" / ""; background-size: 8px 14px; }
+ 14.162% { content: "> mkdir dae" / ""; background-size: 8px 14px; }
+ 14.486% { content: "> mkdir daed" / ""; background-size: 8px 14px; }
+ 15.027% { content: "> mkdir daeda" / ""; background-size: 8px 14px; }
+ 15.405% { content: "> mkdir daedal" / ""; background-size: 8px 14px; }
+ 15.892% { content: "> mkdir daedalu" / ""; background-size: 8px 14px; }
+ 16.189% { content: "> mkdir daedalus" / ""; background-size: 8px 14px; }
+ 18.865% { content: "> mkdir daedalu" / ""; background-size: 8px 14px; }
+ 19.108% { content: "> mkdir daedal" / ""; background-size: 8px 14px; }
+ 19.351% { content: "> mkdir daeda" / ""; background-size: 8px 14px; }
+ 19.595% { content: "> mkdir daed" / ""; background-size: 8px 14px; }
+ 19.838% { content: "> mkdir dae" / ""; background-size: 8px 14px; }
+ 20.081% { content: "> mkdir da" / ""; background-size: 8px 14px; }
+ 20.324% { content: "> mkdir d" / ""; background-size: 8px 14px; }
+ 20.568% { content: "> mkdir " / ""; background-size: 8px 14px; }
+ 20.811% { content: "> mkdir" / ""; background-size: 8px 14px; }
+ 21.054% { content: "> mkdi" / ""; background-size: 8px 14px; }
+ 21.297% { content: "> mkd" / ""; background-size: 8px 14px; }
+ 21.541% { content: "> mk" / ""; background-size: 8px 14px; }
+ 21.784% { content: "> m" / ""; background-size: 8px 14px; }
+ 22.027% { content: ">" / ""; background-size: 6px 2px; }
+ 100% { content: ">" / ""; background-size: 6px 2px; }
+}
+
+@keyframes ghost-contact {
+ 0.000% { content: ">" / ""; background-size: 6px 2px; }
+ 32.558% { content: "> g" / ""; background-size: 8px 14px; }
+ 32.930% { content: "> gp" / ""; background-size: 8px 14px; }
+ 33.209% { content: "> gpg" / ""; background-size: 8px 14px; }
+ 33.674% { content: "> gpg " / ""; background-size: 8px 14px; }
+ 34.000% { content: "> gpg -" / ""; background-size: 8px 14px; }
+ 34.419% { content: "> gpg --" / ""; background-size: 8px 14px; }
+ 34.674% { content: "> gpg --f" / ""; background-size: 8px 14px; }
+ 35.070% { content: "> gpg --fu" / ""; background-size: 8px 14px; }
+ 35.442% { content: "> gpg --ful" / ""; background-size: 8px 14px; }
+ 35.721% { content: "> gpg --full" / ""; background-size: 8px 14px; }
+ 36.186% { content: "> gpg --full-" / ""; background-size: 8px 14px; }
+ 36.512% { content: "> gpg --full-g" / ""; background-size: 8px 14px; }
+ 36.930% { content: "> gpg --full-ge" / ""; background-size: 8px 14px; }
+ 37.186% { content: "> gpg --full-gen" / ""; background-size: 8px 14px; }
+ 37.581% { content: "> gpg --full-gene" / ""; background-size: 8px 14px; }
+ 37.953% { content: "> gpg --full-gener" / ""; background-size: 8px 14px; }
+ 38.233% { content: "> gpg --full-genera" / ""; background-size: 8px 14px; }
+ 38.698% { content: "> gpg --full-generat" / ""; background-size: 8px 14px; }
+ 39.023% { content: "> gpg --full-generate" / ""; background-size: 8px 14px; }
+ 39.442% { content: "> gpg --full-generate-" / ""; background-size: 8px 14px; }
+ 39.698% { content: "> gpg --full-generate-k" / ""; background-size: 8px 14px; }
+ 40.093% { content: "> gpg --full-generate-ke" / ""; background-size: 8px 14px; }
+ 40.465% { content: "> gpg --full-generate-key" / ""; background-size: 8px 14px; }
+ 42.326% { content: "> gpg --full-generate-key^C" / ""; background-size: 8px 14px; }
+ 43.488% { content: ">" / ""; background-size: 6px 2px; }
+ 100% { content: ">" / ""; background-size: 6px 2px; }
+}
+
+@keyframes typo-flash {
+ from, to {
+ font-size: 1em;
+ }
+}
+
+@keyframes title-cmd {
+ from, to {
+ visibility: visible;
+ }
+}
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..cd97df8
--- /dev/null
+++ b/favicon.ico
Binary files differ
diff --git a/favicon.svg b/favicon.svg
new file mode 100644
index 0000000..4c66644
--- /dev/null
+++ b/favicon.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" shape-rendering="crispEdges">
+ <rect width="16" height="16" fill="#222222"/>
+ <g fill="#c8c8c8">
+ <rect x="4" y="3" width="1" height="1"/>
+ <rect x="5" y="4" width="1" height="1"/>
+ <rect x="6" y="5" width="1" height="1"/>
+ <rect x="7" y="6" width="1" height="1"/>
+ <rect x="8" y="7" width="1" height="1"/>
+ <rect x="8" y="8" width="1" height="1"/>
+ <rect x="7" y="9" width="1" height="1"/>
+ <rect x="6" y="10" width="1" height="1"/>
+ <rect x="5" y="11" width="1" height="1"/>
+ <rect x="4" y="12" width="1" height="1"/>
+ <rect x="9" y="13" width="5" height="1"/>
+ </g>
+</svg>
diff --git a/files/bachelor-thesis.constantijn-bicker-caarten.pdf b/files/bachelor-thesis.constantijn-bicker-caarten.pdf
new file mode 100644
index 0000000..aa88e1f
--- /dev/null
+++ b/files/bachelor-thesis.constantijn-bicker-caarten.pdf
Binary files differ
diff --git a/files/cv.constantijn-bicker-caarten.pdf b/files/cv.constantijn-bicker-caarten.pdf
new file mode 100644
index 0000000..37d8fd2
--- /dev/null
+++ b/files/cv.constantijn-bicker-caarten.pdf
Binary files differ
diff --git a/fonts/m6x11.woff2 b/fonts/m6x11.woff2
new file mode 100644
index 0000000..5da1c6f
--- /dev/null
+++ b/fonts/m6x11.woff2
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..ae13039
--- /dev/null
+++ b/index.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Constantijn Bicker Caarten</title>
+ <meta name="description" content="Personal website of Constantijn Bicker Caarten.">
+ <link rel="canonical" href="https://bickercaarten.com/">
+
+ <meta property="og:type" content="website">
+ <meta property="og:url" content="https://bickercaarten.com/">
+ <meta property="og:title" content="Constantijn Bicker Caarten">
+ <meta property="og:description" content="Personal website of Constantijn Bicker Caarten.">
+ <meta property="og:image" content="https://bickercaarten.com/og-image.png">
+ <meta property="og:image:width" content="1200">
+ <meta property="og:image:height" content="630">
+ <meta property="og:image:alt" content="Constantijn Bicker Caarten">
+
+ <meta name="twitter:card" content="summary_large_image">
+ <meta name="twitter:title" content="Constantijn Bicker Caarten">
+ <meta name="twitter:description" content="Personal website of Constantijn Bicker Caarten">
+ <meta name="twitter:image" content="https://bickercaarten.com/og-image.png">
+ <meta name="twitter:image:alt" content="Constantijn Bicker Caarten">
+
+ <link rel="icon" href="favicon.svg" type="image/svg+xml">
+ <link rel="alternate icon" href="favicon.ico">
+ <link rel="apple-touch-icon" href="apple-touch-icon.png">
+
+ <link rel="preload" href="fonts/m6x11.woff2" as="font" type="font/woff2" crossorigin>
+ <link rel="stylesheet" href="css/style.css" type="text/css">
+</head>
+
+<body>
+ <nav id="header">
+ <a class="nav-home" href="#" aria-label="back to top">&gt;_</a>
+ <a href="#about">about</a>
+ <a href="#projects">projects</a>
+ <a href="#files">files</a>
+ <a href="#contact">contact</a>
+ <a href="#credits">credits</a>
+ <a class="nav-action" target="_blank" rel="noopener noreferrer" href="/files/cv.constantijn-bicker-caarten.pdf">resume<span class="arrow" aria-hidden="true"></span><span class="visually-hidden"> (opens in new tab)</span></a>
+ <a class="nav-action" href="mailto:hello@bickercaarten.com">email<span class="arrow" aria-hidden="true"></span><span class="visually-hidden"> (opens email app)</span></a>
+ <a class="nav-action" target="_blank" rel="noopener noreferrer" href="https://signal.me/#eu/tD9nyfXpOdrbrCYh-T1BJ8ctPb-8CZ6mWCzzxXCGj0bafnFI5NFCc73yXR05oG50">signal<span class="arrow" aria-hidden="true"></span><span class="visually-hidden"> (opens in new tab)</span></a>
+ <input type="checkbox" id="theme-toggle" class="visually-hidden" aria-label="switch between dark and light theme">
+ <label class="nav-toggle theme-toggle" for="theme-toggle"></label>
+ </nav>
+
+ <div class="title" style="--s1: 0; --n1: 6">
+ <code><span aria-hidden="true">&gt;</span> <span class="typed" aria-hidden="true"><span>w</span><span>h</span><span>o</span><span>a</span><span>m</span><span>i</span></span><span class="visually-hidden">whoami</span></code>
+ <h1>Constantijn Bicker Caarten</h1>
+ </div>
+
+ <main class="grid-container">
+ <div class="zz-col zz-left">
+ <details id="about" class="grid-item" style="--n1: 13; --s1: 1" open>
+ <summary class="grid-item-header">
+ <span class="window-title" data-cmd="cat about.txt">constantijn@netsphere</span>
+ <span class="close"></span>
+ </summary>
+ <div class="grid-item-content">
+ <code class="command" data-took="2ms">
+ <span aria-hidden="true">&gt;</span> <span class="typed" aria-hidden="true"><span>c</span><span>a</span><span>t</span><span class="sp"> </span><span>a</span><span>b</span><span>o</span><span>u</span><span>t</span><span>.</span><span>t</span><span>x</span><span>t</span></span><span class="visually-hidden">cat about.txt</span>
+ </code>
+ <br>
+ <code class="command-result">
+ I am Constantijn and this is my <span class="glitch" data-text="cyberhome">cyberhome</span>.
+ At the moment there is not much here, but hopefully that will change in the future.
+ In my free time I'm mostly watching movies or tinkering on my computer.
+ Currently I work as a software engineer at <a href="https://123tcs.com">123TCS</a>.
+ </code>
+ </div>
+ </details>
+
+ <details id="files" class="grid-item" style="--n1: 15; --s1: 2" open>
+ <summary class="grid-item-header">
+ <span class="window-title" data-cmd="ls -lh ~/files/">constantijn@netsphere</span>
+ <span class="close"></span>
+ </summary>
+ <div class="grid-item-content">
+ <code class="command" data-took="3ms">
+ <span aria-hidden="true">&gt;</span> <span class="typed" aria-hidden="true"><span>l</span><span>s</span><span class="sp"> </span><span>-</span><span>l</span><span>h</span><span class="sp"> </span><span>~</span><span>/</span><span>f</span><span>i</span><span>l</span><span>e</span><span>s</span><span>/</span></span><span class="visually-hidden">ls -lh ~/files/</span>
+ </code>
+ <br>
+ <code class="ls-total" aria-hidden="true">total 860K</code>
+ <table class="listing">
+ <tr><td aria-hidden="true">-rw-r--r--</td><td aria-hidden="true">736K</td><td aria-hidden="true">Jun 9 2017</td><td><a target="_blank" rel="noopener noreferrer" href="/files/bachelor-thesis.constantijn-bicker-caarten.pdf">bachelor-thesis.pdf<span class="visually-hidden"> (opens in new tab)</span></a></td></tr>
+ <tr><td aria-hidden="true">-rw-r--r--</td><td aria-hidden="true">122K</td><td aria-hidden="true">Sep 15 10:56</td><td><a target="_blank" rel="noopener noreferrer" href="/files/cv.constantijn-bicker-caarten.pdf">cv.pdf<span class="visually-hidden"> (opens in new tab)</span></a></td></tr>
+ </table>
+ </div>
+ </details>
+
+ <details id="credits" class="grid-item" style="--n1: 16; --s1: 1; --x1: var(--typo-cost)" open>
+ <summary class="grid-item-header">
+ <span class="window-title" data-cmd="cat credits.txt">constantijn@netsphere</span>
+ <span class="close"></span>
+ </summary>
+ <div class="grid-item-content">
+ <code class="command" data-took="2ms">
+ <span aria-hidden="true">&gt;</span> <span class="typed" aria-hidden="true"><span>c</span><span class="typo">t</span><span>a</span><span>t</span><span class="sp"> </span><span>c</span><span>r</span><span>e</span><span>d</span><span>i</span><span>t</span><span>s</span><span>.</span><span>t</span><span>x</span><span>t</span></span><span class="visually-hidden">cat credits.txt</span>
+ </code>
+ <br>
+ <code class="command-result">
+ <a target="_blank" rel="noopener noreferrer" href="https://managore.itch.io/m6x11">m6x11<span class="visually-hidden"> (opens in new tab)</span></a> font by Daniel Linssen.
+ </code>
+ </div>
+ </details>
+ </div>
+
+ <div class="zz-col zz-right">
+ <details id="projects" class="grid-item" style="--n1: 18; --s1: 2; --x1: var(--tab-pause)" open>
+ <summary class="grid-item-header">
+ <span class="window-title" data-cmd="ls -lh ~/projects/">constantijn@netsphere</span>
+ <span class="close"></span>
+ </summary>
+ <div class="grid-item-content">
+ <code class="command" data-took="4ms">
+ <span aria-hidden="true">&gt;</span> <span class="typed" aria-hidden="true" style="--tab-i: 12"><span>l</span><span>s</span><span class="sp"> </span><span>-</span><span>l</span><span>h</span><span class="sp"> </span><span>~</span><span>/</span><span>p</span><span>r</span><span>o</span><span class="tab">j</span><span class="tab">e</span><span class="tab">c</span><span class="tab">t</span><span class="tab">s</span><span class="tab">/</span></span><span class="visually-hidden">ls -lh ~/projects/</span>
+ </code>
+ <br>
+ <code class="ls-total" aria-hidden="true">total 12K</code>
+ <table class="listing">
+ <tr><td aria-hidden="true">drwxr-xr-x</td><td aria-hidden="true">4.0K</td><td aria-hidden="true">Mar 14 2016</td><td><a target="_blank" rel="noopener noreferrer" href="https://git.bickercaarten.com/pyquest.git">pyquest/<span class="visually-hidden"> (opens in new tab)</span></a></td></tr>
+ <tr><td aria-hidden="true">drwxr-xr-x</td><td aria-hidden="true">4.0K</td><td aria-hidden="true">Jun 2 2017</td><td><a target="_blank" rel="noopener noreferrer" href="https://git.bickercaarten.com/tld-analytics.git">tld-analytics/<span class="visually-hidden"> (opens in new tab)</span></a></td></tr>
+ <tr><td aria-hidden="true">drwx------</td><td aria-hidden="true" class="ice">ice</td><td aria-hidden="true"><span class="redacted">xxx xx xx:xx</span></td><td><span class="redacted" aria-hidden="true">xxxxxxxxxx</span><span class="visually-hidden">redacted project</span></td></tr>
+ </table>
+ </div>
+ </details>
+
+ <details id="contact" class="grid-item" style="--n1: 15; --s1: 1; --x1: var(--tab-pause)" open>
+ <summary class="grid-item-header">
+ <span class="window-title" data-cmd="cat contact.txt">constantijn@netsphere</span>
+ <span class="close"></span>
+ </summary>
+ <div class="grid-item-content">
+ <code class="command" data-took="1ms">
+ <span aria-hidden="true">&gt;</span> <span class="typed" aria-hidden="true" style="--tab-i: 7"><span>c</span><span>a</span><span>t</span><span class="sp"> </span><span>c</span><span>o</span><span>n</span><span class="tab">t</span><span class="tab">a</span><span class="tab">c</span><span class="tab">t</span><span class="tab">.</span><span class="tab">t</span><span class="tab">x</span><span class="tab">t</span></span><span class="visually-hidden">cat contact.txt</span>
+ </code>
+ <br>
+ <table class="contact-list">
+ <tr><td>email</td><td><a href="mailto:hello@bickercaarten.com">hello@bickercaarten.com</a></td></tr>
+ <tr><td>signal</td><td><a target="_blank" rel="noopener noreferrer" href="https://signal.me/#eu/tD9nyfXpOdrbrCYh-T1BJ8ctPb-8CZ6mWCzzxXCGj0bafnFI5NFCc73yXR05oG50">open chat<span class="visually-hidden"> (opens in new tab)</span></a></td></tr>
+ </table>
+ </div>
+ </details>
+ </div>
+ </main>
+
+ <p class="secret">Hello friend :)</p>
+
+ <footer>
+ <span class="status-left" aria-hidden="true">[constantijn] 0:zsh* 1:nvim 2:htop-</span>
+ <span class="status-message">This website is a public service to intelligence agencies as I don't use any social media platforms.</span>
+ <span class="status-right" aria-hidden="true">Last login: Sun Sep 27 04:51:00 2026 on tty1</span>
+ </footer>
+</body>
+
+</html>
diff --git a/og-image.png b/og-image.png
new file mode 100644
index 0000000..ca7c148
--- /dev/null
+++ b/og-image.png
Binary files differ
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..026a3b9
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://bickercaarten.com/sitemap.xml
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..6918fa7
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+ <url>
+ <loc>https://bickercaarten.com/</loc>
+ <lastmod>2026-09-27</lastmod>
+ </url>
+</urlset>