commits
- Reduce iOS background location battery usage
- Refactor iOS sheet state into unified state machine
- Fix iOS friend name editing crash
- Use Rust core geocoding on iOS
- Add Android docs page with F-Droid repo and Obtainium setup
- Replace "Coming soon" with F-Droid badge in download popup
- Update intro page with actual download links
Core:
- Region-aware reverse geocoding in Rust
- City/boundary data pipeline with Natural Earth polygons
Android:
- Back button navigation on all screens
- Name editing for profile and friends
- Use Rust geocoding via uniffi bindings
iOS/Android:
- Preserve last known location when decryption fails
nixpkgs: 72ac591 (Jan 17) → 078d69f (Jan 22)
Includes recent fixes from Jan 8:
- switch-to-configuration-ng: add timeout to systemd daemon reload/reexecute
- switch-to-configuration-ng: fix systemd reexec/reload D-Bus signal handling
nixpkgs: 72ac591 (Jan 17) → 078d69f (Jan 22)
Includes recent fixes from Jan 8:
- switch-to-configuration-ng: add timeout to systemd daemon reload/reexecute
- switch-to-configuration-ng: fix systemd reexec/reload D-Bus signal handling
If a friend removes us from their share list, keep showing their
last known location rather than reverting to 'No location'. This
prevents the removed user from knowing they've been removed (safety).
- Create reusable EditNameDialog composable
- Hook up friend name editing via updateFriend Rust core function
- Hook up profile name editing via identityStore
- Clear marker icon cache when friend name changes (updates initial)
- Add find_nearest_city_in_region() that uses polygon boundaries to
filter cities by administrative region before finding nearest match
- Embed Natural Earth 10m admin boundaries (4.2MB, 3303 regions)
- Add preprocessing pipeline (core/geo/) to update city regions from
polygon data and normalize region names (Québec, Lisboa, etc.)
- Point-in-polygon lookup with bounding box optimization
- Falls back to unfiltered nearest city for coastal/unmatched areas
- Remove cities.json from Android assets (now in Rust core)
- Add gdal, unzip, python+shapely to nix dev shell for preprocessing
- Add BackHandler to AddFriendScreen (step navigation + dismiss)
- Add BackHandler to LocationSettingsScreen (dismiss to map)
- Add BackHandler to OnboardingScreen (page navigation)
- Add BackHandler to ShareBackScreen (dismiss to map)
- Add BackHandler to MapScreen edit mode (exit edit on back)
- Add debug build branding: "Coords Dev" name + red icon
- Add Android Studio to dev shell for interactive development
- Add proguard rule for errorprone annotations
- Server config in deploy/coord.is/ (networking.nix excluded - contains origin IP)
- CF API token encrypted with agenix
- Auto-deploy from flake at 03:00 UTC (before fdroid-update at 04:30)
- Added nixosConfigurations.coord to flake
CI builds now use date-based versions (e.g., 2026.1.24 / 20260124).
Debug builds use .dev app ID suffix for side-by-side installation.
- Create /root directory before ~/.ssh in CI container
- Remove unsupported SVG and unnecessary PNG from drawables
- Create /root directory before ~/.ssh in CI container
- Remove unsupported SVG and unnecessary PNG from drawables
Unprivileged containers can't create TUN devices, so use SOCKS5
proxy mode instead. SSH routes through the proxy via ProxyCommand.
- Connect to headscale tailnet for secure upload
- Build APKs then rsync to coord staging directory
- Nightly fdroid-update service promotes yesterday's build
- Enable R8 minification and resource shrinking for release builds
- Add ABI splits to produce per-architecture APKs
- Add ProGuard keep rules for JNA and UniFFI (required for native bindings)
- Gitignore jniLibs build artifacts
- Add android-toolchain flake package for CI builds
- Add Spindle workflow for Android release builds
- Configure Gradle release signing from environment variables
- Update SDK to 36, deduplicate flake devShell
- Gitignore keystore files
- Add binary wire format for location data (~60% smaller than JSON)
- i32 microdegrees for lat/long (~11cm precision)
- i16 meters for altitude (±32km range)
- u16 meters for accuracy
- u64 milliseconds for timestamp
- Add altitude field throughout the stack (Rust core, iOS, Android)
- Create Protocol documentation page with wire format specification
- Update self-hosting docs with deployment guidance
- Add download modal with TestFlight link
Privacy-preserving location sharing with end-to-end encryption.
- Rust core library with X25519/Ed25519 crypto and AES-256-GCM encryption
- Native iOS app (SwiftUI)
- Native Android app (Jetpack Compose)
- Relay server (Axum)
- Astro documentation website
The server is an untrusted relay that stores only encrypted blobs it cannot
decrypt. All cryptographic operations happen client-side.
- Add find_nearest_city_in_region() that uses polygon boundaries to
filter cities by administrative region before finding nearest match
- Embed Natural Earth 10m admin boundaries (4.2MB, 3303 regions)
- Add preprocessing pipeline (core/geo/) to update city regions from
polygon data and normalize region names (Québec, Lisboa, etc.)
- Point-in-polygon lookup with bounding box optimization
- Falls back to unfiltered nearest city for coastal/unmatched areas
- Remove cities.json from Android assets (now in Rust core)
- Add gdal, unzip, python+shapely to nix dev shell for preprocessing
- Add BackHandler to AddFriendScreen (step navigation + dismiss)
- Add BackHandler to LocationSettingsScreen (dismiss to map)
- Add BackHandler to OnboardingScreen (page navigation)
- Add BackHandler to ShareBackScreen (dismiss to map)
- Add BackHandler to MapScreen edit mode (exit edit on back)
- Add debug build branding: "Coords Dev" name + red icon
- Add Android Studio to dev shell for interactive development
- Add proguard rule for errorprone annotations
- Add binary wire format for location data (~60% smaller than JSON)
- i32 microdegrees for lat/long (~11cm precision)
- i16 meters for altitude (±32km range)
- u16 meters for accuracy
- u64 milliseconds for timestamp
- Add altitude field throughout the stack (Rust core, iOS, Android)
- Create Protocol documentation page with wire format specification
- Update self-hosting docs with deployment guidance
- Add download modal with TestFlight link
Privacy-preserving location sharing with end-to-end encryption.
- Rust core library with X25519/Ed25519 crypto and AES-256-GCM encryption
- Native iOS app (SwiftUI)
- Native Android app (Jetpack Compose)
- Relay server (Axum)
- Astro documentation website
The server is an untrusted relay that stores only encrypted blobs it cannot
decrypt. All cryptographic operations happen client-side.