Feature: Add message length limit with live character counter

Implemented 200-character limit for messages due to LoRa/MeshCore constraints:
- Added maxlength=200 to textarea
- Added live character counter (0 / 200)
- Visual warnings: orange at 75%, red at 90%
- Counter updates on input, reply, and send
- Backend validation with descriptive error message
- Added technotes/limity.md documentation about MeshCore limits

Based on MeshCore LoRa payload constraints (~180-200 bytes safe limit).
This prevents message fragmentation and improves transmission reliability.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
MarekWo
2025-12-21 14:44:41 +01:00
parent a8393d5815
commit 8d9c2b241c
4 changed files with 96 additions and 1 deletions
+53
View File
@@ -0,0 +1,53 @@
W **MeshCore** obowiązuje **dość rygorystyczny limit długości pojedynczej wiadomości**, wynikający bezpośrednio z ograniczeń LoRa.
### 🔹 Limit długości wiadomości
* **Maksymalnie ~200240 bajtów payloadu**
* W praktyce **bezpiecznie przyjmuj ~180200 bajtów**, bo część danych zajmują:
* nagłówki protokołu MeshCore,
* adresowanie,
* metadane routingu,
* CRC / kontrola integralności.
To oznacza:
* **kilkadziesiąt znaków tekstu** (zależnie od kodowania),
* raczej **krótkie komunikaty**, nie „SMS-y” ani tym bardziej bloki tekstu.
### 🔹 Co się dzieje przy dłuższej wiadomości?
* MeshCore **tnie ją na fragmenty (fragmentation)**,
* fragmenty są wysyłane osobno i składane u odbiorcy,
* **każdy fragment zwiększa czas transmisji i ryzyko utraty**, szczególnie:
* przy niskim SF,
* w zatłoczonej sieci,
* na dalekich hopach.
Dlatego:
> **zalecenie praktyczne:** traktuj MeshCore jak **pager / radio tekstowe**, a nie komunikator.
### 🔹 Porównanie (dla intuicji)
* 1 znak ASCII ≈ 1 bajt
* 180 bajtów ≈
* ~180 znaków ASCII
* ~90120 znaków UTF-8 (polskie znaki, emoji → szybciej zjadają limit)
### 🔹 Dobre praktyki
* używaj **krótkich, rzeczowych komunikatów**,
* unikaj emoji i znaków narodowych, jeśli zasięg/stabilność jest krytyczna,
* jeśli musisz przesłać więcej danych:
* podziel treść logicznie (kilka wiadomości),
* rozważ **out-of-band** (np. MeshCore tylko do „powiadomień”).
Jeśli chcesz, mogę:
* rozpisać **dokładną strukturę ramki MeshCore (ile bajtów na co)**,
* porównać to z **Meshtastic** (tam limity są trochę inne),
* albo pomóc dobrać **SF/BW/CR**, żeby fragmentacja była możliwie bezpieczna.