Level 0 — Open: start naked, harden as you learn

L0 is one line of firmware:

POST https://https.chirpiot.com/ingest/sunny-otter-7c2f   ← your payload, nothing else

No token, no certificate, no clock sync, no TLS stack eating your MCU’s RAM. This is the level where an idea gets proven or abandoned — and both outcomes should take an evening, not a month.

What L0 is for

At L0, your idea lives or dies faster than anyone could bother to hack it. That’s not bravado, it’s attack economics: an attacker needs discovery, motive, and time, and a days-old prototype with an unguessable id and worthless data offers none of the three. You have a sensor, a hunch, and an hour — L0 exists so the distance between “hunch” and “chart on a dashboard” is minutes, and the experiment is concluded before it was ever worth attacking. It’s also for hardware you can’t modify — commercial gear that can only aim a fixed frame at an IP address.

What can go wrong (we won’t pretend otherwise)

Anyone who knows your hardware id can send data as your device, and if they capture a payload they can replay it. Your first defenses are boring but real: a generated id like sunny-otter-7c2f is unguessable (a MAC address isn’t — vendor prefixes are public), and platform rate-limits blunt the firehose.

The hardening ladder — due diligence without leaving L0

This is the part nobody else offers: because you control the payload bytes and you write the decoder, you can add protection in user space and stay in your development cycle with confidence:

  1. 1Sign your payload yourself. Give the spec a secret, append hmac_sha256(secret, payload) on the device, and verify in your decoder — a forged or corrupted message never becomes decoded data, never reaches your routines, never touches your dashboard. (Your decoder has crypto.hmac_sha256 and meta["secret"] built in.) Add a timestamp inside the payload and reject stale ones: replay handled too.
  2. 2Bounce the spammers. If your script decides it’s being spammed, it can call block() — the offending source is blocked at the front door for an hour, before it costs you anything. (We block the sender’s address, not the hardware id — blocking the id would let an attacker lock out your real device on purpose.)
  3. 3Bind before first contact. Claim-code onboarding means your device’s very first packet lands already bound to your account — there’s no window where someone else can claim it.

That ladder is real security engineering, done in a scripting sandbox, on your schedule. It is also, deliberately, a working demonstration of why the higher levels exist: step 1 is L2’s idea in user space.

When to leave L0

When the project stops being an experiment: it actuates something, other people rely on the data, or you’re shipping units to customers. Then move up: L1 asks the device to store and send one token — and the browser flasher will write it to your fleet over USB.