Build Your First Meow Meow Scratch Dashboard

Turn the temperature records from the beginner API project into a simple control panel that always shows the latest reading.

This guide uses the Weather Station app from the first two tutorials. You will create a dashboard, bind a display widget to the temperature field and prove the connection by sending a fresh value.

What you will build

Python or curl
      │
      │ sends {"temperature": 23.1}
      ▼
Weather Station
readings collection
      │
      │ latest record
      ▼
Weather Station dashboard
Temperature (°C): 23.1

The result is deliberately small: one useful value with a clear label and unit. Once that path works, the same pattern can display doorbell events, plant moisture, room conditions or any other collection field.

Before you start

  • A Meow Meow Scratch account
  • An app named Weather Station with slug weather-station
  • A Collection endpoint named Readings with slug readings
  • A required Number field with key temperature
  • At least one temperature record

If any of those pieces are missing, complete What Is an API? A Practical Beginner’s Guide. If you want to send the fresh reading with Python, also complete Install the Meow SDK and Make Your First Request.

Dashboard or control panel?

The SDK calls this resource a dashboard. The product documentation also describes it as a control panel. Both names refer to the same idea: a page of widgets bound to values in your endpoints.

It is important to choose the widget according to the endpoint type:

EndpointDashboard behaviorGood use
CollectionDisplay-only widgets read fields from the latest recordTemperature, sensor readings, events and status reports
Static payloadInteractive widgets can read and write bound valuesSettings, switches, target values and remote configuration
Proxy / integrationWidgets are not supportedUse its consumer response directly instead

Weather Station uses a collection, so its temperature widget will show the newest record. It will not edit that record.

1. Confirm the source data

In the web app, open Apps → Weather Station → Readings. Check the collection’s records and find the most recent temperature.

If you followed the earlier examples, the newest value may be 22.5. Write down whatever your actual latest value is; you will compare it with the dashboard.

2. Create the dashboard

  1. Open the Dashboards or Control Panels area in the web app.
  2. Choose New Dashboard.
  3. Set the name to Weather Station.
  4. Set the slug to weather-station-panel.
  5. Use the description Latest readings from the Weather Station tutorial.
  6. Save the dashboard and keep it private for now.

The slug is the stable machine-readable name used by the SDK and API. If weather-station-panel already exists, open that dashboard instead of creating a duplicate.

3. Add the temperature widget

Inside the new dashboard, choose Add Widget and use these settings:

SettingValue
AppWeather Station / weather-station
EndpointReadings / readings
Key path or fieldtemperature
Widget typeDisplay
LabelTemperature (°C)

Save the widget. The displayed number should match the latest record you checked in the previous step.

Why put °C in the label? A number without a unit is ambiguous. 23.1 could mean Celsius, Fahrenheit, humidity or voltage. The label should make the value understandable without requiring the reader to inspect the endpoint schema.

4. Send a fresh reading

Activate the virtual environment from the SDK guide and make sure MEOW_PLATFORM_API_KEY is set in the current terminal. Then run this short Python program:

import os

from meow_sdk import Meow


api = Meow(
    api_key=os.environ["MEOW_PLATFORM_API_KEY"],
    timeout=30,
)

record = api.send(
    "weather-station",
    "readings",
    {"temperature": 23.1},
)

print("Created:", record["uuid"])
print("Temperature:", record["data"]["temperature"], "°C")

A successful run prints the new record’s UUID and 23.1 °C. Return to the dashboard and refresh it. The display widget should now show 23.1 because that is the latest collection record.

This is the key verification step. It proves that the widget is bound to live endpoint data rather than a number typed into the dashboard.

Create the same dashboard with Python

The web app is the clearest path for a first dashboard. If you prefer reproducible setup, the SDK can create the same resources. Use this instead of steps 2 and 3, not after them:

import json
import os

from meow_sdk import Meow


api = Meow(
    api_key=os.environ["MEOW_PLATFORM_API_KEY"],
    timeout=30,
)

dashboard = api.create_dashboard(
    "Weather Station",
    "weather-station-panel",
    description="Latest readings from the Weather Station tutorial.",
)

widget = api.create_dashboard_widget(
    "weather-station-panel",
    "weather-station",
    "readings",
    "temperature",
    "display",
    "Temperature (°C)",
)

print("Dashboard:", dashboard["slug"])
print("Widget:", widget["uuid"])

state = api.dashboard_state("weather-station-panel")
print(json.dumps(state, indent=2))

The two slug arguments after the dashboard identify the app and endpoint. The temperature key path selects the field. The final two values choose a display widget and its human-readable label.

Current value versus history

A collection display widget answers: What is the latest value? It is not a historical chart and does not have a time-range selector.

  • Use the dashboard when you need a quick current-state view.
  • Use collection records when you need the full sequence and timestamps.
  • Use API filters when you need records matching a condition.
  • Use aggregates for values such as average, minimum, maximum, sum or count.
  • Use CSV export when you want to analyse or chart the history elsewhere.

This distinction prevents a common design mistake: treating a latest-value control panel as if it were a time-series analytics tool.

Troubleshooting missing or stale values

What you seeLikely causeWhat to check
No valueThe collection has no recordsOpen Readings and create one valid temperature record.
Widget cannot be createdThe app, endpoint or key path is wrongUse the exact slugs weather-station, readings and key temperature.
Old temperature remainsThe new request failed or the page has not refreshedCheck the Python output, endpoint records and request logs, then refresh the dashboard.
Wrong field is shownThe widget is bound to another key pathEdit the widget and select temperature.
A control cannot change the valueCollection widgets are display-onlyUse a static payload endpoint for an interactive setting.
Widget option is unavailableThe endpoint is a proxyBind widgets to a collection or static payload instead.
AuthError in PythonThe platform token is missing or invalidSet MEOW_PLATFORM_API_KEY in the same terminal without printing it.

When to use interactive widgets

For remote control, create a static payload such as:

{
  "target_temperature": 22,
  "fan_enabled": false,
  "display": {
    "brightness": 70
  }
}

You can then bind number, toggle or slider widgets to target_temperature, fan_enabled or the nested key path display.brightness. Changing the dashboard updates the same JSON that a Raspberry Pi or other client can poll.

Other supported widget types include color, text and select. Choose the smallest control that matches the underlying value, and use bounds or choices where the widget configuration allows them.

Share carefully

Keep the dashboard private while building. If you later enable sharing, treat the share link like access to the panel: anyone who receives it may be able to view its current data until access is disabled or expires.

  • Do not display tokens, private identifiers or sensitive sensor data.
  • Open the share link in a private browser window to confirm exactly what another person can see.
  • Prefer an expiry when the sharing interface offers one.
  • Disable sharing when it is no longer needed.

What to build next

You now have the complete software path: create an API, send data with Python and show its latest value on a dashboard. The next step is to replace the fixed 23.1 with a real sensor reading from a Raspberry Pi.

For more detail, see the web app and control-panel documentation, the SDK documentation and the open-source meow-sdk repository.