• v0.25.1 f4ec39a5fa

    v0.25.1
    All checks were successful
    CI / dco (push) Successful in 6s
    CI / checks (push) Successful in 3m24s
    Release / create-release (push) Successful in 10s
    Release / web (push) Successful in 1m43s
    Release / android (push) Successful in 12m19s
    Stable

    EgorEast released this 2026-10-02 14:09:11 +00:00 | 28 commits to main since this release

    Added

    • Rework section slider card display
    • Show sermon form suggestions on field focus
    • Use checkmark save icon and hide edit pencil in edit mode

    Fixed

    • Regenerate API client from openAPI 0.18.2
    Downloads
  • v0.25.0 b78fe013c6

    v0.25.0
    All checks were successful
    CI / dco (push) Successful in 4s
    CI / checks (push) Successful in 4m16s
    Release / create-release (push) Successful in 9s
    Release / web (push) Successful in 1m39s
    Release / android (push) Successful in 10m23s
    Stable

    EgorEast released this 2026-10-01 22:21:55 +00:00 | 33 commits to main since this release

    Added

    • Admin-style edit mode for my playlists screen
    • Local section appearance settings for my playlists
    • Store sermon snapshots in local playlists
    • My playlists screen with header edit mode
    • Smart continue-listening play-all in playlist
    • Add to playlist menu item in sermon menus
    • Add to playlist modal with multi-select
    • Playlist membership actions in local playlists domain
    • Edit mode for my playlists reordering
    • Submit forms with Enter key
    • Dnd reordering for my playlists section
    • My playlists section on listen screen
    • Local playlists domain with favorites entry
    • Mirror releases to SourceCraft

    Changed

    • Debounce section settings persistence and sync form state
    • Compound skeletons, media skeleton fidelity, picker pagination
    • List rows use user-style press feedback without animation
    • Unify playlist/section/sermon list rows on shared ListItemBase

    Fixed

    • Themed colors for offline caching toggle
    • Themed cross-platform colors for offline caching toggle
    • Block favorites navigation in my playlists edit mode
    • Do not reseed local playlists storage on parse failure
    • Preserve stored favorites content across hydration
    • Favorites playlist shows its sermons
    • Use textShadow shorthand to silence deprecation warning
    • Disable playlist play-all button when nothing is playable
    • Disable offline menu actions for empty playlist
    • Commit playlist membership before persist to close lost-update race
    • Avoid nested button in draggable list rows on web
    • Normalize enter-submit guard and cover form context edge cases
    • Picker pagination trigger, load-more retry, review cleanups
    • My playlists drag list duplicates and persist error handling
    • Normalize playlist persistence via toPersistedPlaylist
    • Guard loadMyPlaylists against storage rejections
    • Symmetric save/restore contract and startup-guard reset
    • Input autofill hints and web scroll/tab-bar clearance
    • Use favorites playlist id without local prefix
    • Lock file maintenance
    Downloads
  • v0.24.0 f2c6483542

    v0.24.0
    All checks were successful
    CI / dco (push) Successful in 4s
    CI / checks (push) Successful in 3m33s
    Release / create-release (push) Successful in 7s
    Release / web (push) Successful in 1m28s
    Release / android (push) Successful in 10m14s
    Stable

    EgorEast released this 2026-09-30 22:29:45 +00:00 | 97 commits to main since this release

    Added

    • Required field markers and inline validation
    • Users screen header with create action
    • Media screen header, grid preview and orphans on top
    • Scrolling titles in list rows
    • Sort select and skeleton loading states
    • Navigate between related admin details and show playlist sections
    • Disable save button until form is dirty
    • Icons on library and upload picker buttons
    • User create/edit form with password change
    • Users list and detail
    • Media library with upload, delete and orphans cleanup
    • Sermon create/edit form with uploads
    • Sermon detail with media preview and delete
    • Sermons list with search, sort and pagination
    • Playlist create/edit form
    • Playlist detail with sermon reorder and delete
    • Playlists list with search, sort and pagination
    • Section create/edit form
    • Section detail with playlist reorder and delete
    • Sections list with drag reorder
    • Admin home screen and entry points
    • Admin login screen and /admin tab area
    • Secure token storage and auth entity
    • Add sound settings sheet with EQ, balance and pitch
    • Route unexpected update errors to the global error dialog
    • Tappable timecodes in sermon description seek the player
    • Classify update errors with dedicated error dialog actions
    • Add sermon caching toggle (#77)
    • Add playlist header menu to playlist bottom sheet

    Changed

    • Remove upload tab, create sermons from lists
    • Remove active tab background indicator
    • Inline all named type imports and ban the standalone form
    • Rename config/config to api-url
    • Import final files instead of barrels within layers
    • Use relative imports inside shared layer
    • Derive PlaylistData from schema in fetched types, drop @x ignore
    • Drop dead re-export lines from read barrel
    • Restore generated api star exports without dead db re-exports
    • Keep star exports for generated api barrels (documented exemption)
    • Inline single-use props types per agent rules
    • Use named re-exports in barrels instead of star exports
    • Finish export cleanup in listening-history and offline-cache
    • Delete dead state machinery and wire setOnlineStatus
    • Prune unused exports across slices
    • Make useDebounce deps-driven and drop its useCallback wrappers
    • Delete utilities with no consumers or duplicates
    • Adopt useDebounce and isNonNullable instead of inline duplicates
    • Delete dead files reported by knip
    • Move track-list components into ui segment

    Fixed

    • Safe-area on media and users tabs
    • Dim placeholders in picker search inputs
    • Keyboard-aware form scrolling
    • Dim placeholders and primary focus outline on inputs
    • Picker order, button label size and group spacing
    • Move delete actions into detail screen headers
    • Pickers safe-area, close button, back gesture and inline upload buttons
    • Detail screens header edit actions and stable shield icon
    • Editable URL fields with pencil toggle and muted placeholders
    • Floppy save icon, complete headers and group spacing in forms
    • Use full form titles in screen headers
    • Navigate within admin area from detail screens
    • Fix axios comment, tighten itemsRows parsing
    • Clear tokens only on 401/403 in restoreSession
    • Pin create button, add list bottom inset
    • Move underscore hooks out of app/ to stop route warnings
    • Settings kebab menu, render loop guard, compact admin entry and login flow
    • Show admin panel button only for authenticated admins
    • Enforce inline type imports and autofix violations
    • Forbid shared alias inside shared, document the rule
    • Address review nits (debt entry, docstring, import style)
    • Stop evaluating app.config.ts and treat read-tab WIP as entry
    • Ignore intentional keeps (generated api, read tab WIP) and stale entries
    Downloads
  • v0.23.1 8abedf39f0

    v0.23.1
    All checks were successful
    CI / dco (push) Successful in 6s
    CI / checks (push) Successful in 2m35s
    Release / create-release (push) Successful in 5s
    Release / web (push) Successful in 1m34s
    Release / android (push) Successful in 11m22s
    Stable

    EgorEast released this 2026-09-26 20:44:35 +00:00 | 191 commits to main since this release

    Changed

    • Route cross-entity imports through @x seams
    • Move listen navigation into pages and dissolve settings entity
    • Move player and track-list domain UI out of shared/ui
    • Extract playlist and section domains into entities
    • Extract sermon and offline-cache entities from shared

    Fixed

    • Ignore expo-dev-client launch URLs in cold-start link recovery
    • Add structural predicate for nested playlist sermons validation
    • Harden share cancel taxonomy, time-box pending guard, fix triple-scheme path parse
    • Recover cold-start deep links lost to expo-router's 150ms race
    • Replace built-in Unmatched screen to fix resolveScheme crash
    • Prefer share sheet over clipboard when Web Share API exists
    Downloads
  • v0.23.0 9e99b3fd24

    v0.23.0
    All checks were successful
    CI / dco (push) Successful in 4s
    CI / checks (push) Successful in 2m34s
    Release / create-release (push) Successful in 5s
    Release / web (push) Successful in 1m32s
    Release / android (push) Successful in 10m39s
    Stable

    EgorEast released this 2026-09-26 14:00:25 +00:00 | 204 commits to main since this release

    Added

    • Web share fallback and placeholder guard for playlist sharing
    • Add share playlist menu item with web deeplink
    • Pin web app id and launch_handler for link capture
    • Haptic seek feedback, slider UX and settings improvements
    • Collapsible server URL accordion
    • Haptic feedback toggle
    • Live time preview while dragging seek slider
    • Lighter selection haptic for seek slider tick
    • Haptic tick while dragging fullscreen seek slider
    • Serve android app links verification file on web
    • Claim app.slovo-propovedi.ru app links for listen routes
    • Resolve playlist by id from api on app link cold start
    • Apply native customizations via config plugins
    • Auto-start player titles only; sliders keep drag-gated marquee
    • Auto-start marquee on overflow, drop drag-arm gate
    • Notify session when model failover activates
    • Production failover — hard-quota attempt-1 activation via retry+http.response hooks
    • Adaptive model failover for profile plugin (quota errors)
    • Add pulse animation to all skeleton components
    • In-session /profile switcher plugin

    Changed

    • Validate playlist id via uuid.validate
    • Validate EXPO_PUBLIC env with zod, drop defaults
    • Address review minors
    • Tighten lint-block guard to own output
    • Key prebuild idempotency guards on own output
    • Enable Reanimated sync UI-props fast path
    • Stabilize marquee against player position re-renders
    • Replace react-native-text-ticker with MarqueeText wrapper
    • Drive collapsing navbar bg opacity on the UI thread
    • Pause glow ring while fullscreen player is expanded or animating
    • Pause glow ring animation while scrolling, unfocused, or offscreen
    • Virtualize horizontal sliders in shared Slider component

    Fixed

    • Actualize generated schemas
    • Restore dev-client scheme launch and pin debug keystore across prebuild
    • Format gobal mock files
    • Per-flavor custom schemes to avoid dev/prod conflict
    • Verify dev flavor via multi-package assetlinks
    • Ignore micro-movements while dragging seek slider
    • Harden playlist deep-link id validation and resolver errors
    • Make commit-msg hook sed portable across GNU and BSD
    • Resolve ThemeContext casing collision breaking tsc and jest
    • Make settings save button follow theme toggles
    • Keep box-none overlays pointer-transparent so page and tab bar stay interactive
    • Replace deprecated React Native APIs in dev warnings sweep
    • Add expo-system-ui package
    • Reset details overlay state on collapse and back navigation
    • Prevent swipe-to-collapse when details overlay is open
    • Resume marquee clock after jitter or cancelled gesture
    • Marquee container stretch-invariant; centered fullscreen titles
    • Smooth marquee on Android via frame-clock loop
    • Restore search toggle position after touch-target change
    • Enforce 48x48 minimum touch target for all icon buttons
    • Enlarge back and player-collapse tap targets to 48x48
    • Clean up stale MarqueeText references after #98
    • Make playlist list item title multiline (#98)
    • Use section name in player subtitle for single-sermon playlists
    • Always open playlist page on tap, even for single-sermon playlists (#96)
    • No press dim blink on already active tab
    • No haptic feedback on already active tab
    • Ignore tap on already playing sermon (#99)
    • Hand over playlist-list navbar title at title center like playlist (#108)
    • Compute playlist-list title threshold without layout y (#108)
    • Change reviewer model in opencode profile configs
    • Show playlist-list navbar bg only near title threshold (#108)
    • Reset scroll flag on unmount and harden glow pause tests
    • Bound failover error-body read to 2KB
    • Guard reload failures in failover revert and startup
    • Harden profile failover (review fixes)
    • Clamp section itemsRows and harden slider flat-list
    • Pin markdown-defined subagents via frontmatter, not registry
    • Add omc config
    • Keep plan/build on switchModel; add /profile- hints
    • Migrate config to V2-native schema; move agent permissions to markdown agents
    • Ignore kotlin build artifacts
    • Use system Virtual_Key haptic on Android
    • Add ocx and opencode configs
    Downloads
  • v0.22.0 2c66272c2f

    v0.22.0
    All checks were successful
    CI / dco (push) Successful in 4s
    CI / checks (push) Successful in 2m26s
    Release / create-release (push) Successful in 9s
    Release / web (push) Successful in 1m42s
    Release / android (push) Successful in 10m53s
    Stable

    EgorEast released this 2026-09-19 21:55:45 +00:00 | 306 commits to main since this release

    Added

    • Delete superseded partials and re-download stale ones (#109)
    • Stream network on seek past partial while downloading (#109)
    • Play partial source on offline seek (#109)
    • Pause at partial-buffer edge instead of advancing (#109)
    • Treat partial downloads as offline-only fallback with full timeline (#109)
    • Play partially downloaded tracks offline (#109)
    • Auto-resume playback after network restore when stream stalled offline (#109)
    • Keep buffered download progress visible while offline (#109)
    • Mouse drag scrolling for content slider
    • Add tactile feedback to interactive elements
    • Context menus close on escape
    • Dialogs join the escape stack and backdrops lose focus
    • Lifo escape layering via shared escape stack
    • Esc closes search regardless of input focus
    • Esc clears query before closing search
    • Add IconButton and TouchableButton primitives
    • Real buttons for Vimium hints and Esc closes modals
    • Keyboard controls for fullscreen player (web)
    • Add PressableButton and migrate role-button Pressables
    • Add reusable useHeaderTitle hook
    • Let Listen screen content scroll under nav bar inset
    • Transparent Android navigation bar with theme-following glyphs
    • Add offline sermons screen with download registry
    • Add track list skeleton loading states

    Changed

    • Drop unused barrel export and pin web heal ordering (#109)
    • Split PlayerService into native and web folders
    • Convert service worker promise chains to async/await
    • Extract shared escape-key hook and predicate
    • Reviewer follow-ups for button primitives
    • Drop redundant Text wrapper around control button icon
    • Adopt TouchableButton across TouchableOpacity call sites
    • Migrate icon-only buttons to IconButton
    • Migrate remaining role-buttons to PressableButton and label icon buttons
    • Extract seek end-buffer constant and harden unmount test
    • Simplify skeleton attachment to single expression
    • Inline cache action item literals
    • Reuse CACHE_ACTION_ITEMS for playing menu item
    • Expose skeletons via composition API
    • Gate sheet reveal on scroll convergence
    • Make TracksListItem the single base row
    • Rebrand cache wording and icons to offline
    • Relocate clear-cache action to shared audio-cache
    • Extract shared MenuDropdown component

    Fixed

    • Hydrate offline registry before startup partial sweep (#109)
    • Stop killing in-flight partial downloads on seek and progress flash (#109)
    • Swap partial source for cached file on seek (#109)
    • Keep full duration stable across partial source swaps (#109)
    • Key offline-seek resume on stall flag and playing state (#109)
    • Swap partial source for completed file on resume (#109)
    • Retain partials across sessions and sweep legacy part files (#109)
    • Align stall-flag docs and guard isCached rejection (#109)
    • Keep buffering bar alive and auto-recover after network restore (#109)
    • Keep download bar monotonic across download restart (#109)
    • Allow offline playback of partially buffered sermon (#109)
    • Re-assert lock screen metadata after reconnect heal (#109)
    • Cap jest workers and linter concurrency for low-resource machines
    • Honor internet reachability for online signal and reconnect re-caching (#109)
    • Resume auto-caching and heal stream on network restore (#109)
    • Keep MarqueeText static row at marquee width to stop word-wrap vanishing
    • Resume from cached file when download completed mid-track (#107)
    • Cancel stale resume reapply and keep visibility watcher alive (#106)
    • Align expo packages with SDK 57 expectations
    • Restore position and media session after iOS interruption (#106)
    • Harden drag guards and unify marquee web activation
    • Make marquee titles draggable with mouse on desktop
    • Use vibrator-based light impact on Android
    • Mark marquee predicates as worklets
    • Document the web:preview port change to 4173
    • Strip unused RECORD_AUDIO permission on Android
    • Anchor dropdowns in viewport coords and clamp to window
    • Gate auto-scroll behind a real drag, geometric eligibility
    • Error modal closes on escape instead of copying
    • Derive ios.buildNumber in Expo config
    • Derive android versionCode in Expo config and assert it in CI
    • Guard RNGH pointer release against stale pointer ids
    • Un-nest mini player row from inner buttons
    • Make modal backdrop a role-less pressable
    • Guard RNGH pointer capture against stale pointer ids
    • Real button + pan-guard for fullscreen close chevron
    • Align fullscreen controls with tab bar bottom padding (#105)
    Downloads
  • v0.21.2 2d91120079

    v0.21.2
    All checks were successful
    CI / dco (push) Successful in 4s
    CI / checks (push) Successful in 2m20s
    Release / create-release (push) Successful in 5s
    Release / web (push) Successful in 1m29s
    Release / android (push) Successful in 10m37s
    Stable

    EgorEast released this 2026-09-15 21:00:00 +00:00 | 405 commits to main since this release

    Added

    • Source API/landing/web/docs hostnames from env vars

    Fixed

    • Restamp patches for installed package versions
    • Stop orval overwriting hand-written generated index
    • Update api generating script
    • Remove unused EAS Cloud build tooling
    • Silent playlist caching progress notifications, sound only on completion (#101)
    • Lock file maintenance
    • Update gradle to v9.7.1
    Downloads
  • v0.21.1 1ac25213d0

    v0.21.1
    All checks were successful
    CI / dco (push) Successful in 7s
    CI / checks (push) Successful in 2m15s
    Release / create-release (push) Successful in 11s
    Release / web (push) Successful in 1m20s
    Release / android (push) Successful in 10m1s
    Stable

    EgorEast released this 2026-09-12 21:56:58 +00:00 | 434 commits to main since this release

    Changed

    • Subscribe to download state per row
    • Resolve 7 tech debt items and apply review fixes

    Fixed

    • Eliminate overlay re-render storm during background download (Issue #100)
    • Accept getter-based module exports in notifications guard
    • Add update download timeout and centralize reanimated mock
    • Use full app name "Слово.Проповеди" in manifest and meta tags
    • Close search cache write race and remove dead code
    • Restore saved mute volume (0) on app restart
    • Re-apply saved volume after track load
    Downloads
  • v0.21.0 39ee6cef59

    v0.21.0
    All checks were successful
    CI / dco (push) Successful in 7s
    CI / checks (push) Successful in 2m13s
    Release / create-release (push) Successful in 9s
    Release / web (push) Successful in 1m27s
    Release / android (push) Successful in 11m59s
    Stable

    EgorEast released this 2026-09-09 20:57:39 +00:00 | 449 commits to main since this release

    Added

    • Mark-as-listened/remove-from-history in sermon and playlist menus (#84)
    • Global serial queue with cancellation and reactive stop UI (#83)
    • Disable add-to-cache actions when offline
    • Global info dialog (ConfirmDialog-based) for offline playback guard
    • Wire row and fullscreen cache toggles through progress helper
    • Unified per-URL download progress protocol for manual caching
    • Web MediaSession with metadata, seekbar and ±10s controls

    Changed

    • Extract listening-history actions from model/history.ts into lib/
    • Confine re-exports to slice-root barrels (#83)
    • Show locked-tab notice via global info dialog

    Fixed

    • Defer expo-router onUnhandledLinking to silence pre-mount setState warning
    • Make immediate history flushes upsert and supersede manual marks
    • Eliminate lost-update race between listening-history actions
    • Drop deprecated @testing-library/jest-native
    • Reactively disable cache clearing while downloads are active (#83)
    • Reactive cached-url registry to kill completion flicker and rescan storms (#83)
    • Pre-validate batch enqueue and abort-unaware join chokepoint (#83)
    • Offline guard for playing uncached tracks (#81)
    • Cache track when starting playback on web (#81)
    • Theme-aware update modals with accent colors
    Downloads
  • v0.20.0 acc46473d3

    v0.20.0
    All checks were successful
    CI / dco (push) Successful in 4s
    CI / checks (push) Successful in 2m11s
    Release / create-release (push) Successful in 6s
    Release / web (push) Successful in 1m19s
    Release / android (push) Successful in 9m45s
    Stable

    EgorEast released this 2026-09-06 22:29:17 +00:00 | 475 commits to main since this release

    Added

    • Versioned SW precache with user-confirmed static updates

    Changed

    • Extract cache summary and scope enumeration guarantee (#78)

    Fixed

    • Skip manifest build in web cleanup to avoid bucket enumeration (#78)
    • Address review of journal liveness and replay coverage (#78)
    • Make web orphan cleanup multi-tab safe via journal liveness (#78)
    • Replay inflight progress to late joiners on web (#78)
    • Harden sw manifest guard and polish cleanup after review
    • Sequence orphan sweep before player restore and harden journal
    • Purge orphaned partial downloads after unclean app shutdown (#78)
    • Only commit fully downloaded tracks into audio cache (#78)
    • Skip cached tracks and recover audio cache bucket on iOS PWA crash (#78)
    Downloads