Portfolio · updated 2026-07-17
Portfolio · aktualizacja 2026-07-17

I build systems with AI. Then I check whether they still do what they promise.

Buduję systemy z AI. Potem sprawdzam, czy nadal robią to, co obiecują.

I have been a trainer for 11 years and a Scrum Master / Agile Coach for eight. I build my own multi-agent systems. These are working products, not demos. A mobile app in which the model never sees anyone's name: privacy solved in the architecture, not in the terms of service. A tool that runs a new product's kickoff from an idea to a finished repository with a backlog. Five microservices covering the whole training cycle - from sign-up to certificate. A production line on which those trainings are made - from the client brief to a finished presentation and facilitation cards. And an instrument that measures whether agent systems still do exactly what their documentation promises.

Jestem trenerem od 11 lat i Scrum Masterem / Agile Coachem od ośmiu. Buduję własne systemy multi-agentowe. To są działające produkty, nie dema. Aplikacja mobilna, w której model nigdy nie widzi niczyjego nazwiska: prywatność rozwiązana w architekturze, a nie w regulaminie. Narzędzie, które prowadzi kickoff nowego produktu od pomysłu do gotowego repozytorium z backlogiem. Pięć mikroserwisów pokrywających cały cykl szkolenia - od zapisów po certyfikat. Linia produkcyjna, na której te szkolenia powstają - od briefu klienta po gotową prezentację i karty moderacyjne. I przyrząd, który mierzy, czy systemy agentowe nadal robią dokładnie to, co obiecuje ich dokumentacja.

89 → 0rule debt in my training factory's repository; a ratchet stops it coming back
1,062+tests in Friendsheet alone
943 hof training delivered · 1,989 participants · 2016-2026
178training sessions · 96 events · 11 years
89 → 0dług reguł w repozytorium mojej fabryki szkoleń; zapadka nie pozwala mu wrócić
1 062+testów w samym Friendsheet
943 hprzeszkolone · 1 989 uczestników · 2016-2026
178sesji szkoleniowych · 96 wydarzeń · 11 lat
01 - HOW I WORK

Four threads that run through all of it

This is not six independent hobbies. It is one way of working, applied six times, and every time proven on something that actually runs.

01 - JAK PRACUJĘ

Cztery wątki, które przewijają się przez wszystko

To nie jest sześć niezależnych hobby. To jeden sposób pracy, zastosowany sześć razy, i za każdym razem sprawdzony w czymś, co realnie działa.

Multi-agent orchestration

Every project has its own team of agents with separated roles and hard handovers: 8 agents, 8+2, router+3. This is not "I asked a chatbot", it is a pipeline with gates in which every stage has an owner, an entry condition, and a moment where a human decides.

Documentation as system state

A vault (Obsidian) as the single source of truth: numbered folders, frontmatter, ADRs, traceability RF → US → Epic. The decision lives in .md, everything else is regenerated. That is Scrum Master thinking, not developer thinking.

A connected ecosystem

The app exports data into the vault, the vault feeds the next product, and that one feeds back into the app. I build coherent, connected systems - not separate islands that happen to look good in a screenshot.

Differentiator

Agent governance and reliability

I do not only build agent systems. I measure whether they still do what their documentation declares, and I built an instrument that checks it mechanically - not by opinion. Every AI expert will show you what they built. I show you whether it still works.

Orkiestracja multi-agentowa

Każdy projekt ma własny zespół agentów z rozdzielonymi rolami i twardymi przekazaniami: 8 agentów, 8+2, router+3. To nie jest „zapytałem czata", tylko pipeline z bramkami, w którym każdy etap ma właściciela, warunek wejścia i moment, w którym decyduje człowiek.

Dokumentacja jako stan systemu

Vault (Obsidian) jako jedyne źródło prawdy: numerowane foldery, frontmatter, ADR-y, identyfikowalność RF → US → Epic. Decyzja żyje w .md, reszta się regeneruje. To myślenie Scrum Mastera, nie developera.

Połączony ekosystem

Aplikacja eksportuje dane do vaultu, vault zasila kolejny produkt, a ten wraca do aplikacji. Buduję spójne, połączone systemy - nie osobne wyspy, które ładnie wyglądają na screenshocie.

Wyróżnik

Governance i niezawodność agentów

Nie tylko buduję systemy agentowe. Mierzę, czy nadal robią to, co deklaruje ich dokumentacja, i zbudowałem do tego przyrząd, który sprawdza to mechanicznie - nie opinią. Każdy ekspert AI pokaże, co zbudował. Ja pokazuję, czy to nadal działa.

02 - PROJECTS

What I have built

The order is not chronological. First comes the one that best shows what makes me different: I build agent systems and I can prove they still do what they promise.

02 - PROJEKTY

Co zbudowałem

Kolejność nie jest chronologiczna. Pierwszy jest ten, który najlepiej pokazuje, czym się różnię: buduję systemy agentowe i potrafię udowodnić, że nadal robią to, co obiecują.

