Ember Buy the pair $189
$189 the pair · two lamps
Buy the pair

Ember · a synced glass-block lamp, made in pairs

Touch it here.
They feel it there.

A real glass block on a matte black base, and a second one in someone else’s home — a partner in another city, a parent back home, a friend who moved. Touch yours and theirs changes colour to match, over the internet, in about a second. No app to install, no account required, no subscription: just glass, and the fact that you were thinking of them.

Buy the pair
$189 for the set of two
✓ Ships to 21 countries ✓ Arrives assembled & paired ✓ Power supply included Single, Pair, Kit or board only — from $59 →
Tap the block
Three colour groups · drag to set a hue 0.00 · 0.00 · 0.00
1
2
3

Touch one. Both change.

Not a notification. Not a message you have to write. Just a colour, arriving.

Touch the base of your lamp and it settles on a new colour. The other lamp — wherever it is, whoever has it — catches up in a slow crossfade. It's the kid who moved out for university, letting a parent back home know they're up and thinking of them at midnight. It's two best friends who used to see each other every day and now live cities apart. No app to open, no message to write — just glass, changing, because someone touched theirs.

One room
Another, elsewhere

Simulated here, with a realistic delay built in. On the real lamps it's one message over your own WiFi, documented in full in the repository for anyone who wants to build on it.

Or set them apart

Send a colour to just one lamp and the pair uncouples for half an hour, so it isn't quietly undone by the next sync. Send to both and they relink straight away.

They stay in step

Once a minute the lamps quietly check in with each other, so the two never have the chance to drift apart.

Distance doesn't slow it down

Next room or another timezone, the crossfade takes the same few seconds either way. The relay in between doesn't care how far apart the two of you are.


Choose how you start

However you begin, the sync is included — always.

Two lamps are the actual idea — that's the Pair. Or start with a Single, build one yourself with the Kit, or bring your own glass and buy just the board.

One lamp

Single

$109

Start with one, or extend a connection you already have — buy a Single and give it to someone new. It syncs with the lamp you kept, no different from the pair.

Buy Single
Best value · saves $29

Two lamps, synced

Pair

$189 vs. $218 for two Singles

Two lamps that already know each other, out of the box. This is what Ember is for: touch yours, theirs changes.

Buy the Pair

Self-assembly · one lamp

Kit

$89

The board arrives already built and tested — the ESP32 and fifteen LEDs are reflow-soldered at the factory, not by you. You do the rest: board into the base, base under the glass, plug in the USB‑C cable. No soldering, no electronics kit.

Buy the Kit

Board + base · no glass

Board only

$59

The same assembled, tested board and printed base as every other tier — without a glass block. For anyone sourcing their own 190×190×80 mm block locally, already has one, or wants a different finish.

Buy the board

Every tier: full colour across three zones, touch control, sunrise and bedtime alarms, over-the-air updates, and the complete open-source design files.


Questions a sceptic asks

Answered properly, including the awkward ones.

What's actually different between Single, Pair, and Kit?

The lamp itself is identical — same board, same fifteen LEDs, same firmware, same sync. Single and Pair ship fully assembled, ready to plug in; the difference between them is just how many lamps arrive, and Pair is priced below two Singles because sync is what the product is for. Kit is one lamp for less, with the glass block and base shipped loose — you snap it together yourself, no soldering involved.

Does the Kit involve any soldering?

No. The EM-15 board — the ESP32-C3 module, all fifteen LEDs, every fine-pitch part — is reflow-soldered and tested at the factory before it ships. What arrives loose is the glass block and the printed base; what you do is entirely mechanical: board into the base, base under the block, plug in the USB‑C cable. No iron, no flux, nothing electronic to assemble.

Is this a “friendship lamp”?

That’s the usual name for the category, so yes — if you’ve seen long-distance friendship lamps or touch lamps for couples, Ember does the same thing: touch one, the other changes, however far apart they are.

Where it differs is the object. Most are a small plastic dome with one preset colour per tap. Ember is a real 190 mm pressed-glass block on a matte black base, with full colour across three independent zones, sunrise and bedtime alarms that run on the lamp itself, and open-source hardware and firmware you can change. It’s meant to be a light you’d own anyway, that happens to be connected to someone.

