Scaffold workspace, shared types and requirements spec
Cargo workspace with core/ble/fit/probe crates. crates/core/src/types.rs is the fixed contract between the BLE layer, ride engine and UI. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
[package]
|
||||
name = "bikecontrol-app"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
repository.workspace = true
|
||||
description = "BikeControl desktop shell: Tauri commands and the event bridge to the UI"
|
||||
|
||||
[lib]
|
||||
# Tauri v2 convention: the app lives in a lib so the same code can be reused by
|
||||
# the Android/iOS entry points later (G-4).
|
||||
name = "bikecontrol_app_lib"
|
||||
crate-type = ["staticlib", "cdylib", "rlib"]
|
||||
|
||||
[build-dependencies]
|
||||
tauri-build = { version = "2", features = [] }
|
||||
|
||||
[dependencies]
|
||||
bikecontrol-core = { workspace = true }
|
||||
|
||||
tauri = { version = "2", features = [] }
|
||||
tauri-plugin-dialog = "2"
|
||||
|
||||
serde = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
serde_yaml_ng = { workspace = true }
|
||||
tokio = { workspace = true }
|
||||
anyhow = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
tracing = { workspace = true }
|
||||
tracing-subscriber = { workspace = true }
|
||||
|
||||
[features]
|
||||
default = ["mock-ride"]
|
||||
# Drive the UI from the synthetic ride simulator in `src/mock.rs`. This is what
|
||||
# ships today, while `crates/core` and `crates/ble` are still being written.
|
||||
mock-ride = []
|
||||
# Drive the UI from `bikecontrol_core::RideSession` fed by real FTMS telemetry.
|
||||
# Swap `default` to this once core's `session`/`physics` are implemented.
|
||||
real-session = []
|
||||
@@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
tauri_build::build();
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../gen/schemas/desktop-schema.json",
|
||||
"identifier": "default",
|
||||
"description": "Permissions for the BikeControl main window.",
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"core:event:default",
|
||||
"core:window:default",
|
||||
"core:webview:default",
|
||||
"core:app:default",
|
||||
"dialog:default"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"productName": "BikeControl",
|
||||
"version": "0.1.0",
|
||||
"identifier": "paris.tourolle.bikecontrol",
|
||||
"build": {
|
||||
"frontendDist": "../ui/dist",
|
||||
"devUrl": "http://localhost:1420",
|
||||
"beforeDevCommand": {
|
||||
"cwd": "../ui",
|
||||
"script": "npm run dev"
|
||||
},
|
||||
"beforeBuildCommand": {
|
||||
"cwd": "../ui",
|
||||
"script": "npm run build"
|
||||
}
|
||||
},
|
||||
"app": {
|
||||
"windows": [
|
||||
{
|
||||
"title": "BikeControl",
|
||||
"width": 1440,
|
||||
"height": 900,
|
||||
"minWidth": 960,
|
||||
"minHeight": 640,
|
||||
"resizable": true,
|
||||
"fullscreen": false,
|
||||
"backgroundColor": "#07090d"
|
||||
}
|
||||
],
|
||||
"security": {
|
||||
"csp": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src ipc: http://ipc.localhost"
|
||||
}
|
||||
},
|
||||
"bundle": {
|
||||
"active": true,
|
||||
"targets": "all",
|
||||
"icon": [
|
||||
"icons/32x32.png",
|
||||
"icons/128x128.png",
|
||||
"icons/128x128@2x.png",
|
||||
"icons/icon.png"
|
||||
],
|
||||
"category": "Utility",
|
||||
"shortDescription": "Indoor cycling trainer control",
|
||||
"longDescription": "Control a smart trainer over BLE, ride gradient profiles and synthetic waveforms, and record the result."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user