1 of 60

1

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

2 of 60

KASPAROV, DEEP BLUE I 1997.�

…and very briefly, some musings about�DDEV and what it has to do with WordPress and AI?!

Mladen Đurić

�@MacMladen

2

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

3 of 60

3

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

4 of 60

2005: Two amateurs and three PCs beat�grandmasters and supercomputers

Freestyle tournament on Playchess, June 2005. Anything goes: human, machine, team. Grandmasters take part with the strongest engines. The winner is ZackS — two American amateurs, Steven Cramton and Zackary Stephen, with three ordinary computers and a process of their own: which engine to ask, when, and how to combine the answers.

"Weak human + machine + better process was superior to a strong computer alone and, more remarkably, superior to a strong human + machine + inferior process."�— Garry Kasparov, The Chess Master and the Computer, NYRB 2010

4

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

5 of 60

Process beats power.

Kasparov called it centaur chess.

We call it agent orchestration.

5

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

6 of 60

WORDPRESS, DOCKER AND AI AGENTS — HANDS ON

Mladen Đurić

�@MacMladen

6

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

7 of 60

$ whoami

7

A very boring, incompetent guy

MLADEN ĐURIĆ

a.k.a MacMladen

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

8 of 60

I’ve been in IT since the age of mainframes, 8th year of UNIX epoch.

8

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

9 of 60

I started with Z80 assembly

9

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

10 of 60

I really enjoyed hard core C

10

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

11 of 60

As soon as I started learning to code I was so fascinated and wanted to share what I learned. I was hardly into secondary school when I organised first computer club and gave first BASIC course. It was around 1982.

​

