Efe Marko Güldere

Junior Developer and IT Operations Specialist at JELD-WEN Eesti AS, based in Rakvere, Estonia.

I build web applications, maintain IT infrastructure, and work on homelab and open source projects in my spare time.

Most recently I've been sending fixes upstream: three merged into projects I don't maintain.

Work

One employer, three roles.

  1. Apr 2026 - present
    JELD-WEN Eesti AS logo

    Junior Developer and IT Operations Specialist

    JELD-WEN Eesti AS

    Building web applications and keeping the IT infrastructure behind them running.

  2. Sep 2024 - Mar 2026
    JELD-WEN Eesti AS logo

    Web Developer (internship)

    JELD-WEN Eesti AS

    The third internship at the same company and the first on the development side, which turned into the developer post above.

  3. Feb 2023 - Aug 2024
    JELD-WEN Eesti AS logo

    IT Support Technician

    JELD-WEN Eesti AS

    Two internships at the same company, on the IT support side.

Projects

13 things I've built, newest first. Language, stars, dates and live links come from the GitHub API when the site builds.

Public repositories by primary language 58 classified, forks excluded
  1. JavaScript 17
  2. HTML 9
  3. Shell 5
  4. TypeScript 5
  5. Java 4
  6. Python 4
  7. PowerShell 3
  8. Go 2
  9. PHP 2
  10. Rust 2
  11. CSS 1
  12. Mermaid 1
  13. PLpgSQL 1
  14. QML 1
  15. Svelte 1
ha-relay-panel in use 2026

ha-relay-panel

Turns relays into simple thermostats in Home Assistant.

Read moreShow less

Running a relay as a thermostat in Home Assistant means hand-writing an automation for every room. This panel puts relays on a board, binds each to a temperature sensor and a set point, and writes the automation itself. If a sensor goes unavailable, the relay switches off.

  • JavaScript
  • Node
  • MariaDB
  • Home Assistant
  • self-hosted
JavaScript 2 ★ Updated Oct 2026
hyprland-dots in use 2025 - 2026

hyprland-dots

My Hyprland desktop shell, written from scratch in QML.

Read moreShow less

Most Hyprland setups stitch together other people's widgets, each with its own look and its own bugs. I wrote the whole shell in QML instead (bar, notifications, launcher and on-screen displays), so it all looks and behaves the same. It's what I run every day.

  • QML
  • Quickshell
  • Hyprland
  • Wayland
QML 5 ★ Updated Oct 2026
Peaport dashboard with container counts, live usage, container states and disk usage 2026

peaport

A web control panel for Podman and Docker, with users and roles.

Read moreShow less

Running containers for other people means sharing SSH or handing out the engine socket, which is root on the host. Peaport puts Podman or Docker behind a web panel with per-user roles: containers, Compose stacks, images, volumes, networks and pods, plus encrypted secrets, an audit log, live metrics and a terminal in the browser.

  • TypeScript
  • Next.js
  • Podman
  • Docker
  • RBAC
TypeScript Updated Oct 2026
cc2-commander in use 2026

cc2-commander

Shares the Elegoo CC2 printer's single MQTT connection with every tool.

Read moreShow less

The Elegoo Centauri Carbon 2 has a single MQTT slot, so only one client can talk to it at a time. This service holds that slot and shares it: a web dashboard, Mainsail and Fluidd through a Moonraker-compatible API, Prometheus and Telegram all work at once. It began as a fork of runnane/elegoo-web.

  • TypeScript
  • Bun
  • MQTT
  • Moonraker
  • Prometheus
TypeScript Updated Sept 2026
Wren main window showing the home directory in grid view 2026

wren

A GNOME-style file manager, written in Rust on GTK4.

Read moreShow less

A file manager written from scratch with GTK4 and libadwaita. Tabs keep their own history, grid and list views show cached thumbnails, copies report progress and ask before overwriting, renames can be undone, and the keyboard shortcuts match Nautilus.

  • Rust
  • GTK4
  • libadwaita
  • GNOME
