---
type: collection
section: projects
generated_at: 2026-04-19T10:52:35+02:00
total_entries: 5
---

# Selected Works

## My Go-To Debugging Tool for PHP

---
type: open_source
id: yg9gphpwzpoae7e2
title: My Go-To Debugging Tool for PHP
url: https://www.jakubpelak.com/opensource/cl
section: projects
package: cl
repository: https://github.com/lemmon/cl
---

As a developer who frequently relies on PHP's built-in web server for local development, I've always found myself in need of a debugging tool that is light, fast, and unobtrusive. While there are many powerful debugging tools available, I wanted something that wouldn't interfere with my workflow and would provide clear, readable output with minimal setup.

This led me to create `lemmon/cl`, a simple PHP console logger designed to make debugging a breeze.

The core of the library is a single function, `cl()`, which can be used to dump any variable to your server console. It's incredibly easy to use. Just pass a variable to the function, and it will be beautifully formatted in your terminal, courtesy of the powerful `symfony/var-dumper` component.

Here’s a quick look at how it works:

```php
// Demonstrate cl() with some example data
$exampleData = [
    'string' => 'Hello World',
    'number' => 42,
    'array' => ['apple', 'banana', 'orange'],
    'object' => (object)['name' => 'John', 'age' => 30],
];

cl($exampleData);
```

This will produce a color-coded, easy-to-read output in your console, allowing you to inspect variables without cluttering your web page.

For me, `lemmon/cl` has become an indispensable part of my development process. It’s a tool born out of a personal need, and I’m excited to share it with the open-source community.

