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
AlertMethodMethodtype-only import — enum was erased at compile time, causing a silentReferenceErrorthat skipped all device notifications. Fixed to a value import.- Unfiltered notification iteration —
Promise.allwas iterating the originalnotificationsarray instead offilteredNotifications, 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 usefirealert://alert/:alertId, bypassing iOS Safari intercept.- Cold-start queuing — notification tap events are queued if
NavigationContainerisn't ready yet, then flushed ononReady. - Map zoom on tap — Home screen locates the tapped alert and calls
camera.setCameraviacalculateAlertCamera; skips default user-location zoom whenalertId/incidentIdis in params. - Re-tap support —
__tsnonce in deep-link params forcesuseEffectto re-fire on repeated taps. - OneSignal URL suppression —
OneSignal_suppress_launch_urls = trueadded to iOSInfo.plist, mirroring Android's existing config. - Platform config — Android intent-filters (
/incident,/verify,firealert://),MainActivity.onNewIntent; iOSAppDelegateURL bridging, app group entitlement, AASA headers via Next.js config; server serves/.well-known/apple-app-site-associationandassetlinks.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
clientApiKeyand rawdestination(PII) from log tags. - Fixed unsafe
(error as Error)casts witherror instanceof Errorguards. - 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
ajv6.12.6→6.14.0rollup4.54.0→4.59.0minimatch3.1.2→3.1.5flatted3.3.3→3.4.2node-forge1.3.2→1.4.0follow-redirects1.15.11→1.16.0brace-expansion1.1.12→1.1.14fast-xml-parser4.5.3→4.5.6lodash4.17.23→4.18.1yaml2.8.1→2.8.3picomatch2.3.1→2.3.2protocol-buffers-schema3.6.0→3.6.1
Tooling
.yarnrc: enabled--install.frozen-lockfile truefor reproducible installs.package-lock.jsonremoved — 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
- Reduced log noise and improved log messages for notification and cron flows.
- Makes it easier to spot important events (errors, merge stats, skipped notifications).
- Small performance and readability improvements in logging calls.
- PR: https://github.com/Plant-for-the-Planet-org/FireAlert/pull/321
-
PR #322 — refactor: restructure transaction logic in CreateIncidentNotifications
- Refactors CreateIncidentNotifications to use a clearer, safer transaction boundary.
- Ensures notification creation and related DB writes are atomic and less error-prone.
- Improves error handling and logging around the transactional steps.
- PR: https://github.com/Plant-for-the-Planet-org/FireAlert/pull/322
-
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
- PR #321 — https://github.com/Plant-for-the-Planet-org/FireAlert/pull/321
- PR #322 — https://github.com/Plant-for-the-Planet-org/FireAlert/pull/322
- PR #324 — https://github.com/Plant-for-the-Planet-org/FireAlert/pull/324
What's Changed
- Feature - Incident mobile details UI by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/302
- Feature - Fire Incident Mobile Features. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/299
- Feature/incident mobile UI fixes by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/304
- feat: integrate incident details stop-alerts flow with server feedback by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/305
- IOS Build Issue. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/311
- Merge - Incident Mobile UI Updates. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/303
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
- Feature - Incident mobile details UI by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/302
- Feature - Fire Incident Mobile Features. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/299
- Feature/incident mobile UI fixes by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/304
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
metadatacolumn toSiteIncidentvia migration to support structured per-incident data. Documents the planned proximity-based association model usingmetadata.centres({latitude, longitude, at}) and the strategy for selecting the closest active incident withinINCIDENT_PROXIMITY_KM. Existing stale-incident resolution and association logic inSiteIncidentService.tsis commented out as preparatory work, kept for reference. -
Enforce STOP_ALERTS notification suppression ([#295]): Skips incident and site-alert notifications when
reviewStatusisSTOP_ALERTS, logging suppressed counts per method. Adds unsubscribe token support to incident email notifications. AlignsreviewStatustyping and validation againstPrisma.SiteIncidentReviewStatusacross 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,IncidentMetadataServicefor parsing/initialising/updating centres (latest at index 0, capped at 100 entries), andSiteIncidentProximityServiceto orchestrate detection, creation, update, and alert association. ExtendsSiteIncidentRepositorywithfindActiveIncidentsBySiteIdandupdateIncidentMetadata. Integrates the proximity service intoSiteIncidentServiceto 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
- Feature: unsubscribe email by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/245
- Release - Unsubscribe for Emails. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/269
- HotFix - app crash fix due to in-app update edge case & notification onesignal notification permission by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/274
- Feature: Merged FireIndidents PRs into One. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/271
- [BASE] Fire Incidents by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/263
- feature : Fire Incident Automation - Updated CRON (geo-event-fetcher refactoredImplementation) by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/265
- feature : Fire Incident Notifications CRON (updated notification-creator & notification-sender) by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/266
- feature : Fire Incident Client Side - WebApp UI by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/264
- Merger - develop to main by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/281
- Fixes -
- Filter incidents to only include unprocessed alerts from last 2 hours by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/284
- matching key to tackle notification sender loop. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/285
- Hotfix - disabled email notificaiton for a while by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/287
- Batch process unlinked site alerts in CRON by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/288
- Hotfix - Enable Incident Notification on Emails by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/289
- Hotfix - Incident Notification Batching & Latest (6 hours) on Incidents. by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/290
- Refactor incident notifications to capture IDs and enable mapping by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/291
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
- feature(s) to develop - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/258
- [sync] main to develop - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/259
- [production] develop to main - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/261
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
- Refactor: geo-event-fetcher by kiro. (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/237): Refactored the geo-event-fetcher module to improve implementation structure and handler logic. Includes code reorganization and cleanup that prepares the fetcher for a more maintainable handler implementation.
- Feature: Steering docs for kiro. (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/238): Added steering documentation related to the geo-event-fetcher work (noted as part of PR #237). Provides guidance on steering/configuration that complements the refactor.
- Refactor Merge: geo-event-fetcher handler refactored implementation. (https://github.com/Plant-for-the-Planet-org/FireAlert/pull/254): Merge commit that integrates the refactored geo-event-fetcher handler implementation into the target branch, finalizing the handler refactor work.
PR Maps
- feature(s) to develop - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/237, https://github.com/Plant-for-the-Planet-org/FireAlert/pull/238
- [sync] main to develop - none
- [production] develop to main - https://github.com/Plant-for-the-Planet-org/FireAlert/pull/254
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 -
- react-native-auth0
- react-native-onesignal
- @rnmapbox/maps
- 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
- Merge: Fix - SMS Issue by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/195 & https://github.com/Plant-for-the-Planet-org/FireAlert/pull/219
- Merge: Feature/make env optional by @sagararyal in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/217
Notification Fixes
- Updated
disableCodeslist - SMS & Whatsapp notification can be enabled using env variable switches. by default they are disabled due to some internal reasons.
- New
metadata&isSkippedfield added, to store relevant informations for the notificaions. - Twilio Webhooks implemented
- Initially sms status handled by existing logic
- Upon handling Webhook's request
metadatamatches the twilio's status whereisDeliveredwill be kepttrueif delivered status found else it will be turned tofalse.
- 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
- Merge: Site Sync & Cache Duration by @rupamkairi in https://github.com/Plant-for-the-Planet-org/FireAlert/pull/203
Site Sync
Objectives
- For all projects that eligible for donations
- Bring those Projects & Users (& AlertMethods)
- Bring Sites of those Projects
- 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