Software with
a physical address.

Every one of these is the same problem wearing different hardware: a screen in a place you don't control, doing one job, that has to keep working when the internet doesn't — and that somebody has to be able to fix from two hundred miles away. A bakery chain's branch tablets are the first of them in production.

01 / Seven devices

Same platform,
different job.

If it has a screen, a plug and a job to do, it's an ArdaForm device. Each of these is a Raspberry Pi or a small x86 box running ArdaPlayer, drawing a web page straight on the panel, adopted and supported from the portal.

A tablet in an edge-lit acrylic frame on a gym reception desk, showing a member check-in screen that asks for a QR code 01

Member check-in

A framed tablet on the desk. A USB QR scanner reads the membership app's code, the member list answers in a millisecond from the device's own disk, and the visit is saved whether or not the line is up.

Pi 4 · DSIUSB QR scannerArda.on('barcode')
A rugged wall-mounted tablet on a swing arm in a warehouse aisle, showing a pick list with three items ticked off and a barcode prompt 02

Pick station

A rugged tablet on an arm at the end of an aisle. Pick lists arrive already cut to this bay, each scan confirms a line, and a label printer on the network prints the tote label. The bay's CCTV camera plays live in a corner of the same screen.

Pi 4 · HDMI touchZPL label printerpartition: bayArda.camera
A small panel beside a meeting-room door with a green edge light, showing the room is free until two o'clock and two booking buttons 03

Room panel

A small screen by the door, edge-lit by its own state. Bookings sync in from your calendar through the HTTP API; a tap books thirty minutes and pushes it back out. Screen brightness follows the office hours.

Pi 3 · small DSI panelHTTP API inArda.screens.set
A floor-standing pay-and-display parking station with a touchscreen, a keypad, a card reader and a ticket slot, lit at night 04

Pay station

A box PC in a steel pillar. The keypad is a USB HID, the card reader and the ticket printer are serial, the tariff is a dataset, and every transaction is queued locally and drained when the 4G is there. Someone can see its screen from the office at 2 am.

x86 box PCArda.serialESC/POS ticket printer
An industrial panel PC set into a control cabinet door, showing a production line running with three gauges, one warning, and DIN-rail hardware below 05

Line panel

A panel PC in a cabinet door, talking to the line's controller over a USB-serial adapter and drawing the gauges in HTML. Readings go up as records; alarms are a dataset the maintenance team edits. An operator can check the screen from anywhere.

x86 panel PCModbus over Arda.serialDevice view
A large wall screen in a clinic waiting room showing the number now being served, the room to go to and the next three numbers, with a small Raspberry Pi board fixed behind it 06

Queue board

A Pi behind a wall screen, headless as far as anybody at the desk is concerned. The counter staff's system writes the queue through the API; the board has it within half a minute; a chime plays through the screen's own speakers.

Pi 3 · HDMIAdopted over the networkArda.audio
A small controller box with a four-inch screen mounted on a greenhouse post, showing temperature, humidity and soil readings, with a vent and a pump switched from the screen 07

Greenhouse controller

A Pi in a box on a post, probes on a serial bus, a vent and a pump behind a relay board. Readings push every minute; a page on the box shows them and takes a tap; the same page is the one the grower opens from the portal's device view.

Pi 4 · 4" DSISensors over serialAdopted over Bluetooth
02 / Retail & hospitality

Point of sale.

A till is the least forgiving device there is. It has to take money during a broadband outage, print a receipt in under a second, open a drawer, and never show a customer anything but the till. This is the shape ArdaForm was built around.

NeedsProvided by
Works with the line downArda.db.dataset · Arda.db.push
Thermal receipts, cash drawerArda.printers.print — raw ESC/POS
Scanners, customer displayArda.on('barcode') · Arda.serial
Money entry without a keyboardArda.keyboard — the numeric pad, pos entry
Locked to one applicationFull screen on the bare display, no desktop underneath
Price and menu changesDatasets, cut per branch, on every till within half a minute
Remote support at a busy siteLog capture · screen view · console · SSH
sale.js till
async function completeSale(sale) {
  // Durable — this never waits on the network
  const { seq } = await Arda.db.push('sales', sale)

  const [printer] = await Arda.printers.list()
  if (!printer?.usable) {
    return ui.toast('Sale saved — check the printer')
  }

  // The printer's own language, built by the app
  await Arda.printers.print(printer.id, escpos({
    width:  printer.dots,
    lines:  renderReceipt(sale, Arda.config.currency ?? 'GBP'),
    cut:    true,
    drawer: true,
  }))
}

// Prices changed in the portal? Re-render when the sync lands.
Arda.on('sync', (name) => name === 'catalogue' && render())
kiosk.js self-service
// Return to attract mode when nobody is there
let idle
function resetIdle() {
  clearTimeout(idle)
  idle = setTimeout(() => ui.attractMode(), 90000)
}
document.addEventListener('pointerdown', resetIdle)

// The order goes up; the ticket comes out
const { seq } = await Arda.db.push('orders', basket)
await Arda.printers.print(printer.id, ticket(seq))

// Let an update in only between customers
Arda.on('updateStart', () => {
  if (basket.length) Arda.update.pause()
})

// Dim overnight, remembered across reboots
await Arda.screens.set(null, { brightness: 20 }, true)
03 / Self-service

Ordering &
check-in kiosks.

A kiosk is used by people who have never seen it before and won't read anything. It needs to be fast, obvious, impossible to escape from, and back at its start screen the moment the last person walks away.

  1. 01
    No way outOne page on the bare display. No address bar, no gestures to a desktop, nothing to minimise, nothing else installed.
  2. 02
    Attract modeIdle detection returns the screen to its loop so the next customer sees a start point.
  3. 03
    Tickets and receiptsOrder numbers to the counter and the kitchen through the same printer call.
  4. 04
    Menu updatesEdit the catalogue in the portal or through the API; every kiosk has it within half a minute. Push a new page; every kiosk takes it between customers.
04 / Audience

Who this
is for.

Four kinds of team keep arriving at the same problem from different directions.

Web developers

If you can build a web page, you can build the app — basic HTML and JavaScript is enough. What you don't want to build is the Linux setup, the update mechanism and the support tool, and you don't have to.

Device businesses

You sell hardware with software on it, and every new customer site currently costs you a day of setup and a lifetime of phone calls.

System integrators

You install and support other people's systems across dozens of locations, and you need one way to see all of them.

Software vendors

You need your application to run on customer-controlled hardware without leaving your source sitting readable on the disk.

Get started

Building something
like this?

Create an account and try it — the free plan needs no card. If something you need is missing, tell us: what people describe genuinely shapes what gets finished first.