01 · Agent governance and reliability · 2026

The missing compiler for agent instructions

01 · Governance i niezawodność agentów · 2026

Brakujący kompilator dla instrukcji agentowych

An instrument that mechanically proves an agent system's rules and gates really do load and really do work. Wired into CI. This is a rubric and a tool you can apply to someone else's organisation - not a slide, an instrument.

Agent systems fail silently. When a rule file disappears, the agent does not shout: it simply stops applying it, still confident and still error-free, and from the outside there is no way to tell that apart from correct work. No exception, no red build. Code has had compilers for fifty years. Agent instructions have nothing. I built the missing compiler and wired it into CI.

Przyrząd, który mechanicznie dowodzi, że reguły i bramki systemu agentowego naprawdę się ładują i naprawdę działają. Wpięty w CI. To jest rubryka i narzędzie, które można przyłożyć do cudzej organizacji - nie slajd, tylko przyrząd.

Systemy agentowe zawodzą po cichu. Kiedy znika plik z regułą, agent nie krzyczy: po prostu przestaje ją stosować, dalej pewnie i bez błędu, a z zewnątrz nie da się tego odróżnić od poprawnej pracy. Żadnego wyjątku, żadnego czerwonego builda. Kod ma kompilatory od pięćdziesięciu lat. Instrukcje dla agentów nie mają nic. Zbudowałem brakujący kompilator i wpiąłem go w CI.

What it detects

  • Rules that do not work, though the whole organisation believes they do. In the audited ecosystem 8 of 13 were not loading into the agent's session. Without a sensor there is no way to notice: the agent keeps working and sounds exactly as confident.
  • Documentation that describes a different system. A config file listed 18 agents, of which 0 existed in that repository - so the agents were being briefed about someone else's company.
  • Gates that let everything through. 78 dead references survived 34 days of green CI, among them a quality critic's write lane and a VETO gate. A gate pointing at a file that does not exist passes silently, and nobody knows whether it approved or was never asked at all.

What the organisation gets

  • A maturity scale for enforcement mechanisms - a rubric you can apply to any organisation, not only to mine (diagram below). Naming the PHANTOM level is half the work: until it has a name, nobody looks for it.
  • linkcheck.py: zero dependencies, zero LLM. “It collects paths and checks they exist. No interpretation.” An AI-based sensor could hallucinate that all is well. This one cannot, and that is its entire value.
  • A debt ratchet: existing debt is frozen and does not redden the build, new debt reddens it immediately. The reason stated up front: “a red build nobody knows how to turn green gets switched off within a week”. Result: debt 89 → 0, and the check suite has grown by a sixth one since. The ratchet keeps the debt from coming back.

Co wykrywa

  • Reguły, które nie działają, choć cała organizacja wierzy, że działają. W audytowanym ekosystemie 8 z 13 nie ładowało się do sesji agenta. Bez czujnika nie ma jak tego zauważyć: agent pracuje dalej i brzmi tak samo pewnie.
  • Dokumentację, która opisuje inny system. Plik konfiguracyjny wymieniał 18 agentów, z których 0 istniało w tym repozytorium - czyli agenty dostawały brief o cudzej firmie.
  • Bramki, które przepuszczają wszystko. 78 martwych referencji przetrwało 34 dni zielonego CI, wśród nich pas zapisu krytyka jakości i bramka VETO. Bramka wskazująca na nieistniejący plik przechodzi bezgłośnie, i nikt nie wie, czy zatwierdziła, czy nigdy nie została zapytana.

Co dostaje organizacja

  • Skala dojrzałości mechanizmów egzekwowania - rubryka, którą można przyłożyć do dowolnej organizacji, nie tylko do mojej (diagram niżej). Nazwanie poziomu PHANTOM jest połową roboty: dopóki nie ma nazwy, nikt go nie szuka.
  • linkcheck.py: zero zależności, zero LLM. „Zbiera ścieżki, sprawdza istnienie. Żadnej interpretacji." Sensor oparty o AI mógłby zahalucynować, że jest dobrze. Ten nie może, i to jest cała jego wartość.
  • Zapadka na dług: istniejący dług zamrożony i nie czerwieni builda, nowy czerwieni natychmiast. Powód powiedziany z góry: „czerwony build, którego nikt nie umie zazielenić, jest wyłączany w tydzień". Efekt: dług 89 → 0, a zestaw checków urósł od tamtej pory o szósty. Zapadka pilnuje, żeby dług nie wrócił.
Maturity scale · where your control mechanism really stands Skala dojrzałości · gdzie naprawdę jest Wasz mechanizm kontroli

Five levels any rule can sit at: in code, in a process, in an agent system. The fourth and the fifth can be measured. The second is invisible - and it is the one that decides.

Pięć poziomów, na których może stać każda reguła: w kodzie, w procesie, w systemie agentowym. Czwarty i piąty da się zmierzyć. Drugi jest niewidzialny - i to on decyduje.

