Recent Releases of FireAlert

FireAlert - 2025-05-05

Summary

This release delivers end-to-end push notification deep-linking for the native app (Android + iOS), fixes two critical server-side bugs that were silently dropping all device notifications, and ships a structured logfmt observability improvement for BetterStack. A batch of security and maintenance dependency upgrades is also included.


Changes

Critical Bug Fixes — #331

  • AlertMethodMethod type-only import — enum was erased at compile time, causing a silent ReferenceError that skipped all device notifications. Fixed to a value import.
  • Unfiltered notification iterationPromise.all was iterating the original notifications array instead of filteredNotifications, sending pushes to disabled alert methods. Fixed.
  • Logger debug level leaking to Logtail — debug entries were routed as INFO in production. Now gated to NODE_ENV === 'development'.

Deep-Linking for Push Notifications — #331

  • firealert:// custom scheme — notifications now use firealert://alert/:alertId, bypassing iOS Safari intercept.
  • Cold-start queuing — notification tap events are queued if NavigationContainer isn't ready yet, then flushed on onReady.
  • Map zoom on tap — Home screen locates the tapped alert and calls camera.setCamera via calculateAlertCamera; skips default user-location zoom when alertId/incidentId is in params.
  • Re-tap support__ts nonce in deep-link params forces useEffect to re-fire on repeated taps.
  • OneSignal URL suppressionOneSignal_suppress_launch_urls = true added to iOS Info.plist, mirroring Android's existing config.
  • Platform config — Android intent-filters (/incident, /verify, firealert://), MainActivity.onNewIntent; iOS AppDelegate URL bridging, app group entitlement, AASA headers via Next.js config; server serves /.well-known/apple-app-site-association and assetlinks.json.

Android: OneSignal Permission Fix — #338 / #339

  • Fixed permission state not being correctly propagated to OneSignal, causing push registration failures on some Android devices.
  • Version bump and CodeRabbit feedback addressed.

Observability: Reduced BetterStack Log Volume — #340

  • Collapsed per-provider/per-incident/per-notification info lines into single logfmt summaries (stage=... event=...); verbose logs are dev-only.
  • Added escapeLogfmt() helper to prevent stack traces from fragmenting log records.
  • Removed clientApiKey and raw destination (PII) from log tags.
  • Fixed unsafe (error as Error) casts with error instanceof Error guards.
  • Fixed GEO provider tags in site alert logs; notification sender no longer halts after skipped batches.

Tooling — #329

  • Added .claude/ config for Claude Code worktree management; cleaned up older feature instruction files.

Dependency Updates

#328 + Dependabot

apps/server

Package From To
next ^16.1.5 ^16.2.3
nodemailer ^6.9.1 ^8.0.5
postcss ^8.5.6 ^8.5.10
@types/nodemailer ^6.4.7 ^8.0.0

apps/nativeapp (v1.9)

Package From To
axios ^1.13.5 ^1.15.0
Android versionCode 24 26
iOS build number 28 31
activesupport (Ruby) 7.2.2.1 7.2.3.1
addressable (Ruby) 2.8.7 2.9.0

Indirect / Security

  • ajv 6.12.66.14.0
  • rollup 4.54.04.59.0
  • minimatch 3.1.23.1.5
  • flatted 3.3.33.4.2
  • node-forge 1.3.21.4.0
  • follow-redirects 1.15.111.16.0
  • brace-expansion 1.1.121.1.14
  • fast-xml-parser 4.5.34.5.6
  • lodash 4.17.234.18.1
  • yaml 2.8.12.8.3
  • picomatch 2.3.12.3.2
  • protocol-buffers-schema 3.6.03.6.1

Tooling

  • .yarnrc: enabled --install.frozen-lockfile true for reproducible installs.
  • package-lock.json removed — yarn.lock is the single source of truth.

📜 Full Changelog

PR Type Title
#328 chore Update multiple dependencies to latest versions
#329 chore Configure Claude Code worktree management
#331 fix Resolve notification delivery failures and complete deep-link flow
#338 fix Fix Android OneSignal permission propagation
#339 chore Version bump & CodeRabbit feedback
#340 perf Reduce BetterStack log volume with logfmt summaries
#337 release Release: Update dependencies and Claude Config & DeepLinking

Full diff: develop...main

Biosphere - Wildfire - TypeScript
Published by rupamkairi 3 months ago

FireAlert - 2026-04-16

Summary

  • This release includes three merged PRs that clean up logs, harden notification transactions, and improve the incident page UX with hover/focus interactivity and timezone-aware times.

Highlights

  • Less noisy and more structured logs.
  • Safer transaction handling when creating incident notifications.
  • Incident page: hover/focus highlights related incidents on the map.
  • Incident times show timezone-aware formatting where site coords exist.

Changes by PR

  • PR #321 — Feature: optimising logs

  • PR #322 — refactor: restructure transaction logic in CreateIncidentNotifications

  • PR #324 — Enhance incident page with hover/focus interactivity and timezone support

    • Adds hover and keyboard-focus interactivity for related incidents on the incident page.
    • Highlights related incident polygons and shows related incident fire points non-interactively.
    • Formats incident times with timezone offsets when site coordinates are available.
    • Adds small UI wiring and feature-flag checks for staged rollout.
    • PR: https://github.com/Plant-for-the-Planet-org/FireAlert/pull/324

Ops & QA notes

  • No schema migrations in these PRs. Deploy server and frontend together for best UX.
  • Watch notification cron logs after deploy to confirm cleaner logs and no new transaction errors.
  • QA steps:
    • Verify cron runs produce concise logs and the key stats are visible.
    • Trigger notification flows; confirm no partial writes and that notifications are created as expected.
    • Open an incident page with related incidents. Hover rows and tabs; confirm map highlight and non-interactive related markers.
    • Check incident time formatting for a site with known coordinates.

Links

What's Changed

Full Changelog: https://github.com/Plant-for-the-Planet-org/FireAlert/compare/2026-03-23...2026-04-16

Biosphere - Wildfire - TypeScript
Published by rupamkairi 3 months ago

FireAlert - 2026-04-07

Overview

Updated Incident Boundary for Mobile. Incident Boundary will shape according to the detected fires with improved calculation on boundary area.
Added Stop Incident Notifications - so you can flag incidents, leading to less flooding of notifications.

Bug Fixes

Incorrect height improved for details view for the Sites Info in the Bottom Sheet.
Minor Fixes & Improvements.

What's Changed

Full Changelog: https://github.com/Plant-for-the-Planet-org/FireAlert/compare/2026-03-23...2026-03-26

Biosphere - Wildfire - TypeScript
Published by rupamkairi 4 months ago

FireAlert - 2026-03-23

Overview

Introduces proximity-based fire incident detection and association, a JSONB metadata column on SiteIncident to track centre time-series, and STOP_ALERTS notification suppression across incident and site-alert flows.

What's Changed

Features & Fixes

  • Add SiteIncident.metadata, migration & doc ([#293]): Adds a JSONB metadata column to SiteIncident via migration to support structured per-incident data. Documents the planned proximity-based association model using metadata.centres ({latitude, longitude, at}) and the strategy for selecting the closest active incident within INCIDENT_PROXIMITY_KM. Existing stale-incident resolution and association logic in SiteIncidentService.ts is commented out as preparatory work, kept for reference.

  • Enforce STOP_ALERTS notification suppression ([#295]): Skips incident and site-alert notifications when reviewStatus is STOP_ALERTS, logging suppressed counts per method. Adds unsubscribe token support to incident email notifications. Aligns reviewStatus typing and validation against Prisma.SiteIncidentReviewStatus across server and native layers. Adds documentation covering stop-alerts behaviour, unsubscribe flow, and review-status alignment.

  • feat(fire-incident): add incident boundary utils and optimized country data ([#297 ]): Wires up full proximity-based incident detection and centre time-series tracking. Introduces DistanceCalculatorService (Turf.js) for great-circle distance and closest-incident resolution, IncidentMetadataService for parsing/initialising/updating centres (latest at index 0, capped at 100 entries), and SiteIncidentProximityService to orchestrate detection, creation, update, and alert association. Extends SiteIncidentRepository with findActiveIncidentsBySiteId and updateIncidentMetadata. Integrates the proximity service into SiteIncidentService to replace the previously commented-out logic, routing create/update decisions through proximity detection.

Biosphere - Wildfire - TypeScript
Published by rupamkairi 5 months ago

FireAlert - 2026-03-10

Introduces

Fire Incident

We are Introducing Fire Incident. We see Sending Notifications for the Alerts are not very efficient about what & how fires are moving in our sites, so going forward we are planning to group Fires to Send more meaningful notifications. [More Info].(https://www.notion.so/plantfortheplanet/Fire-Incident-Feature-Introduction-312372a41a4180b0b57fe874f2281b5f?source=copy_link)
This is the Version 1 Release there will be more Improvements to come on the way. So far We are only changing Email Notifications. Mobile apps will soon have a update. There won't be much significant updates other than Incident Details.

What's Changed

Full Changelog: https://github.com/Plant-for-the-Planet-org/FireAlert/compare/2025-12-30...2026-01-20

Biosphere - Wildfire - TypeScript
Published by rupamkairi 5 months ago

FireAlert - 2026-01-12

Overview

Improvements to OneSignal device synchronization and alert-method verification, plus minor UI fixes. Work includes a hotfix using legacy API credentials, a comprehensive OneSignal sync implementation on develop, and branch syncs to consolidate changes into main.

What's Changed

Features & Fixes

  • Update alert method device verification method (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/257): Hotfix to the alert method router to use Legacy API credentials so server-side sync completes for device verification. Intended as a low-impact fix for issues #252 and #98; partially addressed the problem and was merged to main.
  • Feature: syncfix onesignal and minor UI fix (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/258): Comprehensive enhancement of OneSignal integration with automatic device synchronization. Updated syncing of alert method for phone by retrieving SubscriptionId from OneSignal and syncing with AlertMethod through creation or updating operations. Includes enhanced push notification system with fixed initialization loop issue.
    • App version updated to 1.7.
    • Minor UI updates including bottom bar height fix for Android.
    • Protected area card hero image addition.
  • Syncing main with develop (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/259): Synchronization of main into develop to keep branches consistent and incorporate hotfix changes; includes updates to notification service infrastructure and authentication handling.
  • Merge develop into main (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/261): Final merge of develop into main to release consolidated OneSignal integration improvements and UI fixes into production.

PR Maps

Biosphere - Wildfire - TypeScript
Published by rupamkairi 7 months ago

FireAlert - 2025-12-30

Overview

Refactor and cleanup of the geo-event-fetcher implementation with accompanying steering documentation. The work reorganizes the event fetcher/handler code and adds docs to explain steering/configuration; the refactor was merged into the codebase.

What's Changed

Features & Fixes

PR Maps

Biosphere - Wildfire - TypeScript
Published by rupamkairi 7 months ago

FireAlert - 2025-12-22

What's Changed

Initially started with React Native Upgrade to 0.76.9 as it was the stable one version to move from older ones. Later React Native Upgrade to 0.81 as per mandatory Android 16 support from September 2025.

Few Important 3rd Party package upgrades - 


  1. react-native-auth0
  2. react-native-onesignal
  3. @rnmapbox/maps
  4. react-native-document-picker swapped with react-native-documents/picker
    The older packages that were compatible were kept as it is.

Support for Node version 22 to support Vercel's Node engine upgrade. as 18 reached EOL.

NextJS Upgrade to 15.5.
Updated Sentry Configurations.

React Native Upgrade (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/230)
In-App Updates (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/230): Later app will automatically detects if there is any updates in the store & prompt user to Update.
Protected Areas Mobile (merged internally - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/193)
3rd Party Package Upgrades (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/230)
Settings API (merged internally - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/221, https://github.com/Plant-for-the-Planet-org/FireAlert/pull/220): APIs to display current status of the Alert Methods in the App.

Hotfixes
Notificaions CRON (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/231, https://github.com/Plant-for-the-Planet-org/FireAlert/pull/234)
Index Additions (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/233)

Biosphere - Wildfire - TypeScript
Published by rupamkairi 8 months ago

FireAlert - 2025-07-17

What's Changed

Natural Protected Areas

Protected Area Backend - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/208 & https://github.com/Plant-for-the-Planet-org/FireAlert/pull/223

  • APIs for Protected Site Search, Create, Update.
  • Updates for CreateNotifications for these sites (since new site’s userId is linked through SiteRelation table).
  • Site.userId is no longer mandatory & necessary changes.

Protected Area Mobile - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/193

  • Screens & UI For the Protected Areas
  • API Integration

Protected Area Data Import - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/207

  • Added a script to automate importing the natural protected areas dataset into a PostgreSQL database.
  • Introduced a Dockerfile and Docker Compose configuration for containerized execution of the import process.
  • Prisma Schema changes + Migrations

Biosphere - Wildfire - TypeScript
Published by rupamkairi 12 months ago

FireAlert - 2025-05-02

What's Changed

Notification Fixes

  • Updated disableCodes list
  • SMS & Whatsapp notification can be enabled using env variable switches. by default they are disabled due to some internal reasons.
  • New metadata & isSkipped field added, to store relevant informations for the notificaions.
  • Twilio Webhooks implemented
    • Initially sms status handled by existing logic
    • Upon handling Webhook's request metadata matches the twilio's status where isDelivered will be kept true if delivered status found else it will be turned to false.
  • Rewroked the Retry & Failure Handling
    • Max Retry is kept at 0 - means if fails to send notification won’t retry & skip.
    • On failed notification, method.failCount will be incremented & upon reaching a threshold method will be disabled.

Better handling of environment variables

  • Application will no longer require non-essential env variable to run, app will be able to run, but certain feature will be disabled & they will log accordingly.

Minor changes

  • Formatting, Type & Syntax fixes.
  • .prettierrc added for consistent formatting.

Full Changelog: https://github.com/Plant-for-the-Planet-org/FireAlert/compare/2025-03-25...2025-05-02

Biosphere - Wildfire - TypeScript
Published by rupamkairi about 1 year ago

FireAlert - 2025-03-25

What's Changed

Site Sync

Objectives

  1. For all projects that eligible for donations
  2. Bring those Projects & Users (& AlertMethods)
  3. Bring Sites of those Projects
  4. Enable monitoring for those Sites by default. If Site is deleted, dissociate from the project.

Cache Duration

Fixes Cache duration for previously released Fires API.
CDN Cache Control. 1 day
Browser cache 30 min
Corrected URL for caching

Biosphere - Wildfire - TypeScript
Published by rupamkairi over 1 year ago