Rust 1 ★ Updated Oct 2026
tailboard in use 2026

tailboard

One page for all my self-hosted services and their status.

Read moreShow less

A dozen self-hosted services means a dozen bookmarks and no idea which one is down. Tailboard puts them all on one page with their status, so I can see what's running and what's down in one place.

  • self-hosted
  • homelab
  • dashboard
HTML Updated Oct 2026
tailboard-companion in use 2026

tailboard-companion

Puts my Tailboard on every new tab, in a popup, and on right-click.

Read moreShow less

The browser-side half of Tailboard. It shows the dashboard on every new tab, adds a toolbar popup that searches my links, an address-bar keyword, and a right-click launcher grouped by group. It opens each link's reachable address, so a service stays one click away even when its main URL is down.

  • browser extension
  • Manifest V3
  • Firefox
  • Chrome
JavaScript Updated Oct 2026
uptime-kuma-compact-theme applied to a status page with placeholder monitors 2026

uptime-kuma-theme

A compact, full-width theme for Uptime Kuma status pages.

Read moreShow less

Uptime Kuma's status page wastes a wall-mounted screen: wide gaps, uptime numbers overlapping names, ragged heartbeat bars. This is one CSS file for the Custom CSS field that packs monitors into a full-width grid, with status-coloured uptime pills and bottom-aligned bars.

  • CSS
  • Uptime Kuma
  • dark theme
CSS Updated Jun 2026
Gcode Viewer showing a multi-colour print coloured by filament, with shadows and collapsible sidebar sections 2026

gcode-viewer

A fast 3D viewer for G-code toolpaths on Linux.

Read moreShow less

Checking a print before sending it meant opening a whole slicer just to look at the toolpath. Gcode Viewer opens a .gcode file on its own: orbit the model, scrub through layers, colour it by speed, feature or filament, and read off print time and filament use. It installs as the default app for .gcode files, with thumbnails in the file manager.

  • Rust
  • egui
  • wgpu
  • WGSL
  • Linux
Rust 1 ★ Updated Oct 2026
spawnpoint in use 2026

spawnpoint

Lets friends run their own Minecraft servers from a browser.

Read moreShow less

Friends kept asking me to spin up Minecraft worlds, which meant an SSH session every time. Spawnpoint puts start, stop, backups and the server console in a browser, so they can do it without me.

  • TypeScript
  • self-hosted
  • backups
  • console
TypeScript Updated Mar 2026
Home Assistant dashboard with the current price, today's statistics and an hourly price chart 2026

ha-elering-ee

Estonian hourly electricity prices as a Home Assistant sensor.

Read moreShow less

Estonian electricity prices swing hour to hour, but Home Assistant couldn't see them. This pulls Elering's hourly rates into a sensor, so an automation can hold the dishwasher until the cheap window.

  • Python
  • Home Assistant
  • Elering API
Python Updated Oct 2026
The decoder showing a valid code: male, born 3 May 1976, aged 50, born on a Monday 2026

estonian-id-decoder

Decodes an Estonian personal ID code, in the browser.

Read moreShow less

An Estonian ID code holds a birth date, gender and checksum, but reading them by hand is easy to get wrong. This page decodes a code as you type: birth date, age, weekday, gender, serial number and whether the checksum holds. It runs entirely in the browser and sends nothing anywhere.

  • JavaScript
  • no dependencies
  • client-side
Live JavaScript Updated Oct 2026
A fish session where every pipe in the commands was typed by pressing Escape 2023 - 2024

esc2pipe

A fish plugin that makes Escape type a pipe.

Read moreShow less

Some keyboard layouts hide the pipe character behind a key combination a laptop can't produce. This plugin for fish makes Escape type a pipe instead.

  • fish
  • Fisher
  • shell
