Compare commits

..

No commits in common. "main" and "portfolio" have entirely different histories.

87 changed files with 219 additions and 602 deletions

View file

@ -1,47 +0,0 @@
kind: pipeline
name: build
trigger:
event:
- push
branch:
- main
steps:
- name: docker-default
image: plugins/docker
settings:
registry: git.riksolo.com
username: riksolo
repo: git.riksolo.com/${DRONE_REPO,,}
tags:
- latest
- ${DRONE_COMMIT}
password:
from_secret: dockertoken
- name: docker-rblicht
image: plugins/docker
settings:
registry: git.riksolo.com
username: riksolo
repo: git.riksolo.com/${DRONE_REPO,,}
build_args:
- SITE=rblicht
tags:
- latest-rblicht
- ${DRONE_COMMIT}-rblicht
password:
from_secret: dockertoken
- name: trigger docker-compose release
image: plugins/downstream
settings:
server: https://drone.riksolo.com
token:
from_secret: drone_token
repositories:
- RikSolo/docker-compose
depends_on:
- docker-default
- docker-rblicht

View file

@ -1,5 +1,8 @@
name: Build name: Build
on: [workflow_dispatch] on:
push:
branches:
- main
jobs: jobs:
Deploy: Deploy:
@ -13,17 +16,8 @@ jobs:
url: ${{vars.NODE_RED_WORKFLOW_STARTED_URL}} url: ${{vars.NODE_RED_WORKFLOW_STARTED_URL}}
data: '{"job": ${{toJSON(job)}}, "gitea": ${{toJSON(gitea)}}}' data: '{"job": ${{toJSON(job)}}, "gitea": ${{toJSON(gitea)}}}'
- name: Install LFS
run: |
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
apt-get update
apt-get install -y git-lfs
git lfs install
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v3
with:
lfs: 'true'
- name: Docker install - name: Docker install
run: | run: |

View file

@ -1,9 +1,6 @@
FROM node:22 FROM node:22
WORKDIR /usr/src/app WORKDIR /usr/src/app
ARG SITE=default
ENV SITE=$SITE
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm install
ADD . . ADD . .

View file

@ -1,8 +0,0 @@
export default function () {
return {
title: "Rik Berkelder",
url: process.env.site == "rblicht" ? "https://rblicht.nl" : "https://riksolo.com",
author: "Rik Berkelder",
site: process.env.SITE || 'default'
};
}

View file

@ -0,0 +1,29 @@
---
slug: "shure-se215-opinions-2021-04-22"
title: "Opinions on the Shure SE215 In-Ear Monitors"
date: "2021-04-22"
modified: "2021-04-23"
description: "Personal thoughts on a pair of in-ears I bought."
eleventyExcludeFromCollections: true
---
<span class="text-sm">Disclaimer: This should not be trusted as a review. While I enjoy good audio, I am by no means an expert.</span>
I have recently invested in a pair of Shure SE215 IEMs and have had some mixed feelings about them. You might think that mean I don't like them, or that that's a bad thing; That's not true. Allow me to explain.
The Shures are by far the least "Flat" or "Reference" listening devices I own. This is absolutely okay, because they weren't made to be. They were made, first and foremost, to passively block out as much as the outside world as possible. That's one of the main reasons I bought them, and they do an outstanding job of it. Whenever I put these in, put on some music and go outside for a walk, it's just me and the music. And I'm not talking about blasting music into my earholes so loud I can't hear anything else anymore. The passive isolation on these in-ear monitors allows me to put on music on a relatively quiet level and block everything else out. This allows me the freedom of actually choosing how loud I want my music to be.
These in-ears make a lot of music I listen on them sound absolutely stellar. They have a surprising amount of soundstage for something that isolates this well, and the detail in them is quite great. They have a bit of a peak around 5kHz. In a lot of cases this adds detail to the sound, and has a tendency to bring out the snare drum, hi-hat and cymbals a bit more than a flat headphone would, which I personally quite like.
These in-ears work very well for pretty much anything I listen to, going from Rush to Greta van Fleet to Pendulum to Infected Mushroom. But then I put on Nightwish's Imaginaerum, and that's where the mixed feelings began. I'll admit I'm pretty treble sensitive. But besides the lead guitar becoming piercing and quite annoying at higher volumes, I lost so much detail in the track as a result of it. The problem here is that modern metal tends to get mixed and mastered in a very aggressive way, and with the sound already being so full and maxed out the 5kHz peak in these makes a lot of things fall apart. This isn't a problem with the in-ears, and it's not a problem with the music, but it's a problem with combining them.
This isn't universal across all metal, and not exclusive to metal. It all depends on how the specific music is mixed and mastered. While I ran into this with bands like Nightwish and Sabaton, I had no problems listening to Iron Maiden and Eluveitie. It seems to occur more on music with more modern production, but your mileage may vary.
Gladly, it's not hard to set up a decent equalizer on both my desktop and my phone (using Poweramp for android), and taking away some of that 5k peak fixes most of the problems on the tracks where they happen. This is by no means an equalization I'd keep turned on all the time, only opting to use it in the places where it's needed, and letting the natural beauty of the sound shine where it isn't.
One upside of the frequency response of these in-ears is that it does compensate for the imbalance in the frequencies that they manage to passively block. So, in louder environments (like on stage, where these were designed for), you'll always be able to hear what's going on inside them over the noise that does manage to come through the passive isolation.
Another source of mixed feeling is how sensitive these headphones are. They have an impedance of 17&#8486;. This, in laymans terms, mean that they don't require a lot of power to drive. For reference, most consumer-focussed headphones sit around 32&#8486;. This, in theory, is a very good thing. They take less power to drive, so they'll work on pretty much everything you can come up with and drain battery-powered devices less quickly. There's a downside to all of that efficiency though: noise floor. Because they are so sensitive, they're very prone to picking up any noise from devices you connect them to. While being fine for every other pair of headphones I own, my trusty OnePlus 6 has a bit of (barely) audible noise when there's a quiet spot in the music. It's definitely not a deal-breaker, and should be fixed by getting a dedicated output device.
This is more of a problem with my playback devices than with the headphones themselves, but it is something to keep in mind if you're looking to pick them up and use them with your phone, laptop or other devices.
All in all, I'm very happy with these in-ears. While they're definitely a sidegrade to some of the other ones I own, their build quality, passive isolation and ability to make certain tracks absolutely shine make them a very welcome addition to my collection.

