TomLabs Apps
← All applications

TreeMap

Offline mapping of trees in the field: forest records, wood piles, stands and arborist tree assessment by SPPK A01 001

web pwa offline leaflet node postgresql forestry arboriculture Public Homepage

TreeMap

Aktualni verze aplikace: 0.22.0 (bezici verzi ukazuje menu O aplikaci a /health).

Mobilni PWA pro mapovani lesa a stromu v terenu. V lesnickem rezimu eviduje jednotlive stromy, skladky dreva a porostni skupiny s vekovymi vrstvami, v arboristickem rezimu hodnoti stav stromu podle standardu SPPK A01 001 s opakovanymi prohlidkami a navrzenymi opatrenimi. Aplikace je navrzena tak, aby byla plne pouzitelna bez signalu - vsechno se uklada lokalne a na server se odesila, az kdyz je pripojeni.

Repozitar pro nasazeni:

https://tomlabscloud.visualstudio.com/TreeMap/_git/TreeMap

Vetve a nasazeni

Ostra verze bezi z vetve main: API, PostgreSQL a Docker Compose na VPS, nasazovane pipeline azure-pipelines.yml na treemap.cz (driv treemap.tomlabs.xyz, viz "Prechod na treemap.cz" nize).

Uvodni stranka a prihlaseni

