perkun.eu Services Portfolio Blog About Contact PL

Blog

Articles & guides

4/7/2026

Astro and i18n — full bilingualism without headaches

Astro 5 has built-in i18n routing. Translations as TypeScript const. hreflang in head. Blog in two languages via file prefix. Complete setup step by step.

Read more →
3/25/2026

Docker Compose healthchecks — why containers restart in the wrong order

depends_on: db does NOT wait until the database is ready. depends_on with condition: service_healthy + healthcheck = correct startup order. Complete docker-compose.yml with examples.

Read more →
3/4/2026

Filament CMS as the backend for a subscription platform — a case study

We built a subscription platform with Filament v4 as the admin panel. 3 weeks of development, the client runs it themselves without training. What worked, what didn't.

Read more →
2/11/2026

Solana Pay — transaction verification and avoiding timeouts with public RPC

Public Solana RPC has rate limiting and timeouts. Private RPC (Helius free tier) = stable, < 1s responses. Complete PHP code for USDC transaction verification.

Read more →
1/20/2026

Claude Sonnet 4 in production — what it actually does in a developer's daily work

Claude Sonnet 4 generates working production code for known frameworks. Best-in-class code analysis — understands project context, not just a snippet.

Read more →
12/1/2025

Embedded C++ on ESP32 — patterns that save your project from WDT resets

WDT (Watchdog Timer) resets ESP32 when loop() blocks too long. 3 patterns: non-blocking delays with millis(), FreeRTOS tasks, yield() in long loops.

Read more →
11/3/2025

Backup on QNAP — the 3-2-1 strategy without an enterprise budget

3-2-1 strategy: 3 copies of data, 2 different media, 1 off-site copy. On QNAP: RAID drives + Backblaze B2 via HBS 3. Total cost: ~$5/month.

Read more →
10/14/2025

How to test middleware in Laravel — practical patterns with Pest

Middleware is tested via full HTTP requests in Pest, not by unit testing the class itself. You test behavior, not implementation. Patterns for auth, roles, and external services.

Read more →
9/22/2025

React Query vs SWR — server state management in 2025

React Query (TanStack Query) = full toolkit with mutations, devtools, optimistic updates. SWR = simpler, smaller bundle. For most projects React Query wins.

Read more →
8/18/2025

MikroTik + Let's Encrypt — automatic SSL on a router

MikroTik RouterOS 7.x supports Let's Encrypt through built-in certificate management. Certificate is issued and renewed automatically. HTTPS on the panel without any external server.

Read more →
7/7/2025

Brevo SMTP in Laravel — free transactional email up to 300 emails/day

Brevo (formerly Sendinblue) has a Free plan with 300 emails per day and SMTP. In Laravel: MAIL_MAILER=smtp, 5 .env variables, done. Zero mail server configuration.

Read more →
6/16/2025

Three.js particle effects — fire effect in a hero section, step by step

Three.js BufferGeometry with 2000 particles + custom shader = fire effect behind the hero. 60fps on desktop, CSS fallback on mobile. The whole canvas is < 50 lines of JS.

Read more →
5/12/2025

GSAP ScrollTrigger — animations that don't kill Core Web Vitals

GSAP ScrollTrigger creates scroll animations, but naive implementation destroys LCP and CLS. Three rules: animate transform/opacity, lazy load GSAP, prefers-reduced-motion.

Read more →
4/7/2025

Astro 5 + Tailwind 4 — the stack for company websites in 2025

Astro 5 = Content Layer API (faster builds), Actions. Tailwind 4 = zero config, CSS-first configuration. The stack for landing pages and company websites in 2025.

Read more →
3/3/2025

Filament v4 — what changed and how to migrate from v3

Filament v4 changes signatures of key methods. Migration from v3: find+replace 5 patterns, takes an hour for a typical project. Full list of breaking changes with examples.

Read more →
2/10/2025

Solana USDC — why crypto payments are worth considering for SaaS

USDC (stablecoin 1:1 to USD) on Solana = no volatility, fee < $0.001, no chargebacks, global reach. For niche SaaS with an international customer base.

Read more →
1/13/2025

Running LLMs locally with Ollama — when you don't want to send data to the cloud

Ollama runs LLMs locally (Llama 3, Mistral, Phi-3). OpenAI-compatible REST API. 8 GB RAM handles 7B models. Data never leaves your server.

Read more →
12/9/2024

Solar installation SMS alert system for under $15

Twilio SMS API + Python + Node-RED. Cost: $0.04/SMS. If the installation produces < 20% of the seasonal norm for 2 hours — SMS. Twilio Free Trial = $15 credit to start.

Read more →
10/21/2024

ESP32 OTA updates — firmware updates without touching the device

ESP32 supports OTA (Over-the-Air) updates over WiFi. HTTP OTA from your own server, dual-partition rollback, watchdog timer. The device updates itself without physical access.

Read more →
9/3/2024

WooCommerce dropshipping — automatic margin sync with your supplier

Per-category margin multiplier + automatic calculation at XML import = zero manual price setting. Changing the margin for a category is 1 config entry.

Read more →
7/30/2024

