Welcome ... I'm Kristof

I've been a passionate software developer for a very long time ... now I'm a tech-savvy IT manager and tinker with things like this blog in my free time ;)

Developing software never lets you go. It's a creative passion and for me it's the web that has fascinated me for almost 30 years.

My latest stuff is below and here is more about me. Meet me @kiko@indieweb.social.


Floral Magic XIV

Top 10 Pens of Jon Kantner

A while ago I posted my favourite pens of 2022. Many of them came from the pen of John Kantner and that was reason enough for me to highlight his most beautiful works in a post.

My “Best of Jon Kantner” selection is focused on the usefulness for UI’s to be created, i.e. all these things I urgently need to try out or one or the other will end up in one of my projects.

Continue reading ...

Sweat Lodge
Discoveries

Discoveries #24 - JavaScript & UI

I’m such a UI person. It’s a blast for me to discover and try out new interface components on the web and for the web. Simplicity and a tidy text desert is not my thing. Here are a few JavaScript UI gems I found the other day for you…

  • Frontle - BottomSheet
  • downupPopup.js
  • Pikaday
  • Add to Calendar Button
  • Tippy.js
  • Responsive Full Page Scroll
  • lucafalasco/scroll-snap
  • Bgzy.js
  • ScrollyVideo.js
  • Cal-Heatmap

Continue reading ...

Blue Perspective
Lightroom Presets

Breton Presets for Lightroom

‘Le Bretagne’ (Brittany) is one of the most beautiful and historic parts of Europe and always worth a visit. It combines the sometimes rugged English flair with the art of living of France, both scenically and in the architecture and the way people live there. My wife likes all things English and I am a friend of the french ‘Savoir Vivre’, and we were able to combine the two beautifully on a trip to Saint-Malo and Jersey. It was a photographers dream…

Continue reading ...

Seagull Meeting
Discoveries

Discoveries #23 - UI/CSS

As a visual person, I’m always thrilled when I come across small but subtle tips, tricks or even entire solutions that lift my understanding of what can be done with CSS to new heights. Of course, this month :has() is once again one of them, but also once again contributions from Bramus van Damme and Ahmad Shadeed, whose posts I read without exception because they are both so good at what they do.

  • Tree views in CSS
  • Scroll Shadows With JavaScript
  • CSS Mirror Editing in Edge DevTools for VS Code
  • Prevent Scroll Chaining With Overscroll Behavior
  • Display content in the title bar - Microsoft Edge Development
  • The large, small, and dynamic viewport units
  • An Interactive Guide to Flexbox in CSS
  • Flexbox Dynamic Line Separator
  • Style a parent element based on its number of children using CSS :has()
  • :has(): the family selector

Continue reading ...

Broken Onion
A New Blog

Provide Blog Metadata via JSON-LD

Centralization of a website's schema.org data in the HEAD instead of everywhere in the HTML

Chris Coyier’s post “Open Graph Blues“ got me thinking that my blog’s metadata, which are used by Google among others to index my pages, aren’t really at the cutting edge anymore. I took the markup of the individual elements of the pages via schema.org Microdata attributes from the standard Hexo template years ago and always adjusted it by value, but never questioned that there are more modern variants to provide the metadata.

It’s Ok for Google to use Microdata attributes, but the HTML code of my templates is getting more and more opaque, because next to these stick to the tags also those for the Indieweb, classes for CSS and last but not least those for the own indexing via Pagefind. There becomes from a simple

1
2
3
4
<article>
<h1>Title of my latest blog post</h1>
<p> ... </p>
</article>

quickly becomes a …

1
2
3
4
5
6
<article class="article-type-post h-entry" 
data-pagefind-body="" data-pagefind-meta="type:Article" itemscope itemprop="blogPost">
<h1 class="article-title p-name"
itemprop="name">Title of my latest blog post</h1>
<p> ... </p>
</article>

Lots of textual overhead and the hardest part is maintaining it over the long term. Better would be a complete search engine description in the header of a page, where also the other meta information is available. In one place and not spread all over the HTML code. JSON-LD to the rescue

Continue reading ...

German Roofage
A New Blog

Pagefind UI and URL Parameters

UPDATE: Parts of the original post are outdated, as Pagefind DOES offer a way to preset a search string, which just hasn’t been documented yet … \o/ … see below.


A couple of days ago I wrote about my attempt to integrate Pagefind in my blog. In the meantime, I further refined the indexing by excluding more content areas and adding more for the metadata to make the search results even better.

But one thing was still missing: controlling the search via url parameters, so that you can actually consider the page as a search page. I came across this in a post about the sense and nonsense of Open Graph attributes and other search engine related metadata nowadays. Google, for example, likes to use JSON-LD and when describing the site you can define a search page which then makes it easier to search the site directly via Google … see Sitelinks search box (WebSite) structured data

In my implementation, I decided to adapt the Pagefind UI for myself instead of developing everything from scratch via JavaScript. There are always some limitations with pre-built solutions, but I want to show here that they are actually none for the inclusion of a url parameter.

Continue reading ...

Poppy Green
Golem

Radio Garden

Free, registration-free and simply cool - Travel through the radio stations of the world with Radio Garden

In the age of streaming services, radio may seem out of date, but it still surrounds us constantly, even if we often hardly notice it - in the car, on the public transport, at work or simply at home in the kitchen. One strength of the old medium is that it presents us with music we haven’t heard before, away from our playlists on Spotify or iTunes.