Od verze 0.22 je aplikace jen pro prihlasene. Neprihlaseny navstevnik vidi uvodni stranku (#landing v app/index.html, app/styles/landing.css, app/src/features/landing.js). Co se ukaze, rozhodne skript v <head> podle ulozeneho session hintu jeste pred prvnim vykreslenim, takze nic neproblikne. Prihlaseni vydrzi i bez signalu, v terenu se tedy aplikace otevre rovnou. Bez prihlaseni zustava pristupny jen sdileny pohled (#share=); reset hesla a odkaz #new otevrou sve okno nad uvodni strankou a aplikace se ukaze po prihlaseni.

Prechod na treemap.cz

Od verze 0.21 je aktualni adresa https://treemap.cz (www.treemap.cz presmerovava na ni). Stara treemap.tomlabs.xyz zatim dal obsluhuje aplikaci, protoze prohlizec drzi data v telefonu zvlast pro kazdou domenu: tvrde presmerovani by neodeslane zaznamy a fotky zamklo na stare adrese.

  • Deploy zalozi nginx a certifikat pro novou domenu. Dokud DNS neukazuje na VPS, certifikat nevznikne, aplikace zustane na stare adrese a deploy nespadne.
  • Jakmile nova domena bezi, deploy nastavi PUBLIC_URL=https://treemap.cz a PUBLIC_URL_ALIASES=https://treemap.tomlabs.xyz.
  • Appka na stare adrese se zepta GET /api/auth/domain. Kdyz v telefonu nic neceka na odeslani, rovnou prejde na novou adresu i s puvodnim odkazem (#share, #new, ...); prihlaseni prenese jednorazovym tokenem (POST /api/auth/handoff a /api/auth/handoff/redeem, plati 2 minuty). Jinak ukaze banner a pocka, az se vsechno odesle (app/src/features/domainmove.js).
  • Odkazy v e-mailech a sdileci odkazy uz vedou na novou adresu. OAuth se vraci na tu adresu, odkud prihlaseni zacalo, proto musi u Googlu i Seznamu zustat registrovane obe callback adresy.
  • Stazene offline mapy se prenest nedaji; appka po prechodu pripomene, at si je uzivatel stahne znovu.

Az stara adresa nebude mit navstevy (par tydnu), muze se jeji nginx konfigurace nahradit trvalym presmerovanim 301 na https://treemap.cz.

Do verze 0.7 mel projekt dve vetve: main se statickou verzi pro Azure Static Web Apps a vps-postgres s plnou verzi pro VPS. Staticke nasazeni bylo zruseno vcetne domeny treemapx.tomlabs.xyz, VPS verze se presunula na main a vetev vps-postgres zanikla. Puvodni statickou verzi najdes pod tagem archiv/staticka-verze-0.1.0.

Co aplikace umi

V terenu

  • vyfotit strom mobilni kamerou nebo vybrat fotky z galerie (vic fotek na strom i na prohlidku) a ulozit jeho GPS polohu; fotky se prohlizi v galerii s listovanim a priblizenim
  • zalozit stromy hromadne z fotek - aplikace precte GPS a cas primo z EXIF hlavicky fotek z galerie a zalozi strom na miste, kde vznikly
  • vybrat polohu klepnutim do mapy
  • zapsat druh, prumer nebo obvod kmene, vysku, stav a poznamku
  • zalozit skladku dreva a prirazovat k ni pokacene stromy
  • nakreslit porostni skupinu klepanim do mapy nebo obchazenim hranice s GPS, zadat rok zalozeni a videt porosty obarvene podle vekovych trid
  • spocitat orientacni objem dreva v m3 podle tvaroveho koeficientu druhu
  • filtrovat podle druhu a stavu, oznacit strom jako pokaceny
  • otevrit polohu stromu nebo skladky v aplikaci Mapy.com v telefonu

Ci je to pozemek

Samostatna stranka /parcel (v menu pod "Katastr") najde podle GPS parcelu, na ktere clovek stoji, zvyrazni ji v mape a ukaze cislo parcely, katastralni uzemi a vymeru. Klepnutim do mapy jde vybrat jinou parcelu. Parcely vraci API GET /api/parcel?lat=&lng= z bezplatne INSPIRE WFS CUZK. Vlastniky zadne bezplatne API CUZK neposkytuje (API KN osobni udaje vynechava), proto tlacitko "Zobrazit vlastniky" otevre parcelu v Nahlizeni do katastru.

Arboristicky rezim

Kazdy projekt je bud lesnicky (vychozi), nebo arboristicky. Rezim se voli pri zalozeni projektu a jde zmenit v menu; nic se pri tom nemaze, jen druhy rezim neukazuje skladky nebo prohlidky. Ciselniky odpovidaji standardu SPPK A01 001 Hodnoceni stavu stromu (2018), cisla clanku jsou u poli ve formularich i v kodu (app/src/arbor.js).

  • strom ma volny taxon vedeckym jmenem s naseptavacem ceskych i latinskych nazvu, cislo stromu (napr. ze stitku), vysku nasazeni a sirku koruny a pocet kmenu; u druhu je odkaz na Stromopedii
  • prohlidka je samostatny zaznam s historii: datum, typ kontroly, kdo ji provedl, fyziologicke stari, vitalita, zdravotni stav, stabilita, perspektiva (predvyplni se z horsiho hodnoceni), provozni bezpecnost, povinny seznam staticky vyznamnych defektu, podezreni na zvlaste chranene druhy, fotka (povinna od stability 3) a termin dalsi kontroly
  • ke kazde prohlidce libovolne mnoho opatreni s kodem technologie z Prilohy c. 9, nalehavosti 0 az 3, intervalem opakovani a specifikaci, ktera je u vyznacenych technologii povinna; provedena opatreni se odskrtavaji
  • mapa barvi stromy podle nejnalehavejsiho otevreneho opatreni a stromy po terminu kontroly maji cerveny odznak; seznam filtruje „k zasahu“, „po terminu“ a „bez hodnoceni“
  • porostni skupiny slouzi jako zakladni plochy s intenzitni tridou udrzby, celkovou stabilitou, cilem padu a sklonitosti; plocha upozorni, kdyz na ni chybi individualni hodnoceni stromu
  • sestavy Protokol o kontrole (7.3.3) a Stromy k zasahu po etapach a karta stromu (udaje, fotky, mapa, QR kody, hodnoceni a historie) se skladaji v telefonu jako PDF i bez signalu (knihovna pdfmake je v app/vendor/pdfmake) a jdou stahnout nebo rovnou poslat
  • export CSV a GeoJSON obsahuje posledni hodnoceni, nalehavost a termin kontroly

Prohlidky a opatreni se ukladaji do IndexedDB a odesilaji stejnou frontou jako ostatni zaznamy. Stav stromu (nalehavost, termin kontroly) se pocita v telefonu z prohlidek, takze prohlidka zapsana bez signalu se v mape projevi hned.

Mapove vrstvy

Vedle OpenStreetMap jsou k dispozici oficialni lesnicke vrstvy pres WMS:

  • NLI / UHUL (OPRL): lesnicka typologie, lesni vegetacni stupne, cilove hospodarske soubory, ochrana lesa, ochrana prirody, zpristupneni lesu, provozni soubory, potencialni ohrozeni smrku klimatickou zmenou
  • NLI / UHUL: kategorizace lesu
  • CUZK: hranice parcel a parcelni cisla

Vek porostu ve verejnych sluzbach neni - je soucasti LHP a LHO, coz jsou data vlastnika lesa. Proto vekove vrstvy stoji na vlastnich kreslenych porostnich skupinach a WMS slouzi jako podklad.

Vsechny WMS sluzby jdou pres proxy v nasem API, ne primo z prohlizece. Duvody jsou dva: cross-origin dlazdice nejdou rozumne ulozit pro offline, a upstream URL se stehuji (UHUL se presunul z geoportal.uhul.cz na gp1.nli.gov.cz).

Offline

  • kostra aplikace, mapove dlazdice i fotky jsou v cache prohlizece

  • zaznamy porizene bez signalu se ukladaji do IndexedDB a cekaji ve fronte

  • fronta se odesle sama, jakmile je server dostupny; aplikace to zkousi i sama od sebe, protoze udalost online v terenu casto neprijde

  • v menu je Stahnout tuto oblast, ktera ulozi dlazdice zobrazeneho vyrezu pro pozdejsi praci bez signalu

    OpenStreetMap hromadne stahovani dlazdic zakazuje, takze podklad OSM se uklada jen postupne tim, jak mapu prochazis. Lesnicke vrstvy stahnout lze.

Ucet a sdileni

  • prihlaseni e-mailem a heslem, volitelne pres Google nebo Seznam
  • overeni e-mailu, reset zapomenuteho hesla, zmena hesla
  • prehled prihlasenych zarizeni a moznost je odhlasit
  • presun stromu do jineho projektu nebo podprojektu i s prohlidkami, opatrenimi a fotkami (potrebuje signal)
  • rozdeleni zaznamu do vice projektu; vlastnik muze projekt smazat (nazev je treba opsat, serverovy projekt jde smazat jen se spojenim)
  • sdileni projektu odkazem jen pro cteni
  • sdileni jednoho nebo nekolika stromu vlastnim odkazem (napr. pro zadost o povoleni kaceni): odkaz ukaze jen vybrane stromy s prohlidkami, opatrenimi a fotkami a jde kdykoli zrusit. Ma stejny tvar #share=<token> a stejnou odpoved GET /api/shares/<token> jako sdileni projektu (scope je "trees"), takze ho boudakaci.cz cte beze zmeny

Podprojekty: projekt jde zaradit pod jiny projekt (jedna uroven), typicky jedna zakazka pod "Zakazky". V menu je podprojekt zanoreny pod nadrazenym projektem (rozbaleni se pamatuje v telefonu), na projektu nejvyssi urovne je "Novy podprojekt" a u projektu "Presunout pod…". Podprojekt pri zalozeni prevezme rezim a cleny nadrazeneho projektu, jinak je to bezny projekt s vlastnimi zaznamy, synchronizaci i sdilenim; mapa nadrazeneho projektu zaznamy podprojektu neukazuje. Podprojekty existuji jen na serveru (vyzaduji prihlaseni), smazani nadrazeneho projektu je nemaze, jen z nich udela samostatne projekty.

Prihlaseni neni podminkou pouzivani. Bez uctu vsechno funguje lokalne a data zustanou v prohlizeci; po prvnim prihlaseni se prevedou na server.

Integrace s boudakaci.cz

Administrace boudakaci.cz otevira pro kazdou zakazku projekt v TreeMapu a cte z nej stromy pres sdileci odkaz. Spojuji to dva mechanismy:

Hluboky odkaz na zalozeni projektu

https://treemap.cz/#new?name=<nazev>&parent=<id nadrazeneho projektu>&return=<https URL administrace>

Vsechny hodnoty jsou URL-encoded. parent je volitelne UUID projektu, pod ktery se ma podprojekt zaradit (prijme i presny nazev projektu nejvyssi urovne); kdyz neni dostupny, projekt se zalozi samostatne. return je volitelna navratova adresa. Po otevreni odkazu prihlaseny uzivatel dostane novy projekt (nebo se otevre existujici projekt stejneho nazvu pod stejnym rodicem, aby opakovane kliknuti nezakladalo duplicity), projekt dostane sdileci token a navratova adresa se zapamatuje pro tuto relaci prohlizece (sessionStorage). Neprihlaseny uzivatel je vyzvan k prihlaseni a odkaz pokracuje po nem, vcetne prihlaseni pres Google nebo Seznam.

Navrat do administrace

Dokud je navratova adresa zapamatovana, projekt ukazuje v mape tlacitko "Zpet do administrace". To presmeruje na

<return>?share=<token>

(k existujicimu query stringu se share pripoji pres &). Administrace si token ulozi jako sdileci odkaz: cely odkaz ma tvar https://treemap.cz/#share=<token> a data vraci GET https://treemap.cz/api/shares/<token> beze zmeny tvaru odpovedi. Odkazy na treemap.tomlabs.xyz funguji dal, appka je presmeruje. Jako navratova adresa se prijima jen https na hostech ze seznamu RETURN_HOSTS v app/src/config.js (boudakaci.cz, lokalne localhost); jina adresa se ignoruje a tlacitko se neukaze.

Lokalni spusteni

Samotny frontend bez API:

node dev-server.js

Aplikace pobezi na http://127.0.0.1:8091. Kamera a GPS funguji jen na localhost nebo pres HTTPS.

Frontend proti bezicimu API (dev server preposila /api):

API_TARGET=http://127.0.0.1:3000 node dev-server.js

API lokalne:

cd api
npm install
export DATABASE_URL=postgres://treemap:heslo@127.0.0.1:5432/treemap
export JWT_SECRET=$(openssl rand -base64 48)
export COOKIE_SECURE=false
npm run migrate
npm start

COOKIE_SECURE=false je pro lokalni HTTP nutne, jinak prohlizec prihlasovaci cookie neulozi.

VPS nasazeni

Bezne se nasazuje pipeline, rucni postup nize je zaloha pro pripad, ze je Azure DevOps nedostupny.

Release pipeline

Pipeline azure-pipelines.yml se spousti pri pushi do vetve main a ma dve faze:

  1. Build - kontrola syntaxe vsech modulu, shoda verzi mezi app/src/config.js, app/sw.js a api/package.json, overeni, ze vsechny soubory ze seznamu service workeru existuji, kontrola, ze migrace neobsahuji destruktivni prikazy, a sestaveni obrazu API.
  2. DeployVps - nahraje release na VPS a spusti deploy/deploy-vps.sh, ktery zalohuje databazi, spusti migrace, nahodi stack, obnovi nginx a pocka na zdravou odpoved API. Nakonec probehne kourova zkouska proti verejne domene.

Variable group se jmenuje treemap-vps-deployment. Povinna je jen jedna polozka:

Promenna Typ Vyznam
VPS_SSH_PRIVATE_KEY_B64 tajna privatni SSH klic pro codexdeploy, zakodovany v base64

Volitelne polozky. Kdyz je nevyplnis, hodnota v .env na serveru zustane, jak byla, takze pipeline nikdy neprepise rucne nastavenou konfiguraci prazdnou hodnotou:

Promenna Vyznam
JwtSecret podpisovy klic tokenu, minimalne 32 znaku. Kratsi nebo placeholderovou hodnotu deploy skript ignoruje a necha tu stavajici. Kdyz promennou nevyplnis vubec, server si secret vygeneruje sam.
GoogleClientId, GoogleClientSecret prihlaseni pres Google
SeznamClientId, SeznamClientSecret prihlaseni pres Seznam
SmtpHost, SmtpUser, SmtpPassword, SmtpFrom odchozi posta

PUBLIC_URL, PUBLIC_URL_ALIASES, TREEMAP_DOMAIN a COOKIE_SECURE se neptaji - deploy skript je odvodi z domeny, protoze jsou vzdy znama a nejsou to tajemstvi.

Skript jde spustit i rucne primo na serveru:

bash /opt/treemap/deploy/deploy-vps.sh

Rucni prvni nastaveni

Repo obsahuje Docker Compose stack:

  • api: Node.js TreeMap API
  • postgres: PostgreSQL databaze
  • hostitelsky Nginx: HTTPS reverse proxy a staticky frontend

Na serveru naklonuj repozitar a priprav .env podle .env.example:

sudo mkdir -p /opt/treemap
sudo chown $USER:$USER /opt/treemap
git clone -b main https://tomlabscloud.visualstudio.com/TreeMap/_git/TreeMap /opt/treemap
cd /opt/treemap
cp .env.example .env
nano .env

Povinne polozky:

TREEMAP_DOMAIN=treemap.tvoje-domena.cz
PUBLIC_URL=https://treemap.tvoje-domena.cz
POSTGRES_PASSWORD=dlouhe-nahodne-heslo
DATABASE_URL=postgres://treemap:dlouhe-nahodne-heslo@postgres:5432/treemap
JWT_SECRET=opravdu-dlouhy-nahodny-secret

JWT_SECRET musi mit aspon 32 znaku. API zamerne nenastartuje, pokud chybi nebo je to jedna ze znamych vychozich hodnot - drive se v takovem pripade tise pouzil verejne znamy default, cimz sel podepsat cizi token. Vygenerujes ho treba takto:

openssl rand -base64 48

Nginx konfigurace je v deploy/nginx-treemap.conf:

sudo cp deploy/nginx-treemap.conf /etc/nginx/conf.d/treemap.cz.conf
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d treemap.cz -d www.treemap.cz

Po vydani certifikatu uz tento soubor rucne neprepisuj, Certbot do nej doplni HTTPS cast.

Prvni spusteni:

sudo docker compose build api
sudo docker compose up -d postgres
sudo docker compose run --rm api npm run migrate
sudo docker compose up -d

Overeni:

sudo docker compose ps
curl http://127.0.0.1:3009/api/health
curl -H "Host: treemap.tvoje-domena.cz" http://127.0.0.1/api/health

Aktualizace po dalsim pushi:

git pull
sudo docker compose build api
sudo docker compose run --rm api npm run migrate
sudo docker compose up -d

Prechod z verze 0.6 na 0.7

Fotky se drive ukladaly jako base64 primo v radku stromu. Ve verzi 0.7 jsou to soubory na disku a v databazi zustava jen odkaz. Prevod stavajicich fotek udela jednorazovy skript, ktery je mozne spustit vickrat:

sudo docker compose run --rm api npm run migrate:photos

Fotky a cache dlazdic zijou ve svazku treemap_data (/var/lib/treemap v kontejneru), takze prezijou prestaveni kontejneru.

Prihlaseni pres Google a Seznam

Volitelne. Bez vyplnenych udaju se prislusna tlacitka v aplikaci vubec nezobrazi a prihlaseni e-mailem funguje dal.

U poskytovatele zaregistruj aplikaci a nastav redirect URI:

https://treemap.tvoje-domena.cz/api/auth/oauth/google/callback
https://treemap.tvoje-domena.cz/api/auth/oauth/seznam/callback

Ziskane hodnoty dej do .env (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, SEZNAM_CLIENT_ID, SEZNAM_CLIENT_SECRET).

Odchozi posta

Take volitelne. Posta jde primarne pres Resend (RESEND_API_KEY), odesilatel je v EMAIL_FROM a jeho domena musi byt v Resendu overena. SMTP (SMTP_HOST, SMTP_USER, SMTP_PASSWORD, ...) zustava jako zalozni cesta, kdyz Resend neni nastaveny nebo selze.

Bez Resendu i SMTP se overovaci a resetovaci odkazy vypisuji do logu kontejneru, takze registraci i reset hesla lze projit i bez posty:

sudo docker compose logs -f api

Zaloha

Databaze:

mkdir -p backups
sudo docker compose exec -T postgres pg_dump -U treemap treemap > backups/treemap-$(date +%F).sql

Fotky:

sudo docker run --rm -v treemap_treemap_data:/data -v "$PWD/backups:/backup" \
  alpine tar czf /backup/treemap-fotky-$(date +%F).tar.gz -C /data photos

Vypocty

Objem kmene je orientacni:

objem = vyska * pi * (prumer / 2)^2 * tvarovy koeficient

Prumer se zadava v cm, vyska v m, tvarovy koeficient se lisi podle druhu.

Vymera porostni skupiny se pocita ze skutecne geometrie polygonu pres sferickou excesi, a to na serveru - hodnote poslane klientem se neveri.

Vek porostu je rozdil aktualniho roku a roku zalozeni. Vekove tridy jsou po dvaceti letech, vekovy stupen podle lesnicke praxe po deseti.

Changelog

Newest version first. Each section lists what changed for the user, not the commits. Releases up to 0.11.0 are described in the git history (Release x.y.z: … commits).

0.22.0 — 2026-10-08

Added

  • A landing page on treemap.cz: what TreeMap does, how to start, and buttons to create an account or sign in (e-mail, Google, Seznam). It has its own light/dark switch and works on a phone.

Changed

  • The app is for signed-in users only. Signed-out visitors see the landing page; a signed-in phone opens straight into the app, offline too. Shared links (#share) still open without signing in.
  • Records made earlier without signing in stay in the phone; the landing page says so and they are saved to the server after signing in.
  • Signing out warns when there is no signal, because signing back in needs a connection.

0.21.0 — 2026-10-08

Changed

  • TreeMap moves to https://treemap.cz (www.treemap.cz redirects there). Links in e-mails and new share links use the new address.
  • The old address treemap.tomlabs.xyz keeps working for now. The app there first sends everything still waiting in the phone (changes, photos, records made without signing in), then moves to the new address together with the sign-in and the link it was opened with. Until then a banner says what is still waiting.
  • Old links (shares, links from boudakaci.cz) keep working and open on the new address.
  • Offline maps downloaded on the old address cannot move along; after the move the app reminds to download them again.
  • The Stromopedia links point to https://stromopedie.cz.

0.20.1 — 2026-10-08

Changed

  • "Ověřit e-mail" in the menu can send a new verification e-mail at most once a minute. After a send the button turns grey and counts down ("znovu za 45 s"), also after a page reload, and the message says where the e-mail went.

0.20.0 — 2026-10-07

Added

  • "Přesunout do projektu" in the tree detail moves a tree to another project or subproject together with its inspections, measures and photos. The list shows subprojects under their parent and warns when the target project is in the other mode. The tree disappears from the original project on every device, and photos the phone already has are available in the new project at once. Moving needs a connection; without one nothing changes.

0.19.0 — 2026-10-07

Added

  • Subprojects: a project can be filed under another one (one level), for example one project per job under "Zakázky". The menu shows them nested under the parent with expand/collapse (remembered on the device), "Nový podprojekt" on a top-level project and "Přesunout pod…" in the project section to file a project under another one or make it top-level again ("Žádný"). A subproject takes the parent's mode and members when it is created; otherwise it is an ordinary project with its own records, synchronisation and sharing. Deleting a parent keeps its subprojects as top-level projects.
  • Deep link for the boudakaci.cz admin: #new?name=…&parent=…&return=… creates the project (or opens the one of that name that already exists under the same parent), makes its share link and opens it; when you are not signed in, the link waits for the sign-in. While the project was opened this way, the map shows "Zpět do administrace", which returns to the admin with the share token. Only boudakaci.cz is accepted as a return address.

Changed

  • The menu lists all projects in their own "Projekty" section; the current project's name shows which project it belongs to.

0.18.0 — 2026-09-30

Added

  • New page "Čí je to pozemek" (/parcel, also in the menu under "Katastr"): it finds the phone's GPS position, highlights the cadastral parcel you are standing on and shows its number, cadastral area and size. "Zobrazit vlastníky" opens that parcel in ČÚZK's Nahlížení do katastru, which lists the owners. Tapping the map looks up any other parcel.
  • When the GPS fix is less precise than the distance to the parcel boundary, the page says so and suggests tapping the neighbouring parcel.
  • TreeMap is listed in the TomLabs app catalogue (apps.tomlabs.cz).
  • Anonymous visit statistics (Google Analytics) with a consent bar; nothing is measured before you accept, and "Cookies a měření návštěvnosti" in the menu changes the choice.

0.17.0 — 2026-09-30

Added

  • The menu has a new "Další projekty" section under "O aplikaci" with links to Stromopedie (tree encyclopedia), Arboristé (catalogue of arborists) and Bouda kácí (tree felling and care).

0.16.0 — 2026-09-29

Added

  • "Karta stromu (PDF)" in the tree detail creates a PDF file on the phone, also without signal: tree data, photos, a map excerpt with the tree, a QR code with its position in Mapy.com and, optionally, a QR code with a shared link to the tree. In arborist mode it adds the latest assessment, open and completed measures and the inspection history.
  • The finished PDF can be downloaded or sent straight from the phone (e-mail, messaging apps) where the browser supports sharing files.

Changed

  • The inspection protocol and the trees-needing-work report are now real PDF files instead of a page to print.

0.15.0 — 2026-09-29

Added

  • A tree and an inspection can have any number of photos (the whole tree, the trunk, each defect). Photos are added with "Vyfotit" or picked from the gallery, several at once; any of them can be removed or made the main photo.
  • The tree detail shows a gallery: the main photo large, the other photos of the tree and of its inspections as thumbnails, each labelled where it comes from.
  • A new photo viewer: swipe or arrows to move between photos, pinch, double tap or mouse wheel to zoom, drag to move a zoomed photo, swipe down or Esc to close, with a counter and a caption.

Changed

  • Existing photos become the first photo of the list; older app versions and shared links keep working with the main photo.

0.14.0 — 2026-09-29

Added

  • "Sdílet strom" in the tree detail shares one tree, or a few chosen trees nearby, through a link of its own instead of the whole project. The link shows only those trees with their inspections, measures and photos, opens straight on the tree, and can be revoked at any time. It has the same form as a project link, so boudakaci.cz reads it from the QR code in a felling permit application without any change.

Fixed

  • Photos are shown in shared links; before, a shared tree or project showed only a placeholder.
  • The sync button no longer shows when you are signed out or looking at a shared link.
  • Opening a shared link while a dialog is open closes the dialog.

0.13.1 — 2026-09-27

Fixed

  • A photo of a tree, an inspection or a wood pile can now be picked from the gallery as well ("Vybrat z galerie"); before, the phone always opened the camera. A tree photo picked from the gallery also takes its GPS position when the photo has one.

0.13.0 — 2026-09-26

Added

  • Arborist mode for projects: tree assessment by the Czech standard SPPK A01 001. A project is either forestry (as before) or arborist; the mode is chosen when the project is created and can be switched in the menu without losing anything.
  • Trees in arborist mode have a free taxon (scientific name) with suggestions of Czech and Latin names, a tree number, crown base height, crown width and the number of stems.
  • Inspections with history: date, type, inspector, physiological age, vitality, health, stability, perspective (suggested from the worst rating), operational safety, the required list of structural defects, suspected protected species, a photo (required from stability 3) and the date of the next check.
  • Any number of proposed measures per inspection, with the technology code from Annex 9, urgency 0–3, repeat interval and the specification the standard requires for some codes; measures can be ticked off as done.
  • The map colours trees by the most urgent open measure and marks overdue checks; the tree list filters trees needing work, overdue and not yet assessed.
  • Stands serve as base areas in arborist mode, with maintenance class, overall stability, target value and slope, and a warning where individual assessment is missing.
  • Printable reports made on the phone, also offline: inspection protocol and trees needing work grouped by urgency stage.
  • A link to the species page in Stromopedie in the tree detail, in both modes.
  • "Otevřít v Mapy.com" next to the coordinates of a tree or a wood pile opens the place in the Mapy.com app on the phone (or on the web when the app is not installed).
  • Projects can be deleted from the menu by their owner. Deleting asks to type the project name, needs a connection for a project stored on the server, and removes its photos from the server as well.

Fixed

  • Projects created before signing in keep their name after a reload and when they are moved to the server on the first sign-in; before, the header showed "Můj les" and the server project got that name.
  • A signed-in user who starts the app without signal sees the real project names.
  • Switching projects no longer leaves an empty Detail tab behind.
  • Changes made offline on one device now reach your other devices on their next sync. Before, an edit uploaded after being made without signal could stay invisible elsewhere until the app downloaded the whole project again. After the update every device downloads the project once, which also brings in any edits that were missed this way.

0.12.0 — 2026-09-26

Changed

  • Verification and password-reset e-mails are now sent through Resend, so they actually arrive; the SMTP server stays as a fallback when Resend is not set up or fails.
  • The password-reset e-mail subject is spelled with proper Czech diacritics.

0.11.2 — 2026-09-24

Changed

  • The server's status page is now at /health and reports whether the app and its database are working (Healthy / Unhealthy) together with the running version; the old /api/health address keeps working and answers the same.

0.11.1 — 2026-09-24

Fixed

  • "Light" in Settings → Appearance now really is light on a phone or computer set to dark mode; before, the dark colours stayed.
  • A theme chosen by hand is applied before the first paint, so the app no longer flashes in the other colours on start.

Changed

  • Everyone starts on "Podle systému" (follows the operating system, switching live) once; choices made before are forgotten. Light and Dark still pin the look and are remembered.
  • The appearance options are spelled with proper Czech diacritics.