refactor: rename firmware from Plus to Solo

- FIRMWARE_VERSION: v1.15-plus.1 → v1.15-solo.1
- FIRMWARE_PLUS_BUILD → FIRMWARE_SOLO_BUILD in all platformio.ini and UITask.cpp
- docs/plus_features/ → docs/solo_features/ (all sub-docs moved)
- README: update all doc links plus new Documentation section
- GitHub Actions: extract GIT_TAG_VERSION in each build job (was missing,
  causing empty FIRMWARE_VERSION in builds); rename output files to
  solo-VERSION-oled.uf2 / solo-VERSION-eink.uf2; release title → "Solo VERSION"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-05-29 12:25:34 +02:00
co-authored by Claude Sonnet 4.6
parent df32f47942
commit c7009140ce
62 changed files with 551 additions and 399 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,108 @@
## Messages Screen
[Go back](../../../README.md)
### Overview
| OLED | E-Ink |
| :-----------------------: | :-----------------------: |
| ![](./mes_scr_1_oled.png) | ![](./mes_scr_1_eink.png) |
The Messages screen is split into three modes — **DMs**, **Channels**, and **Rooms** — selectable with UP/DOWN on the mode-select screen. Each mode shows the corresponding list of conversations with unread counters.
---
### Sending messages
| OLED | E-Ink |
| :-----------------------: | :-----------------------: |
| ![](./mes_scr_2_oled.png) | ![](./mes_scr_2_eink.png) |
Press **Enter** on a contact or channel to open its history, then press **Enter** again (or select an empty send row) to compose a message. Choose between:
- **Custom message** — opens the on-screen keyboard
- **Q1Q10** — quick reply templates editable in Settings Messages
The keyboard supports placeholders that insert live data at send time:
| Placeholder | Value | Availability |
| ----------- | -------------------- | --------------------------- |
| `{time}` | current time (HH:MM) | always |
| `{loc}` | GPS coordinates | always ("no GPS" if no fix) |
| `{temp}` | temperature | sensor connected |
| `{hum}` | humidity | sensor connected |
| `{pres}` | barometric pressure | sensor connected |
| `{alt}` | altitude | sensor connected |
| `{lux}` | luminosity | sensor connected |
| `{co2}` | CO₂ concentration | sensor connected |
Sensor placeholders appear automatically in the placeholder picker when the corresponding sensor is active. `{time}` and `{loc}` are always shown.
---
### Message history
| OLED | E-Ink |
| :-----------------------: | :-----------------------: |
| ![](./mes_scr_3_oled.png) | ![](./mes_scr_3_eink.png) |
Each entry in the history list shows the sender name and a compact age indicator (`3m`, `2h`, `>1d`) in the top-right corner.
**Short Enter** on a message opens it in fullscreen. **Hold Enter** opens the context menu (Reply option).
---
### Fullscreen message view
| OLED | E-Ink |
| :-----------------------: | :-----------------------: |
| ![](./mes_scr_4_oled.png) | ![](./mes_scr_4_eink.png) |
Navigate between messages with **LEFT** (newer) and **RIGHT** (older). Long messages scroll with **UP/DOWN**.
If the message is a reply addressed to someone (`@[nick]`), a **To: nick** bar is shown below the sender name and the body is displayed without the address prefix.
| OLED | E-Ink |
|:----:|:-----:|
| ![](./mes_scr_5_oled.png) |![](./mes_scr_5_eink.png) |
**Hold Enter** in fullscreen opens the Reply option.
---
### Context menu — contact list
**Hold Enter** on a contact entry opens a context menu:
| OLED | E-Ink |
|:----:|:-----:|
| ![](./mes_scr_6_oled.png) | ![](./mes_scr_6_eink.png) |
| Item | Action |
| ---------------------------- | ------------------------------------------------------------------------------ |
| Mark as read | Clears unread counter for this contact |
| Notif: default / OFF / ON | Per-contact notification override — **LEFT/RIGHT** to cycle |
| Melody: global / M1 / M2 | Per-contact melody override — **LEFT/RIGHT** to cycle |
| Pin to dial / Unpin (slot N) | Pin this contact to a Favourites Dial slot; if already pinned shows which slot |
When **Pin to dial** is selected, a slot picker opens (Slot 16 showing current occupant name or "empty"). Choosing a slot that already holds another contact moves the new contact there.
---
### Context menu — channel list
| OLED | E-Ink |
| :-----------------------: | :-----------------------: |
| ![](./mes_scr_7_oled.png) | ![](./mes_scr_7_eink.png) |
**Hold Enter** on a channel entry opens a context menu:
| Item | Action |
| ------------------------- | --------------------------------------------------------------------- |
| Mark all read | Clears all unread for this channel |
| Notif: default / OFF / ON | Per-channel notification override — **LEFT/RIGHT** to cycle |
| Melody: global / M1 / M2 | Per-channel melody override — **LEFT/RIGHT** to cycle |
| Fav: yes / no | Add or remove this channel from favourites — **LEFT/RIGHT** to toggle |
---
### Mark all read
**Hold Enter** on the DM / Channels / Rooms mode-select screen to clear all unread counters for the highlighted category at once.