View file

@ -45,4 +45,4 @@ On top of this, assuming you set the inputOSCName variable correctly, MA3 will b
# Support # Support
I maintain this plugin in my free time. This plugin is available free, and the code is free for you to edit. If you have any issues with the plugin, feel free to contact me through the contact info on this website, but please don't expect me to respond right away. I maintain this plugin in my free time. This plugin is available free, and the code is free for you to edit. If you have any issues with the plugin, feel free to contact me through the contact info on this website, but please don't expect me to respond right away.
If this plugin makes your life better, you can consider buying me a beer through [ko-fi](https://ko-fi.com/riksolo) If this plugin makes your life better, you can consider buying me a beer through [ko-fi](https://ko-fi.com/riksolo)

View file

@ -1,27 +0,0 @@
---
slug: "ma3-tip-clear-through-black"
title: "MA3 Tip: Clear Through Black"
date: "2025-02-24"
modified: "2025-02-24"
description: "A little GrandMA3 Macro to clear fixtures in the programmer in a more subtle way."
---
When I'm busking on GrandMA3, especially for slower, more looks-based shows, I keep making a specific kind of mistake. With Program Time turned on, clearing a fixture will fade all of it's parameters. So hitting good old clear clear clear means fixtures I've turned on will fade out, while also changing colors, gobos, zoom, position and so on. That feels quite sloppy and distracting to me. Especially since the whole point of using the programmer for busking, to me, is being able to make small changes subtly.
I've found myself dimming the fixture to 0, `Off`ing all the other parameters, and then clearing the fixture so you only see it fade out (and potentially back in if it was already on) without seeing a whole bunch of other stuff change. That's quite a lot of manual work, so I started wondering if I could write a little macro that does this for me.
That macro ended up looking like this:
| Command | Wait | Note |
| --------------------------------- | ------ | ------------------------------------ |
| At 0 Fade "1" | 1 | Dim fixtures |
| Off Selection If Attribute 2 Thru | 1 | Clear attributes except dimmer |
| Attribute At Release Fade 1 | 1 | Set fixtures to original intensity |
| Off Selection | Follow | Clear release values out of fixtures |
If you want to use a different fade time, you'll want to not only change the `Fade` time in the first line, but also the wait times of the first and third lines. These wait times are there to make sure things only start clearing once the fixture is off, and to make sure the fixture fades back in before clearing the programmer entirely. The wait time of the second line makes sure that parameters that can't physically change instantly have some time to clear before fading the fixture back to it's playback intensity.
In the above version of the macro, it only clears fixtures that are currently selected, which is what I've end up usually wanting. If you want it to clear the whole programmer, you could add a macro line all the way at the top containing `Clear; IfProgrammer`. This first deselects what you've currently got selected, so that anything you have selected that doesn't contain any programmer values doesn't dip to black for no reason. Then it selects every fixture that currently has programmer values.
The last two steps might seem a little weird. why not just `Off Selection` right away? This is because Off doesn't (currently, as of 2.2.1.1) take any timing besides prog time into account. I prefer this macro working without prog time enabled (since prog time working the way it works being what drove me to figure out this little macro in the first place).
I hope it helps you make your busking just a little bit smoother, like it's been doing for me.

View file

@ -1,11 +0,0 @@
<ul>
<li><a href="https://www.sowulo.nl">Sowulo</a> - Lighting design & international touring since 2023</li>
<li><a href="https://aitum.tv">Aitum</a> - React & Electron development + MIDI and OSC integration</li>
<li><a href="https://twitch.tv/mrgregles">MrGregles</a> - Fully remote, real-time live show lighting control</li>
<li>RN7 - Custom digital signage with radio playout data integration</li>
<li>Doornroosje / TivoliVredenburg / Luxor Live / Musis Sacrum - House LD / System Technician</li>
<li>ShowLine / Hoevenaars / Ecolicht - Lighting Operator / System Technician</li>
<li>DG Producties / Theater Terra / Ellen ten Damme - Theatre Touring</li>
<li>Deyval - Last-minute work for a wide range of customers</li>
<small><a href="/portfolio">See More -></a></small>
</ul>

0
content/includes/img. Normal file
View file

View file

@ -1,31 +0,0 @@
{% macro navItem(title, url, hyphen=true, target='_self') %}
<span>
<a href="{{url}}" target="{{target}}">{{title}}</a>
{% if hyphen %} - {% endif %}
</span>
{% endmacro %}
<div class="container">
<div class="nav">
<a class="d-inline-block main-logo" href="/">
<img src="/img/RB-w.png" alt="RB logo" eleventy:widths="100" />
Rik Berkelder
</a>
<div class="nav-links">
<div class="d-inline-block">
{{navItem("Home", "/")}}
{%if site.site != "rblicht" %}
{{navItem("Blog", "/blog")}}
{%endif%}
{{navItem("Portfolio", "/portfolio", false)}}
</div>
<div class="d-inline-block">
<span> | </span>
{% if site.site != "rblicht" %}
{{navItem("Mastodon", "https://dook.business/@RikSolo")}}
{% endif %}
{{navItem("Instagram", "https://instagram.com/RikBerkelder", false)}}
</div>
</div>
</div>
</div>

View file

@ -1,21 +0,0 @@
<div class="flex">
<div class="col-half">
<b>Lighting & AV</b>
<ul>
<li>GrandMA2/3, Avolites, Hog4, Obsidian Onyx</li>
<li>Capture, Vectorworks</li>
<li>RDM, dmXLAN, Luminex, Mikrotik</li>
<li>ATEM, Resolume, VMix, OBS</li>
<li>Timecode, Remote Production, System Integration</li>
</ul>
</div>
<div class="col-half">
<b>Software & IT</b>
<ul>
<li>Typescript, Rust, C++</li>
<li>React (Native), Angular, NodeJS, Electron, Embedded</li>
<li>Git, Docker, Gitlab CI, GitHub Actions, DroneCI</li>
<li>Network Management, Cisco, Mikrotik, Netgear</li>
</ul>
</div>
</div>

View file

@ -1,57 +0,0 @@
<!doctype html>
<html>
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/style.css" />
<link href="https://unpkg.com/prism-themes@1.9.0/themes/prism-nord.css" rel="stylesheet" />
<link rel="stylesheet" href="https://unpkg.com/simplelightbox@2.14.3/dist/simple-lightbox.min.css" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="English" />
<meta name="google-site-verification" content="x17arJy33V33DYnmMYybZciXngFd8R8xn1UZRdp7qxo" />
<link rel="canonical" href="{{site.url}}{{page.url | url}}" />
{%if tags.includes("blogpost")%}
<meta property="og:type" content="article" />
{%if description %}
<meta property="description" content="{{description}}" />
<meta property="og:description" content="{{description}}" />
{% endif %}
<meta property="og:title" content="{{title}}" />
<meta property="og:url" content="{{site.url}}{{page.url | url}}" />
<meta property="og:sitename" content="{{site.title}}" />
<meta property="og:image" content="{{site.url}}/img/RB-w.png" />
{%endif%}
<title>{% if title %}{{title}} | {% endif %}{{site.title}}</title>
</head>
<body>
{{content | safe}}
<script src="//instant.page/5.2.0" type="module"
integrity="sha384-jnZyxPjiipYXnSU0ygqeac2q7CVYMbh84q0uHVRRxEtvFPiQYbXWUorga2aqZJ0z"></script>
<script data-goatcounter="https://goatcounter.riksolo.com/count" async
src="//goatcounter.riksolo.com/count.js"></script>
<script src="//unpkg.com/simplelightbox@2.14.3/dist/simple-lightbox.min.js"></script>
<script>
new SimpleLightbox('.gallery a', {
widthRatio: 0.9,
heightRatio: 0.95,
captionSelector: '.gallery-caption',
captionType: 'text',
});
</script>
</body>
</html>

View file

@ -1,7 +1,72 @@
--- {% macro navItem(title, url, hyphen=true, target='_self') %}
layout: 'base-nonav.njk' <span>
--- <a href="{{url}}" target="{{target}}">{{title}}</a>
{% if hyphen %} - {% endif %}
</span>
{% endmacro %}
{%include "navbar.njk"%} <!doctype html>
<html>
{{content | safe}} <head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/style.css" />
<link href="https://unpkg.com/prism-themes@1.9.0/themes/prism-nord.css" rel="stylesheet" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="English" />
<meta name="google-site-verification" content="x17arJy33V33DYnmMYybZciXngFd8R8xn1UZRdp7qxo" />
<link rel="canonical" href="{{site.url}}{{page.url | url}}" />
{%if tags.includes("blogpost")%}
<meta property="og:type" content="article" />
{%if description %}
<meta property="description" content="{{description}}" />
<meta property="og:description" content="{{description}}" />
{% endif %}
<meta property="og:title" content="{{title}}" />
<meta property="og:url" content="{{site.url}}{{page.url | url}}" />
<meta property="og:sitename" content="{{site.title}}" />
<meta property="og:image" content="{{site.url}}/img/RB-w.png" />
{%endif%}
<title>{% if title %}{{title}} | {% endif %}{{site.title}}</title>
</head>
<body>
<div class="container">
<div class="nav">
<a class="d-inline-block main-logo" href="/">
<img src="/img/RB-w.png" alt="RB logo" eleventy:widths="100" />
Rik Berkelder
</a>
<div class="nav-links">
<div class="d-inline-block">
{{navItem("Home", "/")}}
{{navItem("Blog", "/blog")}}
{{navItem("Portfolio", "/portfolio", false)}}
</div>
<div class="d-inline-block">
<span> | </span>
{{navItem("Mastodon", "https://dook.business/@RikSolo")}}
{{navItem("Instagram", "https://instagram.com/RikBerkelder", false)}}
</div>
</div>
</div>
</div>
{{content | safe}}
<script src="//instant.page/5.2.0" type="module"
integrity="sha384-jnZyxPjiipYXnSU0ygqeac2q7CVYMbh84q0uHVRRxEtvFPiQYbXWUorga2aqZJ0z"></script>
<script data-goatcounter="https://goatcounter.riksolo.com/count" async
src="//goatcounter.riksolo.com/count.js"></script>
</body>
</html>

View file

@ -4,25 +4,15 @@ layout: base.njk
<div class="portfolio-detail"> <div class="portfolio-detail">
<div class="portfolio-detail-header container"> <div class="portfolio-detail-header container">
<h1>{{title}}</h1> <h1>{{title}}</h1>
<small class="col-white-vdark">{{timeframe}}</small>
<span>{{description}}</span> <span>{{description}}</span>
<a href="/portfolio">&lt;- Back to overview</a> <a href="/portfolio">&lt;- Back to overview</a>
<span> <span>
{{content | safe}} {{content | safe}}
</span> </span>
</div> </div>
<div class="portfolio-detail-images gallery"> <div class="portfolio-detail-images">
{% for image in data.images %} {% for image in data.images %}
<a href="{% imageUrl image.url %}"> <img src="{{image}}" alt="" loading="lazy" />
<img src="{{image.url}}" alt="" loading="lazy" />
{% if image.caption %}
<div class="gallery-caption">
{{image.caption}}
<small class="d-inline-block"> - {{image.date | dateLocale}}</small>
</div>
{% endif %}
</a>
{% endfor %} {% endfor %}
</div> </div>

View file

@ -1,43 +0,0 @@
---
title: CV
permalink: "/cv/"
layout: 'base-nonav.njk'
draft: true
---
<div class="container">
<h1>Rik Berkelder</h1>
Lighting Designer/Technician | Software Engineer | Nerd
<h2>About</h2>
<p>
I am a freelance lighting designer, technician, and systems specialist with a focus on touring productions and live
performance. Since 2018, I have worked freelance, initially alongside a career in IT and software engineering and
full time since 2022, bringing together technical precision, creative design, and a strong respect for the craft and
crew.
</p>
<p>
I have designed lighting for touring shows that require both creative adaptability and practical problem solving on
the road. As a house and systems technician in a variety of venues, I regularly support international acts and
crews, adapting to varied
setups and workflows. My theatre and festival touring experience has also strengthened my ability to communicate
clearly with local teams and deliver consistent, high quality results in dynamic environments.
</p>
<p>
A perfectionist by nature, I value preparation, attention to detail, and reliability while staying flexible and
collaborative to meet the demands of live production. My background in IT and network management supports
increasingly complex lighting and control systems, ensuring stable and efficient operation across all types of
venues.
</p>
<h2>Skills</h2>
{%include "skills.njk" %}
<h2>Highlighted work</h2>
{%include "highlights.njk" %}
<h2>Contact</h2>
rik@rblicht.nl / +31 6 37 27 17 91
</div>

View file

@ -6,37 +6,44 @@ permalink: "/"
<h1>Rik Berkelder</h1> <h1>Rik Berkelder</h1>
Lighting Designer | Software Engineer | Nerd Lighting Designer | Software Engineer | Nerd
{%if site.site == "rblicht" %}
<h2>About</h2>
<p>
I am a freelance stage lighting technician, lighting designer, and lighting systems technician with a passion for the
intersection of technical precision and creative expression. My journey in lighting began in primary school, driven by
a fascination with how light shapes space and mood. Since 2018, Ive been freelancing alongside a career in software
engineering and IT, transitioning to full-time freelance work in 2022.
</p>
<p>
A perfectionist by nature, I value preparation, attention to detail, and reliability while staying flexible and
collaborative to meet the demands of live production. I strive bring professionalism, technical expertise, and a deep
commitment to elevating every production I work on, blending methodical planning with a love for creative
problem-solving and thinking on my feet when necessary.
</p>
{%endif%}
<h2>Skills</h2> <h2>Skills</h2>
{%include "skills.njk" %} <div class="flex">
<div class="col-half">
<b>Lighting & AV</b>
<ul>
<li>GrandMA2/3, Avolites, Hog4, Obsidian Onyx</li>
<li>Capture, Vectorworks</li>
<li>ATEM, Resolume, VMix, OBS</li>
<li>Timecode, Remote Production, System Integration</li>
</ul>
</div>
<div class="col-half">
<b>Software</b>
<ul>
<li>Typescript, GraphQL</li>
<li>React (Native), Angular, NodeJS, Electron</li>
<li>Git, Docker, Gitlab CI, GitHub Actions, DroneCI</li>
<li>Sass/SCSS, Tailwind, Bootstrap</li>
</ul>
</div>
</div>
<h2>Highlighted Projects/Clients</h2> <h2>Highlighted Projects/Clients</h2>
{%include "highlights.njk" %} <ul>
<li><a href="https://www.sowulo.nl">Sowulo</a> - Lighting design & touring since 2023</li>
<li><a href="https://aitum.tv">Aitum</a> - React & Electron development</li>
<li><a href="https://twitch.tv/mrgregles">MrGregles</a> - Fully remote, real-time live show lighting control</li>
<li><a href="https://rn7.nl">RN7</a> - Custom digital signage with radio playout data integration</li>
<li>Doornroosje / TivoliVredenburg / Luxor Live - House LD</li>
</ul>
<h2>Contact</h2> <h2>Contact</h2>
{% if site.site != "rblicht" %}mail@riksolo.com / {% endif %}rik@rblicht.nl mail@riksolo.com / rik@rblicht.nl
<h3>Find me elsewhere</h3> <h3>Find me elsewhere</h3>
<ul> <ul>
{% if site.site != "rblicht" %}
<li><a href="https://dook.business/@RikSolo">Mastodon</a> <small>(dook.business)</small></li> <li><a href="https://dook.business/@RikSolo">Mastodon</a> <small>(dook.business)</small></li>
{%endif%}
<li><a href="https://instagram.com/RikBerkelder">Instagram</a></li> <li><a href="https://instagram.com/RikBerkelder">Instagram</a></li>
<li><a href="https://github.com/rikberkelder">GitHub</a></li> <li><a href="https://github.com/rikberkelder">GitHub</a></li>
<li><a href="https://git.riksolo.com">Gitea</a></li> <li><a href="https://git.riksolo.com">Gitea</a></li>

View file

@ -7,16 +7,14 @@ permalink: "/portfolio/"
<div class="portfolio-list-item"> <div class="portfolio-list-item">
<div class="portfolio-list-item-header"> <div class="portfolio-list-item-header">
<h2>{{portfolioItem.data.title}}</h2> <h2>{{portfolioItem.data.title}}</h2>
<small class="col-white-vdark">({{portfolioItem.data.timeframe}})</small>
- {{portfolioItem.data.description}} - {{portfolioItem.data.description}}
<a href="{{portfolioItem.data.page.url | safe}}">See More -></a> <a href="{{portfolioItem.data.page.url | safe}}">See More -></a>
</div> </div>
<a href="{{portfolioItem.data.page.url | safe}}"> <div class="flex">
<div class="flex"> {% for image in portfolioItem.data.images.slice(0,3) %}
{% for image in portfolioItem.data.images.slice(0,3) %}
<img src={{image.url}} alt="" width="400" /> <img src={{image}} alt="" width="400" />
{% endfor %} {% endfor %}
</div> </div>
</a>
</div> </div>
{% endfor %} {% endfor %}

Binary file not shown.

View file

@ -1,6 +0,0 @@
---
order: 4
title: DG Theater
description: "National theatre tours with Cirque en Afrique: Kalabante (2024) and African Mama's: The Great Five (2025). Bringing the show's designs to life in varying conditions, and making sure all of the technical lighting aspects of the show are maintained properly and function perfectly every performance."
timeframe: 2024 - now
---

Binary file not shown.

Binary file not shown.

BIN
content/portfolio/doornroosje/1.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/doornroosje/2.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/doornroosje/3.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/doornroosje/4.jpg (Stored with Git LFS)

Binary file not shown.

View file

@ -1,6 +0,0 @@
---
order: 5
title: Doornroosje
description: Making sure visiting technicians have a smooth experience at the iconic Nijmegen venue, and providing fitting lighting on the fly for any act not travelling with their own lighting designer and a variety of dance events.
timeframe: 2024 - now
---

View file

@ -2,5 +2,4 @@
order: 4 order: 4
title: ISZA - Femina title: ISZA - Femina
description: Adapting abstract ideas from the artist into an impactful one-off festival show, with limited preparation time and a short timeframe on location. description: Adapting abstract ideas from the artist into an impactful one-off festival show, with limited preparation time and a short timeframe on location.
timeframe: oct 2024
--- ---

BIN
content/portfolio/luxorlive/1.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/2.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/3.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/31.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/4.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/41.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/5.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/6.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/7.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/8.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/9.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/luxorlive/91.jpg (Stored with Git LFS)

Binary file not shown.

View file

@ -1,15 +1,7 @@
--- ---
order: 2 order: 2
title: Luxor Live title: Luxor Live
description: Delivering dynamic, on-the-spot lighting for visiting acts without their own lighting designer, and ensuring the house system is in perfect shape for visiting technicians. description: Delivering dynamic, on-the-spot lighting for visiting acts without their own lighting designer, and ensuring a smooth experience with the house rig for visiting technicians.
timeframe: 2022 - now
--- ---
## Notable shows
(without touring LD)
- GZA
- Vandenberg
- Go_A
- Lucky Chops
- Robin Borneman
- Julian Sas

BIN
content/portfolio/musis/1.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/musis/2.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/musis/3.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/musis/4.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/musis/5.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/musis/6.png (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/musis/7.png (Stored with Git LFS)

Binary file not shown.

View file

@ -1,6 +0,0 @@
---
order: 7
title: Musis Arnhem
description: Clear and readable technical documentation for national and international visiting tours. Lighting design and operation for acts touring without lighting.
timeframe: 2022 - now
---

View file

@ -1,31 +1,18 @@
import * as path from 'node:path'; import * as path from 'node:path';
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import exifr from 'exifr';
const conf = { const conf = {
tags: "portfolio", tags: "portfolio",
layout: "portfolio.njk", layout: "portfolio.njk",
eleventyComputed: { eleventyComputed: {
async images(data) { images(data) {
const dir = path.dirname(data.page.inputPath); const dir = path.dirname(data.page.inputPath);
const files = fs.readdirSync(dir) const images = fs.readdirSync(dir)
.filter(file => ['.png', '.jpg', '.jpeg', '.JPG', '.webp'].includes(path.extname(file))) .filter(file => ['.png', '.jpg', '.jpeg', '.JPG'].includes(path.extname(file)))
.sort(); .sort()
.map(image => `${data.page.url}${image}`);
console.log(images);
const images = await Promise.all(files.map(async (image) => {
const imagePath = path.resolve(dir + '/' + image);
const exif = await exifr.parse(imagePath, { pick: ['XPComment', 'DateTimeOriginal'] });
return {
url: data.page.url + image,
caption: exif?.XPComment ?? "",
date: exif?.DateTimeOriginal
};
}));
return images; return images;
}, },

View file

@ -2,5 +2,4 @@
order: 5 order: 5
title: "Prijs v.d. Vrijheid" title: "Prijs v.d. Vrijheid"
description: Emotive lighting design with tight limitations for a musical performed on location in a church. description: Emotive lighting design with tight limitations for a musical performed on location in a church.
timeframe: oct 2024
--- ---

BIN
content/portfolio/sowulo/1.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/sowulo/2.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/sowulo/3.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/sowulo/4.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/sowulo/41.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/sowulo/42.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/sowulo/5.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/sowulo/6.jpg (Stored with Git LFS)

Binary file not shown.

View file

@ -1,22 +1,5 @@
--- ---
order: 1 order: 1
title: Sowulo title: Sowulo
description: Designing a theatrical, atmospheric and detailed show while and bringing it to a variety venues and festivals of varying sizes with very short on-site preparation times. Highlights include Hellfest, Motocultor, Castlefest and a 2025 EU Headline Tour description: Designing a theatrical, atmospheric and detailed show while and bringing it to a variety venues and festivals of varying sizes with very short on-site preparation times.
timeframe: 2023 - now ---
---
## Notable shows
- Echos & Merveilles (mainstage) 2025
- Doornroosje, Nijmegen
- 5-show nightliner tour 2025
- P60, Amstelveen
- Motocultor 2024
- Sint Stevenskerk Nijmegen
- Opera Leśna (support Heilung)
- Wave Gothik Treffen 2024
- Echos & Merveilles 2024
- Trolls & Legends 2024
- TivoliVredenburg (Pandora)
- Menuo Juodoragis (mainstage) 2023
- Midgardsblot (mainstage) 2023
- Castlefest (mainstage) 2023

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View file

@ -2,5 +2,4 @@
order: 6 order: 6
title: Tinderella title: Tinderella
description: Minimal but gripping lighting for a deeply personal solo theatre show. Delimiting scenes and building atmosphere without distracting from the content description: Minimal but gripping lighting for a deeply personal solo theatre show. Delimiting scenes and building atmosphere without distracting from the content
timeframe: 2023 - 2024
--- ---

BIN
content/portfolio/tivolivredenburg/001.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/002.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/003.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/004.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/005.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/006.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/007.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/008.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/009.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/010.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/011.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/012.JPG (Stored with Git LFS)

Binary file not shown.

BIN
content/portfolio/tivolivredenburg/013.JPG (Stored with Git LFS)

Binary file not shown.

View file

@ -1,6 +1,5 @@
--- ---
order: 3 order: 3
title: TivoliVredenburg title: TivoliVredenburg
description: Creative and fitting lighting for a wide variety of productions. From sales to classical to jazz to metal, across 5 stages in the venue. As well as making sure the house systems function and adapt perfectly to visiting tours and complex international productions, including regular maintenance and show-specific adaptations. description: Creative and fitting lighting for a wide variety of productions. From sales to classical to jazz to metal, across 5 stages in the venue.
timeframe: 2023 - now
--- ---

BIN
content/portfolio/willemeen/01.JPG (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
content/portfolio/willemeen/02.JPG (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
content/portfolio/willemeen/03.JPG (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
content/portfolio/willemeen/05.JPG (Stored with Git LFS)

Binary file not shown.

View file

@ -2,5 +2,4 @@
order: 7 order: 7
title: Willemeen title: Willemeen
description: Small venue, big looks. description: Small venue, big looks.
timeframe: 2024 - now
--- ---

View file

@ -6,7 +6,6 @@ $grey-medium: color.adjust($grey-vdark, $lightness: 15%);
$grey-light: #4c566a; $grey-light: #4c566a;
$white-dark: #d8dee9; $white-dark: #d8dee9;
$white-light: #eceff4; $white-light: #eceff4;
$white-vdark: color.adjust($white-light, $lightness: -15%);
$blue: #88c0d0; $blue: #88c0d0;
$blue-med: #81a1c1; $blue-med: #81a1c1;
$blue-dark: #5e81ac; $blue-dark: #5e81ac;
@ -26,10 +25,6 @@ body {
margin: 0; margin: 0;
margin-top: 0.2rem; margin-top: 0.2rem;
.col-white-vdark {
color: $white-vdark;
}
.container { .container {
max-width: 900px; max-width: 900px;
margin-left: auto; margin-left: auto;
@ -61,10 +56,6 @@ body {
&-content { &-content {
border-top: 1px solid $grey-medium; border-top: 1px solid $grey-medium;
margin-top: 1em; margin-top: 1em;
table {
margin-bottom: 1rem;
}
} }
} }
@ -74,10 +65,6 @@ body {
background-color: $grey-dark; background-color: $grey-dark;
margin-top: 1rem; margin-top: 1rem;
small {
vertical-align: 0.12rem;
}
.flex { .flex {
flex-wrap: nowrap; flex-wrap: nowrap;
align-items: center; align-items: center;
@ -137,7 +124,7 @@ body {
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 1rem; margin-top: 1rem;
a { picture {
display: block; display: block;
height: 22vw; height: 22vw;
flex-grow: 1; flex-grow: 1;
@ -195,26 +182,8 @@ body {
list-style-type: "- "; list-style-type: "- ";
} }
table {
border-collapse: collapse;
th { figure {
text-align: left;
}
th,
td {
margin: 0;
padding: 0.2rem 0.5rem;
border: $grey-light 1px solid;
}
thead {
background-color: $grey-dark;
}
}
figure.styled-figure {
background-color: $grey-dark; background-color: $grey-dark;
display: inline-block; display: inline-block;
padding: 0.5rem; padding: 0.5rem;
@ -329,43 +298,10 @@ body {
height: auto; height: auto;
} }
} }
} }
.flex { .flex {
display: flex; display: flex;
flex-shrink: 0; flex-shrink: 0;
flex-wrap: wrap; flex-wrap: wrap;
}
.sl-overlay {
background: $grey-vdark !important;
}
.sl-wrapper button {
color: $text-default !important;
}
.gallery a {
display: inline-block;
position: relative;
overflow: hidden;
img {
transition: transform 0.3s;
&:hover {
transform: scale(1.1);
}
}
.gallery-caption {
color: $text-default;
position: absolute;
bottom: 0px;
background-color: #00000088;
width: 100%;
padding: 0.3rem 0.4rem;
}
} }

View file

@ -1,14 +1,13 @@
import * as sass from "sass"; import * as sass from "sass";
import Image, { eleventyImageTransformPlugin } from "@11ty/eleventy-img"; import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
import { DateTime } from "luxon"; import { DateTime } from "luxon";
import markdownit from "markdown-it"; import markdownit from "markdown-it";
import syntaxHighlight from '@11ty/eleventy-plugin-syntaxhighlight'; import syntaxHighlight from '@11ty/eleventy-plugin-syntaxhighlight';
import cacheBuster from 'eleventy-auto-cache-buster';
export default async function (eleventyConfig) { export default async function (eleventyConfig) {
// Filters // Filters
eleventyConfig.addFilter("dateLocale", function (value) { eleventyConfig.addFilter("dateLocale", function (value) {
return DateTime.fromJSDate(new Date(value)).toLocaleString({ return DateTime.fromISO(new Date(value).toISOString()).toLocaleString({
year: 'numeric', year: 'numeric',
month: 'short', month: 'short',
day: '2-digit', day: '2-digit',
@ -35,22 +34,13 @@ export default async function (eleventyConfig) {
}); });
eleventyConfig.addShortcode("figure", (url, alt, caption, width) => { eleventyConfig.addShortcode("figure", (url, alt, caption, width) => {
return ` return `
<figure class="styled-figure"> <figure>
<img src="${url}" alt="${alt}" width="${width || "700"}" /> <img src="${url}" alt="${alt}" width="${width || "700"}" />
<figcaption>${caption}</figcaption> <figcaption>${caption}</figcaption>
</figure> </figure>
`; `;
}); });
eleventyConfig.addShortcode("imageUrl", async (image, width) => {
const img = await Image(`./content${image}`, {
outputDir: 'dist/img/',
useCache: true
});
return img.jpeg[0].url;
});
//Markdown //Markdown
const md = markdownit({ const md = markdownit({
html: true, html: true,
@ -62,9 +52,6 @@ export default async function (eleventyConfig) {
// Syntax Highlighting // Syntax Highlighting
eleventyConfig.addPlugin(syntaxHighlight); eleventyConfig.addPlugin(syntaxHighlight);
// Cache busting
eleventyConfig.addPlugin(cacheBuster);
//File passthrough //File passthrough
eleventyConfig.addPassthroughCopy("content/robots.txt"); eleventyConfig.addPassthroughCopy("content/robots.txt");
@ -75,8 +62,6 @@ export default async function (eleventyConfig) {
return sorted; return sorted;
}); });
eleventyConfig.addWatchTarget("content/portfolio/**/*");
} }
export const config = { export const config = {

20
package-lock.json generated
View file

@ -12,12 +12,8 @@
"@11ty/eleventy": "^3.0.0", "@11ty/eleventy": "^3.0.0",
"@11ty/eleventy-img": "^6.0.1", "@11ty/eleventy-img": "^6.0.1",
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0", "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
"exifr": "^7.1.3",
"luxon": "^3.5.0", "luxon": "^3.5.0",
"sass": "^1.83.4" "sass": "^1.83.4"
},
"devDependencies": {
"eleventy-auto-cache-buster": "^0.7.0"
} }
}, },
"node_modules/@11ty/dependency-tree": { "node_modules/@11ty/dependency-tree": {
@ -1591,16 +1587,6 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/eleventy-auto-cache-buster": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/eleventy-auto-cache-buster/-/eleventy-auto-cache-buster-0.7.0.tgz",
"integrity": "sha512-OcICXm0XwbPJxhrCZyKU2cC3w9ciRUEUl1SBOKgImeroF5OwnaJ2xho/c0V+NRJ+NILXnCq9YR0Yr1dZ+yGP1w==",
"dev": true,
"license": "MIT",
"dependencies": {
"glob": "^10.3.10"
}
},
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "9.2.2", "version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@ -1704,12 +1690,6 @@
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/exifr": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/exifr/-/exifr-7.1.3.tgz",
"integrity": "sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw==",
"license": "MIT"
},
"node_modules/extend-shallow": { "node_modules/extend-shallow": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",

View file

@ -16,11 +16,7 @@
"@11ty/eleventy": "^3.0.0", "@11ty/eleventy": "^3.0.0",
"@11ty/eleventy-img": "^6.0.1", "@11ty/eleventy-img": "^6.0.1",
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0", "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
"exifr": "^7.1.3",
"luxon": "^3.5.0", "luxon": "^3.5.0",
"sass": "^1.83.4" "sass": "^1.83.4"
},
"devDependencies": {
"eleventy-auto-cache-buster": "^0.7.0"
} }
} }