Responsive layouts, information architecture, HTML, CSS and the details that make a site feel deliberate rather than assembled.
Systems Tinkerer Web design, automation and digital systems — understood beyond the surface.
I design websites, automate processes and solve technical problems where several systems, data sources or slightly stubborn configurations meet.
I have been online since 1997. Netscape Navigator was normal, AltaVista and the Yahoo directory were useful signposts, Germany's Btx world had not quite disappeared yet, and Amazon was still a young online bookseller rather than shorthand for global e-commerce. My 14.4 kbit/s modem announced every session acoustically; a slowly assembling page left enough time to make tea without disturbing the workflow.
More of the route from dial-up to todayWeb design is not a page-builder sport for me.
Page builders can be useful tools. They are simply not a substitute for understanding the web. When necessary, I go down to HTML, CSS, JavaScript, PHP, databases, DNS, mail flow or the interface between systems.
Server-side logic, structured data, SQL-backed systems and practical solutions that need more than a visual editor.
Connecting tools, reducing repeated work, moving data reliably and building workflows that survive everyday use.
Shopify, product data, marketplaces, fulfilment, operational processes and the technical realities behind a running shop.
SPF, DKIM, DMARC, Exchange, connectors, domains and the less glamorous layers that become very important when they stop working.
I follow the problem rather than the product category: browser, server, data, configuration, workflow or human process.
Not every website needs a CMS.
WordPress, Shopify, TYPO3 and page builders are useful when their functions are actually needed. I use them too. But a digital business card or compact company site often needs little more than clean HTML and CSS, with JavaScript or PHP only where something genuinely has to be dynamic.
That can mean fewer dependencies, less update choreography, a smaller attack surface and code that is easier to inspect when something goes wrong. It also gives the owner more control over future modules instead of making every small change a plugin decision.
Ask what the lean version would look likeFrom dial-up nostalgia to modern web systems.
Two screenshots are enough for the point. On the left: a current JeCo layout with modern hierarchy and responsive thinking. On the right: Linuxlog from the early 2000s, when hand-built pages and community projects were perfectly normal territory. I did not invent the internet. I merely watched it load slowly enough to allow tea.
Not decorative knowledge.
The actual building blocks.
Design matters. So does the material behind it. PHP, HTML, SQL, Excel logic and terminal work are not abstract buzzwords here; they are tools I actually use when something needs building, fixing, calculating or understanding.
Runs on the server, talks to databases and APIs, and creates exactly the dynamic behaviour a project needs — without installing a whole CMS just to change one value.
<?php
declare(strict_types=1);
$statement = $pdo->prepare(
"SELECT sku, stock, updated_at
FROM products
WHERE active = :active
ORDER BY updated_at DESC
LIMIT 12"
);
$statement->execute(['active' => 1]);
$products = $statement->fetchAll(PDO::FETCH_ASSOC);
foreach ($products as $product) {
syncInventory($product);
}
// [OK] 12 records mapped
// [OK] data layer remains pleasantly boring
The browser-native structure of a website. For a compact company presence, clean semantic HTML can be the entire foundation: fast, inspectable and pleasantly free of admin dashboards.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="dark">
<title>Systems Tinkerer</title>
</head>
<body>
<main>
<section class="hero" aria-labelledby="hero-title">
<h1 id="hero-title">Systems Tinkerer</h1>
<p>Built by hand when it makes sense.</p>
<a href="#contact">Contact Me</a>
</section>
</main>
</body>
</html>
Asks a database precise questions and returns useful data: stock, products, customers, reports or whatever the business actually needs to know.
WITH live_stock AS (
SELECT sku, manufacturer, stock, updated_at
FROM products
WHERE archived = 0
AND stock IS NOT NULL
),
recent AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY manufacturer
ORDER BY updated_at DESC
) AS rn
FROM live_stock
)
SELECT manufacturer, sku, stock
FROM recent
WHERE rn <= 5
ORDER BY manufacturer, updated_at DESC;
-- result: useful data, zero dashboard theatre
Direct access to DNS, runtimes, logs and system tools. When a graphical dashboard hides the interesting part, the command line usually does not.
$ brew update
==> Updating Homebrew...
==> Pouring portable-ruby-4.x.catalina.bottle.tar.gz
==> Homebrew collects anonymous analytics.
$ dig robnet.dev MX +short
10 mail.protection.example.
$ php -v
PHP 8.x (cli) — still doing actual work
$ system-check --mode curious
[OK] DNS answers
[OK] database awake
[OK] cache warm
[OK] operator contains caffeine
[AI] Pattern recognised: solve problem before buying plugin.
[DONE] No marketing department was required.
Business logic without building an application first: nested formulas, lookups and dynamic arrays can turn a stubborn workbook into a surprisingly capable tool.
=LET(
sku, A2:A500,
stock, B2:B500,
price, C2:C500,
lowStock, stock<5,
FILTER(HSTACK(sku,stock,price), lowStock, "all good")
)
=XLOOKUP(G2, Products[SKU], Products[Price], "not found")
=SORT(UNIQUE(FILTER(Orders[Customer], Orders[Status]="open")))
=SUMPRODUCT((Orders[Channel]="Amazon")*(Orders[Country]="DE")*Orders[Net])
[OK] nested logic resolved
[OK] dynamic array spilled without drama
[LEGACY] Ctrl+Shift+Enter matrix formula detected — approached respectfully
[BUSINESS] workbook rescued before someone added a seventeenth helper column
The terminal stays.
A website about technical curiosity is allowed to have one unnecessary-but-delightful command prompt. This one leads to my separate retro terminal project.
My interactive retro terminal combines technical notes, useful commands, small tools and a little command-line nostalgia.
Type start or go and press Enter.
Waiting for command: start or go
The terminal interface is currently available in English only.
You discuss the problem directly with the person who analyses and solves it. No sales layer, no handover to a mysterious technical department, and no automatic assumption that the answer must involve another subscription.
Sometimes the right solution is a polished website. Sometimes it is PHP, a database query, a DNS correction, a small script or a workflow that finally behaves as expected. I care more about the result than the label on the tool.
Contact Me Directly
Have an idea, a question or a technical problem that needs a practical look? Send me a brief, no-obligation description of what needs solving. I am based in Höchstadt an der Aisch and work on both regional and remote projects. You can write to me in English or German.