The easiest way to rediscover new artists or entire genres of music is to pick a radio station at random. It’s precisely this lack of control, the being at the mercy, the sometimes unpredictable that makes the medium so appealing to many - and with digital streaming, many of the world’s stations are just a tap away.

As is so often the case in the modern world, it’s the oversupply that leaves some confused and frustrated. You first have to be able to pick out what you might like from the gigantic haystack of options. For this purpose, there are little helpers that more or less independently suggest what you might listen to. One of them stands out from the crowd because, on the one hand, it does not pursue commercial interests and, on the other hand, it approaches the station search very intuitively: Radio Garden (https://radio.garden).

Continue reading ...

Proud Vespa
A New Blog

Integration of Pagefind in Hexo

Adding a low-bandwidth local search to a static Hexo-powered website

From the beginning of this blog I wanted to provide some kind of full text search in order to give my users the ability to find stuff by keyword.

There are a few Hexo plugins that have approached the subject, but it was not really satisfactory and performant. So I relied on the worlds biggest search engine: Google. A search button, which drives out a small input field and with the pressing of the ENTER key the form was sent via GET to //google.com/search.

Google Site Search on kiko.io

The procedure was simple, but also burdened with the fact that I always expose my users to Google. At least until now … :)

Bryce Wray set me on a new path with his post Sweeter searches with Pagefind, in which he talks about his experience with the still fairly fresh tool Pagefind

Pagefind is a fully static search library that aims to perform well on large sites, while using as little of your users’ bandwidth as possible, and without hosting any infrastructure …

--- Liam Bigelow @ pagefind.app

Pardon me? A full text search for SSG’s running completely in the browser? It sounded so great that I had to try it right away. And what can I say … it not only works fantastically well, but is also extremely easy to implement. Of course, you have to consider a few things, especially with regard to the SSG Hexo I use, but I didn’t find any big hurdles, also because the tool is so well documented. Let’s see what my implementation looks like…

Continue reading ...

Vintage Boxes

Favourite Pens of 2022

Every year CodePen publishes a list of the 100 most “liked” pens on their site: The Most Hearted of 2022. It’s always exciting to scroll through the list and marvel at the incredibly good work of CSS artists.

My favorite in terms of CSS coding art this year is the work A moment of pure CSS by Ben Evans. Absolutely amazing what he does with pure CSS:

Really ... no image involved!

From all these works you can take a lot of know-how for yourself, but many of these pens have no practical use at first, i.e. you can’t really use them directly on your own website. They are art. Some of them impressed me not only because of their creativity, but I saved them on my own Trello list to try them out in one of the next projects. Partly they are clever approaches regarding usability, partly more or less standard functions were implemented in a visually impressive way. Some of them need some JS to work, sime of them not. Let yourself be inspired …

Continue reading ...

Black Window
Discoveries

Discoveries #22 - Tips/Tricks

As someone said the other day? “January is the Monday of the year”. How true. After programming myself a new workflow for creating my discoveries (see Generate Content from Trello) at the end of last year, I wanted to try it out again right away and give you a list of tips and tricks for starting 2023.

  • 6 steps to get verified on Mastodon with encrypted keys
  • Generate a Pull Request of Static Content With a Simple HTML Form
  • My Wonderful HTML Email Workflow, using MJML and MDX for responsive emails
  • How to View Build Logs for GitHub Pages
  • Enabling IntelliSense for GitHub Actions workflows in VS Code
  • 9 JavaScript Console Tips That Will Improve Your Debugging Skills
  • Fun with console.log()
  • Load hierarchical data from MSSQL with recursive common table expressions
  • An HTML-first Mental Model
  • Project Documentation with Hexo Static Site Generator

Continue reading ...

Orange Shades
A New Blog

Generate Content from Trello

Use Trello board as bookmark data source for generating Hexo content

I’m collecting/bookmarking links to interesting website post on a public Trello board and aggregating them from time to time in a special post series called Discoveries, where I present 10 of them in one post on a specific topic.

Writing these summaries is currently still a bit time-consuming, because in addition to the link, the name of the author and a small description, I would also like to display a screenshot of the page in each case … and it is still a completely manual process.

After selecting the 10 links I want to talk about, I first create a new post for my Hexo blog and then process the links as follows:

  1. Creating, resizing and saving the screenshot
  2. Creating a new section in the post
  3. Setting a key for the post based on the title
  4. Setting the title
  5. Setting the author
  6. Setting the screenshot file

I do use two tag plugins (tag-anchorlist and tag-discovery) for this in the post draft, but despite that, it’s quite time-consuming and always the same procedure that can be wonderfully automated… and here I’d like to write about how I approached this task, while I’m working on it.

Continue reading ...

Bird House
Discoveries

Discoveries #21 - Sites & Pages

Websites always have a certain purpose and depending on what you want to do with it, there are pre-designed tools, that make it very easy to get started. In this issue of Discoveries I have collected a few such enablers.

Also included are two hosting offers that address the hot topics of #Fediverse and #IndieWeb in times of #TwitterMigration.

  • Webmention Analytics
  • Indiekit
  • Masto.host
  • Static Timeline Generator
  • Glossary Page Template
  • Markdoc
  • docs.page
  • JPage
  • GitHub OCTO: Flat Data
  • BatNoter

Continue reading ...