Projects

Everything here is or has been in real use. Links go to live sites, and the technical details are one click further.

It's live. Click and see for yourself.

  • pixelarena.pro
    PixelArena home page

    PixelArena and Playergency

    A gaming platform I have been building since 2017: today two sites, a shop, multiplayer mini-games and game servers.

    It started as a bot and website for Playergency, a Discord gaming community (formerly eRPe, active since 2016) that I do not own. Today one codebase runs playergency.com and pixelarena.pro.

    My role: application, bot, game servers and infrastructure

    • real-time multiplayer browser mini-games – checkers, hangman, watch parties, matchmaking (Colyseus, WebSocket)
    • CS2 and CS:GO game servers on Kubernetes with a panel: a live server console, game updates and restarts when nobody is playing; Minecraft in preparation
    • one account for both sites and the forum, with two-factor sign-in (Better Auth, SSO to Discourse)
    • a shop with payment integration and the Discord bot (discord.js)
    • a typed API on Hono and oRPC with MariaDB through Drizzle, a Bun and Turborepo monorepo, two SvelteKit front ends in Polish and English

    in development, 2026

    TypeScript · SvelteKit · Discord · .NET · Kubernetes

  • ghost-pizza.pl
    GhostPizza home page with the menu

    GhostPizza

    A pizzeria website rewritten from scratch: 100 in Lighthouse and no JavaScript on the public pages.

    The owner updates the menu in a simple admin panel.

    My role: design, code and deployment

    2026 – new version; the look comes from the first version I built in technical school

    Bun · Hono · Svelte

The infrastructure under all this

Two Kubernetes clusters, production and home, fully described in git, with monitoring, alerts and backups.

My role: design, build and operation

  • Talos
  • Cilium
  • Argo CD
  • Prometheus
  • Gitea CI

For organizations

  • szpital.oborniki.info
    Hospital website home page

    Hospital website

    Designed and written from scratch, deployed to production: Laravel, Filament, Inertia with React.

    My role: design, code and deployment

    2025

    Laravel · Filament · Inertia · React

  • ludzkigestoborniki.pl
    Home page of the organization

    Non-profit website

    A new website built with accessibility in mind, so it also works with a screen reader.

    My role: new website, accessibility, deployment

    • an accessibility statement
    • alt text for every photo
    • text recognized in scanned documents, so a screen reader can read it
    • an automated accessibility test (axe) with no errors
    • an admin panel with two-factor sign-in

    2026

    WordPress · WCAG

Intranet for ~1000 workstations

2026

A custom intranet for an organization with two locations and about 1000 workstations. It works fully inside the LAN, with no external runtime dependencies: SvelteKit and Hono on a Linux server, data in MariaDB.

My role: design, code and deployment

Internal system – the code belongs to the organization, so I do not show it. I am happy to talk about how it works in an interview.

  1. Read without signing in, sign in to edit

    Every employee on the network reads pages, news, documents and the canteen menu without signing in. Signing in is only needed to edit – and rights can be granted for a single page or a single news channel.

  2. Documents stay where they are

    The intranet does not copy document folders. It reads the existing SMB shares read-only, keeps file listings cached in the database (refreshed in the background), and PDFs open in the browser's built-in viewer.

  3. Meals for the second location

    Employees at the second location order meals for the current week, confirming their identity with their company account (LDAP, limited to one organizational unit). A signed-in admin sets the menu, the order arrives by email, and the kitchen gets a daily Excel summary.

  4. Anonymous reports, private by design

    The form stores no IP address or browser data. The original report is frozen, and personal details are erased automatically when the case is closed. Only one designated role has access – not even the system administrator.

  5. Self-contained

    Fonts, icons and the PDF preview are served from the same server – no CDN, nothing loaded from the internet. Confirmations and report notifications go out through the internal mail server.

Intranet architectureLAN – no external runtime dependenciesUsers on the LANNetwork edge (server)Application server (Linux)DataLAN servicesEmployee (no login)HTTPS – read content, no loginEditor / admin (signed in)HTTPS – sign in and editEmployee at the secondlocationHTTPS – meal orderAnonymous reporterHTTPS – anonymous formCanteen menu screenHTTPS – today's menu (auto-refresh)NginxTLS, reverse proxy,static filesAPI requestsHTML pagesAPI (Hono)Sessions + RBACper-resource permissionssession + permission check (writesonly)Background jobsshare listing refreshWeb app (SvelteKit)Database (MariaDB)content, permissions,audit, listing cacheSQLwrite listing cacheSMB file sharesread-onlySMB – list and read fileslistings refreshed in thebackgroundCompany directory(LDAP / AD)LDAP – meal orderer identityonlyMail serverinternalorder confirmations, reportnotificationsrequest handled by the APIbackground jobIntranet architectureLAN – no external runtime dependenciesUsers on the LANNetwork edge (server)Application server (Linux)DataLAN servicesEmployee (no login)HTTPS – read content, no loginEditor / admin (signed in)HTTPS – sign in and editEmployee at the second locationHTTPS – meal orderAnonymous reporterHTTPS – anonymous formCanteen menu screenHTTPS – today's menu (auto-refresh)NginxTLS, reverse proxy, static filesWeb app (SvelteKit)HTML pagesAPI (Hono)API requestsSessions + RBACper-resource permissionssession + permission check (writesonly)Background jobsshare listing refreshDatabase (MariaDB)content, permissions, audit, listing cacheSQLwrite listing cacheSMB file sharesread-onlySMB – list and read fileslistings refreshed in thebackgroundCompany directory (LDAP / AD)LDAP – meal orderer identity onlyMail serverinternalorder confirmations, reportnotificationsrequest handled by the APIbackground job

The intranet works fully inside the LAN, with no external runtime dependencies. Five groups of users connect over HTTPS to an Nginx server: an employee reads content without signing in, an editor or admin signs in and edits, an employee at the second location orders meals, a reporter sends the anonymous form, and the canteen screen shows the auto-refreshing menu of the day. Nginx handles TLS and static files, passes HTML pages to the SvelteKit web app and API requests to the Hono API on a Linux server. The API checks the session and permissions on writes only, keeps data in a MariaDB database, reads SMB file shares read-only, uses the company directory (LDAP) only to confirm the identity of meal orderers, and sends order confirmations and report notifications through the internal mail server. Background jobs refresh the share listings in the database cache.