Shell Updated Oct 2026

Open source

Work reviewed and merged by maintainers of projects I don't own.

  1. merged

    X-Sense for Home Assistant #275

    Every request to the recordings panel returned HTTP 500. A readiness check was shelling out to ffprobe on Home Assistant's event loop, once per cached clip. On an install with 85 clips that came to 130 blocking-call errors in three minutes. I traced the call chain, moved the check onto a flag recorded where blocking work is allowed, and the panel returned to HTTP 200 with none.

  2. merged

    zigbee-herdsman-converters #12992

    A device definition for the EZVIZ CS-T10C leak sensor. The generated fallback published a raw alarm bitmap; this maps it to a water_leak sensor and drops the alarm bit the ZCL zone type never sets.

  3. merged

    zigbee2mqtt.io #5460

    The photograph for that same sensor, cut to the documentation's 512 px transparent-PNG convention.

Activity

4,154 contributions on GitHub in the last year.

NovDecJanFebMarAprMayJunJulAugSeptOctMonWedFriNo contributions on 26 October 2025No contributions on 27 October 2025No contributions on 28 October 2025No contributions on 29 October 202510 contributions on 30 October 20256 contributions on 31 October 2025No contributions on 1 November 2025No contributions on 2 November 2025No contributions on 3 November 2025No contributions on 4 November 202529 contributions on 5 November 20256 contributions on 6 November 2025No contributions on 7 November 2025No contributions on 8 November 2025No contributions on 9 November 2025No contributions on 10 November 202522 contributions on 11 November 202519 contributions on 12 November 2025No contributions on 13 November 20253 contributions on 14 November 20252 contributions on 15 November 2025No contributions on 16 November 20252 contributions on 17 November 2025No contributions on 18 November 20252 contributions on 19 November 2025No contributions on 20 November 2025No contributions on 21 November 2025No contributions on 22 November 2025No contributions on 23 November 2025No contributions on 24 November 2025No contributions on 25 November 2025No contributions on 26 November 2025No contributions on 27 November 2025No contributions on 28 November 2025No contributions on 29 November 2025No contributions on 30 November 202522 contributions on 1 December 20258 contributions on 2 December 20258 contributions on 3 December 2025No contributions on 4 December 20252 contributions on 5 December 2025No contributions on 6 December 2025No contributions on 7 December 20253 contributions on 8 December 2025No contributions on 9 December 2025No contributions on 10 December 20256 contributions on 11 December 202512 contributions on 12 December 2025No contributions on 13 December 2025No contributions on 14 December 202511 contributions on 15 December 202517 contributions on 16 December 20258 contributions on 17 December 2025No contributions on 18 December 20252 contributions on 19 December 2025No contributions on 20 December 2025No contributions on 21 December 20257 contributions on 22 December 20257 contributions on 23 December 2025No contributions on 24 December 2025No contributions on 25 December 2025No contributions on 26 December 2025No contributions on 27 December 2025No contributions on 28 December 2025No contributions on 29 December 2025No contributions on 30 December 2025No contributions on 31 December 2025No contributions on 1 January 2026No contributions on 2 January 2026No contributions on 3 January 2026No contributions on 4 January 20262 contributions on 5 January 2026No contributions on 6 January 20262 contributions on 7 January 20261 contribution on 8 January 202612 contributions on 9 January 2026No contributions on 10 January 2026No contributions on 11 January 20267 contributions on 12 January 202611 contributions on 13 January 2026No contributions on 14 January 20263 contributions on 15 January 2026No contributions on 16 January 2026No contributions on 17 January 2026No contributions on 18 January 2026No contributions on 19 January 2026No contributions on 20 January 20262 contributions on 21 January 2026No contributions on 22 January 20264 contributions on 23 January 2026No contributions on 24 January 2026No contributions on 25 January 20267 contributions on 26 January 20262 contributions on 27 January 2026No contributions on 28 January 20264 contributions on 29 January 202614 contributions on 30 January 2026No contributions on 31 January 2026No contributions on 1 February 2026No contributions on 2 February 202614 contributions on 3 February 20261 contribution on 4 February 202613 contributions on 5 February 20263 contributions on 6 February 2026No contributions on 7 February 2026No contributions on 8 February 20261 contribution on 9 February 202611 contributions on 10 February 202616 contributions on 11 February 202611 contributions on 12 February 202620 contributions on 13 February 202632 contributions on 14 February 202612 contributions on 15 February 20264 contributions on 16 February 202670 contributions on 17 February 202622 contributions on 18 February 2026No contributions on 19 February 2026No contributions on 20 February 202653 contributions on 21 February 202650 contributions on 22 February 202628 contributions on 23 February 20262 contributions on 24 February 202621 contributions on 25 February 202612 contributions on 26 February 20266 contributions on 27 February 2026No contributions on 28 February 20262 contributions on 1 March 2026No contributions on 2 March 20269 contributions on 3 March 2026No contributions on 4 March 2026No contributions on 5 March 2026132 contributions on 6 March 2026No contributions on 7 March 2026No contributions on 8 March 20269 contributions on 9 March 202632 contributions on 10 March 202638 contributions on 11 March 20261 contribution on 12 March 202623 contributions on 13 March 2026No contributions on 14 March 202623 contributions on 15 March 20269 contributions on 16 March 20269 contributions on 17 March 20266 contributions on 18 March 202622 contributions on 19 March 202618 contributions on 20 March 2026No contributions on 21 March 2026No contributions on 22 March 20265 contributions on 23 March 2026102 contributions on 24 March 202619 contributions on 25 March 202618 contributions on 26 March 20263 contributions on 27 March 202612 contributions on 28 March 202625 contributions on 29 March 2026No contributions on 30 March 202624 contributions on 31 March 2026No contributions on 1 April 202643 contributions on 2 April 2026No contributions on 3 April 2026No contributions on 4 April 202650 contributions on 5 April 202623 contributions on 6 April 202612 contributions on 7 April 202624 contributions on 8 April 2026No contributions on 9 April 20269 contributions on 10 April 2026No contributions on 11 April 2026No contributions on 12 April 202618 contributions on 13 April 202611 contributions on 14 April 202633 contributions on 15 April 20269 contributions on 16 April 202618 contributions on 17 April 2026No contributions on 18 April 2026No contributions on 19 April 20263 contributions on 20 April 202634 contributions on 21 April 2026No contributions on 22 April 202612 contributions on 23 April 2026No contributions on 24 April 2026No contributions on 25 April 20261 contribution on 26 April 2026119 contributions on 27 April 2026110 contributions on 28 April 202667 contributions on 29 April 202624 contributions on 30 April 202629 contributions on 1 May 202644 contributions on 2 May 2026No contributions on 3 May 202633 contributions on 4 May 202636 contributions on 5 May 20266 contributions on 6 May 202619 contributions on 7 May 202612 contributions on 8 May 2026No contributions on 9 May 2026102 contributions on 10 May 20266 contributions on 11 May 20266 contributions on 12 May 202627 contributions on 13 May 202614 contributions on 14 May 202612 contributions on 15 May 2026No contributions on 16 May 202699 contributions on 17 May 202620 contributions on 18 May 20263 contributions on 19 May 202617 contributions on 20 May 20264 contributions on 21 May 2026No contributions on 22 May 20261 contribution on 23 May 2026No contributions on 24 May 2026No contributions on 25 May 2026No contributions on 26 May 2026No contributions on 27 May 2026No contributions on 28 May 2026No contributions on 29 May 2026No contributions on 30 May 2026No contributions on 31 May 20261 contribution on 1 June 20261 contribution on 2 June 20261 contribution on 3 June 2026No contributions on 4 June 2026No contributions on 5 June 2026No contributions on 6 June 2026No contributions on 7 June 20263 contributions on 8 June 20261 contribution on 9 June 20262 contributions on 10 June 20269 contributions on 11 June 2026No contributions on 12 June 2026No contributions on 13 June 2026No contributions on 14 June 202612 contributions on 15 June 202619 contributions on 16 June 20269 contributions on 17 June 2026No contributions on 18 June 202615 contributions on 19 June 2026No contributions on 20 June 2026No contributions on 21 June 2026242 contributions on 22 June 20261 contribution on 23 June 20261 contribution on 24 June 20263 contributions on 25 June 202621 contributions on 26 June 20265 contributions on 27 June 20261 contribution on 28 June 202633 contributions on 29 June 20262 contributions on 30 June 20261 contribution on 1 July 20267 contributions on 2 July 202618 contributions on 3 July 202640 contributions on 4 July 202664 contributions on 5 July 2026No contributions on 6 July 2026No contributions on 7 July 2026No contributions on 8 July 202626 contributions on 9 July 2026No contributions on 10 July 2026No contributions on 11 July 2026No contributions on 12 July 20267 contributions on 13 July 2026No contributions on 14 July 2026No contributions on 15 July 2026No contributions on 16 July 2026No contributions on 17 July 202613 contributions on 18 July 2026No contributions on 19 July 20265 contributions on 20 July 202614 contributions on 21 July 2026No contributions on 22 July 20267 contributions on 23 July 20265 contributions on 24 July 202616 contributions on 25 July 20261 contribution on 26 July 202622 contributions on 27 July 202611 contributions on 28 July 20268 contributions on 29 July 20262 contributions on 30 July 20261 contribution on 31 July 202614 contributions on 1 August 202613 contributions on 2 August 202614 contributions on 3 August 202655 contributions on 4 August 20262 contributions on 5 August 20261 contribution on 6 August 202613 contributions on 7 August 20269 contributions on 8 August 20261 contribution on 9 August 20266 contributions on 10 August 202614 contributions on 11 August 20267 contributions on 12 August 20263 contributions on 13 August 20266 contributions on 14 August 20263 contributions on 15 August 20265 contributions on 16 August 20262 contributions on 17 August 20266 contributions on 18 August 202611 contributions on 19 August 20261 contribution on 20 August 20261 contribution on 21 August 20261 contribution on 22 August 20263 contributions on 23 August 20264 contributions on 24 August 20264 contributions on 25 August 20264 contributions on 26 August 20265 contributions on 27 August 20261 contribution on 28 August 20261 contribution on 29 August 202624 contributions on 30 August 202676 contributions on 31 August 20265 contributions on 1 September 20266 contributions on 2 September 202613 contributions on 3 September 20264 contributions on 4 September 202610 contributions on 5 September 202630 contributions on 6 September 20267 contributions on 7 September 202614 contributions on 8 September 202634 contributions on 9 September 202640 contributions on 10 September 202611 contributions on 11 September 20262 contributions on 12 September 202612 contributions on 13 September 202654 contributions on 14 September 202660 contributions on 15 September 202621 contributions on 16 September 20265 contributions on 17 September 202617 contributions on 18 September 20261 contribution on 19 September 20261 contribution on 20 September 20269 contributions on 21 September 202617 contributions on 22 September 202611 contributions on 23 September 20264 contributions on 24 September 202655 contributions on 25 September 20261 contribution on 26 September 20261 contribution on 27 September 20263 contributions on 28 September 20265 contributions on 29 September 20266 contributions on 30 September 202619 contributions on 1 October 202652 contributions on 2 October 20265 contributions on 3 October 202640 contributions on 4 October 202610 contributions on 5 October 20265 contributions on 6 October 202637 contributions on 7 October 20265 contributions on 8 October 20262 contributions on 9 October 20261 contribution on 10 October 20262 contributions on 11 October 202616 contributions on 12 October 202613 contributions on 13 October 202611 contributions on 14 October 202611 contributions on 15 October 20261 contribution on 16 October 20261 contribution on 17 October 20261 contribution on 18 October 202613 contributions on 19 October 202612 contributions on 20 October 202612 contributions on 21 October 202619 contributions on 22 October 20261 contribution on 23 October 20262 contributions on 24 October 20261 contribution on 25 October 20268 contributions on 26 October 202612 contributions on 27 October 202685 contributions on 28 October 2026
Less More