Can I use just one?

Yes — touch, colour groups, alarms, the web app, all of it works on a single lamp. But sync is why the Pair exists: one lamp is a nice light, two are a lamp that answers when someone touches theirs. Buying a Single later is also how you add a lamp for someone new, synced to one you already own — when you set that lamp up, enter the pairing code of the lamp you already have rather than the one in its own box. Sharing a code is exactly what makes two lamps a pair.

What is in the box?

Single and Pair: one or two complete lamps, each a 190 × 190 × 80 mm glass block on a printed base, with an assembled and tested EM-15 rev I board fitted inside and firmware already on it. Kit: the same board, already assembled and tested, plus a glass block and a printed base as separate parts you assemble yourself. Board only: the same assembled and tested board and printed base, with no glass block — for your own 190 × 190 × 80 mm block. Every tier ships with its own USB-C power supply, so there is nothing else to buy and no charger to hunt for.

Setup is joining a lamp to your WiFi and giving synced lamps the same name. If you have a question about what ships in your country before you order, ask through the repository first.

What happens if the WiFi drops?

The lamp keeps doing what it was doing. It holds its colour and brightness, the touch sensor still works, and any sunrise or bedtime alarm still fires, because the schedule and the clock live on the board rather than on your phone.

What it cannot do while offline is sync with the other lamp. If it can't reach the server that keeps the pair in sync for ten minutes, it reboots to try again, and the two lamps re-agree automatically once both are back.

What happens if your server disappears? Or you do?

There is no server of mine in the path, so there's nothing of mine to disappear. The lamps talk to each other over a public relay you can swap out any time — even run your own. If this page and the repository both vanished tomorrow, the lamps on your shelf would carry on exactly as they are.

Who else can control my lamps?

Only someone who knows your lamps' private address, which is generated at random and never shown anywhere public. If that isn't reassuring enough, you can point both lamps at a sync server of your own, with a password — one setting, changeable any time. Either way, the only thing that ever travels is a colour. No cameras, no microphones, no telemetry.

How is it powered?

USB-C, 5 V, into the base. No barrel jack, no proprietary connector, no batteries. Worst case the electronics draw about 1.69 A, which sits inside the board's 2 A resettable fuse and inside a 2.4 A supply budget, so it runs cool and well within its protection rather than on the edge of it.

Can I change the firmware, or connect it to Home Assistant?

Yes to both. The firmware is fully published and meant to be changed — updates go out over the air, and a failed update rolls itself back automatically, so it's quite hard to brick. Separately, the lamp speaks a simple, fully documented message format, so anything that can publish a message — Home Assistant, your own script — can drive it. The protocol is in the repository.

Does it flicker, buzz, or read as a row of dots?

No. There's about 80 mm of glass between the LEDs and the surface you see — roughly seven times more than the fifteen sources need to disappear into one even glow. The optics-nerd version, with the actual diffusion maths, is in the technical details below.

Colour changes fade smoothly rather than snapping, so a change set to take one second really does take one second.

Is there an app, an account, or a subscription?

No app and no subscription, and nothing you have to sign up for. Control is a free web page: enter the pairing code from the box and it works, with no account and no recurring fee. You can also just touch the lamp, which needs no device at all.

There is an optional account. Signing in remembers which lamps are yours so you do not retype the code on every new phone, and that is all it does — nothing is behind it, and your lamps sync to each other over your own WiFi whether or not you ever use it.


The object: pressed glass, 190 mm, on a matte black base

Off, it is a block of glass someone left on a shelf.

A solid glass block, 190 mm square, on a low dark base. The light lives underneath, out of sight — no lens, no screen, nothing to look at until you switch it on. Then the glass itself seems to hold the colour — and its other half, wherever that is, is holding the same one.

OffA plain block of glass on a shelf.
Warm whiteThe lamp's resting state.
Full colourThree zones, any hue, independently.

A dawn, run by the lamp itself

Set it once. It runs with your phone off and the app closed.

