Web · Aplikace · Hry · AI nástroje

Portfolio.

Weby, aplikace, hry a AI nástroje, které jsem navrhl a postavil — jak každý systém funguje a jaká rozhodnutí za ním stojí.

Popisy projektů jsou v angličtině.

Cold Leads — screenshot
SaaS · Cold e-mail CRM

Cold Leads

A CRM for cold e-mail outreach: contacts, e-mail verification, campaigns, a mailbox-synced inbox and follow-ups in one multi-tenant Next.js app, with a hosted MCP endpoint for AI agents.

Klíčová rozhodnutí

  • Anti-scam moderation on every send — templates, chat replies, AI drafts and campaigns pass OpenAI Moderation plus phishing and scam rules; violations are blocked, logged and suspend the account — at once for threats, after three in 30 days otherwise
  • Mail provider behind one module — complaint and bounce webhooks pause a sender automatically to protect deliverability
  • Cold campaigns only from the user's own mailbox or domain — the shared address can only reply, so one account can't damage everyone's reputation

Next.js · TypeScript · Prisma · Postgres · Stripe · Resend · OpenAI

CartridgeZone — screenshot
Website · B2B

CartridgeZone

Static marketing site for a retro gaming rental company: one HTML file per page, client-side i18n in four languages and lead forms wired into the CRM.

Klíčová rozhodnutí

  • No framework, no build step — pages load fast and can be edited without a toolchain
  • Forms write to e-mail and the CRM — a public form key that can only create leads keeps the browser call safe
  • Consent Mode v2, denied by default — GA4 loads only after consent; events fired earlier are queued, not lost

HTML · CSS · JavaScript · Web3Forms · Cold Leads API · Vercel

Olha Tkachenko — portfolio — screenshot
Website · Portfolio

Olha Tkachenko — portfolio

Two-language static portfolio: a Ukrainian source page, a generated Czech page, a filterable gallery, lightbox and contact form.

Klíčová rozhodnutí

  • One source language — a Node script generates the Czech page, SEO tags, sitemap and llms-full.txt, so the languages can't drift
  • Share images rendered from HTML — Playwright draws them with the site's own fonts
  • Pre-sized WebP artwork — thumbnails and 1800 px previews keep the gallery light

HTML · CSS · JavaScript · Node.js · Playwright

DebtFlow — screenshot
Mobile app · Flutter

DebtFlow

Offline-first personal finance app: feature modules for the dashboard, registry, affordability check and payoff planning over Riverpod state and local storage.

Klíčová rozhodnutí

  • All money math in Decimal — no floating-point rounding across currencies
  • Widgets never call services — pages dispatch to providers and only render state
  • Live exchange rates with built-in fallbacks — the app keeps working without a network

Flutter · Dart · Riverpod · Decimal · local notifications

Easy Terminal — screenshot
Mobile app · Flutter

Easy Terminal

SSH client with a terminal-native interface: a dartssh2 connection layer, an xterm emulator and one BLoC per concern — connection, sessions, terminal, git and files.

Klíčová rozhodnutí

  • Everything over one SSH connection — git runs via exec and files via SFTP, so nothing is installed on the server
  • Ordered BLoC events — bloc_concurrency keeps reconnects and output streams from racing
  • Credentials only in secure storage — Keychain on iOS, Keystore on Android

Flutter · Dart · flutter_bloc · dartssh2 · xterm · go_router

Picross Studio — screenshot
Desktop app · Rust

Picross Studio

Pixel-art and sprite-animation editor split into a core library (grid model, serialisation, effects) and an egui/wgpu desktop GUI.

Klíčová rozhodnutí

  • Core separate from the GUI — the same engine can drive a CLI for batch export in CI
  • Art stored as readable YAML — files diff cleanly in git and can be generated by scripts
  • Nearest-neighbour scaling on every export — pixels stay sharp at any size

Rust · egui · wgpu

Motor City Grand Prix — screenshot
3D racing · iOSVe vývoji

Motor City Grand Prix

SwiftUI + SceneKit street racer with separate modules for vehicle physics, track, AI drivers, race logic, audio and HUD.

Klíčová rozhodnutí

  • Track from real geometry — Road America's layout, built from OpenStreetMap control points and set in 1954 Detroit
  • Explicit anti-roll and compound-box walls — tuned vehicle physics; concave collision meshes let cars pass through
  • Mirror camera through SCNRenderer — a second scene view would step the physics twice

Swift · SwiftUI · SceneKit

Manor's Darkness — screenshot
Point & click · Horror

Manor's Darkness

Godot adventure engine: one progression state machine drives seven room scenes through signals.

Klíčová rozhodnutí

  • Objects declared by capability — grabbable, fixable, revealable, hidden — puzzles become data, not per-object code
  • State lives outside the rooms — rooms are swapped scenes, so revisits stay consistent
  • UI only listens to signals — inventory, clues and monsters update without coupling

Godot · GDScript · art with lumepixelua

Spooky Checkers — screenshot
Board game · AI opponent

Spooky Checkers

Godot checkers with a rules engine, a heuristic AI opponent and a 32-level campaign saved by an autoload singleton.

Klíčová rozhodnutí

  • Scored moves, not deep search — captures, chains, promotion and safety are weighted, then the AI picks among the best few — beatable but not predictable
  • One save singleton — stars and unlocked levels live in one user:// file shared by menus and gameplay
  • Every level played through — each of the 32 campaign levels was verified to be winnable

Godot · GDScript · desktop · Android

RootRobot — screenshot
Puzzle platformer · Game jam

RootRobot

Global Game Jam 2026 game controlled through a typed command interpreter: scan, run, execute, remove, revert.