3D modelling

Three of nine coursework models. Tinkercad and SketchUp for the set exercises, Blender when the set tool was Windows-only. Printable designs are published on Printables.

Renault FT-17, modelled in Blender

Renault FT-17 Blender

The set exercise expected a tool that only runs on Windows, which I don't use. I taught myself Blender over two weekends and modelled the tank there instead, with the hull plating, rivets and full running gear.

Single-storey house, modelled in SketchUp

Single-storey house SketchUp

Built from a drawing across three lessons. SketchUp's web version stalled once furniture came in from the model store, so I moved to the desktop application to finish it.

Castle, modelled in SketchUp

Castle SketchUp

Gate, curtain walls, a moat and a bowman's tower, worked up from a reference.

Education

Vocational, then applied higher education.

  1. 2026 - present
    Tallinna Tehnikaülikool logo

    Arukad süsteemid ja rakendusinfotehnoloogia

    Tallinna Tehnikaülikool

    Professional higher education in smart systems and applied information technology. Three and a half years at the Kohtla-Järve campus, taught in Estonian. Started August 2026, alongside the job.

  2. 2024 - 2026
    Viljandi Kutsehariduskeskus logo

    Junior Developer, EQF level 4

    Viljandi Kutsehariduskeskus

    AI-driven development, and the programming groundwork that makes it work: object orientation and the basics you need to judge whether generated code is any good. Most of it was about directing the tools and catching their mistakes.

  3. 2021 - 2024
    Rakvere Ametikool logo

    Junior IT Systems Specialist, EQF level 4

    Rakvere Ametikool

    Networks and hardware with hands on the kit: CAT 5e through CAT 7 terminated by hand, punched down to 110 blocks and keystone panels, and a rack of Cisco switches and routers cabled properly enough to keep using after it was graded. Also where I learned to coax a configuration page out of an access point too old for a modern browser to render one.

