diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 0d52938f..1945177f 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.4.0 +current_version = 1.4.1 commit = True tag = False diff --git a/README.md b/README.md index e59c2ea6..961c08bb 100644 --- a/README.md +++ b/README.md @@ -10,29 +10,31 @@ [![Community Videos](https://img.shields.io/badge/Community-Videos-purple)](src/assets/help-docs/community.md) [![Contact](https://img.shields.io/badge/Contact-Get_in_touch-success)](src/assets/help-docs/contact-us.md) -**Skip is a Signal K marine instrument panel and dashboard: touch-optimized and ready-to-use across all your devices.** +**Skip is a Signal K marine instrument panel and dashboard: equally at home under a finger, a mouse, or a keyboard, and ready to use across all your devices.** -Skip turns your Signal K data into clear, purpose-built instrument dashboards. Install it from the Signal K app store, then open Skip in a browser and it’s ready to go. A single instance works everywhere — no per‑device deployment is needed. +Skip turns your Signal K data into clear, purpose-built instrument dashboards. Install it from the Signal K app store, then open Skip in a browser and it's ready to go. A single instance works everywhere — no per-device deployment is needed. Skip is designed for sailors and boaters who want: - A **ready-to-use, classic marine app experience** with minimal setup. - A **modern, polished interface** optimized for marine displays. -- **Touch-optimized design**: touch-first, intuitive design for tablets, phones, and other touch-enabled devices. +- **Every input treated as first class**: touch targets sized for a tablet on a moving boat, pointer and keyboard paths that are just as direct at the navstation — no input reduced to a fallback. - **Cross-platform support**: runs on phones, tablets, laptops, Raspberry Pi, Web Enabled TV or other fixed displays - anywhere you can run a web browser. - **Instant access to all Signal K data**: displays gauges, graphs, switches, and other widgets right out of the box. - **Flexible dashboards**: customize layouts, drag-and-drop widgets, night/day mode, kiosk/fullscreen and remote control support. -With Skip, you get the **clarity of a purpose-built marine instrument panel** combined with the flexibility of Signal K. It’s simple, reliable, and highly usable — a modern, touch-first instrument panel for [Signal K](https://signalk.org) vessels. +With Skip, you get the **clarity of a purpose-built marine instrument panel** combined with the flexibility of Signal K. It's simple, reliable, and highly usable — a modern instrument panel for [Signal K](https://signalk.org) vessels, whatever you drive it with. -![Skip](./images/SkipDemo.png) +![A Skip dashboard on a wide screen, with speed, depth, course, engine, wind, heel, battery and barometer widgets](./images/dashboard-landscape.png) -## Table of Content +## Table of Contents - [Where Skip Runs](#where-skip-runs) - [Design Goals](#design-goals) -- [User Experience](#user-experience) -- [Dashboards and Configuration](#dashboards-and-configuration), [Display Units](#display-units), [Widget Library](#widget-library) & [Historical Data](#historical-data) -- [Night Modes](#night-modes) +- [Using Skip](#using-skip): [toolbar](#the-auto-hiding-toolbar), [pages](#pages), [editing](#editing-a-page), [widget settings](#configuring-a-widget) +- [Display Units](#display-units) +- [Widget Library](#widget-library) +- [Historical Data](#historical-data) +- [Day, Dark, and Night Modes](#day-dark-and-night-modes) - [Remote Control](#remote-control-other-skip-displays) - [Kiosk Mode](#dedicated-fullscreen-instrument-display-kiosk-mode) - [Multiple Profiles](#multiple-profiles) @@ -40,9 +42,19 @@ With Skip, you get the **clarity of a purpose-built marine instrument panel** co - [Connect, Share, and Support](#connect-share-and-support) & [Features, Ideas, Bugs](#features-ideas-bugs) ## Where Skip Runs -![Form factor support](./images/exterior_user_installs.png) + +![Skip on a mast display, a chart table screen, and a cockpit instrument pod](./images/exterior_user_installs.png) + Skip runs anywhere a modern browser does. Beyond the obvious navstation, wall-mounted instrument panel, and autopilot-remote uses on PCs, tablets, and phones, it suits the elements just as well — Raspberry Pi and Pi Zero displays, rugged tablets, low-cost screens, and industry-leading sunlight-readable marine touchscreens alike. Its built-in remote control opens up multi-display setups across the boat. +The same instance serves every one of them. Each page reflows to the screen it is shown on, so a portrait wall panel and a phone in your pocket both get a full-screen layout rather than a scaled-down desktop one. + +| Portrait display | Phone | +| --- | --- | +| ![A portrait Skip page with depth, speed, VMG, waypoint bearing and distance, heel, wind steering, and wind trend graphs](./images/dashboard-sailing.png) | ![The same dashboard on a phone-width screen](./images/dashboard-narrow.png) | + +In the phone screenshot, the barometer graph draws its title over its value. That is a defect, not the intended layout — see [issue #595](https://github.com/halos-org/skip/issues/595). + # Design Goals Skip has two guiding goals: **flawless usability** and **seamless integration with Signal K**. @@ -51,45 +63,61 @@ Skip has two guiding goals: **flawless usability** and **seamless integration wi **Seamless Signal K integration.** Skip is Signal K–native. It signs in through the server's own session (SSO, no separate credentials), takes its display units and metadata/zones straight from the server, and stores none of its own data — history comes from a standard Signal K History API provider. It surfaces whatever your Signal K stack offers and plays cleanly alongside the rest of it (Freeboard-SK, plugins, InfluxDB/Grafana, Node-RED). -The same instance runs across phones, tablets, laptops, Raspberry Pi, and fixed displays, on any modern browser. +## Using Skip + +Every control reaches the same command from touch, mouse, and keyboard. Nothing is hidden behind a hover, and nothing needs a right-click. + +### The auto-hiding toolbar + +Skip has no permanent chrome. The toolbar appears when the app loads, hides after a few seconds, and comes back on demand: + +- **Touch:** swipe down from the top edge. Swipe up to send it away. +- **Mouse or trackpad:** scroll up, click the peek strip at the top edge, or rest the pointer there. Scroll down to hide it. +- **Anywhere:** a tap or click on the dashboard dismisses it, and it hides on its own after a few idle seconds. + +![The Skip toolbar revealed over a dashboard, showing the menu, fullscreen and night-mode buttons on the left, page icons and the page manager in the middle, and notifications and the edit lock on the right](./images/toolbar.png) -![Form factor support](./images/formfactor.png) +Left to right, the toolbar holds the app menu, fullscreen, and night mode; then the page icons and the **Manage pages** button; then notifications, with a badge for active alarms, and the lock that unlocks the page for editing. -## User Experience +The menu covers everything that is not a per-page action, and reports the Skip version and the server it is connected to. -### Interactions -- **Touch:** swipe left/right to move between pages, swipe down from the top to reveal the auto-hiding toolbar, and tap a page's icon to jump straight to it. -- **Mouse:** scroll to change pages, click the top peek strip (or scroll up) to reveal the toolbar, and click any control. -- **Keyboard:** single-key shortcuts for the essentials — / change pages, E edit, F fullscreen, N night mode, Esc cancel an edit. +![The toolbar menu open, listing Settings, Connection, Remote Control and Help above the Skip version and server host](./images/toolbar-menu.png) -### Customize -- Effortlessly create and customize dashboards using an intuitive grid layout system. -- Add, resize, and align widgets to design tailored displays for your specific needs. -- Duplicate widgets or entire dashboards, including their configurations, with a single click. -- Reorder pages by dragging, and give each a unique icon and name — open the toolbar's **Manage pages** panel, tap a page, and choose Edit. -- Easily switch between multiple configuration profiles for different roles, form factors, or use cases. +Keyboard users get single-key shortcuts for the essentials: / change pages, E edits the page, F toggles fullscreen, N toggles night mode, and Esc cancels an edit. The keys are bare — no modifiers — and they stand down while you are typing in a field or while a dialog is open. -An auto-hiding toolbar keeps the screen clutter-free and puts navigation one tap away: page icons to jump between pages, a **Manage pages** button, and a menu for Settings, Connection, Remote Control, and Help. +### Pages -## Dashboards and Configuration +Build as many pages as you need and give each one a job: sailing, motoring, anchoring, engine room. Move between them by swiping left and right, scrolling horizontally, pressing /, or tapping a page's icon in the toolbar. The current page is always highlighted. -### Customizable and Easy -Meant to build purposeful dashboards with however many widgets you want, wherever you want them. +The **Manage pages** panel handles the rest — drag a page to reorder it, tap one for Edit, Duplicate, and Delete, or add a new one. Each page carries its own name and icon. -Add, resize, and position the widgets of your choosing. Need more? Add as many pages as you wish to keep your display purposeful. Swipe left and right to cycle through pages, or tap a page's icon in the toolbar to jump straight to it — the current page is always clearly highlighted. +![The Pages panel open as a bottom drawer, listing four pages with drag handles and an Add Page button](./images/page-manager.png) -Widget lists are sorted by category. -![Layouts Configuration Image](./images/SkipWidgetConfig-layout-1024.png) +### Editing a page -Intuitive widget configuration. -![Gauges Configuration Image](./images/SkipConfig-display-1024x488.png) +Unlock the page from the toolbar or press E. Widgets can then be dragged and resized on a grid that snaps them into alignment. Esc or the cancel button discards the layout changes; the check button keeps them. -See what Signal K has to offer that you can leverage with widgets. Select it and tweak the display options to suit your purpose. -![Paths Configuration Image](./images/SkipWidgetConfig-paths-1024x488.png) +A tap or click on a widget opens its action menu at the point you touched — **Settings**, **Duplicate**, **Copy**, **Cut**, and **Delete**. On phones the same menu slides up as a bottom drawer instead of a pop-over, so the targets stay thumb-sized. Tap empty grid space and you get **Add Widget**, plus **Paste** and **Clear clipboard** once something is on the clipboard. -Organize your pages from the toolbar's **Manage pages** panel — add, reorder, rename, duplicate, and delete. +![A widget action menu open over a dashboard in edit mode, offering Settings, Duplicate, Copy, Cut and Delete](./images/widget-action-menu.png) -### Display Units +Widgets are listed by category — Core, Gauge, Component, and Racing — each with a description of what it does. + +![The Add Widget dialog, with Core, Gauge, Component and Racing tabs and a scrolling list of widgets](./images/add-widget.png) + +### Configuring a widget + +Each widget has a **Display** tab for how it looks and behaves, and a **Paths** tab for the Signal K data it reads. + +![A widget's Display settings, with update interval, label, decimal places, colour and scale options](./images/widget-settings-display.png) + +The path picker searches everything your server publishes and shows each path's description, so you can find the right one without leaving the dialog. Where a path has several sources, pick the one you want under **Data Source**, or leave it on **Any** and take whichever source Signal K resolves. + +![The Paths tab of a widget's settings, with a path search field showing matching Signal K paths and their descriptions](./images/widget-settings-paths.png) + +On a locked page, a long press on a widget opens its recent history as a graph — see [Historical Data](#historical-data). + +## Display Units Skip displays every value in the units set by your Signal K server's **unit preferences**, converting automatically — there are no unit settings in Skip to keep in sync. Set your units once on the server and every unit-preferences-aware app, Skip included, follows. Requires Signal K server 2.23.0 or later; on an older server Skip shows values in Signal K's own units (SI: metres, m/s, Kelvin, Pascal, m³/s). @@ -115,82 +143,111 @@ Skip displays every value in the units set by your Signal K server's **unit pref **What Skip does with it.** Skip reads each path's preference from the server's metadata, applies the conversion, and labels the value with that unit — the label always matches the conversion applied. When the server states no preference for a path, Skip shows the Signal K value as-is with no unit label rather than guessing. Where the server asks for a unit Skip has no conversion for, it does the same and names the unit in the browser console (`[Units Service] Server display unit '' …`), which is worth quoting in a bug report. ## Widget Library -All Skip widgets are visual presentation controls that are very versatile, with multiple advanced configuration options available to suit your needs: -- **Compact Linear** – Simple horizontal linear gauge with a large value label and modern look. -- **Linear** – Horizontal or vertical linear gauge with zone highlighting. -- **Radial** – Radial gauge with configurable dials and zone highlighting. -- **Compass** – Rotating compass gauge with multiple cardinal indicator options. -- **Level Gauge** – Dual-scale heel angle indicator for trim tuning and sea-state monitoring. -- **Pitch & Roll** – Horizon-style attitude indicator showing live pitch and roll degrees. -- **Classic Steel** – Traditional steel-look linear & radial gauges with range sizes and zone highlights. -- **Windsteer** – Combines wind, wind sectors, heading, COG, and waypoint info for wind steering. -- **Wind Trends** – Real-time True Wind trends with dual axes for direction and speed, live values, and averages. -- **Battery Monitor** - Display batteries or whole banks state State of Charge, remaining capacity, remaining time, voltage, current, power flow, and temperature. -- **Solar Charger**- Track solar generation and charging performance at a glance with live panel output, battery-side metrics, and clear charger and relay status indicators. -- **AC/DC Charger**- Monitor charging performance at a glance with a compact AC/DC Charger Widget. View single or multiple chargers with charge mode, voltage, current, power and temperature. Chargers are discovered automatically. -- **Freeboard-SK** – Adds the Freeboard-SK chart plotter as a widget with automatic sign-in. -- **Autopilot Head** – Typical autopilot controls for compatible Signal K Autopilot devices. -- **Data Graph** – Graphs any numeric path over a configurable time window, with actuals, averages, and min/max. -- **AIS Radar**: Display AIS targets with range rings, interactive target details, and quick zoom and filtering controls. -- **Embed Webpage Viewer** – Embeds external web apps (Grafana, Node-RED, etc.) into your dashboard. -- **Racesteer** – Race steering display fusing polar performance data with live conditions for optimal tactics. -- **Racer - Start Line Insight** – Set and adjust start line ends, see distance, favored end, and line bias; integrates with Freeboard SK. -- **Racer - Start Timer** – Advanced racing countdown timer with OCS status and auto dashboard switching. -- **Countdown Timer** – Simple race start countdown timer with start, pause, sync, and reset options. -Get the latest version of Skip to see what's new! +Every widget is a visual presentation control with configuration options of its own. The Add Widget dialog groups them into four categories. A few widgets read data that a Signal K plugin has to publish; those are named below, and the Add Widget dialog lists each widget's dependencies and marks the ones your server is missing. -### Widget Samples -Gauges sample -![Sample Gauges Image](./images/SkipGaugeSample1-1024x545.png) +**Core** — the everyday readouts and controls. -Various other types of widgets -![Electrical Concept Image](./images/SkipGaugeSample2-1024x488.png) +- **Numeric** – Numeric data with optional min/max recorded values and an optional background mini graph. +- **Text** – Text data with a customizable color. +- **Date & Time** – Date and time with custom formatting and timezone correction. +- **Position** – Latitude and longitude. +- **Static Label** – A fixed text label for organizing a layout. +- **Switch Panel** – A digital switching panel of toggles, indicator lights, and press buttons that send Signal K path values. +- **Multi-State Switch** – Lists a device's operating modes (On, Off, Charge Only, …), highlights the current one, and sends a new one. +- **Zones State Panel** – The severity and message of a path's zones, from the Signal K metadata. +- **Slider** – A range slider for values such as lighting intensity or audio volume. -Freeboard-SK Chartplotter integration with Autopilot widget -![Freeboard-SK Image](./images/SkipFreeboard-SK-1024.png) +**Gauge** — analog-style and electrical instruments. -Grafana integration with other widgets -![Embedded Webpage Concept Image](./images/SkipGaugeSample3-1024x508.png) +- **Compact Linear** – Simple horizontal linear gauge with a large value label. +- **Linear** – Horizontal or vertical linear gauge with zone highlighting. +- **Radial** – Radial gauge with configurable capacity and measurement dials, plus zone highlighting. +- **Compass** – Faceplate or card-style rotating compass with several cardinal indicator options. +- **Level Gauge** – Dual-scale heel indicator: a ±5° fine level for trim tuning and a ±40° arc for sea state. +- **Pitch & Roll** – Horizon-style attitude indicator with live pitch and roll degrees. +- **Classic Steel** – Traditional steel-look linear and radial gauges with range sizes and zone highlights. +- **Battery Monitor** – Battery banks and individual batteries: state of charge, current, voltage, power, temperature, capacity, and time remaining. +- **Solar Charger** – Live panel output, battery-side metrics, and charger and relay status. +- **AC/DC Charger** – Charger output and charging state with voltage, current, power, temperature, and stage indicators. +- **Alternator** – Alternator output: voltage, current, power, revolutions, and temperature. +- **Inverter** – Inverter input and output with AC voltage, current, power, temperature, state, and mode. +- **AC Monitor** – AC bus and line-level loads: voltage, current, frequency, and power. + +**Component** — larger, composite displays. + +- **Windsteer** – Combines wind, wind sectors, heading, course over ground, and next waypoint into one steering display. +- **Freeboard-SK** – Adds the Freeboard-SK chart plotter as a widget, with automatic sign-in. Needs Freeboard-SK itself plus the `tracks`, `resources-provider`, and `course-provider` plugins; Signal K server ships all four. +- **Autopilot Head** – Autopilot controls for Signal K v1 and v2 Autopilot API devices. +- **Data Graph** – Graphs any numeric path over a configurable window, with actuals, moving and period averages, and min/max. +- **Hoeken's Anchor Alarm** – Map-first anchor alarm with circle, sector, and polygon watch zones, a scope calculator, and track overlays. Needs the `hoekens-anchor-alarm` plugin. +- **Anchor Watch** – Server-side drift detection with a configurable alarm radius, automatic radius from rode and depth, position history, and GPS bow-offset compensation. Needs the `anchoralarm` plugin. +- **AIS Radar** – AIS targets with range rings, interactive target details, and quick zoom and filtering. +- **Embed Webpage Viewer** – Embeds external web apps (Grafana, Node-RED, other Signal K apps) into your dashboard. +- **Video** – Plays video from a URL with built-in player controls. + +**Racing** — start-line and performance tools. + +- **Racesteer** – Fuses polar performance data with live conditions to guide steering, tacking, and gybing angles. Needs the `signalk-polar-performance-plugin` plugin for its polar data. Skip lists it as **Racesteer (BETA)** in the Add Widget dialog. +- **Racer - Start Line Insight** – Set and adjust the start line ends, and see distance to the line, the favored end, and the bias. Integrates with Freeboard-SK. Needs the `signalk-racer` plugin. +- **Racer - Start Timer** – Racing countdown with OCS status and automatic switching to a target page at the start. Needs the `signalk-racer` plugin. +- **Countdown Timer** – Simple start countdown with start, pause, sync, and reset. +- **Wind Trends** – Live true wind trends on dual axes for direction and speed, with live values and moving averages. + +Get the latest version of Skip to see what's new! ## Historical Data + Skip graphs recent history for your numeric data by reading it from an external Signal K History API provider (such as `signalk-to-influxdb2` or `signalk-parquet`). Press and hold (long-press) a widget to open its history dialog, or use a Data Graph or Wind Trends widget to see recent trends. Skip does **not** record or store data itself — the detail and time span available depend on whatever provider your Signal K server runs, and without a provider both the history dialog and the graph widgets show an empty state. See the [History-API Provider](src/assets/help-docs/history-api.md) help file for setup. -## Night Modes -Keep your night vision with automatic or manual day and night switching to a color preserving dim mode or an all Red theme. The images below look very dark, but at night... they are perfect! +![A Skip page of history graphs: true wind speed, outside and seawater temperature, barometer, and fridge temperature](./images/dashboard-history-graphs.png) + +## Day, Dark, and Night Modes -![Night mode - All Red](./images/SkipNightMode-1024.png) +Choose the light theme, the dark theme, or follow the device. On top of that come two night modes that protect your night vision: a color-preserving dim mode whose brightness you set, and an all-red theme. Switch modes from the toolbar or with N, or let Skip switch on the sun phases. Automatic switching reads the sun phase from the Signal K Derived Data plugin; install that plugin and Skip offers to enable it and turn on its `environment.sun` path for you. The night images below look very dark on a desktop monitor, but at night they are perfect. -![Night mode - Brightness](./images/SkipBrightness-1024.png) +![A Skip sailing page in the dark theme](./images/dashboard-dark-sailing.png) + +| Night — dim | Night — red | +| --- | --- | +| ![A Skip page dimmed for night use, with its colors preserved](./images/night-mode-dim.png) | ![The same page in the all-red night theme](./images/night-mode-red.png) | ## Remote Control Other Skip Displays -Control which dashboard is shown on another Skip instance (e.g., a mast display, hard-to-reach screen, or a non‑touch device) from any Skip, including your phone. + +Control which dashboard is shown on another Skip instance (e.g., a mast display, hard-to-reach screen, or a non-touch device) from any Skip, including your phone. Use cases + - Mast display: change dashboards from the cockpit. - Wall/helm screens: toggle dashboards without standing up or reaching for controls. -- Non‑touch/no input: select dashboards when no keyboard/mouse is connected or touch is not supported/disabled. +- Non-touch/no input: select dashboards when no keyboard/mouse is connected or touch is not supported/disabled. ## Dedicated Fullscreen instrument display (Kiosk Mode) + Runs Skip on Raspberry Pi as a single full-screen application, suppresses the desktop UI and stays on screen like a dedicated chartplotter or marine instrument panel at a fraction of the cost. Read the [Kiosk Mode](src/assets/help-docs/kiosk.md) help file. ## Multiple Profiles + Skip supports multiple named configuration profiles under a single Signal K account — each an independent set of pages, layouts, and theme. Use them to tailor the display per role (captain, navigator, engineer), per use case, or per device form factor. Each device remembers which profile it's showing, so different displays signed in as the same user can each show a different setup. ## Complementary Components + Typical complementary components you may install (most are often bundled with Signal K distributions): **Navigation & Charting** -- **Freeboard‑SK** (pre-installed) – Multi‑station, web chart plotter dedicated to Signal K: routes, waypoints, charts, alarms, weather layers, and instrument overlays. +- **Freeboard-SK** (pre-installed) – Multi-station, web chart plotter dedicated to Signal K: routes, waypoints, charts, alarms, weather layers, and instrument overlays. + +The integration runs both ways. Skip's **Freeboard-SK** widget puts the plotter on a Skip page, and the `@halos-org/skip-freeboard-panel` plugin puts Skip inside Freeboard — a toolbar button that opens Skip in a side panel, plus Wind Steer chart widgets. Skip declares that plugin as a dependency, so installing Skip from the app store brings it along. **Visual Flow / Automation** -- **Node‑RED** – Low‑code, flow‑based wiring of devices, APIs, online services, and custom logic (alert escalation, device control automation, data enrichment, protocol bridging). +- **Node-RED** – Low-code, flow-based wiring of devices, APIs, online services, and custom logic (alert escalation, device control automation, data enrichment, protocol bridging). **Data Storage & Analytics** -- **InfluxDB / other TSDB** – High‑resolution historical storage of sensor & performance metrics beyond what lightweight widget graphs should retain. -- **Grafana** – Rich exploratory / comparative dashboards, ad‑hoc queries, alert rules on stored metrics, correlation across heterogeneous data sources. +- **InfluxDB / other TSDB** – High-resolution historical storage of sensor & performance metrics beyond what lightweight widget graphs should retain. +- **Grafana** – Rich exploratory / comparative dashboards, ad-hoc queries, alert rules on stored metrics, correlation across heterogeneous data sources. ## Harness the Power of Data State Notifications + Stay informed with notifications about the state of the data you are interested in. For example, Signal K will notify Skip when a water depth or temperature sensor reaches certain levels. In addition to Skip's centralized notification menu, individual widgets offer tailored visual representations appropriate to their design objectives, providing an optimal user experience. @@ -204,67 +261,60 @@ Skip is one part of a Signal K stack, and it's easy to extend in two directions: **Signal K Plugins** — domain-specific enrichment (polars, performance calculations, derived environmental data, routing aids) published into the Signal K data model, which Skip can then display. -**Skip Widgets** — visual components that read Signal K path data and API v2 features. Scaffolding a new one takes only a few moments: run `npm run generate:widget`, or ask your AI to build one from the Skip project instructions. See `CLAUDE.md` for details. +**Skip Widgets** — visual components that read Signal K path data and API v2 features. Scaffolding a new one takes only a few moments: run `npm run generate:widget`, or ask your AI to build one from the Skip project instructions. See [CLAUDE.md](./CLAUDE.md) for details. ## Getting Started -**Linux, Mac, RPi, or Windows dev platform supported** -1. Download your favorite coding IDE (we use the free Visual Studio Code) -2. Create your own GitHub Skip fork. -3. Configure your IDE's source control to point it to your forked Skip instance (Visual Studio Code, GitHub support is built-in) and get the fork's main branch locally. -4. Install `npm` and `node`. On macOS, you can use `brew install node` if you have Homebrew. See https://nodejs.org/en/download for more options. -5. Install the Angular CLI using `npm install -g @angular/cli` +You need [Node.js](https://nodejs.org/en/download) 20 or later and npm. Node 24 is what CI builds and tests on. Any editor works; the repo carries Visual Studio Code settings. Skip's dev server needs a Signal K server to talk to. Use your own where you can: https://demo.signalk.org grants anonymous read-only access and hands out no user session, so Skip boots there as a read-only visitor and cannot save a configuration. That is fine for watching live data, and not enough for working on anything that writes. -**Project Setup** -1. From your fork's main branch, create a working branch with a name such as: `new-widget-abc` or `fix-issue-abc`, etc. -2. Check out this new branch. -3. In a command shell (or in the Visual Studio Code Terminal window), go to the root of your local project folder, if not done automatically by your IDE. -4. Install project dependencies using the NPM package and dependency manager: run `npm install`. NPM will read the Skip project dependencies, download, and install everything automatically for you. -5. Build the app locally using Angular CLI: from that same project root folder, run `npm run build:prod`. The CLI tool will build Skip. +```bash +git clone https://github.com/halos-org/skip.git # or your fork +cd skip +npm install +npm run dev +``` -**Code and Test** -1. Fire up your local Skip development instance with `npm run dev`. -2. Hit Run/Start Debugging in Visual Studio Code or manually point your favorite browser to `http://localhost:4200/@halos-org/skip`. Alternatively, to start the development server and allow remote devices connections, such as with your phone or RPi (blocked for security reasons by default): - `ng serve --configuration=dev --serve-path=/@halos-org/skip/ --host= --port=4200` -3. Voila! +`npm run dev` serves the app at http://localhost:4200/@halos-org/skip/ and reloads it as you save. The serve path matters: it is the package name, and Skip's routing and manifest depend on it. -*As you work on source code and save files, the app will automatically reload in the browser with your latest changes.* -*You will also need a running Signal K server for Skip to connect to and receive data. You could also use https://demo.signalk.org but without authentication enabled, your actions, features and test coverage will be limited.* +To reach the dev server from another device — a phone, a Raspberry Pi — bind it to your machine's address, which Angular blocks by default: -**Share** +```bash +npx ng serve --configuration=dev --serve-path=/@halos-org/skip/ --host= --port=4200 +``` -Once done with your work, from your fork's working branch, make a GitHub pull request to have your code reviewed, merged, and included in the next release. It's always optimal to sync with us prior to engaging in extensive new development work. - -## Development Instructions & Guidelines Documentation +The repository also carries a `./run` dispatcher; `./run help` lists every command. -For comprehensive development guidance, start with `CLAUDE.md`: +| Command | What it does | +| --- | --- | +| `npm run dev` / `./run dev` | Dev server with live reload | +| `npm run build:prod` / `./run build` | Production bundle into `public/` | +| `npm test` / `./run test` | Unit suite, headless | +| `npm run lint` / `./run lint` | ESLint | +| `npm run snc` / `./run snc` | Type-check every source under `strictNullChecks` | +| `npm run ci` / `./run ci` | The full gate CI runs: lint, type-check, tests, schema check | +| `npm run generate:widget` | Scaffold a new widget | +| `./run deploy-halos ` | Build and install onto a HaLOS device's Signal K | -### Primary Instructions -- **[CLAUDE.md](./CLAUDE.md)**: The authoritative repo guide — architecture, commands, the testing model, Skip's policy contracts, and fork-specific gotchas. **Start here.** +Run `npm run ci` before you push. It is the same gate the pull request checks apply. -### Development Workflow -1. **Start Here**: Read `CLAUDE.md` for architecture, commands, the testing model, and Skip's policy contracts. -2. **Angular Standards**: Use modern Angular v21+ patterns — signals, standalone components, and the new control flow. -3. **Setup & Build**: Use this README for project setup and build commands. +**Share your work.** Branch from `main`, commit, and open a pull request. It's always optimal to sync with us before starting extensive new development. -### Widget Creation Workflow -1. Scaffold with `npm run generate:widget` (Host2 schematic-first path). -2. See `tools/schematics/create-host2-widget/schema.json` for the available options and their prompts. -3. Follow the Host2 runtime/stream patterns documented in `CLAUDE.md`. +## Development Instructions & Guidelines Documentation -### Key Priorities -- **Widget Development**: Use Host2 patterns and scaffold with the `create-host2-widget` schematic. -- **Angular Patterns**: Use signals, standalone components, and modern control flow. -- **Theming**: Follow Skip's theme system for consistent UI. -- **Code Quality**: Run `npm run lint` before commits. +- **[CLAUDE.md](./CLAUDE.md)** is the authoritative repo guide: architecture, commands, the testing model, Skip's policy contracts, and the gotchas that cost real time. **Start there.** +- Widgets are scaffolded with `npm run generate:widget`; `tools/schematics/create-host2-widget/schema.json` lists its options, and CLAUDE.md documents the Host2 runtime and stream patterns the scaffold produces. +- Skip targets modern Angular: signals, standalone components, the new control flow, and no `any`. Skip is open-source under the MIT license, built by the community and 100% free. Contribute to the project on [GitHub](https://github.com/halos-org/skip)! # Connect, Share, and Support + Report issues and request features on [Skip's GitHub project](https://github.com/halos-org/skip/issues). For chat, join the #skip channel on the [Signal K Discord](https://discord.gg/uuZrwz4dCS). ## About Skip + Skip is a Signal K marine instrument panel that originated as a fork of [Kip](https://github.com/mxtommy/Kip) by Thomas St.Pierre and David Godin. It is now an independent project: it adds standard Signal K session/SSO authentication and account-independent named profiles, and has diverged from Kip as it evolves. It is served at `/@halos-org/skip/`. Licensed under MIT (see [LICENSE](LICENSE)). # Features, Ideas, Bugs + See [Skip's GitHub project](https://github.com/halos-org/skip/issues) for the latest feature requests and bug reports. diff --git a/VERSION b/VERSION index 88c5fb89..347f5833 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.4.0 +1.4.1 diff --git a/images/ActionSidenav.png b/images/ActionSidenav.png deleted file mode 100644 index c175ba81..00000000 Binary files a/images/ActionSidenav.png and /dev/null differ diff --git a/images/Options.png b/images/Options.png deleted file mode 100644 index 6c9909e3..00000000 Binary files a/images/Options.png and /dev/null differ diff --git a/images/SkipBrightness-1024.png b/images/SkipBrightness-1024.png deleted file mode 100644 index 03d0bd99..00000000 Binary files a/images/SkipBrightness-1024.png and /dev/null differ diff --git a/images/SkipConfig-Units-1024.png b/images/SkipConfig-Units-1024.png deleted file mode 100644 index 091bfabc..00000000 Binary files a/images/SkipConfig-Units-1024.png and /dev/null differ diff --git a/images/SkipConfig-display-1024x488.png b/images/SkipConfig-display-1024x488.png deleted file mode 100644 index f627d8d7..00000000 Binary files a/images/SkipConfig-display-1024x488.png and /dev/null differ diff --git a/images/SkipDemo.png b/images/SkipDemo.png deleted file mode 100644 index 88700c5a..00000000 Binary files a/images/SkipDemo.png and /dev/null differ diff --git a/images/SkipFreeboard-SK-1024.png b/images/SkipFreeboard-SK-1024.png deleted file mode 100644 index a2a6095e..00000000 Binary files a/images/SkipFreeboard-SK-1024.png and /dev/null differ diff --git a/images/SkipGaugeSample1-1024x545.png b/images/SkipGaugeSample1-1024x545.png deleted file mode 100644 index 0f3206a7..00000000 Binary files a/images/SkipGaugeSample1-1024x545.png and /dev/null differ diff --git a/images/SkipGaugeSample2-1024x488.png b/images/SkipGaugeSample2-1024x488.png deleted file mode 100644 index 968a277d..00000000 Binary files a/images/SkipGaugeSample2-1024x488.png and /dev/null differ diff --git a/images/SkipGaugeSample3-1024x508.png b/images/SkipGaugeSample3-1024x508.png deleted file mode 100644 index f805f64f..00000000 Binary files a/images/SkipGaugeSample3-1024x508.png and /dev/null differ diff --git a/images/SkipNightMode-1024.png b/images/SkipNightMode-1024.png deleted file mode 100644 index b0b7cb7b..00000000 Binary files a/images/SkipNightMode-1024.png and /dev/null differ diff --git a/images/SkipWidgetConfig-layout-1024.png b/images/SkipWidgetConfig-layout-1024.png deleted file mode 100644 index 543c7a40..00000000 Binary files a/images/SkipWidgetConfig-layout-1024.png and /dev/null differ diff --git a/images/SkipWidgetConfig-paths-1024x488.png b/images/SkipWidgetConfig-paths-1024x488.png deleted file mode 100644 index ddcec257..00000000 Binary files a/images/SkipWidgetConfig-paths-1024x488.png and /dev/null differ diff --git a/images/add-widget.png b/images/add-widget.png new file mode 100644 index 00000000..e8358efc Binary files /dev/null and b/images/add-widget.png differ diff --git a/images/dashboard-dark-sailing.png b/images/dashboard-dark-sailing.png new file mode 100644 index 00000000..b5dd139f Binary files /dev/null and b/images/dashboard-dark-sailing.png differ diff --git a/images/dashboard-history-graphs.png b/images/dashboard-history-graphs.png new file mode 100644 index 00000000..6eb1836c Binary files /dev/null and b/images/dashboard-history-graphs.png differ diff --git a/images/dashboard-landscape.png b/images/dashboard-landscape.png new file mode 100644 index 00000000..b9e74fac Binary files /dev/null and b/images/dashboard-landscape.png differ diff --git a/images/dashboard-narrow.png b/images/dashboard-narrow.png new file mode 100644 index 00000000..cb82ca29 Binary files /dev/null and b/images/dashboard-narrow.png differ diff --git a/images/dashboard-sailing.png b/images/dashboard-sailing.png new file mode 100644 index 00000000..6b8874bc Binary files /dev/null and b/images/dashboard-sailing.png differ diff --git a/images/formfactor.png b/images/formfactor.png deleted file mode 100644 index 4abdba3f..00000000 Binary files a/images/formfactor.png and /dev/null differ diff --git a/images/night-mode-dim.png b/images/night-mode-dim.png new file mode 100644 index 00000000..3ccaddb0 Binary files /dev/null and b/images/night-mode-dim.png differ diff --git a/images/night-mode-red.png b/images/night-mode-red.png new file mode 100644 index 00000000..365ea2d1 Binary files /dev/null and b/images/night-mode-red.png differ diff --git a/images/page-manager.png b/images/page-manager.png new file mode 100644 index 00000000..2dce28a1 Binary files /dev/null and b/images/page-manager.png differ diff --git a/images/toolbar-menu.png b/images/toolbar-menu.png new file mode 100644 index 00000000..7051ca1a Binary files /dev/null and b/images/toolbar-menu.png differ diff --git a/images/toolbar.png b/images/toolbar.png new file mode 100644 index 00000000..f20779ac Binary files /dev/null and b/images/toolbar.png differ diff --git a/images/widget-action-menu.png b/images/widget-action-menu.png new file mode 100644 index 00000000..976630a7 Binary files /dev/null and b/images/widget-action-menu.png differ diff --git a/images/widget-settings-display.png b/images/widget-settings-display.png new file mode 100644 index 00000000..601f19cf Binary files /dev/null and b/images/widget-settings-display.png differ diff --git a/images/widget-settings-paths.png b/images/widget-settings-paths.png new file mode 100644 index 00000000..2ee18661 Binary files /dev/null and b/images/widget-settings-paths.png differ diff --git a/package.json b/package.json index f37307f7..da861122 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@halos-org/skip", - "version": "1.4.0", + "version": "1.4.1", "publishConfig": { "access": "public" }, diff --git a/src/assets/skip-dashboard-schema.json b/src/assets/skip-dashboard-schema.json index 25318942..6d941b6a 100644 --- a/src/assets/skip-dashboard-schema.json +++ b/src/assets/skip-dashboard-schema.json @@ -581,7 +581,7 @@ "configFileVersion": 11, "configVersion": 19, "schemaVersion": 1, - "skipVersion": "1.4.0" + "skipVersion": "1.4.1" }, "widgets": [ {