ABSENT The rule is not there, and everybody knows it. Reguły nie ma i wszyscy o tym wiedzą.
PHANTOM The rule is written down, people believe in it, and it does nothing. Reguła jest opisana, ludzie w nią wierzą, i nie robi nic. ↑ Nobody measures this level. From the outside it looks like ENFORCED. ↑ Tego poziomu nikt nie mierzy. Z zewnątrz wygląda jak ENFORCED.
MANUAL Someone checks by hand, when they remember. Ktoś sprawdza ręcznie, kiedy pamięta.
ENFORCED A machine checks it, on every change, and can say “no”. Sprawdza maszyna, przy każdej zmianie, i umie powiedzieć „nie".
SELF-HEALING The system catches what got past the human, and repairs itself. System łapie to, co przeszło przez człowieka, i sam się naprawia.
8-repository audit audyt 8 repozytoriów 11 findings (6 CRITICAL) CI sensors checking whether rules load sensory CI pilnujące, czy reguły się ładują repair merged in a fixed order naprawa mergowana w ustalonej kolejności PythonGitHub Actions
02 · Mobile app with an AI assistant

Friendsheet - the AI that never sees anyone's name

02 · Aplikacja mobilna z asystentem AI

Friendsheet - AI, która nie widzi niczyjego nazwiska

A Flutter/Android app for keeping friendships alive, with a built-in AI assistant (“Buddy”) and relationship analytics. Built from scratch, with full OpenAI integration - and with privacy written into the architecture, not into the terms of service.

