impress.js animates these slides with CSS 3D transforms, which this browser does not support. Open the deck in a current version of Chrome, Firefox, Safari, or Edge.
What messaging protocols do apps use beyond plain HTTP REST?
Learn a tool stack you can use for pure web applications and later scale into IoT, firmware, and hardware.
Emulate deploying cloud environments by practicing first on a local Linux SSH server.
Core goal: kickstart your journey, help you build things with MQTT, and prepare you for future software, hardware, and IoT projects.
Ubuntu is 1 to 3 GB. Start it now and it downloads while we talk. Do not wait for it.
Ubuntu 24.04.Mac and Linux users: skip this, you already have a terminal.
Windows browses. Linux runs servers. WSL2 is a real Ubuntu kernel inside Windows, with its own filesystem, networking, and always-on services.
# verify you are on a Linux kernel uname -a
# right-click Start, choose Terminal (Admin) # or PowerShell (Admin), then run: wsl --install -d Ubuntu-24.04 # if it asks to restart, do it now
Same result as the Microsoft Store, just without the Store. Restart when prompted, then open Ubuntu from the Start menu.
Your password is invisible. Nothing appears as you type. No dots, no stars. That is Linux security, not a broken keyboard.
"Virtualization not enabled"? In Windows Features, enable Virtual Machine Platform and Windows Subsystem for Linux, then reboot.
What is Kiro? An agentic development environment that turns plain English specification into working code, tooling, and terminal workflows.
Action pause. Redeem your credits and confirm your tier now. Raise your hand for login or access errors and we fix it together.
Steering via a single plain English file such as project.md beats unstructured chat prompts: the intent stays stable, reviewable, and repeatable across sessions.
Under the hood, Kiro harnesses powerful models such as Claude or Sonnet. Raw model quality is the engine, not the whole vehicle.
What Kiro adds is a spec-driven workspace and orchestration harness that manages context, files, tools, and execution order.
Because the harness owns context and execution order, you stay in charge of what actually gets written. The spec steers, you approve.
Tip: use Kiro as your real-time learning assistant. Ask it to explain every command before you run it.
Interactive check. Who here uses Linux or Unix devices?
Reveal: Your iPhone runs iOS on Darwin, a direct descendant of Unix. Your Android phone runs the Linux kernel. Your pocket is full of Unix and Linux.
You have been using Unix and Linux for years without calling it that. Today we just give it a terminal.
# connect to your server ssh user@host # confirm who and where you are whoami hostname uname -a # packages need root sudo apt update
Needed only when connecting to localhost. On a cloud instance it already runs.
# WSL2 / Ubuntu / Debian sudo apt update sudo apt install -y openssh-server sudo service ssh start # macOS -- ships with OpenSSH sudo systemsetup -setremotelogin on
WSL2 has no systemd by default. sudo systemctl start ssh fails, so use sudo service ssh start.
| Polling | Client asks again and again, wasting requests and battery to discover nothing changed |
| Headers | Every REST call carries kilobytes of text overhead before any payload |
| Real time | Needs WebSockets or SSE bolted on just to fake a push |
| Devices | Sensors on constrained networks cannot afford HTTP round trips |
workshop/chatThe publisher sends one message and stops caring. The broker copies it to every client subscribed to that topic. There is no list of recipients to maintain.
Add a subscriber and it starts receiving immediately. Remove one and nothing else breaks. Neither side needs to know how many clients exist on the other end.
Install the broker, test it in the terminal, then prompt Kiro for the web app.
# install the broker and clients sudo apt update sudo apt install -y mosquitto mosquitto-clients # start it and check it sudo systemctl enable mosquitto sudo systemctl start mosquitto sudo systemctl status mosquitto
# terminal 1: subscribe to the workshop broker mosquitto_sub -h 159.223.45.148 -u workshop -P PASSWORD -t workshop/chat # terminal 2: publish mosquitto_pub -h 159.223.45.148 -u workshop -P PASSWORD -t workshop/chat -m "hello"
Two terminals is the whole lesson. One listens, one talks, the broker connects them. Swap 159.223.45.148 for localhost if you built your own broker.
# Project: Minimal MQTT Chat WebApp and Linux Broker Setup ## Objective Help the user learn how to set up an MQTT broker on a Linux SSH server, test it using terminal commands, and build a barebones web application to demonstrate real-time pub/sub messaging. ## Tech Stack - Broker: Mosquitto MQTT Broker running on Linux via SSH - Terminal Tools: `mosquitto_pub` and `mosquitto_sub` - Web Frontend: Simple HTML, CSS, and JS using MQTT.js via CDN
## Core Requirements
1. Linux and SSH Instructions: Provide clear terminal commands to
install and start Mosquitto on Linux.
2. Terminal Testing: Show how to open two terminal windows to publish
and subscribe to a test topic (`workshop/chat`).
3. Chat WebApp: Generate a single `index.html` file with a basic input
field, send button, and raw message log box without complex styling.
Paste both halves into Kiro before you prompt it for anything else. This file is the steering context for the rest of the build.
Leverage the steering file to have Kiro generate a barebones web app tied to the broker. One file, no build step, no framework.
| Connect | MQTT.js client points at the broker WebSocket port |
| Subscribe | Client listens on workshop/chat and appends incoming text to the log |
| Publish | Send button publishes the input value to the same topic |
A shared broker is running for anyone whose local build did not work. Open the demo, connect, and talk to the room.
| Slides | mqtt-slides.awsugcebu.org |
| Demo page | 159.223.45.148:8082 |
| Broker | 159.223.45.148 · MQTT 1883 · WebSockets 8443 |
| Username | workshop |
| Password | mqtt-davao-2026 |
You have a broker running on Linux, a terminal-proven pub/sub path, and a browser client you built by describing it.
You built a broker, proved pub and sub in a terminal, and shipped a browser client by describing it. That is a foundation, not a finish line.
Contributing is the fastest way to learn, and every community needs more people who show up twice.
Technology is one lens. The same skills apply to problems that matter to you.
Your skills transfer. The domain is yours to choose.