In 2016 I started a Professional Web Development School ]{oder.

11

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

12 of 60

DDEV

​

Ever heard of?

12

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

13 of 60

​

The tool to manage the container stack

DDEV is an open-source tool for launching local web development environments in minutes. It supports PHP, Node.js, and Python (experimental).

You can extend, version-control, and share these environments, so you can use a Docker workflow without Docker experience or custom configuration. You can change, power down, or remove projects as easily as you start them.

13

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

14 of 60

Introduce

yourself!

  • Do you do the local development?
  • Git and terminal: all the time, sometimes, never?
  • Docker or DDEV: are you using them?
  • AI of choice: chat, Copilot, Cursor, Claude Code, Codex?
  • Mac, Windows, Linux?

14

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

15 of 60

Three ways to follow. All three are fine.

Fell behind? git checkout cp-1 … cp-4 returns you to a known state.

​

Note: There is no wrong way. Checkpoint tags are the safety net, nobody has to “keep up”.

15

1

I work on my laptop

You type along with everyone. Prerequisites installed; ddev start already done at home.

2

I watch, then repeat at home

The repo and docs are written so the whole flow can be replayed step by step.

3

I just listen

No laptop. The repo stays as a reference; the slides are public.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

16 of 60

What you take home

  • Local WordPress in DDEV that faithfully mirrors production
  • A project under git, with guidelines for the agent (AGENTS.md)
  • A workflow for an agent that plans and works on your code — Claude Code, Codex or Cursor
  • Code on your own URL, deployed through a procedure
  • The repo as a template for your next project
  • A Backlog.md workflow with estimates, a work log and the cost of AI

16

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

17 of 60

GitHub repository:

https://github.com/macmladen/workshop-wp-ddev-ai

17

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

18 of 60

Timetable:

  1. The Thesis ~9 min
  2. The DDEV ~8 min
  3. The Contract ~10 min
  4. The Worktree ~12 min
  5. The Agent ~12 min
  • The Deploy ~10 min
  • The Myths ~2 min
  • The Conclusion ~2 min
  • Q & A 10 min
  • Resources

18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

19 of 60

Chapter 1

​

THE THESIS

19

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

20 of 60

One-person studio with an AI team

20

A solo developer running a client project the way a small agency does: planning, estimates, parallel work, review, deploy, a record of the work. The agents are the team. The human is the architect.

Me — the architect

  • I decide what and why
  • I write the task and the acceptance criteria
  • I review the diff
  • I am the only one who commits and deploys

The agent — the team

  • plans before it writes code
  • works in a worktree, where it is allowed to fail
  • runs the checks
  • splits work across subagents: scout · worker · judge

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

21 of 60

Agent

21

A program that sees your whole codebase, has tools (terminal, files, git, browser), makes a plan, executes it, checks the result and reports back. It runs in a loop until the criteria are met or you stop it.

"Chat"

  • sees what you paste
  • suggests code
  • you copy and paste
  • no idea what happened next

Agent

  • sees the whole repo
  • plans, then writes
  • runs checks and tests itself
  • works in a worktree under git, where it may fail

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

22 of 60

A real task, a real estimate, a real price

22

AC-181 · Hotfix — category CTA: external registration link

Live Novi Pazar page: the CTA points to our signup, but this race registers via TrkaRS. Optional ACF field "External registration link"; when filled, the CTA goes there; when empty, behaviour unchanged.

Effort: S

Estimate: 1.5h

Actual: 2h

Billable: yes

AI value: plan + implementation + tests; human: the field decision, review, deploy

AI time: 1h 10min

  • Estimate before the work, Actual after
  • Billable: does the client pay for this hour
  • AI value: what the agent actually contributed
  • AI time: how long the agent worked on its own
  • All of it from the backlog, not from memory

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

23 of 60

Three pillars

23

DDEV

Every project gets its own local environment that mirrors production: the same PHP, the same database, the same extensions. One config.yaml.

git worktree

Enables several tasks to run in parallel, each in its own folder and branch, in the same repo. The agent works where it is allowed to fail.

An agent with a contract

AGENTS.md says what it may do, what it may not, and what "done" looks like. Plan and criteria before code. A human reviews and commits.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

24 of 60

24

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

25 of 60

Chapter 2

​

THE DDEV

25

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

26 of 60

26

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

27 of 60

Environment

27

CHECKPOINT 1

$ git clone https://github.com/macmladen/workshop-wp-ddev-ai.git

$ cd workshop-wp-ddev-ai

$ ddev start

$ ddev launch

$ ddev wp option get siteurl

Expected

The site opens in the browser at

�https://workshop-wp-ddev-ai.ddev.site �

and the wp command prints the same URL.

Stuck?

git checkout cp-1

8 minutes · we move on at 12:37

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

28 of 60

Why DDEV: one file, the same machine for everyone

28

# .ddev/config.yaml

name: workshop-wp-ddev-ai

type: wordpress

php_version: "8.3"

webserver_type: apache-fpm

database:

type: mysql

version: "8.0"

hooks:

post-start:

- exec: ./scripts/wp-install.sh

  • Same PHP, same database as Invictus production
  • Docker underneath, but you never touch it
  • mkcert: https locally, no warnings
  • All of it in the repo: clone = working environment
  • Post-start hook installs WP if it is missing

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

29 of 60

WP-CLI through DDEV: everything that would be clicking

29

$ ddev wp plugin list

$ ddev wp plugin activate radionica-trening

$ ddev wp post create --post_type=trening --post_title="Tuesday 19:00"

$ ddev wp db export backup/local.sql

$ ddev wp search-replace https://old https://new --dry-run

$ ddev exec phpcs --standard=WordPress wp-content/plugins/radionica-trening

The agent uses the same commands.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

30 of 60

Chapter 3

​

THE CONTRACT

30

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

31 of 60

AGENTS.md is the contract

31

1

One task at a time. Execute, then stop.

No "while I'm here". I ask for the next step.

2

When something is off, ask — don't improvise.

An unexpected result is not an invitation to a workaround.

3

The agent never commits.

Files on disk. A human reviews, a human commits.

Same file for Claude Code (CLAUDE.md = @AGENTS.md), Codex (AGENTS.md) and Cursor (.cursor/rules).

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

32 of 60

The task before the code

32

---

id: TASK-1

title: 'WS-01: Plugin — show the next training session in the footer'

status: To Do

milestone: 'M1: Workshop'

---

## Description

Effort: S · Estimate: 45min · Actual: — · Billable: no

AI value: — · AI time: —

​

## Acceptance Criteria

- [ ] #1 Plugin activates without errors (ddev wp plugin activate)

- [ ] #2 Footer shows the nearest future session (date, time, name)

- [ ] #3 With no future session the block does not render

- [ ] #4 phpcs WordPress standard passes

- [ ] #5 No changes outside wp-content/plugins/radionica-trening

  • Backlog.md CLI: backlog task create/edit/list
  • Criteria are an exhaustive list, not a description
  • The agent may not say "done" until the list is confirmed
  • Today, you: this task

Let the model decide where judgment helps. Let code enforce the rules where reliability matters.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

33 of 60

33

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

34 of 60

Commit hook: the record as a by-product

34

type [WS-nn] Description.

​

feat [WS-01] Show the next training session in the footer. ✔

fix [WS-01] Do not render the block without a future session. ✔

update stuff ✖ hook rejects

​

git config core.hooksPath .githooks # once per clone

  • One task = one commit (or several, each with the ID)
  • git log becomes the work record, per task, per client
  • Types: feat · fix · refactor · chore · docs

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

35 of 60

Three tools, one contract

35

​

Claude Code

Codex CLI

Cursor

Reads rules from

CLAUDE.md → @AGENTS.md

AGENTS.md

.cursor/rules/*.mdc

Works in

terminal

terminal

editor + terminal

Subagents

yes, explicit model

yes

limited

Plan before code

plan mode

prompt

prompt

Today

on my screen

same flow

same flow

The difference is the tool, not the method. The contract is the same.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

36 of 60

NEVER DO A LIVE DEMO!*

-Morten Birch {{mortend.dk}}

36

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

37 of 60

Chapter 4

​

THE WORKTREE

37

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

38 of 60

The plan

38

CHECKPOINT 2

$ git worktree add ../ws-01 -b ws-01

$ cd ../ws-01

$ claude # or: codex / cursor .

​

# Read backlog/tasks/task-1. Make a plan

# against the acceptance criteria. Do not write code.

Expected

The agent returns a plan: files it changes, the hook it uses, how it verifies #1–#5. You read it and say yes or send it back.

Stuck?

git checkout cp-2

12 minutes · we move on at 12:59

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

39 of 60

The plan before the code: what I look for

39

A good plan

  • lists the files it touches and why
  • names the WordPress hook/API it uses
  • says how it verifies each criterion
  • has a time estimate
  • says what it does NOT do

I send it back when it

  • touches core or the theme for no reason
  • adds a dependency I did not ask for
  • "fixes" something outside the task
  • has no verification plan
  • is longer than the task

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

40 of 60

In parallel: two worktrees, two agents

40

$ git worktree add ../ws-02 -b ws-02 # second task

$ git worktree list

/…/workshop-wp-ddev-ai 3d29f8a [main]

/…/ws-01 3d29f8a [ws-01]

/…/ws-02 3d29f8a [ws-02]

Subagent

Model

Does

scout

Haiku

search, inventory, counting

worker

Sonnet

implementation, research

judge

Opus

verification, review, verdict

The main agent orchestrates. A subagent never inherits the model silently — each gets an explicit model and a bounded scope. Use a cheap model for search and an expensive one for judgment.

​

ws-01 and ws-02 should run at the same time.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

41 of 60

Chapter 5

​

THE AGENT

41

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

42 of 60

Execution

42

CHECKPOINT 3

# Execute the plan. After every change run:

# ddev exec phpcs --standard=WordPress wp-content/plugins/radionica-trening

# ddev wp plugin activate radionica-trening

# When criteria #1–#5 are met, stop and report.

​

$ git diff --stat

$ git diff

Expected

Diff only in wp-content/plugins/radionica-trening. phpcs passes. The footer shows the next session.

Stuck?

git checkout cp-3

12 minutes · we move on at 13:11

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

43 of 60

Review is the gate

43

What I look at in the diff

  • does it change only what the task asks
  • escaping and sanitising on every output
  • the hook in the right place (wp_footer, not echo in a template)
  • what happens with no data
  • would I sign this

The agent's report ≠ the code

  • "tests pass" — run them yourself
  • "I didn't touch X" — git diff --stat tells the truth
  • send it back with a concrete criterion
  • my review and its work are of equal value to the product

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

44 of 60

Chapter 6

​

THE DEPLOY

44

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

45 of 60

Ship it

45

CHECKPOINT 4

$ git add -p

$ git commit -m "feat [WS-01] Show the next training session in the footer."

$ ./scripts/deploy.sh test --dry-run

$ ./scripts/deploy.sh test

​

$ open https://<your-github>.radionica.macmladen.com

Expected

The hook accepts the message. rsync transfers only the plugin. Your URL on your phone shows the next session.

Stuck?

git checkout cp-4

10 minutes · content ends at 13:21

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

46 of 60

What never travels to the server

46

Stays local

  • .git, .ddev, .claude, .cursor, .idea
  • AGENTS.md, backlog/, docs/
  • wp-config.php.* templates
  • node_modules, *.log, .DS_Store

The server owns

  • wp-config.php (the active config)
  • wp-content/uploads (media flows only towards local)
  • .htaccess, .user.ini, mu-plugins
  • cache/, upgrade/, wflogs/

The rsync --exclude list is in the repo. �Before a deploy: compare WP versions, never downgrade production.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

47 of 60

The same thing on Invictus, now

47

$ ssh invictus 'cd ~/public_html_test_… && wp core version'

$ ddev wp core version

$ cd new-design/challenge && npm run build && cd -

$ ./scripts/deploy.sh test

$ curl -sI https://test.invictuschallenge.rs | head -1

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

48 of 60

Chapter 7

​

THE MYTHS

48

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

49 of 60

"AI will do it all by itself."

49

Without a task, criteria and review, you get fast code nobody understands.

Including the agent tomorrow. Process, not power.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

50 of 60

"I can't trust code I didn't write."

50

You should not. That is what the review is for.

Neither you trust a plugin from wordpress.org: you check it. Same here.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

51 of 60

"That's for big teams."

51

The other way round. One person with a contract, a backlog and agents works like a small team. Big teams have different problems.

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

52 of 60

Chapter 8

​

THE CONCLUSION

52

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

53 of 60

Five steps for your own project

53

1

ddev config on an existing project; match PHP and database to production

2

AGENTS.md with the three rules; CLAUDE.md = @AGENTS.md

3

backlog init; first task with criteria, Estimate and Billable

4

commit hook; git log becomes the record

5

deploy.sh with the exclude list; first deploy to test, never straight to live

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

54 of 60

The right tool for the job

54

  • Never hand the decision to the agent — hand it the work
  • Never without a task and criteria — otherwise it's chat
  • Never a commit you haven't read
  • Cheap model for search, expensive for judgement
  • The same procedure for a small and a big project — that is what scales

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

55 of 60

Chapter 9

​

THE RESOURCES

55

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

56 of 60

56

WP-CLI

git worktree

Backlog.md

Claude Code

Codex CLI

Cursor CLI

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

57 of 60

Q & A

Mladen Đurić

�@MacMladen

57

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

58 of 60

Mladen Đurić

�@MacMladen

58

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

59 of 60

THANKS!

Mladen Đurić

�@MacMladen

59

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

60 of 60

60

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18

@MacMladen

WordPress, Docker i AI agenti — praktično

v.1 2026-09-18