Skip to content

v0.3.0

Choose a tag to compare

@jhotadhari jhotadhari released this 08 Aug 00:56
· 26 commits to main since this release

Complete rewrite with no backwards compatibility to previous versions. The app has been rebuilt around a spatial SQLite database and a Redux store with substantial performance improvements across the board, a new side-drawer panel system, and a new customizable dashboard. New capabilities include BRouter offline routing, full line management with tags, and Lines and Tags data browsers.

Added

  • Feature-based plugin architecture — 14 production features each contributing UI items, drawer panels, dashboard widgets, map components, and app overlays via a shared AppFeature contract and priority-sorted FeatureRegistry.
  • Redux Toolkit with 16 slices and a custom listener middleware for side-effect-driven persistence, state reactions, and cross-feature coordination.
  • Spatial SQLite database layer with drizzle-orm, op-sqlite, and libspatialite — LINESTRINGZ/POINTZ geometry columns (SRID 4326), R*Tree spatial indexes, React Query caching (staleTime: Infinity), drizzle-kit migrations, and dynamic database path configuration.
  • Centralized database error handling with withDbErrorHandling wrapper — try/catch + error toast + log across all DB actions.
  • Line management — full CRUD for geographic lines with tags (many-to-many, cascade deletes), per-line colours, multi-column filtering, bulk actions, batch export to GPX/KML/GeoJSON, system-protected tags, and data-table browsers.
  • BRouter offline routing — waypoint-based via react-native-brouter with per-point profile inheritance, segment-change optimization, DEM-based elevation enrichment, slope colour-ramp visualization, and route persistence across restarts.
  • GPX/KML/GeoJSON import — multi-step wizard with single-file and batch-directory modes, date extraction from 18 preset filename patterns, title and tag extraction via regex, overwrite handling (create/skip/replace), dry-run preview, and background processing via foreground service.
  • Shared foreground service — native BackgroundTaskService with thread-safe task registry, progress notifications, and auto-stop when idle.
  • Side drawers — left/right panels with reanimated gesture handling, sortable drag-and-drop ordering, and programmatic expand/collapse.
  • BidirectionalScrollHost — custom Fabric native view for simultaneous horizontal drawer drag and vertical list scrolling with native fling handling.
  • Dashboard — configurable widget grid with drag-to-reorder editing, per-widget visibility/font/size/unit controls, and widgets for coordinates, altitude, and zoom level.
  • Cache manager — lists all tile caches with sizes, per-layer associations, individual deletion, and sweep-all-unused action.
  • App updater — version comparison on app start with plugin-style migration callbacks, downgrade detection, and splash-screen progress.
  • Generic component library — controls (numeric, toggle, file-picker, colour, date-time), info-label wrappers, primitives (buttons, icons, badges, links), and layout wrappers (keyboard-avoiding modals, menus, lists).
  • User-configurable date/time display format via Day.js singleton with locale bundles for all 4 languages.
  • Native Android splash screen with dark/light theme variants and custom font title.
  • Custom icon font with automated build pipeline (yarn buildIcons) plus third-party font-gis icon set.
  • yarn sortI18n script keeping translation key order in sync across all languages.
  • yarn organizeImports script sorting TypeScript imports into external/internal blocks.
  • GitHub Actions CI/CD — builds APK+AAB on v* tags, signs with keystore secrets, attaches artefacts to the GitHub release.
  • Release automation via yarn publish — bumps versions, generates semver-based versionCode, releases the changelog, creates GitHub release, merges to main/development.
  • PRIVACY.md — permission disclosures, GDPR rights, data storage description, and contact info.

Changed

  • Architecture — restructured from flat component tree to self-contained feature modules, each with its own Redux slice, selectors, i18n, and extension-point registration.
  • State management — introduced Redux Toolkit with 16 slices and listener middleware for side-effect coordination.
  • Map rendering — migrated to react-native-mapsforge-vtm 0.8.0 with useMapPosition() Reanimated hook for 60fps coordinate reads at zero bridge cost, native GNSS filter on MapContainer, and DEM-based elevation enrichment.
  • i18n — expanded to 4 languages (en, de, es, pt) with per-feature translation files.
  • Performance — comprehensive React.memo/useCallback/useMemo sweep across all components. Per-line colour paint objects shared by reference (≤11 total). BidirectionalScrollHost native fling handling. TextInputNativeMultiline zero-layout-cycle auto-resize.
  • UI — settings panels and modals rebuilt on the generic component library with ModalWrapper keyboard-avoidance and blur backdrop. Paper Button styling standardized via useButtonProps composable.
  • Layers and profiles — sortable drag-and-drop lists with temp/commit editing to avoid map re-creation on every keystroke.
  • Database — React Query staleTime: Infinity (no auto-refetch, only manual invalidation after writes). withDbTransaction for atomic multi-statement writes.
  • Date/time — pre-configured Day.js singleton with user-configurable display format applied globally. Never bare dayjs imports.
  • Android permissions — added foreground-service, location, and notification permissions; storage permissions capped at SDK 28.
  • Build — targetSdkVersion/compileSdkVersion bumped from 34 to 36. metro.config.js transforms .md/.sql files. babel-plugin-inline-import for SQL. drizzle.config.ts auto-discovers schema files.
  • Logging — centralized error handling with toast notifications, no bare console calls anywhere.