Skip to content

Releases

Infans v2.5.0-rc1 (TEST — Summary UI refresh + timer sync fix)

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 07 Nov 19:10

TEST BUILD for the v2.5.0 release. Delete after testing.

Summary UI refresh (approved mock direction):

  • Live session card on the home screen (never stops the timer itself — one stop path)
  • Status strip: last feed / last diaper / sleep today
  • Quick log: 5 one-tap tiles with undo snackbar; diaper opens a bottom sheet
  • Plain-language sleep insight vs 7-day average (hides without data)
  • All new strings in English + Spanish

Ghost timer sync fix (c946428):

  • Timers resurrected after an app restart now force-stop properly when the partner ends the session
  • session_ended publish retries once on failure

NOT published to Zapstore. In-app auto-update ignores prereleases — v2.4.3 phones will not see this. Sideload the arm64 APK (Pixel 7 Pro / 10 Pro XL); universal APK for anything else.

Infans v2.4.3

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 07 Nov 04:20

Fixes

  • Timers: live sleep/feeding timers no longer vanish when a relay reconnect replays a stale stop event (starter sees the timer die while the partner still sees it running). 60 s clock-skew tolerance + event dedupe.

New

  • Spanish localization — full UI translation (505 strings, neutral Latin American Spanish). Android picks the language from system settings; sync keys stay language-stable so mixed-language phones keep syncing.

Improvements

  • ~36% smaller download — APKs are now split per CPU architecture; phones get the arm64 build (7.2 MB vs 11.8 MB).
  • Room 2.6.1 → 2.8.5, KSP2 build.

Same signing key as always — no re-login or migration needed.

v2.4.2

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 07 Nov 02:02
  • QR scanner is fully Google-free: ZXing decodes CameraX YUV directly, ML Kit removed
  • Screenshot protection (FLAG_SECURE) on by default, with a Settings toggle — blocks screenshots, screen recording, and recents preview
  • Key storage migrated off deprecated EncryptedSharedPreferences to direct AndroidKeyStore AES-256-GCM (one-time automatic migration)
  • TLS-only networking: LAN cleartext exception removed
  • Target/compile SDK 35 (Android 15)
  • Dependency refresh: AGP 8.7.3, Kotlin 2.1.0, Compose BOM 2025.01.00, CameraX 1.4.1, WorkManager 2.10.0

v2.4.1 — Timer & Sync Stability Fixes

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 06 Sep 15:44

Two bug fixes since v2.4.0:

  • Fix: sleep timer dying on tab switch — a stale forceStopTick was firing on recomposition, stopping running timers when you switched tabs. Timers now survive navigation.
  • Fix: reconnect after server-initiated websocket close — relays that drop the connection (idle timeout, restart) now trigger a clean reconnect instead of a dead sync until app restart.

No new features. No schema changes. Safe to update in place from v2.4.0.


Infans is a privacy-first baby tracking app with Nostr-based encrypted storage and parent-to-parent sync. No telemetry, no analytics, no tracking.

v2.4.0 - Vaccine Tracker, QR Pairing, Onboarding Wizard

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 28 Aug 19:40

What's New

Features

  • Vaccine tracker - Track vaccinations with type, date, next-due date, dose number, notes. New Vaccines tab in Health screen.
  • QR code partner pairing - Scan QR to link with other parent. Show My QR displays your code.
  • Partner pairing options - Three ways: QR scan, npub paste, NIP-05 paste.
  • Frictionless onboarding - Plain-English, one-tap key generation, QR-first pairing.
  • Onboarding wizard - 7-page guided flow with progress dots.
  • Sleep start/stop times - Cards show start-end range.
  • Export npub - Copy npub/NIP-05 to clipboard from Settings.
  • Default relay swap - nostr.oxtr.dev replaces relay.primal.net for new users.
  • Author tracking - Every entry shows which parent logged it.
  • Haptic feedback - Vibration on log buttons, toggle in Settings.
  • Key safety warning - Warns that losing key means data loss.

Bug Fixes

  • Cross-device timer sync - no more duplicate records
  • Sleep trend double-counting - dedup fix

Technical

  • DB migrations v4-v5 (authorPubkey) + v5-v6 (vaccines)
  • BackupPayload v3-v4 (vaccines)
  • New deps: ZXing, CameraX, ML Kit
  • CAMERA permission added

v2.3.1 — NIP-44 v2 Spec Compliance

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 26 Aug 13:03

NIP-44 v2 Spec Compliance + Disclaimers

Crypto Fixes (Nip44.kt)

  • AES-256-GCM to ChaCha20 + HMAC-SHA256 (RFC 8439)
  • Correct 2-phase HKDF: extract salt="nip44-v2", per-message expand info=nonce
  • Chunk-based padding with calcPaddedLen
  • MAC verification on decrypt with constant-time comparison
  • Minimum payload validation (99 bytes / 132 base64 chars)
  • ECDH uses raw x-coordinate via BouncyCastle

Tags/Docs

  • encrypted tag: "nip44" to "nip44v2"
  • README: Medical Disclaimer + Security Notice
  • zapstore.yaml: Medical Disclaimer + Security Notice

Tests

  • Nip44Test.kt: 19 tests including official spec test vector

Breaking Change

Old backups encrypted with AES-GCM (tag "nip44") will not decrypt with the new NIP-44 v2 implementation. Local Room database is unaffected. A fresh backup will be created on the next export.

v2.3.0 — Cross-Device Live Timer Sync

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 23 Aug 18:03

Live Timer Sync

Start a nap timer on one phone, stop it on the other. Both parents see the running timer in real time.