Astro 4 — why we rewrote our site from static HTML

Astro generates static HTML with zero JavaScript by default. Bilingual support, Markdown blog, GSAP animations, Three.js — everything works without a React runtime.

Read more →
6/25/2024

InfluxDB 2.x — migrating from v1 and the new Flux queries

InfluxDB 2.x has a new query language (Flux), new data organization (buckets), and a built-in UI. Migration from v1 takes an hour. Flux query examples.

Read more →
5/14/2024

How hairpin NAT works in MikroTik and why it matters

Hairpin NAT allows computers on the LAN to reach the public IP and hit a server on the same network. Without it, curl from LAN does not work.

Read more →
4/8/2024

QNAP Container Station — a full Docker environment without a dedicated server

QNAP Container Station = Docker on a NAS. SSH on port 222, docker compose up, production containers. Path to the Docker binary and known pitfalls.

Read more →
3/11/2024

Solana Pay — crypto payment integration in PHP without libraries

Solana Pay is a URL specification for SOL/USDC payments. In PHP you verify transactions via the Solana JSON RPC API — one endpoint, no libraries.

Read more →
2/19/2024

n8n self-hosted — automations that replace Zapier for free

n8n is open-source Zapier. Docker Compose, port 5678, 400+ integrations. Fair-code license — self-hosted with no execution limits.

Read more →
1/22/2024

Claude API in practice — building a support ticket classifier

Claude API over HTTP — messages endpoint, claude-3-haiku model, classifying support tickets in < 1s. Python + requests, zero frameworks.

Read more →
11/27/2023

How to deploy Laravel with CI/CD without paying for expensive services

GitHub Actions (free) + your own server = complete CI/CD for Laravel without Forge, Vapor, or Envoyer. Full workflow YAML examples.

Read more →
9/18/2023

React Native vs Flutter in 2023 — which to choose for your mobile app

React Native wins if you have a web team. Flutter wins if animation performance matters. Practical comparison from a project perspective.

Read more →
7/4/2023

Docker on QNAP NAS — a server at a fraction of VPS cost

QNAP NAS with Container Station is a full Docker environment for free (if you already have a NAS). 8 GB RAM handles 10+ production containers. SSH, docker compose up.

Read more →
5/15/2023

Tuya Cloud API — control smart home devices from your own application

Tuya Cloud API lets you control Tuya devices programmatically. Python + requests, OAuth token, GET/POST to the API. No dependence on the official app.

Read more →
3/20/2023

Filament PHP — the best Laravel admin panel you never knew about

Filament builds a fully functional CRUD in Laravel without writing HTML. Tables, forms, actions, filters — in 50 lines of PHP.

Read more →
1/30/2023

Grafana + InfluxDB + MQTT — IoT dashboard from scratch

Three components of the stack: Mosquitto broker, InfluxDB as the time-series DB, Grafana as the visualization layer. Docker Compose, step-by-step configuration.

Read more →
11/22/2022

XML import of 2,700 WooCommerce products in < 5 minutes

Standard WooCommerce import plugins are too slow for large XML feeds. A custom PHP importer with EAN diffing, batch processing, and disabled WooCommerce hooks cuts import time from 2h to < 5 min.

Read more →
9/5/2022

Node-RED and Venus OS — solar installation monitoring for 200 PLN

Venus OS on Raspberry Pi 4 + Node-RED + InfluxDB = full monitoring of a Victron solar installation. Configuration, Node-RED flow for data collection, Grafana dashboard.

Read more →
7/11/2022

MikroTik RouterOS API in Python — network automation step by step

The RouterOS API lets you programmatically manage MikroTik routers. Python with the routeros-api library: fetching interfaces, adding NAT rules, exporting configuration.

Read more →
4/28/2022

ESP32 and Modbus RTU — reading data from industrial sensors

Modbus RTU is a communication protocol for industrial sensors. ESP32 with RS485 and the ModbusMaster library reads data from any Modbus device. Code, wiring, and gotchas.

Read more →
2/14/2022

nginx FastCGI cache for WordPress — a practical guide

FastCGI cache in nginx lets you serve WordPress pages without involving PHP or MySQL. Step-by-step configuration, WooCommerce exclusions, cache invalidation after updates.

Read more →
11/5/2021

Laravel or Symfony in 2021 — our choice and why

Both PHP frameworks are mature and production-ready. After several years with both, we chose Laravel as our default. We explain the criteria and when Symfony makes sense.

Read more →
9/20/2021

First steps with MQTT and Raspberry Pi — the IoT protocol worth knowing

MQTT is a publish-subscribe protocol for IoT — lightweight, reliable, runs on Raspberry Pi. Installing Mosquitto, your first Python publisher and subscriber, step by step.

Read more →
6/10/2021

WooCommerce vs Shopify — what to choose for a dropshipping store in Poland

We ran both types of stores. A concrete comparison from the perspective of a Polish dropshipper — payment gateways, XML import, costs, code control.

Read more →
3/15/2021

Why we chose Docker Compose over bare-metal for every project

After a year of experimenting, we decided: every new project starts on Docker Compose. We explain why, and when bare-metal still makes sense.

Read more →