Sign in

Niels Leenheer

@html5test.com
1.1K followers 304 following 614 posts

CTO of Salonhub. Creator of html5test.com, writes at nielsleenheer.com, team @FronteersConf, Google Developers Expert, Invite me to speak at your event.

PostsRepliesMedia
Niels Leenheer @html5test.com · 29/09/2026
Chaos in my office as I am testing the tech setup for the @fronteers.bsky.social Dark Mode conference.
140
Niels Leenheer @html5test.com · 25/09/2026
The result is a renderer that exactly matches a real printer. And it does not just support the code my own projects generate…
100
Niels Leenheer @html5test.com · 25/09/2026
And to render receipts, you need a bitmap font at specific sizes. And there wasn't yet one... So I created a bitmap font editor... I know 🤪
100
Niels Leenheer @html5test.com · 25/09/2026
But... what I really wanted is a renderer. For two reasons - some printers only support bitmaps, and I wanted to be able to print on those too. But I also wanted to have a preview to see how a receipt rendered.
200
Niels Leenheer @html5test.com · 25/09/2026
From the moment I've been working on this - 15 years ago - I've always wanted to build a decoder, so that I could inspect what we actually send to the printer... every single command that it receives.
100
Niels Leenheer @html5test.com · 25/09/2026
And you end up with bytes. Just raw bytes that you send to the printer - also with libraries that I created...
100
Niels Leenheer @html5test.com · 25/09/2026
But let's rewind. You start with some JavaScript and my ReceiptPrinterEncoder library to create the actual receipt. From JavaScript, in the browser or a server. Or using Capacitor or Electron. I've build integrations for everything. point-of-sale.dev
100
Niels Leenheer @html5test.com · 25/09/2026
And this is what I've been spending my evenings on lately. A decoder for receipt printer protocols. You can take the bytes that get send to a receipt printer and inspect the commands that are inside of it. And... actually see a render of the receipt. Only useful for a hand full of people. And me.
2160
Niels Leenheer @html5test.com · 25/09/2026
Yeah… pretty familiar with StarLine 😅
010
Niels Leenheer @html5test.com · 24/09/2026
For 15 years I've been obsessed with receipt printers and the protocols that they speak. I created an open-source encoder that can run in the browser can create receipts and send them to the printer. That turned into a whole project that is now used by dozens of products: point-of-sale.dev
A dozen receipt printers - only a fraction of my "lab"
5625
Niels Leenheer @html5test.com · 09/09/2026
At the train station in Freiburg after a very lovely @smashingconf.com, waiting on the night train back home. Been lovely talking to all the other attendees, speakers and organisers. See you next year!
060
Niels Leenheer @html5test.com · 07/09/2026
Lovely venue for the @smashingconf.com Jam Session!
092
Niels Leenheer @html5test.com · 04/09/2026
Oh look 👀 it’s an oscilloscope that actually fits in a suitcase. I wonder what airport security is going to say when they see this thing going through the scanners. I just don’t have an room for clean clothes left in my luggage. But that is a price I am willing to let you pay. Smell you later! 👋🏻
091
Niels Leenheer @html5test.com · 29/08/2026
@letorey.co.uk When in Rome…
370
Niels Leenheer @html5test.com · 20/08/2026
Canvas rendering is better. Slightly. Barely.
010
Niels Leenheer @html5test.com · 20/08/2026
CssDOOM on a payment terminal. Yeah… unfortunately not really playable.
5251
Niels Leenheer @html5test.com · 19/08/2026
Just when I wanted to take my car this crow swooped down from garage and landed in front of me. Not scared, just looking at me. After I held my arm up it jumped on my hand and pecked it a couple of times, then looked at me and jumped back on the car. Weird.
150
Niels Leenheer @html5test.com · 12/08/2026
Even a couple of solar spots are visible!
1100
Niels Leenheer @html5test.com · 12/08/2026
Lovely way to spend the evening #eclipse
2150
Niels Leenheer @html5test.com · 15/07/2026
Just noticed that my Safari bookmarks still have folders for Phonegap, Adobe AIR and Sensha Touch… Kind of dates me and it shows how often I use bookmarks 😅
7190
Niels Leenheer @html5test.com · 06/07/2026
Really cool! 😎 What are you using to generate the signal? I’ve been playing with WebAudio to generate a walkable DOOM level on the oscilloscope and showed it off at the #cssday conference last month.
1182
Niels Leenheer @html5test.com · 19/06/2026
The #cssday photos have been published and they are great. Love them. cssday.nl/2026/pix/pho... But these... These made my day. These were taken during my talk and it makes all of the work I put into it worth it. ❤️
1393
Niels Leenheer @html5test.com · 12/06/2026
That’s a wrap! Thank you #cssday for having me. Loved every second!
0150
Niels Leenheer @html5test.com · 12/06/2026
This feels dangerous to do 3 hours before my #cssday talk... the upside, if anything goes wrong during the demo's I can just blame @bram.us 😅
2100
Niels Leenheer @html5test.com · 10/06/2026
Multiplayer cssDOOM is ready for tomorrow! Attendees will be able to play deathmatch games against each other! CSS is awesome! #cssday
1201
Niels Leenheer @html5test.com · 10/06/2026
Great talk by @cydstumpel.nl at the-web-you-want.org
0121
Niels Leenheer @html5test.com · 10/06/2026
Dropped my stuff off at the #cssday venue. Like you do. Totally normal.
030
Niels Leenheer @html5test.com · 10/06/2026
On my way to #cssday, having a stop with some coffee and working on finishing my demos. What can go wrong. Totally prepared. Like a professional.
080
Niels Leenheer @html5test.com · 08/06/2026
Another test of rendering engine separation from the game loop. Four renderers: the original line renderer I did for the oscilloscope, the CSS renderer, but also 2D Canvas and WebGL. And all rendering exactly the same scene. And the browser will happily just render all four at the same time.
1122
Niels Leenheer @html5test.com · 08/06/2026
Packing for my #CSSDay talk later this week. And it is a bit much.
2160
Niels Leenheer @html5test.com · 05/06/2026
The first thing that popped into my head when I saw this was my bad CSS DOOM sprite occlusion clipping... Sorry, all I can think of right now is my #CSSday talk.
090
Niels Leenheer @html5test.com · 03/06/2026
This weekend was full-panic mode for #cssday as I had not a single slide or even an outline. And the conference is next week. It took a couple of days, but last night I finished it and thought I could relax again. Did a full run-through today and I’m about 15 minutes long. Back to panic mode.
2170
Niels Leenheer @html5test.com · 27/05/2026
OK, OK... Fine! Added a new renderer subclass that fixes the camera on the players x, y and z axis with a fixed distance. Enabled the player sprite from deathmatch mode and some minor css tweaks to hide ceilings and the hud.
070
Niels Leenheer @html5test.com · 27/05/2026
Why are you doing this to me...?
350
Niels Leenheer @html5test.com · 27/05/2026
This is all your fault. I take no responsibility.
2130
Niels Leenheer @html5test.com · 26/05/2026
One of the things I started doing recently is to add recording and visualisations straight into my demos. Great to export and then include in a talk. In this case I am showing 4 different renders, from my original oscilloscope version of DOOM and several intermediate steps of the CSS renderer.
381
Niels Leenheer @html5test.com · 26/05/2026
I guess this is a sign that I should start with my #CSSDay presentation 😬
000
Niels Leenheer @html5test.com · 16/05/2026
Multiplayer cssDOOM with network support can't be that hard...
2160
Niels Leenheer @html5test.com · 15/05/2026
Multiplayer cssDOOM on your phone? Yeah, it works. Just no good way to control it. But yeah. It can render two scenes side-by-side without any major issues. 🤯 If only you could start a network game from your phone so your friends can join you… coming soon 😱
020
Niels Leenheer @html5test.com · 13/05/2026
Made progress with cssDOOM last evening. Created a special multi-player deathmatch version for CSS Day that runs in kiosk mode. It uses a video wall controller to split up the screen into sections. On the computer it is just one full screen window, but it drives two separate screens.
1153
Niels Leenheer @html5test.com · 11/05/2026
Sometimes your rabbit hole has another rabbit hole which has another rabbit hole. Not even sure how many levels deep I am in this right now. Yes - network cssDOOM is coming – want to do it right – but last night I spend 4 hours working on recreating the DOOM letters as COLR/CPAL web font.
071
Niels Leenheer @html5test.com · 09/05/2026
Deathmatch cssDOOM is coming soon! Still plenty of small issues, but it works already pretty well. Added side-by-side and also multi-window. Has one advantage, that if the other player gets annoying and tries to kill you, you can just close his window and you win.
1162
Niels Leenheer @html5test.com · 09/05/2026
Back in the hotel working on cssDOOM while I wait for roomservice curry. Had a great evening listening to Ren and The Big Push.
010
Niels Leenheer @html5test.com · 08/05/2026
I’m here. But the queue goes the other way all around the block. Gonna take a while, but it’s gonna be amazing.
140
Niels Leenheer @html5test.com · 08/05/2026
This is happening! Multi-player cssDOOM death match. Rendering was already pretty much decoupled from gameplay, so the two side-by-side viewports were *almost* free. Still so much work to do, but made significant progress. In other news, I did not get much sleep last night.
2262
Niels Leenheer @html5test.com · 07/05/2026
Am I really doing this? Maybe... Not even sure if I can pull this off in about a month or so before CSS Day. Wouldn't it be cool if you could play cssDOOM during the breaks and try to beat other attendees in a two-player Death Match game. And I still have to write my talk too... cssday.nl
0110
Niels Leenheer @html5test.com · 06/05/2026
I feel o… never mind. I’m just going to smoke my pipe in the rocking chair on the porch.
130
Niels Leenheer @html5test.com · 04/05/2026
When you come home after 3 days away with the family and forgot to wind the clock. It’s 8:19.
060
Niels Leenheer @html5test.com · 01/05/2026
You beat me by 3 years!
110
Niels Leenheer @html5test.com · 27/04/2026
Good morning from Düsseldorf! #btconf is about to start.
030