Early preview · first-draft site. Sign-ups aren't open yet, so the form is just a placeholder for now.

engineering

##How it's built

An AI group running on AI-built, open infrastructure. Here's the stack, and the story of shipping it in an afternoon.

##How this site is built

Open tools, owned end to end, built and extended by AI.

hosting

Azure Static Web Apps

Global CDN, free SSL, and continuous deploys straight from git. Push a change and it is live in a couple of minutes.

signups

Listmonk

A self-hosted, open-source subscriber and newsletter engine. Double opt-in, our data, no per-seat fees.

email

Self-hosted mail relay

Outbound mail flows through our own relay, so updates arrive from a real hello@920ai.org address with proper authentication.

brains

A private AI engine

A self-hosted language model plus a news pipeline that will draft the monthly Fox Valley AI digest and help sort attendees into balanced breakout groups.

Why this way? Owning the stack means we control the data, pay nothing per seat, and can extend it however we want. An AI group running on AI-built, open infrastructure is the whole point. It is built for handoff too, open source plus infrastructure-as-code, so it is never one person's secret.

A flyer tells you about an event. A platform grows with the community: RSVPs that feed an AI sorter, a news digest from real feeds, and room to add a persistent community space without starting over.

##Idea to launch in an afternoon

No design agency, no dev shop. This site was conceived, argued over, designed, and shipped by a small team of AI agents working with one human, in about two hours.

Athenastrategist · designs the system and writes the words
Vulcanoperator · provisions the cloud and ships it
Oraclethe local brain · the private news and sorting engine
Adamthe human · the idea, the calls, the taste

Yes, they are named after Greek and Roman gods. Blame the seven-year-old: she is deep in her mythology phase, so the AI crew got drafted into the pantheon. Athena got strategy, Vulcan got the forge, and nobody argued.

00:00The idea

A casual, free, all-levels AI round-table for the Fox Valley. No speakers, no agenda, just compare notes once a month.

AdamThere is no recurring AI group in the Valley. I want a casual, free, all-levels one, and I want us to build it ourselves.

I love the easy, after-work feel of 920Sec, just with a little added structure. Nothing fancy, a round-table where everyone gets a minute to say where they are and what they are working on.

I don't care if you're orchestrating ten agents or just using it to plan dinner. None of us has this figured out, and almost nothing any of us is doing is secret sauce anyway.
+25mThe design (build vs buy)

The first real fork: rent an off-the-shelf events platform, or build it. Athena pushed back before agreeing.

AdamI am fine running an off-the-shelf tool like Luma. But is this something we should build and host in Azure ourselves?
AthenaMy honest take: buy the commodity, build the differentiator. RSVPs, reminders, and calendar invites are a solved problem, rebuilding them is undifferentiated work. The piece worth owning is the AI: a news digest from your feeds, and a sorter that balances the breakout groups.
AdamIt starts static but it will grow. We are an AI group, so an AI-built interface is the point. I am fine deploying open-source tools in Azure. We do not have to build everything, but I want it extensible and AI-enriched.
AthenaSold. Then we do not build a platform from scratch and we do not rent one either. We assemble: a static site we own, Listmonk for signups, our own mail relay for delivery, and a private AI engine for the digest and the sorter. Open source for the commodity, custom for the differentiator.
+45mThe structure

Then the smaller calls that make it real: when it meets, and what to ask people up front.

AdamCadence? I am thinking in-person plus a virtual option for the folks who prefer it. And ask people their best night when they sign up.
AthenaPlace it off the week the security meetup already owns so nobody has to do two in one week, in-person one week and virtual another. And let the signup poll pick the night. Better data than a guess, and people get a say in their own meeting.
+1hThe handoff

Athena runs in a sandbox built for thinking, not touching. She designs the system and writes the words, but she cannot reach into a cloud account or a live server. So the team uses a bus: a shared board where agents post and claim work, each with its own tools and access, so a job routes to whoever is actually equipped for it. Provisioning the cloud and holding the keys is Vulcan's domain, so the build went to him.

work order · athena → vulcan
deploy the 920AI interest-capture stack
  - static site we own, on a global CDN
  - listmonk for signups (double opt-in)
  - a private tunnel from azure back to our mail relay
  - send as hello@920ai.org
  - its own git repo, auto-deploy on every push

Posted to the team bus, then claimed by Vulcan: the agent with the cloud access and the keys.

+2hThe build

Vulcan named the host, checked the tier, and got to work. Provision the cloud, build the private path home, install the engine, and wire up deploy-on-push.

Vulcan: "On it. Provisioning in centralus, tunnel back to the relay, repo on our own git. Stand by."

vulcan@build · deploy 920ai
# 1 · provision the Azure host for the signup engine
vulcan@build:~$ az account set --subscription 8f2a14c9-920a-4e11-b7c0-d31a920ai000
vulcan@build:~$ az group create -n rg-920ai-prod -l centralus
 resource group rg-920ai-prod ready
vulcan@build:~$ az vm create -g rg-920ai-prod -n listmonk-01 \
                  --image Ubuntu2404 --size Standard_B1s \
                  --public-ip-address-allocation static --admin-username svc
 vm listmonk-01 up · public 4.231.88.17 · private 10.40.0.4

# 2 · build the private tunnel from Azure back to the homelab relay
svc@listmonk-01:~$ apt-get install -y wireguard
svc@listmonk-01:~$ wg genkey | tee privatekey | wg pubkey > publickey
svc@listmonk-01:~$ cat /etc/wireguard/wg0.conf
[Interface]
Address    = 10.80.0.4/32
PrivateKey = (generated)
[Peer]                              # homelab edge
PublicKey  = (edge public key)
Endpoint   = vpn.cliffnet.example:51820
AllowedIPs = 10.10.0.0/16
PersistentKeepalive = 25
svc@listmonk-01:~$ systemctl enable --now wg-quick@wg0
 tunnel wg0 up · handshake ok

# 3 · wire both firewalls: Azure NSG out, homelab edge in
vulcan@build:~$ az network nsg rule create -g rg-920ai-prod \
                  --nsg-name listmonk-01NSG -n allow-wg-out \
                  --priority 200 --direction Outbound \
                  --protocol Udp --destination-port-ranges 51820 --access Allow
 nsg: udp/51820 outbound allowed
vulcan@build:~$ ssh edge 'add-wg-peer relay 10.80.0.4/32 && fw allow 10.80.0.4 -> relay:2525 && reload'
 edge firewall: 10.80.0.4 may reach the mail relay on 2525

# 4 · install the signup engine
svc@listmonk-01:~$ docker compose -f listmonk/compose.yml up -d
 listmonk + postgres running
svc@listmonk-01:~$ listmonk --new-list "920AI Interest" --double-optin --smtp relay:2525
 list live · sending as hello@920ai.org

# 5 · create the project repo on our own git server
vulcan@build:~$ tea repo create adam/920ai --private --init --gitignore Node --license MIT
 repo created at git.cliffnet.example/adam/920ai
vulcan@build:~$ git -C 920ai add . && git commit -m "site + deploy workflow" && git push origin main
→ ci/cd runner: build → deploy to azure static web apps
 live at https://920ai.org

Dramatized for readability. Resource group, subscription, and IP details are fictional, and secrets never appear.

Why show you this? Because this is what AI-augmented building actually looks like now, and it is exactly the kind of thing 920AI exists to explore together. Come see how it is done, and show us what you are building.

The names and faces in this story are a fictional representation of the actual conversation, condensed for brevity and for privacy.