Toolkit

What I've actually used in production or in my homelab.

Languages

  • Go
  • Python
  • TypeScript
  • JavaScript
  • Rust
  • PHP
  • Java
  • Shell
  • PowerShell
  • QML

Web and runtime

  • React
  • Next.js
  • Svelte
  • Node.js
  • Express
  • Bun
  • Gin
  • Vite
  • Tailwind CSS
  • jQuery
  • Nginx
  • Caddy
  • Apache

Data

  • MySQL
  • MariaDB
  • PostgreSQL
  • SQLite
  • Prisma
  • phpMyAdmin

Testing

  • Playwright
  • Vitest
  • Jest
  • pytest

Systems and networking

  • Linux
  • Windows
  • macOS
  • Active Directory
  • WireGuard
  • Tailscale
  • Cisco networking

Editors and tooling

  • Git
  • VS Code
  • VSCodium
  • Trello

Infrastructure and automation

  • Docker
  • Podman
  • Proxmox
  • Portainer
  • Ansible
  • Terraform
  • GitHub Actions
  • Prometheus
  • TrueNAS
  • DigitalOcean
  • ServiceNow

Self-hosted and smart home

  • Home Assistant
  • MQTT
  • Zigbee2MQTT
  • Node-RED
  • Uptime Kuma
  • Gitea
  • Jellyfin
  • Immich
  • AdGuard Home

AI tools

  • Claude
  • Cursor

Spoken languages

  • Estonian: Native
  • English: Professional working proficiency