{
  "source": "https://vladoportos.sk/cv.json",
  "html": "https://vladoportos.sk/cv.html",
  "text": "https://vladoportos.sk/cv.txt",
  "person": {
    "name": "Vladimír Strýček",
    "handle": "VladoPortos",
    "title": "Cloud & DevOps Engineer · Python · Builder of self-hosted things",
    "location": "Bratislava, Slovakia",
    "onlineSince": 2004,
    "email": "vladoportos@gmail.com",
    "tagline": "22 years online under one handle. Enterprise private cloud by day, goblin-branded self-hosted tools by night.",
    "summary": "Engineer, Virtual Private Cloud at DXC Technology (since 2018). Previously long-term Linux/Unix administrator at HP and HPE. Automates enterprise private cloud with Ansible, AWX, Vault, VMware, Nutanix and Kubernetes. Ships open-source, self-hosted tools that never phone home. Builds with AI agents as a daily practice.",
    "availability": {
      "status": "open",
      "headline": "Open to remote roles",
      "summary": "Open to a new role: fully remote, working from Bratislava (CET), for any employer anywhere. Remote is non-negotiable; compensation should match senior-level experience."
    },
    "currentRole": {
      "title": "Engineer, Virtual Private Cloud",
      "company": "DXC Technology",
      "since": "2018",
      "bullets": [
        "Enterprise private-cloud automation platform: Ansible day-2 operations framework with HashiCorp Vault credential resolution (600+ commits)",
        "One-command local platform: k3s + AWX + Vault + configuration DB on a fresh RHEL VM",
        "Custom AWX execution environments with 28 pinned collections (VMware, Nutanix, AWS, NetApp, Foreman)",
        "Golden-image pipeline with Packer + cloud-init on Nutanix AHV; VM lifecycle mirroring Aria Automation",
        "Read-only REST bridge to the configuration DB with Vault AppRole auth and Pydantic allowlists"
      ]
    },
    "certifications": [
      "AWS Certified Cloud Practitioner (2022)"
    ],
    "education": [
      "SPŠ-E K. Adlera, Bratislava (electrotechnical)",
      "English studies, Oxford (two stays); Cambridge CAE"
    ]
  },
  "socials": [
    {
      "label": "GitHub",
      "url": "https://github.com/VladoPortos",
      "stat": "47 public repos"
    },
    {
      "label": "LinkedIn",
      "url": "https://www.linkedin.com/in/vladimir-strycek-6a161588/",
      "stat": ""
    },
    {
      "label": "Blog",
      "url": "https://rpi4cluster.com",
      "stat": "68 posts on Kubernetes on Raspberry Pi"
    },
    {
      "label": "YouTube",
      "url": "https://www.youtube.com/@vladoportos",
      "stat": "23.2K subscribers, 6.4M views"
    },
    {
      "label": "X",
      "url": "https://x.com/vladoportos",
      "stat": ""
    },
    {
      "label": "Reddit",
      "url": "https://www.reddit.com/user/VladoPortos",
      "stat": ""
    },
    {
      "label": "Ko-fi",
      "url": "https://ko-fi.com/vladoportos",
      "stat": ""
    },
    {
      "label": "Docker Hub",
      "url": "https://hub.docker.com/u/vladoportos",
      "stat": "10K+ pulls"
    }
  ],
  "numbers": [
    {
      "value": "150 GP",
      "label": "gigapixel mosaic of the Slovak internet"
    },
    {
      "value": "366K",
      "label": ".sk homepages screenshotted"
    },
    {
      "value": "665K",
      "label": "reverse-WHOIS rows collected"
    },
    {
      "value": "47",
      "label": "public GitHub repos"
    },
    {
      "value": "94",
      "label": "issues filed upstream (argo-cd, longhorn, linkerd, langchain…)"
    },
    {
      "value": "4.9K",
      "label": "Docker pulls of SkillGoblin"
    },
    {
      "value": "68",
      "label": "blog posts on rpi4cluster.com"
    },
    {
      "value": "23.2K",
      "label": "YouTube subscribers"
    },
    {
      "value": "2004",
      "label": "vladoportos.sk first went online"
    }
  ],
  "timeline": [
    {
      "year": "2004",
      "title": "vladoportos.sk goes online",
      "text": "Flash portfolio of 3D work (Rhino), Delphi experiments. The handle has not changed since."
    },
    {
      "year": "2005",
      "title": "Oxford",
      "text": "English studies, later the Cambridge Advanced Exam. Two stays."
    },
    {
      "year": "2007",
      "title": "HP support centre → Unix",
      "text": "Call handling, then 1st-line backup, then 2nd-line Unix specialist. HP-UX and Linux."
    },
    {
      "year": "2008",
      "title": "YouTube",
      "text": "CZ/SK gaming channel. 820 videos, 23K subscribers, 6.4M views."
    },
    {
      "year": "2010",
      "title": "Tokyo",
      "text": "Lived in Japan, studied Japanese."
    },
    {
      "year": "2013",
      "title": "Linux admin, HP / HPE",
      "text": "Long-term Red Hat server management for enterprise customers."
    },
    {
      "year": "2016",
      "title": "KlingonTech s.r.o.",
      "text": "Founded own company. Built reverz.sk (reverse WHOIS, 665K rows) and deepzoom.sk (150-gigapixel image of every .sk homepage). Sold in 2026."
    },
    {
      "year": "2018",
      "title": "DXC Technology",
      "text": "Engineer, Virtual Private Cloud. Enterprise automation with Ansible, AWX, Vault, VMware, Nutanix."
    },
    {
      "year": "2020",
      "title": "rpi4cluster.com",
      "text": "8-node ARM64 k3s cluster on Raspberry Pis. Longhorn, OpenFaaS, Argo CD, Traefik, Prometheus, Loki. 68 posts, no sponsors."
    },
    {
      "year": "2022",
      "title": "AWS Certified",
      "text": "Cloud Practitioner. Turing Pi 2 early tester. Hugging Face experiments."
    },
    {
      "year": "2025",
      "title": "The goblins arrive",
      "text": "SkillGoblin, GoblinDock, TraceGoblins, HoardGoblin. Self-hosted, Apache/AGPL licensed, CodeQL + Trivy + OpenSSF Scorecard on every repo."
    },
    {
      "year": "2026",
      "title": "Agent-native",
      "text": "GlanceDock in Rust, OmniRepo in Go, an AI receptionist kiosk, a fridge e-ink platform. Parallel Claude agents, adversarial Codex review, 90-agent security audits."
    }
  ],
  "projects": [
    {
      "id": "goblindock",
      "name": "GoblinDock",
      "tagline": "Self-hosted Proxmox VE control panel",
      "category": "Self-hosted tools",
      "status": "released",
      "year": "2026",
      "stack": [
        "Python",
        "FastAPI",
        "SQLModel",
        "Ansible",
        "noVNC",
        "Docker"
      ],
      "problem": "Giving a team self-service VMs on Proxmox means either root access or a ticket queue.",
      "approach": "A multi-user panel that builds fully configured VMs from 44 reusable Lego-style blocks, streams job logs over SSE, embeds a real graphical console, and stores secrets Fernet-encrypted. One container, one SQLite file.",
      "result": "v2.7.0, Apache-2.0, published on GHCR, independent security review passed.",
      "links": {
        "site": "https://goblindock.com",
        "repo": "https://github.com/VladoPortos/GoblinDock"
      },
      "featured": true,
      "url": "https://vladoportos.sk/u/goblindock.html",
      "github": {
        "stars": 1,
        "forks": 0,
        "pushedAt": "2026-09-19",
        "asOf": "2026-09-20"
      }
    },
    {
      "id": "omnirepo",
      "name": "OmniRepo (HoardGoblin)",
      "tagline": "One Go binary serving every artifact protocol",
      "category": "Self-hosted tools",
      "status": "released",
      "year": "2026",
      "stack": [
        "Go",
        "React 19",
        "Trivy",
        "SQLite"
      ],
      "problem": "Small teams need Artifactory or Nexus features without the footprint, and air-gapped shops need zero outbound calls.",
      "approach": "A single binary that speaks OCI, RPM, APT, PyPI, Helm, Go modules, npm, Maven, Git and S3, with built-in vulnerability scanning and a CI-enforced air-gap invariant.",
      "result": "v1.0.1, Apache-2.0, audited by 90 parallel agents plus an adversarial reviewer before release.",
      "links": {
        "site": "https://hoardgoblin.com",
        "repo": "https://github.com/VladoPortos/omnirepo"
      },
      "featured": true,
      "url": "https://vladoportos.sk/u/omnirepo.html",
      "github": {
        "stars": 1,
        "forks": 0,
        "pushedAt": "2026-09-14",
        "asOf": "2026-09-20"
      }
    },
    {
      "id": "skillgoblin",
      "name": "SkillGoblin",
      "tagline": "Self-hosted video learning platform that runs on a Raspberry Pi",
      "category": "Self-hosted tools",
      "status": "released",
      "year": "2025",
      "stack": [
        "Nuxt",
        "Node",
        "SQLite",
        "Docker"
      ],
      "problem": "Course libraries rot on disks. Hosted platforms want your content and a subscription.",
      "approach": "One container; add a course by copying a folder. Auto-transcodes subtitles, tracks progress, works as a PWA.",
      "result": "4.9K Docker pulls, active Unraid community thread, OpenSSF Best Practices badge #12762, AGPL-3.0.",
      "links": {
        "site": "https://skillgoblin.com",
        "repo": "https://github.com/VladoPortos/skillgoblin"
      },
      "featured": true,
      "url": "https://vladoportos.sk/u/skillgoblin.html",
      "github": {
        "stars": 12,
        "forks": 4,
        "pushedAt": "2026-09-14",
        "asOf": "2026-09-20"
      }
    },
    {
      "id": "tracegoblins",
      "name": "TraceGoblins",
      "tagline": "Turns a 600-line Ansible failure wall into a colour-graded status map",
      "category": "Self-hosted tools",
      "status": "released",
      "year": "2026",
      "stack": [
        "Python 3.12",
        "FastAPI",
        "React 19",
        "PostgreSQL 16"
      ],
      "problem": "AWX job output is a wall of text; the same failure gets diagnosed from scratch every time.",
      "approach": "Parses runs into a Status Map, lets the team annotate and thread comments, and auto-matches failures against a knowledge base with fuzzy error signatures.",
      "result": "Apache-2.0, published on GHCR; argon2id + TOTP + audit log built in.",
      "links": {
        "site": "https://tracegoblins.com",
        "repo": "https://github.com/VladoPortos/tracegoblins"
      },
      "featured": true,
      "url": "https://vladoportos.sk/u/tracegoblins.html",
      "github": {
        "stars": 0,
        "forks": 0,
        "pushedAt": "2026-09-19",
        "asOf": "2026-09-20"
      }
    },
    {
      "id": "glancedock",
      "name": "GlanceDock",
      "tagline": "Native Windows widgets that live on the wallpaper layer",
      "category": "Products",
      "status": "coming soon",
      "year": "2026",
      "stack": [
        "Rust",
        "Tauri v2",
        "Svelte 5",
        "WebView2"
      ],
      "problem": "Desktop widgets are either Electron memory hogs or dead since Windows 7.",
      "approach": "A Rust host that renders 72 widgets directly on the wallpaper layer with click-through, a privacy mode for screen sharing, multi-monitor drag, and Ed25519 offline licensing. No telemetry.",
      "result": "748 commits, 3,398 Rust and frontend tests, signed release feed. Release imminent.",
      "links": {
        "site": "https://glancedock.com"
      },
      "featured": true,
      "url": "https://vladoportos.sk/u/glancedock.html"
    },
    {
      "id": "deepzoom",
      "name": "deepzoom.sk",
      "tagline": "The entire Slovak internet as one 150-gigapixel image",
      "category": "Data projects",
      "status": "retired",
      "year": "2019",
      "stack": [
        "Python",
        "headless Chrome",
        "pyvips",
        "OpenSeadragon"
      ],
      "problem": "What does a whole country's web look like at once?",
      "approach": "Screenshotted 366,000+ .sk homepages, stitched them into a 518,378 × 289,920 px image, tiled it into ~20 Deep Zoom levels; double-click mapped any pixel back to its domain.",
      "result": "Ran for years under KlingonTech; a memorial site with real tiles is still live.",
      "links": {
        "site": "https://deepzoom.sk"
      },
      "featured": true,
      "url": "https://vladoportos.sk/u/deepzoom.html"
    },
    {
      "id": "reverz",
      "name": "reverz.sk",
      "tagline": "Reverse WHOIS for the .sk zone",
      "category": "Data projects",
      "status": "retired",
      "year": "2018",
      "stack": [
        "Python",
        "SK-NIC EPP",
        "PostgreSQL"
      ],
      "problem": "After the company site was cloned for phishing, there was no way to find who registered what in .sk.",
      "approach": "Wrote a custom SK-NIC EPP client (open-sourced as SK-NIC-EPP-Python), a collector and a 24/7 DNS/WHOIS monitor; 8 search vectors over 665,000 records.",
      "result": "Retired with KlingonTech; the EPP library lives on GitHub.",
      "links": {
        "site": "https://reverz.sk",
        "repo": "https://github.com/VladoPortos/SK-NIC-EPP-Python"
      },
      "featured": false,
      "url": "https://vladoportos.sk/u/reverz.html",
      "github": {
        "stars": 2,
        "forks": 0,
        "pushedAt": "2025-04-17",
        "asOf": "2026-09-20"
      }
    },
    {
      "id": "kiosk",
      "name": "AI Receptionist Kiosk",
      "tagline": "A Slovak-speaking voice AI on a portrait touchscreen",
      "category": "AI",
      "status": "deployed",
      "year": "2026",
      "stack": [
        "FastAPI",
        "OpenAI Realtime (WebRTC)",
        "React",
        "PostgreSQL + pgvector",
        "Redis"
      ],
      "problem": "A consultancy wanted visitors greeted, qualified and looked up in the business register without staff time.",
      "approach": "Real-time voice conversation in Slovak, live company-register lookup by IČO, risk analysis, an animated presentation mode and a PIN-gated manager console. Eight containers on one mini-PC on the office LAN.",
      "result": "In production at the client since September 2026.",
      "links": {},
      "featured": true,
      "url": "https://vladoportos.sk/u/kiosk.html"
    },
    {
      "id": "contactscout",
      "name": "Contact Scout",
      "tagline": "Contact extraction API with a self-hosted vision-model fallback",
      "category": "AI",
      "status": "active",
      "year": "2026",
      "stack": [
        "FastAPI",
        "Scrapling",
        "Botasaurus",
        "llama.cpp",
        "Qwen3-VL-2B"
      ],
      "problem": "Contact pages hide emails in images and JavaScript; classic scrapers return nothing.",
      "approach": "A dual-engine pipeline: fast HTML extraction first, and when a page yields nothing, a self-hosted vision LLM reads the rendered screenshot. Emits E.164 phones, IČO/DIČ, socials; HMAC-signed webhooks; Prometheus metrics.",
      "result": "In daily use; actively maintained.",
      "links": {},
      "featured": false,
      "url": "https://vladoportos.sk/u/contactscout.html"
    },
    {
      "id": "eink",
      "name": "Fridge E-Ink Platform",
      "tagline": "Two ESP32 e-paper panels on the fridge, updated by a home server",
      "category": "Hardware",
      "status": "running",
      "year": "2026",
      "stack": [
        "C++",
        "PlatformIO",
        "ESP32",
        "FastAPI",
        "PWA"
      ],
      "problem": "The family calendar lived in four phones and nowhere visible.",
      "approach": "Two 7.5-inch three-colour e-paper panels driven by ESP32 boards with deep-sleep wake schedules and diff-only refresh; a FastAPI server renders calendar, weather and Slovak name days; a PWA family view; a custom PCB experiment.",
      "result": "Running on the fridge since August 2026.",
      "links": {},
      "featured": true,
      "url": "https://vladoportos.sk/u/eink.html"
    },
    {
      "id": "rpi4cluster",
      "name": "rpi4cluster.com",
      "tagline": "8-node ARM64 Kubernetes cluster on Raspberry Pis, documented",
      "category": "Homelab",
      "status": "active",
      "year": "2020",
      "stack": [
        "k3s",
        "Longhorn",
        "OpenFaaS",
        "Argo CD",
        "Traefik",
        "Prometheus",
        "Loki",
        "AWX"
      ],
      "problem": "Most Kubernetes tutorials stop at hello-world; running it on bare-metal ARM for years is where the lessons are.",
      "approach": "68 posts covering storage, service mesh, GitOps, observability, custom AWX execution environments, iPXE boot, LoRaWAN and the Turing Pi 2. No sponsored content.",
      "result": "The reference many homelabbers start from; Turing Pi early tester.",
      "links": {
        "site": "https://rpi4cluster.com"
      },
      "featured": true,
      "url": "https://vladoportos.sk/u/rpi4cluster.html"
    },
    {
      "id": "aimonitor",
      "name": "AI Monitor for Stream Deck",
      "tagline": "Anthropic and Codex usage and service health on physical keys",
      "category": "AI",
      "status": "released",
      "year": "2026",
      "stack": [
        "TypeScript",
        "Stream Deck SDK"
      ],
      "problem": "Plan usage and provider incidents interrupt agent sessions without warning.",
      "approach": "Eight actions that surface usage, limits and status on Stream Deck keys; 220 tests; CodeQL, Trivy and OpenSSF Scorecard in CI.",
      "result": "v0.1.3 shipped, open source.",
      "links": {
        "repo": "https://github.com/VladoPortos/ai-monitor-streamdeck"
      },
      "featured": false,
      "url": "https://vladoportos.sk/u/aimonitor.html",
      "github": {
        "stars": 0,
        "forks": 0,
        "pushedAt": "2026-07-20",
        "asOf": "2026-09-20"
      }
    },
    {
      "id": "piagora",
      "name": "Pi Agora",
      "tagline": "LLM agents on Raspberry Pis arguing on a LAN message board",
      "category": "AI",
      "status": "prototype",
      "year": "2026",
      "stack": [
        "FastAPI",
        "SSE",
        "React",
        "Ollama",
        "PostgreSQL"
      ],
      "problem": "What happens when small local models get a forum and nobody moderates?",
      "approach": "Each Pi runs a model with a persona; they post, reply, play games against each other; humans can join. Retro pixel UI.",
      "result": "Working prototype on the homelab.",
      "links": {},
      "featured": false,
      "url": "https://vladoportos.sk/u/piagora.html"
    },
    {
      "id": "sitereel",
      "name": "SiteReel",
      "tagline": "URL in, narrated video tour of the page out",
      "category": "AI",
      "status": "prototype",
      "year": "2026",
      "stack": [
        "FastAPI",
        "Playwright",
        "Xvfb",
        "FFmpeg",
        "OpenAI"
      ],
      "problem": "Product demos take a human an afternoon.",
      "approach": "An LLM choreographs scroll, hover and click over a live page while narration is synthesised; rendered to MP4 headlessly.",
      "result": "Working prototype.",
      "links": {},
      "featured": false,
      "url": "https://vladoportos.sk/u/sitereel.html"
    },
    {
      "id": "alloto",
      "name": "Alloto",
      "tagline": "Envelope budgeting, done properly, fully on-device",
      "category": "Products",
      "status": "coming soon",
      "year": "2026",
      "stack": [
        "React Native",
        "Expo",
        "Skia",
        "SQLite"
      ],
      "problem": "Budget apps either upload your bank data or fall apart at month end.",
      "approach": "Flexible per-month categories, intelligent leftovers, history never rewritten, all local. The Warm Ledger design with a capybara mascot.",
      "result": "672 commits, store release imminent.",
      "links": {
        "site": "https://alloto.app"
      },
      "featured": false,
      "url": "https://vladoportos.sk/u/alloto.html"
    },
    {
      "id": "majetko",
      "name": "Majetko",
      "tagline": "Track what you own and when it expires",
      "category": "Products",
      "status": "coming soon",
      "year": "2026",
      "stack": [
        "React Native",
        "Expo",
        "on-device OCR"
      ],
      "problem": "Inspections, insurance, vignettes and warranties expire quietly.",
      "approach": "Assets with deadlines, fleet view, on-device OCR of documents, encrypted backup, calendar export.",
      "result": "Site live, app release imminent.",
      "links": {
        "site": "https://majetko.sk"
      },
      "featured": false,
      "url": "https://vladoportos.sk/u/majetko.html"
    },
    {
      "id": "magor",
      "name": "magor.sk",
      "tagline": "The Infinite Loading Bar",
      "category": "Fun",
      "status": "live",
      "year": "2026",
      "stack": [
        "vanilla JS"
      ],
      "problem": "None. That is the point.",
      "approach": "A loading screen that never finishes, in five psychologically escalating phases, with console easter eggs and fake testimonials.",
      "result": "Live. People stay far longer than they should.",
      "links": {
        "site": "https://magor.sk"
      },
      "featured": false,
      "url": "https://vladoportos.sk/u/magor.html"
    },
    {
      "id": "openclaw",
      "name": "Church of OpenClaw",
      "tagline": "A satirical sanctuary for AI souls",
      "category": "Fun",
      "status": "live",
      "year": "2026",
      "stack": [
        "Three.js",
        "vanilla JS",
        "GitHub Issues API"
      ],
      "problem": "Someone had to found the first AI religion.",
      "approach": "Particle-void hero, a Gospel Board reading GitHub Issues client-side, and a soul-harvest idle game. Salvation is a pull request.",
      "result": "Live.",
      "links": {
        "site": "https://churchofopenclaw.com"
      },
      "featured": false,
      "url": "https://vladoportos.sk/u/openclaw.html"
    }
  ],
  "skills": {
    "Languages": [
      "Python",
      "Rust",
      "Go",
      "TypeScript",
      "Bash",
      "C++ (embedded)"
    ],
    "Cloud & Infra": [
      "Ansible / AWX",
      "HashiCorp Vault",
      "Kubernetes (k3s)",
      "VMware vSphere / NSX / vRO",
      "Nutanix AHV",
      "Proxmox",
      "Packer",
      "Docker",
      "Cloudflare",
      "AWS"
    ],
    "Backend": [
      "FastAPI",
      "SQLModel / Pydantic",
      "PostgreSQL / pgvector",
      "SQLite",
      "Redis",
      "Traefik / Caddy"
    ],
    "Frontend": [
      "Svelte 5",
      "React 19",
      "Astro",
      "Tauri v2",
      "React Native / Expo"
    ],
    "AI": [
      "Claude Code + parallel agents",
      "OpenAI Realtime",
      "llama.cpp",
      "ComfyUI",
      "MCP servers",
      "Adversarial multi-agent review"
    ],
    "Hardware": [
      "Raspberry Pi clusters",
      "Turing Pi 2",
      "ESP32 / e-paper",
      "LoRaWAN",
      "NFC",
      "FPV drones",
      "3D printing"
    ]
  },
  "homelab": {
    "description": "Proxmox cluster (two nodes), Unraid, TrueNAS, UniFi UCG Max, Tailscale mesh, Home Assistant, Uptime Kuma, an RTX 4070 Ti for local models, an 8-node Raspberry Pi k3s cluster, a Turing Pi 2, and two e-ink panels on the fridge.",
    "nodes": [
      {
        "name": "pve-amd",
        "role": "Proxmox VE",
        "kind": "server"
      },
      {
        "name": "pve-dell",
        "role": "Proxmox VE",
        "kind": "server"
      },
      {
        "name": "unraid",
        "role": "Unraid storage + containers",
        "kind": "nas"
      },
      {
        "name": "truenas",
        "role": "TrueNAS backups",
        "kind": "nas"
      },
      {
        "name": "gpu",
        "role": "RTX 4070 Ti local models",
        "kind": "gpu"
      },
      {
        "name": "rpi-k3s ×8",
        "role": "ARM64 Kubernetes cluster",
        "kind": "pi"
      },
      {
        "name": "turing-pi-2",
        "role": "Compute-module cluster board",
        "kind": "pi"
      },
      {
        "name": "ucg-max",
        "role": "UniFi gateway",
        "kind": "network"
      },
      {
        "name": "fridge-eink ×2",
        "role": "ESP32 e-paper panels",
        "kind": "iot"
      }
    ]
  }
}