How it works

  • When you start a Sleep or Breast timer, an encrypted ActiveSession event is published to your partner via Nostr (kind 30078, NIP-44 encrypted)
  • Your partner phone receives it and shows the timer as running with a Started by partner badge
  • Either parent can stop the timer — the stopper creates the record and publishes a session-ended event
  • The other parent phone clears the timer automatically

Edge cases handled

  • Partner offline at start: timer appears with correct elapsed time on reconnect
  • App killed on starter phone: timer still displays on partner phone until stopped
  • Simultaneous stop: first event wins, deduped by sessionId

Technical

  • New ActiveSession data model (sessionId, label, childId, startTime, startedBy, alarmMinutes)
  • BackupService: publishSession/decryptSession/endSession
  • NostrManager: StateFlows for remote sessions, relay subscriptions, echo dedup
  • LiveTimer: accepts remoteSession, shows partner badge, either-side stop
  • No new dependencies, no new permissions, all on existing NIP-44 encryption infrastructure

Version: 2.3.0 (code 51)

v2.2.1 — Release signing for Zapstore

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 23 Aug 02:27

Signed with new release keystore (old one was rotated after accidental commit).

  • APK signed with RSA 4096 release key
  • Certificate SHA-256: f1b7cbc149675677f527837375b24b8283e8e944ef0bec46c10992b80f32ce90
  • versionCode: 50, versionName: 2.2.1

v2.2.0 — Custom relays, bath tracking, activity charts & security fixes

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 22 Aug 01:50

What's New

Custom Relays

  • Added a relay editor in Settings — users can now manually set their own relay list instead of relying solely on NIP-65 auto-discovery
  • One URL per line, with automatic normalization (bare domain → wss://, https:// → wss://, http:// → ws://)
  • Deduplication and validation on apply
  • Custom relays are saved and loaded on next launch without needing a NIP-65 fetch

Bath Tracking

  • Replaced the redundant Weight quick action on the home screen with a Bath quick action (Weight is still accessible via its bottom-nav tab)
  • New Bath screen with three bath types: Full Bath, Sponge Bath, Tub Bath
  • Optional note field, today's bath history with edit-time and delete per entry
  • Full sync pipeline: baths are included in the encrypted NIP-44 backup payload and restored on partner sync
  • Database migration 3→4 (adds baths table, all existing data preserved)

Activity Trend Charts

  • Charts screen now has two tabs: Growth and Activity
  • Growth tab: the existing WHO weight-for-age chart (unchanged)
  • Activity tab: new bar charts with period and metric selectors
  • Period options: Daily (7 days), Weekly (8 weeks), Monthly (6 months), Yearly (5 years)
  • Metric options: Feedings (count), Sleep (hours), Diapers (count), Baths (count), Pumping (ml total), Weight (entries), Milestones (count), Health Records (count)
  • Current period bar is highlighted; empty data shows a placeholder message
  • BarChart component extracted to a shared file for reuse

Baby Bottle App Icon

  • Replaced the crescent moon icon with a solid baby bottle silhouette (the moon was hard to make out at launcher size)
  • Icon background still follows the selected color theme

Bug Fixes

NIP-65 Relay Regression

  • Fixed a regression where users could only see hardcoded default relays instead of their NIP-65 relays
  • Root cause: the RelayPool always started with hardcoded defaults and relied on a background NIP-65 fetch to reconfigure. The applyIcon() call from the themed-icon feature could cause a process restart, killing the fetch coroutine before it completed
  • Fix: relays are now loaded from storage on startup so the pool starts with the correct relays immediately. applyIcon() now runs after initialization completes

Security Fixes

NIP-05 Identifier Leak in logcat

  • 5 Log.d/Log.e/Log.w calls were writing full NIP-05 identifiers to Android's system logcat, which can be captured in bug reports or read by apps with READ_LOGS permission
  • All 5 now truncate identifiers to 20 characters
  • The in-app debug log was already clean (uses truncated identifiers throughout)

JSON Backup Export Warning

  • Tapping "Export JSON Backup" now shows a confirmation dialog warning that the file is not encrypted
  • Dialog explains the file contains all tracking data in plaintext (child's name, feeding times, sleep logs, notes) but does NOT include the Nostr private key
  • Nothing exports until the user explicitly acknowledges

Notes

  • APK size: 28 MB (debug, unchanged)
  • Zero new dependencies added
  • Database version bumped to 4 (migration included)

v2.1.0 — Theme packs, UI polish & themed app icons

Choose a tag to compare

@TurkeyNostr TurkeyNostr released this 22 Aug 00:22

What's New

Theme Packs (7 color schemes)

  • Material You (system dynamic color, Android 12+)
  • Purple (default)
  • Ocean Blue
  • Forest Green
  • Rose Pink
  • Sunset Orange
  • Teal Mist

Settings → Appearance → Color Theme. Each option shows live color preview swatches.

Themed App Icons

The home-screen icon background now matches your selected theme color. The moon + star foreground stays the same; the background changes. The app restarts when you switch themes (expected — Android requires this to swap launcher icons).

UI Polish

  • Gradient hero card on the summary screen
  • Color-coded icons: feeding=primary, sleep=tertiary, diaper=secondary
  • Card elevation throughout for visual depth
  • Gradient bar chart fills
  • Icon circles with tinted backgrounds

App Icon

Replaced the default Android Studio smiley face with a crescent moon + star on a night-sky gradient. Clean, minimal, nighttime/calm theme.

Technical

  • Zero new dependencies — all theming uses existing Compose Material 3 APIs
  • All icons are vector XML (no PNG bloat)
  • APK size: 27MB (down from 28MB)
  • minSdk 26 (Android 8.0+)