Klíčová rozhodnutí

  • Objects addressed by IP — one lookup map with aliases turns commands into targets, not coordinates
  • Direction-aware scan — the robot only sees devices on the side it faces, so orientation is part of the puzzle
  • Input fallback for touch — Android and web builds keep the terminal focused

Godot · GDScript · HTML5

Dig The Sands — screenshot
Puzzle · Turn-based

Dig The Sands

Godot tile puzzle with data-driven levels, flood-fill water and crabs that react to every dig.

Klíčová rozhodnutí

  • Levels in JSON — crab positions, targets and the dig budget are validated on load
  • Water by flood fill — recomputed from the sea and pools after each move — no physics needed
  • Greedy crab movement — each dig changes their path, which is the puzzle

Godot · GDScript · HTML5 · art with lumepixelua

Catched In Fire — screenshot
Platformer · Game jam

Catched In Fire

2D platformer built inside TriJam's three-hour window: a two-minute survival timer, spreading fire and wind.

Klíčová rozhodnutí

  • One mechanic — stamp out flames — the scope was cut to fit three hours
  • The goal lives in the HUD — rescue countdown and wind speed are always visible
  • One project, three targets — HTML5, Windows and Linux builds

Godot · GDScript · HTML5

The Shadowed Seat — screenshot
Visual novel · Gothic

The Shadowed Seat

Godot narrative engine: one scenario controller reads characters, objects, backgrounds, answers and endings from JSON.

Klíčová rozhodnutí

  • Story as data — writing and the Ukrainian translation never touch code
  • Clues tracked in game state — what the player found is counted at the ending
  • One controller for scene, dialogue and audio — new chapters are content, not code

Godot · GDScript · JSON

Pyramid's Hidden Path — screenshot
Escape quest · 3D top-down

Pyramid's Hidden Path

Godot 3D maze with navigation-mesh enemies, a torch that works as a resource and an on-demand minimap.

Klíčová rozhodnutí

  • Navigation-mesh enemies — mummies chase within range, then return to their post — predictable enough to plan around
  • Light as a resource — the torch burns down; papyrus from vases refuels it
  • Minimap only on demand — keeps the tension in the corridors

Godot · GDScript · HTML5

Red Lawn Mower Game — screenshot
Cozy sim · 3D

Red Lawn Mower Game

Godot 3D sim driven by timers: day cycle, weed spawning, rain, fuel and grass-box capacity.

Klíčová rozhodnutí

  • Timer-driven world — days, weeds and weather run on independent timers
  • Validated spawn points — weeds relocate when they would overlap
  • On-screen joystick — the HTML5 build also plays on phones

Godot · GDScript · HTML5 · desktop

Mistborne — screenshot
First-person horror · 3DVe vývoji

Mistborne

Godot first-person thriller: a player controller that emits discovery signals for story objects, plus code-lock puzzles.

Klíčová rozhodnutí

  • Story beats as signals — finding the flashlight or the newspaper triggers events without the level knowing the player
  • Reusable lock control — code-lock puzzles are one UI component
  • Clues instead of quest markers — sneakers, a campfire and a tent lead the player through the fog

Godot · GDScript · desktop

Crystal Rover Expedition — screenshot
Exploration · Sci-fiPrototyp

Crystal Rover Expedition

Godot 3D prototype: a physics rover, a storage controller and obelisks to decode.

Klíčová rozhodnutí

  • Capacity as the core constraint — the storage controller signals full, collected and decoded
  • Upgrades from wreckage — spare parts raise capacity, turning exploration into progression
  • Small hand-made assets — kept the prototype quick to iterate

Godot · GDScript · desktop

Cold Leads AI sales agent — screenshot
AI agent · Node.js

Cold Leads AI sales agent

Reference agent that runs a six-step sales loop — import, verify, draft, approve, reply, follow up — over the Cold Leads MCP tools, scripted or driven by Claude.

Klíčová rozhodnutí

  • Approval gate comes from the server — tools marked requires_approval always stop for a human yes
  • Demo server by default — it runs without an API key and never sends e-mail
  • One gate for both modes — scripted and Claude-driven runs share it; npm test runs the whole loop

Node.js · Model Context Protocol · Claude API · @coldleads/sdk

Cold Leads MCP server — screenshot
MCP server · npm

Cold Leads MCP server

TypeScript MCP server that exposes 25 Cold Leads tools to AI clients; the same tools are hosted at /api/mcp.

Klíčová rozhodnutí

  • Metadata on every tool — side effect, cost and approval requirement are declared, so clients know what needs a human
  • Rules enforced server-side — sending needs explicit confirmation; opt-outs, bounces and do-not-contact are blocked
  • Hosted demo with hard limits — sample data, no sending and per-IP rate limits

TypeScript · Model Context Protocol · npm

Cold Leads Node.js SDK — screenshot
SDK · npm

Cold Leads Node.js SDK

Zero-dependency TypeScript client for the Cold Leads REST API, mirroring its OpenAPI schema.

Klíčová rozhodnutí

  • Built-in fetch only — nothing in the dependency tree to audit
  • Typed errors, timeouts, safe retries — requests are retried only where a repeat can't cause harm
  • ESM and CommonJS with full types — CI tests Node 20 and 22

TypeScript · Node.js · OpenAPI · GitHub Actions

Claude Telegram bot — screenshot
AI assistant · Python

Claude Telegram bot

Python bot that gives Claude file and shell tools on a Linux server, controlled from Telegram.

Klíčová rozhodnutí

  • Model by task — plain messages go to Haiku; /claude uses the selected model, Opus by default
  • Allowlist and confirmations — only listed Telegram IDs; destructive operations ask first
  • Background tasks with a live log — long runs report progress and stop with /stop

Python · Claude API · Telegram Bot API

Zbývá pár míst AI audit zdarma