2026-09-30aSeptember 30, 2026LATEST
- FixThe website still said the app has five map types, including satellite. The satellite map and hillshade were removed for licensing reasons a while back. The texts on the start page are now correct: three built-in map types — Map, Map dark and OpenTopoMap — plus your own XYZ map sources and nine map layers to put on top.
2026-09-19bSeptember 19, 2026
- FixThe same marker could be saved twice. If the photo takes longer to upload than the phone waits, the marker is still saved on the server, and the next attempt used to create a copy. The server now recognises a retry by the marker's own key, no matter how much time has passed, and fills in the photo if it only arrived on a later attempt. The duplicates that had already appeared have been cleaned up.
2026-09-19aSeptember 19, 2026
- FixYour hunt history and hunt reports now follow you when you reinstall the app. They used to belong to the device you had during the hunt, so after a reinstall the hunts appeared to be gone — now they are moved over to your new device when you recover your groups with your email address.
2026-09-18aSeptember 18, 2026
- NewThe admin panel can now grant an Android Auto debugging feature. It opens a page in the app where each part of the car screen can be switched off individually, which is needed because Android Auto only reports that something went wrong without revealing where.
2026-09-17bSeptember 17, 2026
- NewThe server now receives and stores reports of inappropriate content, and emails them on immediately so they do not sit unnoticed. Reports are handled under a new tab in the admin panel, where they can be marked as resolved.
- NewBlocks are handled on the server, not just in the app. That means a blocked member's messages and markers are filtered out before they are ever sent to your phone, and direct messages between you are stopped on the way in. Reinstalling the app therefore does not clear your blocks.
2026-09-17aSeptember 17, 2026
- NewYou can now delete your account directly on the web, without having the app installed: geo-harbor.se/radera-konto. You enter your email address, get a one-time code and confirm — after that your membership, your location history, your markers with photos and your zones are removed. If you own a group where others remain, ownership passes to whoever joined first. The same function has been available inside the app; what is new is that it can be reached even if you have already uninstalled.
- NewGeo-Harbor now has a published privacy policy at geo-harbor.se/integritetspolicy. It describes exactly what data the app collects, why, who can see it, how long it is kept and how to have it removed. It does not replace the user agreement in the app but complements it.
2026-09-15aSeptember 15, 2026
- NewPoints of interest on the map: lean-to shelters, hunting stands, fire pits, picnic sites, viewpoints, drinking water, swimming spots, parking, fuel, pharmacies, defibrillators and more — 21 categories to pick freely from, sourced from OpenStreetMap. The data now lives on our own server instead of being fetched from an overloaded free service, so the points appear instantly instead of sometimes not at all.
- ImprovedThe server's map data now updates itself. The base map and the points of interest are rebuilt automatically when they get old, and a fresh server builds its own map data on first start. This previously required manual steps, and a newly installed server got a blank map without anything saying so.
2026-09-14bSeptember 14, 2026
- FixThe admin panel's track view could show tracks in a group where location sharing was turned off. Tracks a device recorded in another group were mistakenly listed under every group the device belonged to. The admin view now shows exactly the same tracks the group's own members see. No position was ever shown to the wrong members in the app — the fault was in the admin panel only.
2026-09-14aSeptember 14, 2026
- FixVerification and invitation emails were not arriving. The server had lost the ability to deliver mail directly to recipients' mail servers, and messages sat in the queue for days without anyone being told. Mail is now handed over to a server that is allowed to send outbound, and the remaining messages have gone through.
- NewThe admin panel has a dedicated mail settings view: server, port, encryption, login and sender address can be changed while running, with a button to send a test email and see the server's reply directly. Previously, switching mail server required a code change all the way out to production.
- SecurityThe admin panel's IP restriction updated after the office's public address changed.
2026-07-22aJuly 22, 2026
- FixThe Garmin watch could show the members of the wrong group. The watch shares its identity with the phone, so the server could not tell who was reporting — the watch's own requests could overwrite the phone's group choice and lock the watch into an old group. The phone is now the only source of which group is active.
2026-07-21gJuly 21, 2026
- NewRain and snow warning: the server watches precipitation where users actually are and sends a push before it arrives. The check runs on the server, so the app uses no extra power at all. Nearby users share the same weather lookup, so the number of requests depends on how many areas people are in — not on how many users there are.
- FixA brand-new database could not start: a migration read a column the updated base schema no longer creates. Existing installations were unaffected.
2026-07-21fJuly 21, 2026
- NewSupport for public markers: a marker can be made visible in all groups, including groups created in the future. Only the group where the marker was created can change or delete it.
2026-07-21eJuly 21, 2026
- FixThe top speed in the admin movement leaderboard was derived from the distance between two positions, so a position drift could look like a sprint — one person showed 189 km/h while the receiver measured 45 at the same moment. Top speed now comes from the GPS's own measurement.
- ImprovedThe movement leaderboard now clearly states which period it covers. The tabs are labelled last 24 hours, 7 days, 30 days and 365 days, and the start date is shown — previously the weekly value (which the view opens on) could be mistaken for todays figure.
2026-07-21dJuly 21, 2026
- FixThe tracks view in the admin panel showed the same tracks whether you picked 2, 4, 6, 8, 10 or 12 hours — the time limit was compared in the wrong date format and only took effect once the cutoff fell on an earlier date. All time spans now select correctly.
- FixThe speed in the admin map popup was shown 3.6 times too high, because values in km/h were converted as if they were metres per second.
2026-07-21cJuly 21, 2026
- NewThe admin panel now has a leaderboard showing who has moved the most over a day, week, month or year, plus new views for zones, alarm history and storage.
- FixThe Positions per day bar chart in the admin panel drew its bars with zero width and therefore looked empty. Days with no positions were also skipped, which could make the dates below the bars misleading.
- NewThe admin map now has buttons to hide people or markers, and the position history can be pruned with a configurable cutoff.
2026-07-21aJuly 21, 2026
- FixThe group alarm was rejected by the server due to a mix-up between member ID and device ID in the permission check. As a result neither the alarm nor the ”alarm cleared” message was ever forwarded to the group. The check now looks at the correct ID.
2026-07-19dJuly 19, 2026
- SecurityPosition, history and latest-position requests are now cross-checked against the device security key: an authenticated request must own the membership it reports for. A member ID alone is no longer enough to act in someone else's name.
2026-07-19cJuly 19, 2026
- NewThe website is now available in English under /en/ — every page has an English counterpart with correct hreflang links, and each page now has a unique search-engine description in both languages.
- FixBatch position upload aborted entirely if a single group membership had disappeared — that entry is now skipped so the remaining positions are saved.
2026-07-19bJuly 19, 2026
- ImprovedThe website is now readable by search engines and AI services: pages are delivered with pre-rendered Swedish text instead of requiring JavaScript, and robots.txt + sitemap.xml have been added. The language switch to English works as before.
2026-07-19aJuly 19, 2026
- NewProperty boundaries can now be named: boundary data is stored in a new format with a name per hunting ground, fully backwards compatible with older app versions.
2026-07-18cJuly 18, 2026
- NewOwn map service: the entire vector map of Sweden (OpenStreetMap via Protomaps) is now served from geo-harbor.se — the foundation for upcoming offline maps in the app, with no dependency on external map APIs.
2026-07-18bJuly 18, 2026
- ImprovedAll uploaded photos are now automatically compressed on the server to at most 0.5 MB (longest side 1920 px) — markers with photos load much faster and use a fraction of the storage.
2026-07-18aJuly 18, 2026
- FixHunt markers are now deduplicated on the server: if the app re-sends the same marker (e.g. when the offline queue re-syncs after the app was closed in the background), no duplicate is created.
2026-07-07cJuly 7, 2026
- NewAdded a weather proxy endpoint (/api/weather) that fetches wind speed and direction directly from Yr.no (MET Norway) to provide the Garmin Connect IQ watch app with correct and synchronized wind data.
2026-07-07bJuly 7, 2026
- NewAdded full support for the new Garmin Connect IQ watch app, including endpoints for pass creation (/api/groups/:id/passes), group alarms (/api/groups/alarm), and location sharing.
2026-07-07aJuly 7, 2026
- NewAdded a public /api/ping route for the app to verify connection to the server.
2026-07-06dJuly 6, 2026
- NewThe server now sends a silent wake-up push to a member's device when the device has not reported for 17 minutes, so the app (from version 0.6.23) can resume location sharing automatically if Android has killed it.
- FixFixed a bug in the admin panel where the 'Activate' button for new premium orders was unclickable.
2026-07-06cJuly 6, 2026
- NewGET /api/features now also returns an expiry date per premium feature (featureDetails), so the app can show when a license expires — without changing the existing response shape.
- NewNew order path: the app's Order/Renew buttons open geo-harbor.se/bestall, which submits an order to POST /api/premium-orders. The admin panel has a new 'Orders' section to activate or dismiss these once payment is verified (e.g. Swish).
2026-07-06bJuly 6, 2026
- FixThe admin panel showed no email address for some users even though they had verified one. The cause was an ordering bug: email verification created the device's database row before the user created/joined a group, which caused the subsequent email update to be silently dropped. Fixed at the source, plus a one-time correction for already affected accounts.
2026-07-06aJuly 6, 2026
- ChangedThe Android Auto, Hunting Module, and Forest Inventory premium features are now licensed yearly — active for one year from the activation date instead of permanently. Premium icons remain a one-time, lifetime unlock.
- NewThe admin panel now shows an expiry date per premium feature and supports one-click renewal.
2026-07-05aJuly 5, 2026
- NewThe server is moving to a new, dedicated machine: the whole backend now runs in Docker (website/backend/mail as separate containers), with SQLite mounted so data survives container updates.
- SecurityThe admin panel now requires two-factor verification (TOTP) in addition to a password, plus an IP allowlist — and the old default password has been permanently replaced with a randomly generated one-time password shown on first boot.
- NewOutgoing email (verification codes etc.) now goes through a dedicated exim4 container instead of the server's local mail system.
- ChangedThe marketing pages (this page, pricing, the guide, etc.) moved to their own repo/container (geo-harbor-marketing) — fully independent from the database and API, since they never needed that connection.
2026-07-01dJuly 1, 2026
- NewGET /api/hunts/:id/report.pdf — generates PDF report with pdfkit: summary, participant list, catches with details (sex, age, weight, shooter), other events.
2026-07-01cJuly 1, 2026
- NewHunt module: POST /api/hunts/:id/invite — hunt leader can invite group members via FCM (type hunt_invite with huntId, inviteCode, huntName).
2026-07-01bJuly 1, 2026
- NewHunt module: photos on markers — POST /api/hunts/:id/markers now accepts multipart/form-data with optional image file (multer). Photo served via GET /api/hunts/photo/:filename with deviceId auth and path-traversal protection.
- FixHunt history (GET /api/hunts/history): catch_count was incorrectly multiplied by participant count due to a Cartesian product in SQL. Fixed with correlated subqueries.
2026-07-01aJuly 1, 2026
- NewHunt module: new hunt.ts router mounted at /api/hunts. Endpoints: start/end hunt, join/leave, chat, GPS tracking, markers (pass, catch, game sighting, shooter), pass management, live positions and history.
- NewHunt seasons API: GET /api/hunt-seasons returns all configured seasons. Admin: POST /admin/api/hunt-seasons/import for CSV upload (species, start, end, notes).
- NewFCM: hunt chat messages are now sent as push notifications to all other participants (type hunt_message with huntId, senderNickname).
- NewDB: new tables hunt_participants, hunt_positions, hunt_markers (incl. photo_path), hunt_chat, hunt_seasons. Schema v12.
2026-06-24June 24, 2026
- FixReinstalling the app no longer creates duplicate accounts — old devices with the same email are now merged automatically on re-login.
- NewAdmin: new 'Merge duplicates' button that finds and merges all devices sharing the same email in one step.
2026-06-18bJune 18, 2026
- ImprovedThe icons page is now called Avatars and the URL is /avatarer. Old /ikoner links redirect automatically.
- ImprovedAI-generated label removed from the avatar page and home page.
2026-06-17eJune 17, 2026
- NewPremium icons (photo images) served from /img/icons/ — all group members fetch and cache the image automatically.
- NewNew endpoint GET /icons — returns metadata about available photo icons.
2026-06-17dJune 17, 2026
- NewWebsite: photo images replace emoji icons in both the feature grid and the Hunting & forestry section.
- NewWebsite: Open Graph tags added — preview with image and description in Telegram, iMessage etc.
- NewWebsite: ambient glow, fade-in animations for hero text, lift effect on feature cards and purple CTA glow.
- NewWebsite: images added to the Documentation and Instructions pages.
- NewNew app icon on website: purple glowing location pin.
2026-06-17cJune 17, 2026
- NewWebsite completely redesigned with dark theme, full-viewport hero, editorial feature grid and photographic feel.
- FixAll website texts reviewed and corrected to reflect how the app actually works (FLP stream, server-side geofencing etc.).
2026-06-17bJune 17, 2026
- NewNew endpoint GET /api/groups/latest-positions — returns latest position per group member via optimised SQL subquery, used on app start and group switch.
- NewNew endpoint POST /api/groups/location/batch — syncs offline-queued positions in one request instead of one by one; returns { success, failed[] }.
- FixTrack history (GET /api/groups/history) now correctly includes map icon (avatarIcon) via JOIN against the devices table.
- FixPositions with identical timestamp for the same device are never written twice — ON CONFLICT DO UPDATE guarantees idempotency.
2026-06-17aJune 17, 2026
- FixGeofence check now runs correctly in the foreground via server-side logic on each location update — frontend code was referencing wrong zone state.
2026-06-16cJune 16, 2026
- NewLone-worker alarm is registered server-side — if the app crashes or closes before the alarm is acknowledged, the server still sends FCM to the group.
- NewServer-side geofencing: geofence check runs on every POST /api/groups/location — notifications delivered via FCM regardless of whether the app is open.
- NewGPS-off FCM: server sends an FCM notification to the whole group when a member disables GPS sharing.
2026-06-16bJune 16, 2026
- NewFirebase Admin SDK integrated — FCM push notifications now sent from server for markers, join requests, alarm signal and alarm resolution.
- FixWebSocket timeout raised to 45 seconds (was 12 s) before a member is marked offline — tolerates Android Doze and network switches.
- NewOwnership transfer is broadcast in real time via WebSocket — the group view updates without requiring re-login.
2026-06-16aJune 16, 2026
- NewMap icons (avatarIcon) stored per device in the database and synced to the group via WebSocket and REST — everyone in the group sees your chosen icon in real time.
- NewPremium icons validated server-side — access restricted to accounts with active premium flag.
2026-06-15June 15, 2026
- NewAccount deletion: new endpoint DELETE /api/account removes account, positions, sessions and optionally markers + photos. Verified via email code.
- NewEmail verification: POST /api/verify/send + POST /api/verify/check — time-limited 6-digit code sent via SMTP.
- NewGPS-off per group: endpoint to disable GPS sharing in a specific group without affecting other groups.
2026-06-14June 14, 2026
- NewGeofencing API: CRUD endpoints for place zones tied to user account — zones survive app reinstall.
- NewYr.no weather proxy: server fetches and caches hourly and daily forecast from yr.no and serves it to the app.
- NewFCM token registration: devices table extended with FCM token — updated on every app start.