diff --git a/CHANGELOG.md b/CHANGELOG.md index f9b19f7..5d56160 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ All notable changes to Void 2.0 are documented here. Format: [Keep a Changelog](https://keepachangelog.com). +## 2.1.1 — OBD2 Apps rail placeholder +- **OBD2 Apps rail item** (`public/views/obd2.js`, router/app/sidebar): a placeholder launchpad under **Apps** for the parked OBD2 Telemetry project — links to the project + tasks and the research/wiki page. Swap to an `embedView` once a records UI (LubeLogger/Tracktor) is deployed. + ## 2.1.0 — LAN device discovery - **`lan_devices` store + hourly `arp-scan`** (`migration 024`, `lib/infra/scan.js`, `lib/db/repos/lan_devices.js`, `lib/cron`): the Devices band is now DB-backed and diff --git a/package.json b/package.json index 9446a39..9c893bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "void-server", - "version": "2.1.0", + "version": "2.1.1", "type": "module", "private": true, "scripts": { diff --git a/public/app.js b/public/app.js index 6d54f47..2020e09 100644 --- a/public/app.js +++ b/public/app.js @@ -27,6 +27,7 @@ const VIEWS = { terminal: () => import('./views/terminal.js'), timelapse: () => import('./views/timelapse.js'), 'ai-usage': () => import('./views/aiusage.js'), + obd2: () => import('./views/obd2.js'), settings: () => import('./views/settings.js'), jobs: () => import('./views/jobs.js') }; diff --git a/public/components/sidebar.js b/public/components/sidebar.js index 6d5d060..a41a131 100644 --- a/public/components/sidebar.js +++ b/public/components/sidebar.js @@ -131,7 +131,8 @@ export function renderSidebar(root) { el('div', { class: 'sb-section' }, el('div', { class: 'sb-title' }, 'Apps'), navItem('Timelapse', '/timelapse'), - navItem('AI Usage', '/ai-usage') + navItem('AI Usage', '/ai-usage'), + navItem('OBD2', '/obd2') ) ); diff --git a/public/router.js b/public/router.js index 4737314..5c85cd9 100644 --- a/public/router.js +++ b/public/router.js @@ -28,6 +28,7 @@ const ROUTES = [ { name: 'terminal', re: /^\/terminal$/, keys: [] }, { name: 'timelapse', re: /^\/timelapse$/, keys: [] }, { name: 'ai-usage', re: /^\/ai-usage$/, keys: [] }, + { name: 'obd2', re: /^\/obd2$/, keys: [] }, { name: 'settings', re: /^\/settings$/, keys: [] }, { name: 'jobs', re: /^\/jobs$/, keys: [] }, { name: 'home', re: /^\/?$/, keys: [] } diff --git a/public/views/obd2.js b/public/views/obd2.js new file mode 100644 index 0000000..fe0b6b4 --- /dev/null +++ b/public/views/obd2.js @@ -0,0 +1,27 @@ +// #/obd2 — Apps rail placeholder for the OBD2 Telemetry project (parked). +// No records UI is deployed yet, so this links into the project + wiki instead of +// embedding. Swap to embedView({ src: 'https://obd2.hynesy.com/' }) once the +// LubeLogger/Tracktor dashboard is up. +import { el, mount } from '../dom.js'; +import { navigate } from '../router.js'; + +const WIKI = '/page/bea9d582-44a2-4eec-a1ba-69ade15d3a73'; +const PROJECT = '/project/02fc5b4c-12f4-4d0c-8220-6b053da71c46'; + +export async function render(main) { + mount(main, + el('div', { class: 'term-bar' }, + el('span', { class: 'term-title' }, '◆ OBD2 Telemetry'), + el('span', { class: 'muted', style: { fontSize: '11px' } }, 'project · parked, being set up') + ), + el('div', { class: 'card', style: { maxWidth: '760px' } }, + el('h3', {}, 'OBD2 Telemetry — being set up'), + el('p', { class: 'muted' }, 'Capture vehicle records from the car’s OBD2 port into the homelab (CT 112 · Postgres + TimescaleDB) with a maintenance/records UI. The capture pipeline is being rebuilt and the records UI isn’t deployed yet — nothing to embed here yet.'), + el('p', {}, 'Plan: AndrOBD (F-Droid) + the BT ELM327 → CSV/MQTT → Timescale; WiCAN hardware later; LubeLogger / Tracktor for the UI (this tile will then embed it).'), + el('div', { style: { display: 'flex', gap: '8px', marginTop: '14px' } }, + el('button', { class: 'primary', onclick: () => navigate(PROJECT) }, 'Project + tasks'), + el('button', { class: 'ghost', onclick: () => navigate(WIKI) }, 'Research / wiki') + ) + ) + ); +} diff --git a/server.js b/server.js index cc54149..ce04fdf 100644 --- a/server.js +++ b/server.js @@ -14,7 +14,7 @@ import { mcpAuth } from './lib/api/middleware/mcp_auth.js'; import { handleMcp } from './lib/mcp/http.js'; import httpProxy from 'http-proxy'; -const VERSION = '2.1.0'; +const VERSION = '2.1.1'; // Proxy /terminal (+ its WebSocket) to ttyd on CT 300, so the embedded terminal // works whether the Void is reached via Traefik (void2-app.hynesy.com) OR the