From cc8b7bd121b4377c9572e8a3eaad36e3c1638eb0 Mon Sep 17 00:00:00 2001 From: Ahmed Harmouche Date: Mon, 12 Oct 2026 17:31:40 +0200 Subject: [PATCH 1/5] dash app contest --- dash-apps/README.md | 1 + dash-apps/contest/README.md | 61 +++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 dash-apps/contest/README.md diff --git a/dash-apps/README.md b/dash-apps/README.md index 83d4415a..633d9a55 100644 --- a/dash-apps/README.md +++ b/dash-apps/README.md @@ -6,6 +6,7 @@ Dashboards that run inside the Dashpilot app, fed live car data. |---|---| | `web-*/` | web dashboards: `index.html`, `manifest.json`, `preview.jpg` | | `rive/` | Rive dashboards: built `.riv` files and their sources | +| `contest/` | [dash app contest](contest/README.md) rules and entries | ## Getting data diff --git a/dash-apps/contest/README.md b/dash-apps/contest/README.md new file mode 100644 index 00000000..2aa63718 --- /dev/null +++ b/dash-apps/contest/README.md @@ -0,0 +1,61 @@ +# Dash App Contest + +Build the dashboard people look at while they drive. Two categories, one winner each, **$300 per winner**: + +- **Web**: HTML, CSS and JavaScript +- **Rive**: a `.riv` file + +| | | +|---|---| +| Submissions open | TBD | +| Deadline | TBD | +| Winners announced | TBD | + +## Getting started + +Part of the challenge is finding your way around this repo. Start with the [dash-apps README](../README.md): it defines every value your dashboard receives, and how web and Rive dashboards get them. The existing dashboards in [`dash-apps/`](../) are working examples. [`rive/dash-demo/`](../rive/dash-demo/) is a complete Rive one. + +## Try it in the app + +Install DashPilot from [Google Play](https://play.google.com/store/apps/details?id=com.softwiredtech.dashpilot) or [TestFlight](https://testflight.apple.com/join/hXTwZmh5). On the home screen, set the data source to **Demo**: it plays a loop of simulated driving, so you don't need a car. + +- **Rive:** Dashboard Theme → **Load Rive File**. +- **Web:** Dashboard Theme → **Load Web Dash**, then enter the address of your page served from your computer (e.g. `http://192.168.1.20:8000`). + +Test both on a phone in landscape before you submit. + +## Submitting + +Open a pull request to this repo titled **`[dash contest] My dash app`** (with your app's name). It should add one folder and nothing else: + +``` +dash-apps/contest/-/ + README.md # name, category (web or rive), one paragraph about it, credits for any assets + preview.jpg # landscape screenshot, ~2:1 + ... # web: index.html and its files / rive: the .riv, plus its source if you have one +``` + +Make a **screen recording** (30–60 s) of your dashboard running in DashPilot with the Demo data source. Attach it to the PR description, and post it with a link to your PR in **#hmi-challenge** on the [DashKit Discord](https://discord.gg/naTZgwVqvA). + +One entry per category per person. You can push fixes to your PR until the deadline. + +## Rules + +- Landscape, readable at a glance while driving: the speed is the most legible thing on screen. +- No large flashing areas. +- Works offline: no network requests, everything ships in your folder. +- Web: 10 MB max, and works on both Android and iOS. The README explains the difference. +- Rive: 5 MB max, built on the `DashViewModel` described in the README. +- Your own work. Entries are contributed under this repo's [MIT license](../../LICENSE) so we can ship them. +- **Assets are your responsibility.** Every font, image, icon and sound must be yours or licensed for redistribution in an MIT project. List each one with its source and license in your README. Entries with unlicensed assets are disqualified. + +## Judging + +| | | +|---|---| +| Readable at a glance while driving | 30% | +| Design and originality | 30% | +| Uses the data well (warnings, assist, battery) | 20% | +| Smooth and polished in the app | 20% | + +Winners and runners-up are merged and shipped in DashPilot with credit. We'll contact winners through GitHub to arrange payment. From fbf594ffba83b0426370818194019b67de7bccf6 Mon Sep 17 00:00:00 2001 From: Ahmed Harmouche Date: Fri, 16 Oct 2026 11:17:33 +0200 Subject: [PATCH 2/5] Updates --- dash-apps/contest/README.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/dash-apps/contest/README.md b/dash-apps/contest/README.md index 2aa63718..6d01087d 100644 --- a/dash-apps/contest/README.md +++ b/dash-apps/contest/README.md @@ -1,6 +1,6 @@ # Dash App Contest -Build the dashboard people look at while they drive. Two categories, one winner each, **$300 per winner**: +Build the dashboard people look at while they drive. Two categories, one winner each, **$250 per winner**, paid out by Softwired Technologies Ltd.: - **Web**: HTML, CSS and JavaScript - **Rive**: a `.riv` file @@ -8,8 +8,8 @@ Build the dashboard people look at while they drive. Two categories, one winner | | | |---|---| | Submissions open | TBD | -| Deadline | TBD | -| Winners announced | TBD | +| Deadline | October 30, midnight (Budapest time) | +| Winners announced | November 12, on the [DashKit Discord](https://discord.gg/naTZgwVqvA) and [@softwiredtech](https://x.com/softwiredtech) on X | ## Getting started @@ -19,8 +19,8 @@ Part of the challenge is finding your way around this repo. Start with the [dash Install DashPilot from [Google Play](https://play.google.com/store/apps/details?id=com.softwiredtech.dashpilot) or [TestFlight](https://testflight.apple.com/join/hXTwZmh5). On the home screen, set the data source to **Demo**: it plays a loop of simulated driving, so you don't need a car. -- **Rive:** Dashboard Theme → **Load Rive File**. -- **Web:** Dashboard Theme → **Load Web Dash**, then enter the address of your page served from your computer (e.g. `http://192.168.1.20:8000`). +- **Rive:** Settings → Developer → **Load Rive File**. +- **Web:** Settings → Developer → **Load dash app from URL**, then enter the address of your page served from your computer (e.g. `http://192.168.1.20:8000`). Test both on a phone in landscape before you submit. @@ -51,11 +51,6 @@ One entry per category per person. You can push fixes to your PR until the deadl ## Judging -| | | -|---|---| -| Readable at a glance while driving | 30% | -| Design and originality | 30% | -| Uses the data well (warnings, assist, battery) | 20% | -| Smooth and polished in the app | 20% | +Winners are picked by the DashPilot team. The popularity of your dash app also counts (social media shares, etc.). Winners and runners-up are merged and shipped in DashPilot with credit. We'll contact winners through GitHub to arrange payment. From ba2eff73dc44e1f37a2aadb5ec80a331200ef1ec Mon Sep 17 00:00:00 2001 From: Ahmed Harmouche Date: Fri, 16 Oct 2026 11:18:55 +0200 Subject: [PATCH 3/5] Submission open --- dash-apps/contest/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dash-apps/contest/README.md b/dash-apps/contest/README.md index 6d01087d..0039bea3 100644 --- a/dash-apps/contest/README.md +++ b/dash-apps/contest/README.md @@ -7,8 +7,8 @@ Build the dashboard people look at while they drive. Two categories, one winner | | | |---|---| -| Submissions open | TBD | -| Deadline | October 30, midnight (Budapest time) | +| Submissions open | October 16 | +| Deadline | October 30, 23:00 GMT | | Winners announced | November 12, on the [DashKit Discord](https://discord.gg/naTZgwVqvA) and [@softwiredtech](https://x.com/softwiredtech) on X | ## Getting started From 29969114c6b894eec43933e8efc0bbeb8ba309e4 Mon Sep 17 00:00:00 2001 From: Ahmed Harmouche Date: Fri, 16 Oct 2026 11:30:30 +0200 Subject: [PATCH 4/5] README updates --- README.md | 88 +++++++++++++------------------------ dash-apps/README.md | 2 +- dash-apps/contest/README.md | 12 +++-- 3 files changed, 40 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index a44854a0..4bc43e44 100644 --- a/README.md +++ b/README.md @@ -2,76 +2,50 @@ ![DashPilot dash apps running in a Tesla](./banner.jpg) -Turn your phone into a real-time dashboard for your car. -DashPilot connects to your car, and provides a real-time dashboard right on your phone. It serves as a speedometer, shows the ACC speed you set, speed limit, blinkers, blind spots, and many more. -The good part is you can write your own dashboard as a [Rive](https://rive.app) or a web app. -Check out the [dash-apps](./dash-apps) folder for examples. -Currently only Teslas are supported, but we're looking for adding support to other brands as well. +A companion app for [DashKit](https://github.com/softwiredtech/dashkit-firmware), an open-source controller for Teslas. -## Project structure +DashKit plugs into the car and streams live car data to your phone over Bluetooth Low Energy. DashPilot turns it into a real-time dashboard: speed, gear, blinkers, blind spots, cruise set speed, speed limit, battery and more. Through DashKit it can also control the car (frunk, trunk, charge port, mirrors, climate) and run automations like keeping the climate on after you leave. -`/dash-apps`: +Supported cars: Tesla Model 3 / Model Y (2019–2024) and Model Y Juniper (2025+). -These are the example apps running in the [dashpilot-android](./dashpilot-android/) sandbox app. They fall into two main categories: web apps, and [Rive](https://rive.app) apps. `web-vanilla` includes a prebuilt Bevy (WebAssembly) renderer for its 3D ADAS view. See the [dash-apps](./dash-apps/) readme for more. +Get it on [Google Play](https://play.google.com/store/apps/details?id=com.softwiredtech.dashpilot) or [TestFlight](https://testflight.apple.com/join/hXTwZmh5), and join us on [Discord](https://discord.gg/naTZgwVqvA). -`/dashpilot-android`: +## Dash apps -The android app that handles the connection to the vehicle, and running the `/dash-apps`. -It has two main parts: the `bridge` and the `app` module. -The `bridge` module contains the code that establishes connection to the car, and handles CAN message, signal decoding. -The `app` module contains the code for the various data sources, rive / web dash views, navigation, UI, settings, etc. +The dashboards are dash apps: a web app (HTML, CSS, JavaScript) or a [Rive](https://rive.app) file. You can write your own. The [dash-apps README](./dash-apps/README.md) describes the data they receive, and the built-in dashboards are working examples. -`/simulator`: +To try yours on a phone, open Settings → Developer: **Load Rive File**, or **Load dash app from URL** for a web app served from your computer. Set the data source to **Demo** on the home screen to get simulated driving data without a car. -A python based websocket server and simulator. It can generate dynamic scenarios for the dash apps, and can also replay pre-recorded `routes`. +🏆 **[Dash App Contest](./dash-apps/contest/README.md)**: build a dashboard and win $250. Submissions are open until October 30. -`python3 server.py --route '/path/to/a/route.jsonl'` +## Data sources -The server will print the ip, which you can enter in the DashPilot app start screen after selecting the WebSocket datasource. +- **DashKit**: the main one, over Bluetooth Low Energy. +- **Demo**: a loop of simulated driving, built into the app. +- **comma**: reads the car through a [comma](https://comma.ai) device running openpilot. It works, but it isn't actively maintained. +- **WebSocket**: connects to the [simulator](./simulator/), which can generate scenarios or replay recorded routes. Android debug builds only. -NOTE: -If you have [openpilot](https://github.com/commaai/openpilot) tools installed you can use the [replay](https://github.com/commaai/openpilot/tree/master/tools/replay) tool, or [cabana](https://github.com/commaai/openpilot/tree/master/tools/cabana) to stream a route, that `dashpilot-android` can receive. +## Repo structure -To do this, follow these steps inside your cloned openpilot folder: +| folder | | +|---|---| +| [`dashpilot-android/`](./dashpilot-android/) | Android app (Kotlin, Jetpack Compose) | +| [`dashpilot-ios/`](./dashpilot-ios/) | iOS app (SwiftUI) | +| [`dash-apps/`](./dash-apps/) | the built-in dashboards, and the contest | +| [`bridge/`](./bridge/) | C++ car connection and CAN decoding used by the comma data source, see its [README](./bridge/README.md) | +| [`simulator/`](./simulator/) | Python WebSocket server that simulates or replays drives | +| [`scripts/`](./scripts/) | copy the dash apps into the Android and iOS builds | -- `cd tools/replay` -- `./replay 'segment-name' --data_dir="/path/to/the/folder/your/route/is/in" -a "can"` -- `cd cereal/messaging && ./bridge "can"` - -This will start replaying the route, and starts the bridge, so that you can connect to it in `dashpilot-android` as if you were connecting to a real comma device. It uses the same `zmq` code path, and `dbc` handling as the real comma connection. - -## How to run - -1. - -You have two options: - -- Start a simulator (either our websocket server, or the openpilot replay tool) -- SSH into your comma, and start the bridge: `cd cereal/messaging` then `./bridge "can"` - -2. run `./scripts/sync-vanilla-to-android` to sync `dash-apps/web-vanilla` into the android assets folder, so the our current main dash app works offline - -3. Build and run the DashPilot android app in Android Studio - -4. Open the app and select a datasource: either Comma or WebSocket for now (remember: if you use openpilot replay tool, you have to select the comma data source, in the same way as if you were connecting to an actual comma device) - -5. Enter the ip of the device your connecting to (the device in case of websocket is the websocket server's ip, and in case of openpilot replay tool, the ip of the device the replay tool is running on. For comma, you can find the ip of the device in the network settings) - -6. Tap on "Connect" and select a dashboard - -7. Enjoy +## Building +- **Android:** open `dashpilot-android` in Android Studio and run. The dash apps are copied into the app automatically before each build. +- **iOS:** open `dashpilot-ios/dashpilot.xcodeproj` in Xcode and run. An Xcode build phase copies the dash apps. ## Contributing -We're looking for: -- bug fixes -- performance improvements -- good tests -- ports to other brands - -The guideline you should follow: -- Your first PR should be a small bugfix or improvement. Don't submit a big change if you haven't yet contributed. -- Keep the PRs as small and isolated as possible: never submit conceptually different changes in the same PR. If there are a lot of changes and they are conceptually the same, you should still break them up, and submit them separetely, then you can write it in the PR comment which PRs depend on that PR. -- Using AI tools is obviously fine *as long as you understand every line you're submitting*. If during the PR discussion it is clear that you're not understanding the change, the PR will be closed. -- The commit message should contain which part(s) of the stack that change is affecting, for exmaple starting with "[bridge]" if it is a change affecting the bridge module, or "[dashpilot-android]" if it is touching the DashPilot android app, etc. \ No newline at end of file +We're looking for bug fixes, performance improvements, good tests, and new dash apps. + +- Make your first PR a small bugfix or improvement. Don't submit a big change if you haven't contributed yet. +- Keep PRs small and isolated: never mix conceptually different changes in one PR. If a large change is conceptually one thing, still split it up and note in each PR which ones it depends on. +- Using AI tools is fine *as long as you understand every line you submit*. If it's clear during review that you don't understand the change, the PR will be closed. +- Start the PR title with the part of the stack it touches, e.g. `[android]`, `[ios]`, `[dash-apps]` or `[bridge]`. diff --git a/dash-apps/README.md b/dash-apps/README.md index 633d9a55..6951f3c7 100644 --- a/dash-apps/README.md +++ b/dash-apps/README.md @@ -107,7 +107,7 @@ The app plays the file's default state machine and resizes the artboard to the s [`rive/dash-demo/`](rive/dash-demo/) is a demo dashboard written in Rive markup. It declares every property, so it's a good starting point. `rive dash-apps/rive/dash-demo --once` with the [Rive CLI](https://rive.app) rebuilds `rive/dash_demo.riv`. -To try your own `.riv` on a phone, pick **Load Rive File** in the dashboard theme picker. +To try your own `.riv` on a phone, go to Settings → Developer → **Load Rive File**. ## Saving settings diff --git a/dash-apps/contest/README.md b/dash-apps/contest/README.md index 0039bea3..324b63f0 100644 --- a/dash-apps/contest/README.md +++ b/dash-apps/contest/README.md @@ -37,12 +37,11 @@ dash-apps/contest/-/ Make a **screen recording** (30–60 s) of your dashboard running in DashPilot with the Demo data source. Attach it to the PR description, and post it with a link to your PR in **#hmi-challenge** on the [DashKit Discord](https://discord.gg/naTZgwVqvA). -One entry per category per person. You can push fixes to your PR until the deadline. +One entry per person. You can push fixes to your PR until the deadline. ## Rules - Landscape, readable at a glance while driving: the speed is the most legible thing on screen. -- No large flashing areas. - Works offline: no network requests, everything ships in your folder. - Web: 10 MB max, and works on both Android and iOS. The README explains the difference. - Rive: 5 MB max, built on the `DashViewModel` described in the README. @@ -51,6 +50,11 @@ One entry per category per person. You can push fixes to your PR until the deadl ## Judging -Winners are picked by the DashPilot team. The popularity of your dash app also counts (social media shares, etc.). +Winners are picked by the DashPilot team. We look at: -Winners and runners-up are merged and shipped in DashPilot with credit. We'll contact winners through GitHub to arrange payment. +- **Readability:** can the driver read the speed and other key info with a quick glance, without taking their eyes off the road for long? +- **Creativity:** does it look and feel different from the dashboards DashPilot already has? +- **Use of car data:** does it show more than the speed? Think blinkers, blind spots, gear, driver assist and battery. See the [CarState](../README.md#carstate) for everything you get. +- **Popularity:** social media shares, likes, etc. + +Winners and runners-up are merged and shipped in DashPilot with credit. We'll contact winners by email to arrange payment. From 0be33bd7f2c305e4f009e62848dcbf84861217e2 Mon Sep 17 00:00:00 2001 From: Ahmed Harmouche Date: Fri, 16 Oct 2026 11:31:34 +0200 Subject: [PATCH 5/5] Link the fw --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4bc43e44..968657ac 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,8 @@ To try yours on a phone, open Settings → Developer: **Load Rive File**, or **L | [`simulator/`](./simulator/) | Python WebSocket server that simulates or replays drives | | [`scripts/`](./scripts/) | copy the dash apps into the Android and iOS builds | +The DashKit firmware lives in its own repo: [softwiredtech/dashkit-firmware](https://github.com/softwiredtech/dashkit-firmware). + ## Building - **Android:** open `dashpilot-android` in Android Studio and run. The dash apps are copied into the app automatically before each build.