If you’re looking for a lightweight and elegant debugging solution for your PHP projects, I encourage you to give `lemmon/cl` a try. You can find it on (link: https://github.com/lemmon/cl text: GitHub) and (link: https://packagist.org/packages/lemmon/cl text: Packagist).

## PHP Git Deploy

---
type: open_source
id: crlgc4hcwu6svpr6
title: PHP Git Deploy
url: >
  https://www.jakubpelak.com/opensource/php-git-deploy
section: projects
repository: https://github.com/lemmon/php-git-deploy
---

This project came out of one too many botched FTP uploads. I’d bounce between laptops, forget to pull the latest commit, and end up pushing an outdated build to production. Even the “reliable” FTP sync tools couldn’t solve the real problem: knowing exactly what changed—especially when switching machines. Sure, I could have gone full CI/CD, but spinning up containers, reinstalling dependencies, and shipping everything over slow FTP always felt like firing up a rocket to deliver a pizza.

(image: file://w4bqzlx1bt1tan9y)

PHP Git Deploy is the smaller, saner alternative. Drop a `_deploy/` directory onto your shared host, point it at your GitHub repo, and let a webhook trigger a real `git pull` on the server. The script verifies the request, fetches only the commits you’re missing, and runs Composer or other post-deploy commands right where your site lives. No more manual diff sessions, no mystery uploads, no wondering if your latest fix actually made it online.

Most everyday hosts still let PHP execute shell commands even when SSH is blocked—and that tiny loophole is enough. With PHP Git Deploy, dependencies install directly where the project lives, code stays perfectly in sync, and the process remains light enough for modest setups. By transferring only what changed, it’s even a little greener. (I’m not saying you should put “saves the rainforest” on the landing page—but I’m also not *not* saying it.)

It’s not the flashiest deployment system out there, but for anyone juggling client sites on budget hosting, it keeps things beautifully boring. Build, push, let the webhook do its thing, and move on. That’s all I wanted.

Grab the code from [github.com/lemmon/php-git-deploy](https://github.com/lemmon/php-git-deploy), drop it into your next webhosting project, and see how much calmer deployments can feel.

## Tablog Svelte

---
type: open_source
id: jicpe6nwzbqx48zu
title: Tablog Svelte
url: >
  https://www.jakubpelak.com/opensource/tablog-svelte
section: projects
repository: https://github.com/lemmon/tablog-svelte
---

As someone who enjoys building and theming with SvelteKit, I wanted to create a modern blog starter that’s both approachable and flexible. My motivation for this project came from my ongoing work on Tablo themes at (link: https://tablo.supply text: Tablo.Supply)—a collection of themes for Kirby CMS. I thought it would be a great exercise to port the Tablog theme to Svelte, bringing the same clean design and content-first approach to a new stack.

`Tablog Svelte` is an open-source demo blog built with SvelteKit, styled with Tailwind CSS, and powered by Markdown for content. It’s designed to be a solid starting point for your own projects—whether you want to run it as a server-rendered web app or generate a static site. Thanks to SvelteKit’s flexibility, you can deploy it to multiple targets and adapt it to your needs.

If you’re looking for a simple, modern blog foundation or want to see how the Tablo theme translates to SvelteKit, I encourage you to check out Tablog Svelte. It’s a practical example of how SvelteKit, Tailwind CSS, and Markdown can work together to create fast, beautiful, and content-focused websites.

(image: file://n6pofh31ql3ghttz srcset: default)

(image: file://2pirnrdheonmgorb srcset: default)

(image: file://bvnhai3sfeb9vt9r srcset: default)

## clsx

---
type: open_source
id: iil3ajdtq0k2f3wj
title: clsx
url: >
  https://www.jakubpelak.com/opensource/clsx
section: projects
repository: https://github.com/lemmon/clsx-php
---

When building dynamic web applications in PHP, constructing the `class` attribute for HTML elements can quickly become cumbersome. Developers often resort to a messy mix of string concatenation, ternary operators, and `if` statements directly within the HTML, leading to code that is hard to read and prone to errors.

This led me to create `clsx.php`, a PHP port of the incredibly popular JavaScript library (link: https://github.com/lukeed/clsx text: clsx). This lightweight and dependency-free PHP function provides an elegant and efficient way to construct CSS class strings conditionally, making your code cleaner, more readable, and easier to maintain.

The core of the library is a single function, `clsx()`, which accepts a variety of argument types. You can mix strings, arrays of strings, and associative arrays for conditional logic. The function intelligently processes them, filters out any "falsy" values, and returns a perfectly formatted, space-separated class string.

Here's a quick look at how it works:

```php
// Arrays with falsy values
echo clsx(['foo', 0, false, 'bar']);
// -> 'foo bar'

// Associative arrays for conditions
echo clsx(['foo' => true, 'bar' => false, 'baz' => isSomethingTrue()]);
// -> 'foo baz'

// Mix and match nested arrays
echo clsx(['foo'], ['bar', [['baz']]]);
// -> 'foo bar baz'

// Kitchen sink - combining all types
echo clsx('base-class', ['active' => $isActive], null, ['btn', 'btn-primary'], false);
// -> 'base-class active btn btn-primary' (when $isActive is true)
```

Key features include an intuitive API, flexible arguments, conditional logic support, automatic falsy value filtering, nested array support, deduplication, and zero dependencies.

For me, `clsx.php` has become an indispensable part of my PHP development process. It brings the elegance and simplicity of the JavaScript clsx library to PHP, and I'm excited to share it with the open-source community.

If you're looking for a clean and efficient way to handle CSS class construction in your PHP projects, I encourage you to give `clsx.php` a try. You can find it on (link: https://github.com/lemmon/clsx-php text: GitHub) and (link: https://packagist.org/packages/lemmon/clsx text: Packagist).

## Callouts (Kirby CMS Plugin)

---
type: open_source
id: 4bwsx3izozie328d
title: Callouts (Kirby CMS Plugin)
url: >
  https://www.jakubpelak.com/opensource/callouts-kirby-cms-plugin
section: projects
package: kirby-plugin-callouts
repository: >
  https://github.com/lemmon/kirby-plugin-callouts
---

Bring GitHub-style callouts (a.k.a. admonitions) to Kirby using the familiar `[!TYPE]` Markdown syntax. Your editors keep writing Markdown or KirbyText, and your site gets polished, theme-ready callouts.

I’ve built this plugin because, while Kirby’s Blocks field is great for structured layouts, I often prefer writing pure Markdown. Callouts make long-form content easier to scan and more expressive without leaving the keyboard. I first needed them for writing documentation on [tablo.supply](https://tablo.supply/), and I couldn’t find any existing implementation for Kirby.

> [!NOTE]
> The plugin actually powers this note. It scans your Markdown for `[!TYPE]` patterns and turns them into BEM-structured HTML elements.

Under the hood, it extends KirbyText parsing and performs a lightweight pass for callouts while leaving the rest to Kirby’s own Markdown engine. The output is theme-agnostic and uses predictable class names like `callout--note` or `callout--warning`. Two optional default styles are included, but you’re free to replace them entirely.

The syntax is identical to GitHub’s admonitions. You just start a blockquote with a type tag:

```markdown
> [!TIP]
> You can use any callout type you want — even custom ones like `[!COFFEE]` — and style them however your theme requires.
```

Although most useful in documentation or knowledge-base content, callouts can enhance almost any type of text. In future versions, I plan to include a dedicated Callout block for the Blocks field, translations, and optional Tailwind support. For now, you can already insert them inside Markdown blocks.

Head over to [github.com/lemmon/kirby-plugin-callouts](https://github.com/lemmon/kirby-plugin-callouts), drop it into your Kirby project, and watch your Markdown stand out with a bit more character.