Aplikacja Flutter/Android do pielęgnowania relacji ze znajomymi, z wbudowanym asystentem AI („Buddy") i analityką relacji. Zbudowana od zera, z pełną integracją OpenAI - i z prywatnością wpisaną w architekturę, a nie w regulamin.

Before anything reaches OpenAI, real names are swapped on the device for Friend_A, Friend_B… - with a reverse map that restores the answer once it comes back. The model has never seen a single name. This is exactly the question every company afraid of leaking its data into a model asks - except that here the answer is in the code.
Zanim cokolwiek poleci do OpenAI, prawdziwe imiona są podmieniane na urządzeniu na Friend_A, Friend_B… - z mapą odwrotną, która odtwarza odpowiedź już po powrocie. Model nigdy nie zobaczył ani jednego nazwiska. To jest dokładnie to pytanie, które zadaje każda firma bojąca się, że jej dane wyciekną do modelu - tyle że u mnie odpowiedź jest w kodzie.
Pseudonymisation, both ways · what crosses the boundary and what stays Pseudonimizacja w obie strony · co przekracza granicę, a co zostaje

It is easy to promise that “the model does not see your data”. It is harder to make the answer still useful. Here is the whole trip: out to the model and back.

Łatwo obiecać, że „model nie widzi danych". Trudniej sprawić, żeby odpowiedź nadal była użyteczna. Tu jest cała podróż: w stronę modelu i z powrotem.

Anna · Marek · Zosia Real names. They never cross the boundary. Prawdziwe imiona. Nigdy nie przekraczają granicy.
Friend_A · Friend_B · Friend_C Swapped on the device, before the model is called. Podmiana na urządzeniu, przed wywołaniem modelu.
OpenAI Sees tokens and nothing else. Answers in tokens. Has never seen a single name. Widzi wyłącznie żetony. Odpowiada w żetonach. Nie zobaczył ani jednego nazwiska.
“You have not seen Anna in a while” „Dawno nie widziałeś się z Anną" The reverse map restores the name. The map never left the device. Mapa odwrotna przywraca imię. Mapa nigdy nie opuściła urządzenia.
“You have not seen Friend_A in a while” „Dawno nie widziałeś się z Friend_A" The answer comes back the way it went out: in tokens. Odpowiedź wraca taka, jaka wyszła: w żetonach.

Privacy costs no usefulness here: the user reads a sentence about Anna, and the model never knew Anna. That is architecture, not terms of service.

Prywatność nie kosztuje tu użyteczności: użytkownik czyta zdanie o Annie, a model nigdy nie poznał Anny. To jest architektura, nie regulamin.

🤖 AI in the product

  • On-device pseudonymisation before every model call, with a reverse map
  • A constrained write path (BuddyWriteService) - the assistant can only append a note, it can never touch another field. Permissions, not promises.
  • BYOK - the user brings their own key; the key lives in the Android Keystore
  • Guardrails in the system prompt: refuses to reveal its instructions, blocks DELETE, gives no medical or legal advice
  • SSE streaming (openai_dart) with live UI updates
  • Relationship engine: detecting neglected friends, Relationship Strength Score 0-100

⚙️ Engineering

  • 1,062+ tests (mockito, fake_cloud_firestore), PR-only workflow
  • Clean Architecture, Firebase (Auth + Firestore + Security Rules)
  • Offline-first: Hive cache + write queue + connectivity banner
  • Google Calendar API (REST, token refresh on 401)
  • P2P data sharing: 6-character token, 24 h TTL, conflict resolution
  • Localised into ~16 languages

📋 How it was built

  • 8 Claude Code agents: /pm/planning/dev/qa/docs, plus /discover, /debug, /retro
  • CLAUDE.md as the single source of truth - 500+ lines of architectural conventions
  • Backlog: 8 epics → 132+ user stories with AC and story points, roadmap M1-M8
  • Conventional Commits, a 300-line-per-file limit, a CHANGELOG per build

🤖 AI w produkcie

  • Pseudonimizacja on-device przed każdym wywołaniem modelu, z mapą odwrotną
  • Ograniczona ścieżka zapisu (BuddyWriteService) - asystent może tylko dopisać notatkę, nigdy nie ruszy innego pola. Uprawnienia, nie obietnice.
  • BYOK - użytkownik podaje własny klucz; klucz w Android Keystore
  • Guardrails w system prompcie: odmawia ujawnienia instrukcji, blokuje DELETE, nie udziela porad medycznych ani prawnych
  • Streaming SSE (openai_dart) z aktualizacją UI na żywo
  • Silnik relacji: wykrywanie zaniedbanych znajomych, Relationship Strength Score 0-100

⚙️ Inżynieria

  • 1 062+ testów (mockito, fake_cloud_firestore), workflow tylko przez PR
  • Clean Architecture, Firebase (Auth + Firestore + Security Rules)
  • Offline-first: cache Hive + kolejka zapisów + banner łączności
  • Google Calendar API (REST, odświeżanie tokena na 401)
  • P2P dzielenie danych: token 6-znakowy, TTL 24h, rozwiązywanie konfliktów
  • Lokalizacja na ~16 języków

📋 Jak powstała

  • 8 agentów Claude Code: /pm/planning/dev/qa/docs, plus /discover, /debug, /retro
  • CLAUDE.md jako jedyne źródło prawdy - 500+ linii konwencji architektonicznych
  • Backlog: 8 epików → 132+ user stories z AC i story pointami, roadmapa M1-M8
  • Conventional Commits, limit 300 linii na plik, CHANGELOG per build
FlutterDartOpenAI GPT-4o FirebaseHiveFreezed Material 3Claude Code
03 · Agent tool

New-Product-Guide - a product kickoff run by agents

03 · Narzędzie agentowe

New-Product-Guide - kickoff produktu prowadzony przez agenty

A tool that runs a new product's opening session - from an idea to a configured repository with agents, a vault and a backlog. This is my Scrum Master work, turned into a system.

Narzędzie, które prowadzi sesję startową nowego produktu - od pomysłu do skonfigurowanego repozytorium z agentami, vaultem i backlogiem. To jest moja robota Scrum Mastera, zamieniona w system.

The session ends with a backlog and a repo configuration - never with application code. That is a deliberate constraint, not a gap. A tool that spits out code at the kickoff steals decisions the team has not made yet.
Sesja kończy się backlogiem i konfiguracją repo - nigdy kodem aplikacji. To jest świadome ograniczenie, nie brak. Narzędzie, które wypluje kod na kickoffie, ukradnie zespołowi decyzje, których jeszcze nie podjął.
Two tracks · a new product, and a product that is already alive Dwa tory · nowy produkt i produkt, który już żyje

Two different entry points, the same principle: phase N+1 does not start until a human has approved N. The 🚦 gate is drawn between the agents, because that is exactly where the human stands.

Dwa różne wejścia, ta sama zasada: faza N+1 nie startuje, dopóki człowiek nie zatwierdzi N. Bramka 🚦 jest narysowana między agentami, bo dokładnie tam stoi człowiek.

Track 1 · a new product Input: an idea on a sheet of paper
kickoffrouter - reads the session state and routes to the right phase npg-discoverprofiles the person, discovers the product: Lean Canvas, value proposition, MoSCoW npg-architect6 meta-decisions; hands security over to security-advisor npg-materializerwrites the repository to disk Vault + agents + backlog. Never application code.
Track 2 · a product that is already alive Input: an existing system and its documentation
npg-reconreads the system - and lists the load-bearing facts, in order to ask the human whether they are still true npg-auditmeasures the system against the maturity rubric npg-evolvebuilds out the missing capability npg-linkchecksensor: dead references, phantom rules, orphans Findings and repair - in the same vault.
Tor 1 · nowy produkt Wejście: pomysł na kartce
kickoffrouter — czyta stan sesji i kieruje do właściwej fazy npg-discoverprofiluje osobę, odkrywa produkt: Lean Canvas, propozycja wartości, MoSCoW npg-architect6 meta-decyzji; oddaje bezpieczeństwo do security-advisor npg-materializerzapisuje repozytorium na dysk Vault + agenty + backlog. Nigdy kod aplikacji.
Tor 2 · produkt, który już żyje Wejście: istniejący system i jego dokumentacja
npg-reconczyta system — i wypisuje nośne fakty, żeby zapytać człowieka, czy nadal są prawdą npg-auditmierzy system rubryką dojrzałości npg-evolvedobudowuje brakującą zdolność npg-linkchecksensor: martwe odwołania, reguły-widma, sieroty Findings i naprawa — w tym samym vaulcie.

None of these agents commits anything on its own - git-autonomy-boundary is a boundary, not a suggestion. The tool prepares and checks; the human decides.

Żaden z tych agentów nie robi commita sam — git-autonomy-boundary jest granicą, nie sugestią. Narzędzie przygotowuje i sprawdza; decyzję podejmuje człowiek.

🤖 Agent architecture

  • Router + 3 agents: kickoffnpg-discovernpg-architectnpg-materializer
  • Gate matrix: phase N+1 starts only once N has been approved - by a human
  • npg-discover profiles the person (4 axes) and discovers the product: Business Model Canvas / Lean Canvas, Value Proposition, assumption mapping, MoSCoW
  • npg-architect runs 6 meta-decisions and delegates to security-advisor (maturity stage → ASVS level)
  • A knowledge base of 8 files + 12 materialisation templates

📋 The rules that hold it

  • git-autonomy-boundary - no agent makes a commit on its own. A boundary, not a suggestion.
  • The vault as the source of truth, resumable across sessions (SESSION_STATE.md, a brief with per-section status)
  • “Grow-as-you-go”: a folder appears only when a trigger fires - a living map of documents
  • Deterministic context loading: CLAUDE.md loads rules from @.claude/rules/ - this is exactly the mechanism whose silent failure project 01 is about
  • Convention: the conversation in Polish, the artifacts in English, the human always makes the decision
  • The backlog also covers non-code work (legal, costs, the visual layer), tagged deferred-until:

🤖 Architektura agentowa

  • Router + 3 agenty: kickoffnpg-discovernpg-architectnpg-materializer
  • Macierz bramek: faza N+1 startuje dopiero po zatwierdzeniu N - przez człowieka
  • npg-discover profiluje osobę (4 osie) i odkrywa produkt: Business Model Canvas / Lean Canvas, Value Proposition, mapowanie założeń, MoSCoW
  • npg-architect prowadzi 6 meta-decyzji i deleguje do security-advisor (etap dojrzałości → poziom ASVS)
  • Baza wiedzy z 8 plików + 12 szablonów materializacji

📋 Zasady, które go trzymają

  • git-autonomy-boundary - agent nie robi żadnego commita sam. Granica, nie sugestia.
  • Vault jako źródło prawdy z wznawialnością między sesjami (SESSION_STATE.md, brief ze statusem per sekcja)
  • „Grow-as-you-go": folder powstaje dopiero, gdy odpali trigger - żywa mapa dokumentów
  • Deterministyczne ładowanie kontekstu: CLAUDE.md ładuje reguły z @.claude/rules/ - to jest dokładnie ten mechanizm, którego cichą awarię opisuje projekt 01
  • Konwencja: rozmowa po polsku, artefakty po angielsku, decyzję zawsze podejmuje człowiek
  • Backlog obejmuje też zadania niekodowe (legal, koszty, warstwa wizualna), tagowane deferred-until:
Claude CodeMarkdown-as-state Lean CanvasMoSCoWASVS
04 · Systems engineering · 5 microservices

Training Management Toolkit

04 · Inżynieria systemowa · 5 mikroserwisów

Training Management Toolkit

A microservice system for running trainings at the education foundation where I am Chief Training Officer: registration → live quiz → certificates. It is meant to replace Airtable + Kahoot + Canva with a single system.

System mikroserwisowy do prowadzenia szkoleń w fundacji edukacyjnej, w której jestem Chief Training Officer: rejestracja → quiz na żywo → certyfikaty. Ma zastąpić Airtable + Kahoot + Canva jednym systemem.

This is a project without AI - and that is exactly why it is here. It answers a different question: whether there is real engineering behind me beyond the prompts - with CI, a quality gate, observability, load tests and GDPR wired into the architecture. A portfolio in which every single project is “about AI” is a portfolio that is stretching.
To jest projekt bez AI - i dlatego tu jest. Odpowiada na inne pytanie: czy poza promptami stoi za mną realna inżynieria - z CI, bramką jakości, obserwowalnością, testami obciążeniowymi i RODO wpiętym w architekturę. Portfolio, w którym każdy projekt jest „o AI", jest portfolio naciąganym.

⚙️ Architecture

  • 5 independent FastAPI microservices (Python): trainings, participants, ignite, certificates, gdpr
  • PostgreSQL schema-per-service, Redis (pub/sub + WebSocket fan-out + cache)
  • Caddy as an edge proxy with bearer auth, Gotenberg for HTML→PDF
  • Real-time WebSocket: p95 <500 ms, 100 concurrent participants, idempotent submissions, resilient to reconnects
  • Frontend: Next.js 16 + TS strict + Tailwind 4 + shadcn/ui, Vitest + Playwright

🔒 Quality and compliance

  • CI/CD on GitHub Actions, a matrix per service: ruff, mypy, bandit, alembic round-trip, pytest - with a SonarCloud gate, a secret guard and a Docker build smoke test
  • Observability: OpenTelemetry → Grafana Cloud; load tests (36 simulated participants, measured throughput)
  • GDPR: cascading data deletion (HMAC-signed, cross-service), an append-only audit log with a lint defending the invariant
  • 10+ accepted ADRs and a Requirement Framework (RF-001..035+), enforcing traceability from every decision back to a requirement

⚙️ Architektura

  • 5 niezależnych mikroserwisów FastAPI (Python): trainings, participants, ignite, certificates, gdpr
  • PostgreSQL schema-per-service, Redis (pub/sub + WebSocket fan-out + cache)
  • Caddy jako edge-proxy z bearer-auth, Gotenberg do HTML→PDF
  • WebSocket w czasie rzeczywistym: p95 <500 ms, 100 równoczesnych uczestników, idempotentne zgłoszenia, odporne na reconnect
  • Frontend: Next.js 16 + TS strict + Tailwind 4 + shadcn/ui, Vitest + Playwright

🔒 Jakość i zgodność

  • CI/CD GitHub Actions, macierz per serwis: ruff, mypy, bandit, alembic round-trip, pytest - z bramką SonarCloud, secret-guardem i smoke-testem builda Dockera
  • Obserwowalność: OpenTelemetry → Grafana Cloud; testy obciążeniowe (36 symulowanych uczestników, zmierzona przepustowość)
  • RODO: kaskadowe usuwanie danych (podpisane HMAC, cross-service), append-only audit log z lintem broniącym niezmiennika
  • 10+ zaakceptowanych ADR-ów i Requirement Framework (RF-001..035+), wymuszający identyfikowalność każdej decyzji do wymagania
FastAPIPostgreSQLRedis DockerCaddyNext.js 16 OpenTelemetrySonarCloud Playwright
05 · The sharpest test of an agent architecture

A co-op city builder inspired by Discworld

05 · Najostrzejszy test architektury agentowej

Kooperacyjny city-builder inspirowany Światem Dysku

An isometric co-op game for two players, inspired by Discworld. Yes, it is a game - and it is here because it is the hardest test of an agent architecture I have found: a game has a simulation, and a simulation does not forgive anything left unsaid in the documentation. If the agents hold consistency here, they will hold it anywhere.

Izometryczna gra kooperacyjna dla dwóch graczy, inspirowana Światem Dysku. Tak, to gra - i jest tutaj, bo to najtwardszy test architektury agentowej, jaki znalazłem: gra ma symulację, a symulacja nie wybacza niedopowiedzeń w dokumentacji. Jeśli agenty utrzymają spójność tutaj, utrzymają ją wszędzie.

🤖 Agents

  • 8 Claude Code agents + 2 conditional subagents (/quest-writer, /asset-pipeline - they fire only when needed)
  • Two working modes: Daily (the full US → PR flow) and Strategic (discovery)
  • Blocking handovers: /qa blocks the merge if the vault has drifted from the code. A trigger table maps every code change to the specific document to update.

⚙️ Technically

  • Godot 4 + statically typed GDScript, a 3-layer architecture (presentation / simulation / data as .tres resources)
  • Systems: pathfinding (AStarGrid2D), production, needs (a tick every 30 s), quest graph, transport FSM, road network (Bresenham)
  • GUT tests: 256+ cases, headless runner, Conventional Commits, PRs only
  • Dynamic split-screen (SubViewport, a tween that joins and splits the screen)
  • Status: M1 prototype, ~22 US closed

🤖 Agenty

  • 8 agentów Claude Code + 2 warunkowe subagenty (/quest-writer, /asset-pipeline - odpalają się tylko, gdy trzeba)
  • Dwa tryby pracy: Daily (pełny przepływ US → PR) i Strategic (odkrywanie)
  • Blokujące przekazania: /qa blokuje merge, jeśli vault rozjechał się z kodem. Tabela triggerów mapuje każdą zmianę w kodzie na konkretny dokument do aktualizacji.

⚙️ Technicznie

  • Godot 4 + GDScript ze statycznym typowaniem, architektura 3-warstwowa (prezentacja / symulacja / dane jako zasoby .tres)
  • Systemy: pathfinding (AStarGrid2D), produkcja, potrzeby (tick co 30 s), graf questów, FSM transportu, sieć dróg (Bresenham)
  • Testy GUT: 256+ przypadków, runner headless, Conventional Commits, tylko PR-y
  • Dynamiczny split-screen (SubViewport, tween łączenia/dzielenia ekranu)
  • Status: prototyp M1, ~22 US zamknięte
Godot 4GDScriptGUT Claude Code
06 · Training factory

CAMPUS-Forge - my training design process, turned into a production line

06 · Fabryka szkoleń

CAMPUS-Forge - mój proces projektowania szkoleń, zamieniony w linię

The line a training is built on: from analysing the client's needs, through Bloom objectives and 4MAT cycles, to a finished presentation and facilitation cards. This is my own training design process, encoded into a system - not a process invented by a tool and stuck onto me.

Linia, na której powstaje szkolenie: od analizy potrzeb klienta, przez cele Blooma i cykle 4MAT, po gotową prezentację i karty moderacyjne. To jest mój własny proces projektowania szkoleń, zakodowany w system - a nie proces wymyślony przez narzędzie i przyklejony do mnie.

No agent approves anything here on its own. A specialist finishes a phase, presents the trainer with a done/not-done checklist and asks for the status to be changed. The rule says why, in as many words: an agent approving your decisions by itself is an anti-pattern. It can prepare the material and check it - but the trainer carries the responsibility for the training, so it is the trainer who flips every status.
Żaden agent nie zatwierdza tu niczego sam. Specjalista kończy fazę, przedstawia trenerowi checklistę zrobione/niezrobione i prosi o zmianę statusu. Reguła mówi wprost, dlaczego: agent samodzielnie zatwierdzający Twoje decyzje to anty-pattern. Materiał może przygotować i sprawdzić - ale odpowiedzialność za szkolenie bierze trener, więc to trener flipuje każdy status.
Who creates, who reads, who has no right to touch Kto tworzy, kto czyta, kto nie ma prawa dotknąć

Every specialist writes exactly one artifact and reads the ones written before it. Everything else is read-only to it. This is not a polite request in a prompt: violating this matrix is an automatic ground for a VETO.

Każdy specjalista pisze dokładnie jeden artefakt i czyta te, które powstały przed nim. Cała reszta jest dla niego tylko do odczytu. To nie jest prośba w promptcie: naruszenie tej macierzy jest automatycznym powodem do VETO.

Agent
training
needs
content
bloom
proposal
plan-hl
plan-ll
theme
deck
/forge-pmsession routerrouter sesji
👁
👁
👁
👁
👁
👁
👁
👁
/forge-needs-analysisneeds analysisanaliza potrzeb
👁
/forge-contentcontent selectionwybór treści
👁
👁
/forge-bloomlearning objectivescele szkoleniowe
👁
👁
/forge-proposalclient proposalpropozycja dla klienta
👁
👁
👁
👁
/forge-4mat-hl4MAT cyclescykle 4MAT
👁
/forge-4mat-ll+ 6 block specialists+ 6 specjalistów od bloków
👁
/forge-themethe through-line thememotyw przewodni
/forge-presentationdeck + facilitation cardsdeck + karty moderacyjne
👁
👁
/forge-overviewermeta-reviewer · zero write rightsmeta-recenzent · zero prawa zapisu
👁
👁
👁
👁
👁
👁
👁
👁
👁
The trainer flips the status of every one of these files. No agent approves any of these columns on its own.
Status każdego z tych plików przekręca trener. Żadnej z tych kolumn agent nie zatwierdza sam.

creates it and owns it 👁 reads the only exception in the whole system: /forge-theme adds a theme: field to someone else's file - and must leave a boundary-override stamp in it, with a date and a reason empty = no write rights

tworzy i jest właścicielem 👁 czyta jedyny wyjątek w całym systemie: /forge-theme dopisuje pole theme: w cudzym pliku - i musi zostawić w nim pieczątkę boundary-override z datą i powodem puste = nie ma prawa zapisu

🤖 Agent architecture

  • Eight phases, 0-7: initialisation → needs analysis → content selection → Bloom objectives → client proposal → 4MAT high-level → low-level plan → theme → presentation
  • /forge-pm as the session router - it reads the training's state, tells you where you are, and delegates to the right specialist
  • 15 specialists in the pipeline, each responsible for one artifact (19 forge-* skills on disk: the router, the meta-reviewer, two outside the pipeline, and those fifteen)
  • /forge-overviewer - the meta-reviewer, called automatically after every phase. It reads without write rights and returns a verdict: APPROVED / CONDITIONAL / BLOCK
  • /retro feeds the reviewer: recurring mistakes land in repeat-findings.md, which /forge-overviewer then uses - the line learns from its own errors

📋 Method and rules

  • 4MAT (Engage → Share → Practice → Perform) + Bloom's taxonomy - not decoration, but the skeleton every artifact stands on
  • The library is the source of truth: trainings live in 04_TRAININGS/, and the repo contains agents and nothing else. No skill duplicates paths
  • Two output tracks: a finished HTML deck, or input for Canva AI - depending on what the client actually uses
  • Gates between phases: phase N+1 does not start until N has a green verdict and a status flipped by the trainer's own hand
  • Off the line: a quiz generator for the training platform, and summary posts for trainings already delivered

🤖 Architektura agentowa

  • Osiem faz, 0-7: inicjalizacja → analiza potrzeb → wybór treści → cele Blooma → propozycja dla klienta → 4MAT high-level → plan low-level → motyw → prezentacja
  • /forge-pm jako router sesji - czyta stan szkolenia, mówi, gdzie jesteś, i deleguje do właściwego specjalisty
  • 15 specjalistów w pipelinie, każdy odpowiada za jeden artefakt (19 skilli forge-* na dysku: router, meta-recenzent, dwa poza pipeline i te piętnaście)
  • /forge-overviewer - meta-recenzent, wołany automatycznie po każdej fazie. Czyta bez prawa zapisu i wydaje werdykt: APPROVED / CONDITIONAL / BLOCK
  • /retro zasila recenzenta: powtarzalne błędy trafiają do repeat-findings.md, z którego korzysta /forge-overviewer - linia uczy się na własnych pomyłkach

📋 Metodyka i zasady

  • 4MAT (Engage → Share → Practice → Perform) + taksonomia Blooma - nie ozdobniki, tylko szkielet, na którym stoi każdy artefakt
  • Biblioteka jest źródłem prawdy: szkolenia żyją w 04_TRAININGS/, a repo zawiera wyłącznie agentów. Żaden skill nie duplikuje ścieżek
  • Dwa tory wyjścia: gotowy deck HTML albo wsad do Canva AI - zależnie od tego, czym klient się posługuje
  • Bramki między fazami: faza N+1 nie startuje, dopóki N nie ma zielonego werdyktu i statusu przekręconego ręką trenera
  • Poza linią: generator quizów do platformy szkoleniowej i posty podsumowujące zrealizowane szkolenia
Claude Code4MATBloom ObsidianMarkdown-as-state Canva AI
03 - FOUNDATIONS

What this stands on

Three things you will ask about on the first call anyway. They may as well be on the page.

03 - PODSTAWY

Na czym to stoi

Trzy rzeczy, o które i tak zapytacie na pierwszej rozmowie. Niech będą na stronie.

Scale
Agents in specialised roles - some of them I wrote from scratch - in a formal pipeline with gates · a governed knowledge vault in which documents are densely linked and navigable · CI sensors that watch whether the rules really do load · AI wired into my own CI/CD loop, not sitting next to it.
Models and tools
I build on Claude Code and OpenAI - and I also teach on Gemini: a Gem that walks a management board from a blank page to a finished SWOT, and a whole client workshop built on Google Antigravity + Gemini, where the participants drove six agents themselves. GitHub Copilot sits inside my loop as a PR reviewer - a skill of my own pulls its review comments, classifies them must-fix / discuss / nit and implements the first kind, under a rule that forbids taking the bot's claim on faith: if it cites a configuration, go and check the configuration. That is how PR #47 came out - Copilot claimed, with total confidence, that a linter rule was enforced; in the actual file it was not there at all.
Code access
Most of the repositories are private: some belong to organisations, some hold real people's personal data. I will not publish them to make an impression in a recruitment process - and that, in itself, is the answer to the question of how I treat other people's data. I will walk you through any of them live, screen shared, in as much detail as you want: the code, the backlog, the PR history, the agent rules.
Skala
Agenty w wyspecjalizowanych rolach - część napisałem od zera - w formalnym pipelinie z bramkami · zarządzany vault wiedzy, w którym dokumenty są gęsto połączone i nawigowalne · sensory CI, które pilnują, czy reguły naprawdę się ładują · AI wpięta w moją własną pętlę CI/CD, nie obok niej.
Modele i narzędzia
Buduję na Claude Code i OpenAI - a uczę również na Gemini: Gem, który prowadzi zarząd od pustej kartki do gotowego SWOT-a, i cały warsztat klienta zbudowany na Google Antigravity + Gemini, gdzie uczestnicy sami operowali sześcioma agentami. GitHub Copilot siedzi w mojej pętli jako recenzent PR-ów - mój własny skill pobiera jego komentarze z review, klasyfikuje je must-fix / discuss / nit i wdraża te pierwsze, pod regułą, która zabrania brać twierdzenie bota na wiarę: jeśli powołuje się na konfigurację, sprawdź konfigurację. Tak wyszedł PR #47 - Copilot twierdził z pełnym przekonaniem, że reguła lintera jest egzekwowana; w realnym pliku nie było jej wcale.
Dostęp do kodu
Większość repozytoriów jest prywatna: część należy do organizacji, część zawiera dane osobowe realnych ludzi. Nie opublikuję ich, żeby zrobić wrażenie na rekrutacji - i to samo w sobie jest odpowiedzią na pytanie, jak traktuję cudze dane. Przeprowadzę przez dowolne z nich na żywo, z ekranem, na tyle szczegółowo, na ile chcecie: kod, backlog, historia PR-ów, reguły agentów.