Getting started
Quick start guide
From box to live market data in a few minutes. Follow the steps below to set up your DeskDisplay.
What's in the box
Check that all parts are present before you begin:
- DeskDisplay with wooden base
- USB-C power cable
- Quick start card
You will need your own USB-C power adapter (5V, at least 2A). A standard phone charger works fine.
Power up
- Connect the USB-C cable to the port on the back of the display.
- Plug the adapter into a wall outlet. The display starts up automatically.
Connect to WiFi
On first boot, the display creates its own WiFi hotspot:
- Open WiFi settings on your phone or laptop and connect to:Network: MatrixOS-Setup
Password: matrix123 - Open your browser and navigate to:192.168.4.1
- Select your home network, enter the password, and click Save & Restart.
- The display restarts and connects. This takes about 10–20 seconds.
- After connecting, the display shows its IP address on screen — you will need this to open the dashboard.
Make sure your router broadcasts on 2.4 GHz. The DeskDisplay does not support 5 GHz networks.
Add your first apps
Once connected, open the cloud dashboard to manage your display:
- Use the App Dashboard button on the setup page (Device-IP), to open the dashboard with your Device ID pre-filled.
- Click + Add App and choose from the available app types.
- Configure the app — for example, enter a ticker symbol or city name.
- Click Save. The app appears on the display within seconds.
- Add multiple apps. The display cycles through them automatically.
Available apps include: Crypto Ticker, Stock Ticker, ETF Ticker, Metal Ticker, Forex Ticker, Clock, Weather, Countdown, Pixel Art, Text Scroller, and more.
Done
Your DeskDisplay is running. Apps update automatically. You can return to the dashboard at any time to add, remove, or reconfigure apps.
Getting started
Using your DeskDisplay
How the display works, what infowidgets are available, and how to manage everything from the dashboard.
The display
The DeskDisplay runs infowidgets — each infowidget occupies the full 64×32 pixel screen. When you have multiple infowidgets configured, the display cycles through them one by one. Each infowidget handles its own layout, animation, and update interval.
- Each infowidget has its own layout and update interval — market data, time, weather, countdowns, and more.
- When multiple infowidgets are active, the display cycles through them automatically.
- All changes made in the dashboard take effect within seconds, no restart needed.
The dashboard
The dashboard runs directly on your device and opens via its local IP address. Type http://<device-IP> in your browser — replace <device-IP> with the address shown on the display after connecting to your network. Tip: save this link as a bookmark so you can always get back quickly.
- Your active apps are listed as cards. Each card shows the app type and its current settings.
- Click the settings icon on a card to change its configuration.
- Click + Add App to add a new app.
- All changes apply within seconds. No restart is required.
Brightness can be adjusted using the side buttons on the device, or from the dashboard. The minimum brightness is 10.
Market infowidgets
These infowidgets show live prices and a candlestick or line chart. Each requires a symbol and optionally a currency and chart interval.
- Crypto Ticker — any cryptocurrency: BTC, ETH, SOL, XRP, ADA, DOGE, and more.
- Stock Ticker — US stocks: AAPL, MSFT, GOOGL, TSLA, NVDA, and more.
- ETF Ticker — ETFs: SPY, QQQ, VOO, VTI, ARKK, and more.
- Metal Ticker — precious metals: XAUUSD (gold) and XAGUSD (silver).
- Forex Ticker — currency pairs: EUR/USD, GBP/USD, USD/JPY, and more.
Stock and ETF data is only available during market hours. Outside trading hours the last known price is shown.
Information infowidgets
- Clock — time and date in 12h or 24h format. Configurable timezone, language, and color.
- Weather — current conditions for any city worldwide.
- Dutch Energy Price — live electricity price per kWh for the Dutch market, with optional min/max display. Supports all major Dutch energy suppliers.
Fun infowidgets
- Countdown — count down the days, hours, and minutes to any date. Useful for holidays, birthdays, or deadlines.
- Is It Time? — displays YES or NO based on whether a set hour has been reached. Set it to your lunch break, end of the workday, or anything else.
- Text Scroller — scroll any custom text across the display in a chosen color and position.
- Pixel Art — display a custom 64×32 PNG image, optionally with a clock overlay.
- Pixel Pet — a little animated pet that lives on your display, optionally linked to a market symbol.
- Custom Apps — create and run your own apps, no coding required (see the Infowidgets reference).
Restarting and resetting
- To restart: unplug and replug the power cable.
- To reset WiFi: hold the button on the back for 5 seconds until the display blinks. The device returns to hotspot mode and you can reconfigure the WiFi connection.
Reference
Infowidgets
All available infowidget types and their configuration parameters. Add any of these from the dashboard by clicking Add infowidget.
Clock
Displays the current time and date.
- Format — 24h or 12h.
- Color — text color: white, green, blue, orange, red, or purple.
- Language — en (English) or nl (Dutch). Affects the day-of-week label.
- Timezone — the timezone used to display the current time. Choose from Amsterdam, London, Berlin, Paris, New York, Chicago, Los Angeles, or UTC.
Crypto Ticker
Shows the live price of any cryptocurrency along with a price chart and 24h change.
- Symbol — the coin identifier: BTC, ETH, SOL, XRP, ADA, DOGE, and more.
- Percentage position — where the 24h change is shown: topright, bottom, or off.
- Chart interval — candlestick interval: 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 1d, 3d, 1w, or 1M.
- Currency — price display currency: usd or eur.
- Show timeframe — show or hide the chart interval label on screen: on or off.
Stock Ticker
Shows the live price of any US-listed stock along with a chart and daily change. Data is only available during market hours.
- Symbol — the ticker symbol: GOOGL, AAPL, MSFT, TSLA, NVDA, and more.
- Percentage position — topright, bottom, or off.
- Chart interval — 1m, 5m, 15m, 30m, 1h, 4h, 1d, or 1w.
- Currency — usd or eur.
- Show timeframe — on or off.
Outside trading hours the last known closing price is displayed.
ETF Ticker
Same as Stock Ticker but for exchange-traded funds. Data is only available during market hours.
- Symbol — the ETF ticker: SPY, QQQ, VOO, VTI, ARKK, and more.
- Percentage position — topright, bottom, or off.
- Chart interval — 1m, 5m, 15m, 30m, 1h, 4h, 1d, or 1w.
- Currency — usd or eur.
- Show timeframe — on or off.
Metal Ticker
Shows the live spot price of precious metals.
- Symbol — XAUUSD (gold) or XAGUSD (silver).
- Percentage position — topright, bottom, or off.
- Chart interval — 1h, 4h, 1d, or 1w. Shorter intervals are not available for metals.
- Currency — usd or eur.
- Show timeframe — on or off.
Forex Ticker
Shows the live exchange rate for a currency pair.
- Symbol — choose one of: EURUSD, GBPUSD, USDJPY, AUDUSD, USDCAD, NZDUSD, EURGBP, or EURJPY.
- Percentage position — topright, bottom, or off.
- Chart interval — 1m, 5m, 15m, 30m, 1h, 4h, 1d, or 1w.
- Show timeframe — on or off.
Weather
Shows current weather conditions for any city worldwide.
- City — enter a city name, for example: Amsterdam, London, or New York.
Countdown
Counts down the days, hours, and minutes to a target date and time.
- Label — a short text label shown on the display, for example: CHRISTMAS, BIRTHDAY, or MEETING.
- Date — the target date in YYYY-MM-DD format, for example: 2026-12-25.
- Time — the target time in HH:MM format, for example: 00:00.
- Color — text color: green, red, blue, orange, purple, or white.
- Timezone — the timezone the countdown is relative to.
Is It Time?
Displays YES or NO depending on whether a set hour has been reached. Useful as a fun desk reminder.
- Item — the thing you are waiting for: BEER, LUNCH, GYM, and so on.
- Time (hour) — the hour at which the answer switches from NO to YES (6–23).
- Timezone — the timezone to use when evaluating the current time.
Text Scroller
Scrolls any custom text across the display.
- Text — the message to display, for example: Hello World!
- Color — white, green, blue, orange, red, purple, or yellow.
- Position — vertical position of the text: center, top, or bottom.
Pixel Art
Displays a custom image on the screen. The image must be a 64×32 PNG file uploaded to the device. Use the built-in Pixel Art editor to draw directly on a 64×32 canvas and export as PNG.
- Filename — the filename of the uploaded PNG, for example: demo.png.
- Clock overlay — optionally draw the current time on top of the image. Choose a corner or center position, or off.
Pixel Pet
A little animated pet that lives on your display. It wanders, sleeps, and reacts over time. Optionally link it to a market symbol so its mood follows the price.
- Name — the name of your pet.
- Species — cat, bunny, or dino.
- Speed — how fast the pet's stats change over time: normal, slow, or fast.
- Linked asset — optionally a market symbol such as BTC, AAPL, or SPY. Leave empty for a normal pet.
Spotify Now Playing
Shows the track currently playing on Spotify. Requires a Spotify Developer account to generate the necessary credentials.
- Spotify Client ID — from your Spotify Developer app.
- Spotify Client Secret — from your Spotify Developer app.
- Refresh Token — a long-lived token that allows the DeskDisplay to access your Spotify account.
To generate these credentials, use the online tool
- Go to developer.spotify.com/dashboard and log in with your Spotify account.
- Create a new app. Fill in any name and description. Under Which API/SDKs are you planning to use? check Web API.
- Open the Spotify Connect tool — it shows the exact Redirect URI to add to your Spotify app settings.
- Copy your Client ID and Client Secret from the Spotify app dashboard.
- Enter both into the Spotify Connect tool and click Authorize with Spotify.
- Log in to Spotify and click Agree. The tool then displays your Client ID, Client Secret, and Refresh Token.
- Copy all three into the infowidget configuration.
Dutch Energy Price
Shows the live electricity price per kWh for the Dutch market. Prices update hourly.
- Supplier — optionally filter prices by your energy supplier. Leave empty to show the base market rate.
- Show min/max — whether to show the lowest and highest price of the day: on or off.
Custom Apps (make your own)
Beyond the built-in infowidgets, you can create and run your own apps — no coding required. Custom apps are written in Starlark (.star files) and rendered on our server by Pixlet, the rendering toolkit used in the Pixlet/Tronbyt ecosystem. Your DeskDisplay receives the rendered visuals.
The easiest way is to let an AI write it for you:
- In the dashboard, open the Custom apps section and click Copy AI prompt.
- Paste it into a free chatbot (ChatGPT, Claude, or Gemini) and describe the app you want in plain English — for example: "show a countdown to Christmas" or "show today's moon phase".
- Copy the code the chatbot gives back, paste it into the text box, and click Test. A live preview appears right away.
- If something is off, copy the error message back to the chatbot and it fixes it. When it looks good, click Save & add to rotation.
You can also paste or upload existing community apps (.star files) from the Pixlet/Tronbyt ecosystem. Apps that use proper data APIs work best; apps that scrape large websites (such as social media) may not work reliably from the server.
API keys in your own apps. Custom apps run on our servers, not on the display itself. Anything inside a script — including an API key, token or password — is stored on our servers so the app can run, and is therefore readable by us in principle. Treat any credential you paste here as shared with us: use one you can revoke, and give it read-only access where the service allows it.
If you would rather not share a credential at all, put the values somewhere your script can read without one. Have your own system publish the numbers you want on screen — to a small endpoint of your own, or a file at an unlisted address — and let the app read from there. Your key then stays with you and we only ever see the values you chose to publish.
One limit to know up front: a script cannot reach devices inside your own network. Requests to private addresses (such as 192.168.x.x or 10.x.x.x) are blocked, so a custom app cannot talk to a local device directly — it needs a reachable address on the internet. For data from your Home Assistant, see Home Assistant.
Integrations
Home Assistant
Show your own home data on the display: the current power price, your solar output, which bin goes out tomorrow, or whether the dishwasher is done. Home Assistant sends the values to your DeskDisplay, and the display updates within about a second.
Home Assistant only sends data out. Our server never connects to your home, so your Home Assistant does not need to be reachable from the internet: no port forwarding, no tunnel, no public URL. You decide what it looks like with a custom app (Pixlet/Tronbyt-compatible .star file), or use one of our four ready-made apps.
Works with Home Assistant. Home Assistant is a trademark of its respective owner; Board&Base is not affiliated with or endorsed by the Home Assistant project.
1. Create a token
The push token is the key Home Assistant uses to send values to your display. Everything you need is in the Home Assistant card of the dashboard, just below + Add App.
- Click Create token, then Copy secrets line. The token starts with
ddp_and is shown only once. Lost it? Click Rotate token to get a new one. - Open
secrets.yamlin your Home Assistant configuration folder and paste the line. It looks like this:
# secrets.yaml
deskdisplay_auth: "Bearer ddp_your_push_token"
- The word
Bearerplus a space must stay in front of the token. Leaving it out is the most common mistake; the server then refuses every push with error 403. The Copy secrets line button includes it for you, so paste the whole line as it is.
The token can only send values to this one display. It cannot read anything, change your apps or update the firmware. Keep it private anyway: anyone with the token can put text on your display. You can rotate or revoke it at any time; the old token stops working immediately.
2. Paste the configuration in Home Assistant
Step 2 of the card shows a rest_command and an automation with the push URL of your display already filled in. Click Copy configuration, paste it into configuration.yaml (Home Assistant 2024.10 or newer) and restart Home Assistant. Then replace the sensor.… names with your own entities; the ones below are examples.
For reference, the configuration looks like this (in the card, <YOUR-DEVICE-ID> is already your own device ID). It uses automation deskdisplay: instead of plain automation:, because a standard Home Assistant already has automation: !include automations.yaml and a second automation: key would break your configuration.
rest_command:
deskdisplay_push:
url: "https://api.boardandbase.com/api/device/<YOUR-DEVICE-ID>/data"
method: post
headers:
Authorization: !secret deskdisplay_auth
content_type: "application/json"
payload: "{{ values | to_json }}"
timeout: 10
automation deskdisplay:
- alias: "DeskDisplay: push values"
mode: queued
max: 3
triggers:
- trigger: state # slow values: send on every change
entity_id:
- sensor.electricity_price
- sensor.waste_tomorrow
- sensor.dishwasher_operation_state
- trigger: time_pattern # fast meters: every 10 s (or "/30")
seconds: "/10"
- trigger: homeassistant
event: start
actions:
- action: rest_command.deskdisplay_push
data:
values:
power_price: "{{ states('sensor.electricity_price') }}"
# positive = using from the grid, negative = sending back
grid_w: >-
{{ (states('sensor.power_consumption') | float(0)
- states('sensor.power_production') | float(0)) * 1000 }}
solar_w: "{{ states('sensor.solar_power') }}"
waste_tomorrow: "{{ states('sensor.waste_tomorrow') }}"
dishwasher: "{{ states('sensor.dishwasher_operation_state') }}"
- Where to edit. Home Assistant only supports
rest_commandin YAML, not in the visual editor. The easiest way is the File editor app (add-on) in Home Assistant. Restart Home Assistant after saving. - Is it working? The card shows when the last data arrived ("Last data … ago"). If you have a token but no data has arrived yet, the card shows a hint.
- How often. The automation sends on every change of slow values (price, waste, dishwasher) and every 10 seconds for fast meters such as power usage and solar output. Every 10 to 30 seconds is plenty; values that did not change cost nothing.
- Test it. Go to Developer tools → Actions, run
rest_command.deskdisplay_pushwith somevalues, then check the Home Assistant card in the dashboard. The keys you sent appear there with their value and age. - Always use
https://in the URL; plainhttp://is refused. Put the token only in the header, never in the URL.
If your meter reports in W instead of kW, drop the * 1000 in grid_w.
3. Add an example app
Step 3 of the card has four buttons: Add Energy, Add Solar, Add Waste and Add Dishwasher. One click adds the ready-made app to your display; no settings needed.
- Energy — power price, large and coloured green, amber or red by level, plus grid power. Uses
power_price(EUR/kWh) andgrid_w(W). - Solar — solar power with a sun and a bar against your peak. Uses
solar_w(W) and optionallysolar_kwh_today. - Waste — which bin goes out tomorrow, in its own colour, or "NO PICKUP". Uses
waste_tomorrow. - Dishwasher — dishwasher status and time left, with a pulse when it is done. Uses
dishwasherand optionallydishwasher_remaining(minutes).
The four apps as they appear on the display. Price levels and your solar peak are settings at the top of each file.
Want to change one first? Download the file, edit it, and upload it under Custom apps in the dashboard: ha_energy.star, ha_solar.star, ha_waste.star, ha_dishwasher.star.
Show the values with your own app
Each value arrives in your custom apps with ha_ in front of its name. A value Home Assistant sends as power_price is read in the app like this:
price = config.get("ha_power_price", "--")
- Write every
ha_name out in full in the script. A name built while the app runs, such as"ha_" + name, does not work. - All values arrive as text and can be empty or
unavailable. Always give a fallback, such as"--", so the app also works in the preview and before the first push. - Building the app with a chatbot? Tell it the value names, and that each one is read with
config.get("ha_…"). - To test without Home Assistant, set a value in the app's Parameters, for example
ha_power_price=0.25. As soon as Home Assistant sendspower_price, its value wins.
Limits
- Up to 20 values per display. Names use lowercase letters, digits and
_, starting with a letter (max. 32 characters). - Up to 200 characters per value: text, a number, or true/false.
- Up to 30 pushes per minute per display.
- Only the latest value is kept. There is no history.
Send a value as null to remove it. Values you don't send stay as they are.
Troubleshooting
When a push fails, Home Assistant logs the error with a status code. Find it under Settings → System → Logs (search for rest_command).
- 403 — the token is not accepted. Check that
secrets.yamlhasBearerplus a space before the token, that the token was not rotated or revoked, that the device ID in the URL is yours, and that the URL starts withhttps://. - 422 — a name or value breaks the limits above, for example an uppercase name, a value over 200 characters, or more than 20 values. The message names the value; nothing from that push is stored.
- 429 — too many pushes. Send less often, for example every 30 seconds instead of on every change of a fast meter.
- Value arrives but the app shows "--" — check that the app uses the exact name with
ha_in front (ha_power_priceforpower_price), and that your sensor is notunavailable.
Privacy
- We store only the latest value per name, with the time it arrived. No history, and values never appear in our logs.
- The push token is stored in scrambled (hashed) form; we cannot show it again.
- Values are stored in plain text because your app needs them. Do not send passwords, codes or other secrets.
- Values like power usage or "door open" can reveal whether someone is home. Only send what you want to see on the display.
To remove your data:
- Revoke the token in the Home Assistant card of the dashboard to stop all pushes immediately.
- Delete values in the same card. Values that have not been updated for 30 days are removed automatically.
- A factory reset of the display removes all values and revokes the token, so a new owner never receives your data.