Colour deepens from ember red to warm white over half an hour, brightening as it goes — a real sunrise, not a light switching on. Bedtime runs the same fade in reverse, and settles quietly to off. It runs on the lamp's own clock, so it still arrives on schedule even if the person it's timed for is asleep in a different timezone.

Tap to run the dawn
A thirty-minute ramp, compressed here to about fourteen seconds.

Open, start to finish

Firmware, app, schematic, board files, bill of materials — all public.

If this page disappears, or I do, the lamps on your shelf keep working, and every file needed to keep them running — or build more — is already yours.

View the repository Open the control app

For the curious — how it actually works

Optics, reliability, specs

Why it glows as a whole, not as fifteen dots

Fifteen LEDs sit behind the glass at an 11.13 mm pitch. Left bare, an eye resolves them as individual points. The board's own hardware notes call for a diffuser standing off by 0.7–1.0× that pitch, or about 7.8–11.1 mm, before the eye stops seeing dots. The glass block gives roughly 80 mm of scattering path — about seven times more than the rule asks for. Drag the slider to see where the dot-to-glow transition actually happens, and how far past it 80 mm sits.

Standoff 2.0 mm 0.18 × pitch reads as dots

Rule from the repo's hardware notes, §7.3: 0.7–1.0 × pitch. At 11.13333 mm pitch that's 7.8–11.1 mm. Ember: ~80 mm.

Real white, not mixed white

The fourth LED channel is a dedicated warm-white die, not red, green and blue mixed together — in code, BASE_WARM_WHITE = (0, 0, 0, 200). The exact part fitted, SKC6812RGBW-WS (LCSC C5378724), was chosen specifically to match that base colour, so every tint on the palette blends outward from a true warm white rather than an approximation of one.

It doesn't need you, or me, to keep working

Every item below is live in the firmware today, and the tests that exercise it are in the repository.

Watchdog

A hung board resets itself and comes back within seconds.

Crash-loop rollback

Three bad boots and it restores the last version that worked.

All-or-nothing updates

A dropped connection mid-update can't leave it half-installed.

Atomic writes

A power cut can't corrupt the firmware or the saved state.

Validated input

Every incoming message is checked and clamped before it's used.

Self-healing connection

Ten minutes offline and it reboots to reconnect on its own.

State survives anything

Colour and brightness are restored exactly after any power cut.

Clock that retries

A failed clock sync retries hourly, so alarms don't quietly die.

Open, in full

The MicroPython firmware, the control app, the KiCad project, the fabrication files and the costed bill of materials are all published, including the full manufacturing cost breakdown. The protocol the two lamps use to talk to each other — every topic, every field, every accepted range — is documented in the repository README, so anything that can publish a message can drive them: another web page, a script, Home Assistant. Firmware updates pull from a GitHub branch, so forking the repository and pointing a board at your fork is all it takes to run your own code, with the same rollback protecting you from mistakes.

Specifications

BlockStandard glass block, 190 × 190 × 80 mm, one per lamp
Light source15 × SK6812 RGBW in one unbroken row, in the base beneath the glass
LED partSKC6812RGBW-WS — the warm-white variant (LCSC C5378724), chosen to match the firmware's warm-white base
GeometryPitch 11.13333 mm; lit zone exactly 167.00 mm; 11.5 mm of glass beyond it at each side
BoardEM-15 rev I, integrated lamp board
RadioESP32-C3-MINI-1, a pre-certified radio module. 2.4 GHz WiFi
TouchTTP223 capacitive sensor in the base — touch the lamp to change it
PowerUSB-C, 5 V. Worst-case draw ~1.69 A — inside the board's 2 A resettable protection and inside the 2.4 A supply budget
Colour groups3 per lamp, 1–8 LEDs each, independently addressable and independently faded
Palette30 hue stops blended out of warm white; per-group warm-white level; smoothstep crossfades; a ±4% breathing oscillation with staggered phase per group
AlarmsSunrise and bedtime, held on the board's own flash and run against its own NTP-synced clock
FirmwareMicroPython, updated over the air from GitHub
ControlWeb app in any browser, installable to a phone home screen. No account required. MQTT over WiFi, on a topic derived from the pairing code in the box
SourceFirmware, web app, KiCad project, Gerbers, BOM and cost breakdown — all public