Posts

  • The Solitary Builder: What Nietzsche Can Teach an Indie Developer

    For the last few weeks, this blog has been split in two. On one side, the technical posts: Postfix containers, procedural dungeons in GDScript, analytics dashboards that refuse to move. On the other, the quieter posts about Nietzsche, solitude, and the strange light of a Finnish autumn.

    I used to think these were two different versions of me. Lately I suspect they are the same conversation. Building something alone, with no audience and no guarantee, is not only an engineering problem or a marketing problem. It is a philosophical one. And the philosopher who understood that situation best was a half-blind, chronically ill man who sold almost no books in his lifetime.

    Read more »
  • Enkimail: How I Set Up My Own Transactional Email Service with Docker and Postfix

    Ever since I started building independent web apps and side projects, reliable email delivery has been a quiet, lingering headache. When you launch a new service, you need transactional emails immediately: account verifications, password resets, order notifications, and status alerts. The conventional advice is always the same: “Just plug in SendGrid, Mailgun, or Resend.”

    In January 2026, while building the foundation for Enkimail, I decided to take the opposite route: setting up and hosting my own dedicated transactional mail server from scratch using Docker and Postfix. Everyone asked why I would take on the deliverability baggage of mail servers in 2026. The reality? Self-hosting gives you complete architectural control, zero per-email pricing, and a crystal-clear understanding of mail deliverability that SaaS platforms keep hidden behind black boxes.

    Read more »
  • The Web Traffic Illusion: Why Social Media Falls Flat and the Dilemma of Direct Email Outreach

    Writing technical articles takes serious effort. Researching, writing code snippets, documenting real-world bugs, and publishing with the hope of contributing something valuable to the community is deeply rewarding—until you open your analytics dashboard the next day and hear nothing but crickets.

    If you maintain an independent tech blog or side project, you know the drill: you share a link on social media expecting some discussion, but the counter barely budges. Recently, I sat down to dissect the latest 7-day analytics on enkilabs.site, and the reality of traffic acquisition could not be more blunt.

    Read more »
  • Procedural Dungeon Generation in GDScript: Rooms, Corridors, and Enemy Spawning

    One of the most rewarding milestones in game development is watching a world construct itself from sheer mathematical logic. In roguelikes, action-RPGs, and dungeon crawlers, procedural level generation is the engine that drives infinite replayability. It transforms static architecture into a dynamic labyrinth where neither player nor designer knows what lurks around the next bend.

    When prototyping my catacombs RPG shooter in Godot, I needed a dungeon generation algorithm that was lightweight, predictable, and easy to debug. You don’t always need hyper-complex wave function collapse or Voronoi noise fields right out of the gate. A clean, modular implementation based on Random Room Placement, L-Shaped Hallway Carving, and Weighted Entity Spawning delivers fantastic results in just a few lines of GDScript.

    In this guide, we will implement a complete, production-ready procedural dungeon generator in Godot 4 using typed GDScript.

    Read more »
  • Low-Poly Asset Modeling and Optimization: From Image to Blender and Game Engines

    When building indie games or real-time 3D web experiences, asset production is often the single biggest bottleneck. Crafting unique props, weapons, characters, and environmental objects by hand can take dozens of hours per model. Even worse, beginners and experienced developers alike often run into the dreaded “engine import nightmare”: bloated vertex counts, chaotic UV maps, non-manifold geometry, and heavy uncompressed materials that bring frame rates to a crawl.

    To streamline this workflow, I developed an open-source pipeline: triposr_to_3d on GitHub. It converts a single 2D concept image or photo into a textured 360° 3D mesh (OBJ format) equipped with automatically baked PBR (Physically Based Rendering) texture maps.

    In this guide, we will explore how to configure the environment, generate assets from scratch, import and optimize them in Blender, and export clean, high-performance low-poly models ready for game engines like Godot, Unity, Unreal Engine, or Three.js.

    Read more »