• fraujulian released this 2026-09-15 17:12:04 +00:00

    Production 0.4.0

    Docker Images

    • git.lechner-systems.at/justqueer/api:0.4.0
    • git.lechner-systems.at/justqueer/web:0.4.0

    Zusätzlich zeigen beide Images mit dem Tag latest auf diesen Build.

    Commits seit dem letzten Release

    • 3e261d7 chore(preview): remove outdated chat layout screenshot
    • 2102d68 feat(audio): unify voice message players in chats and posts
    • 3e0f873 chore(design): add chat layout reference
    • 67e72a9 docs(chat): document encryption calls and view-once behavior
    • bca36e8 docs(composer): describe inline post editing
    • 6e87a37 build(web): disable static asset compression in debug
    • 8abfe51 fix(stories): refresh playback and route replies to encrypted chat
    • 8616811 feat(composer): integrate media previews and editing workspace
    • 57df24c feat(stories): refine drawing text and sticker editors
    • 2c8f251 feat(stories): add crop controls and color picker
    • 55ee0bf feat(stories): add font administration and font loading
    • a25c53b feat(media): filter native galleries and preserve selections
    • cab996c feat(chat): integrate accessible conversation layout
    • c5f22d7 feat(client): expose encrypted chat and story font APIs
    • 0fcaef7 feat(stories): validate and render custom fonts and crops
    • 1d1c2e9 feat(stories): extend crop and text layer contracts
    • 0e3fbc9 fix(android): restrict WebView media permission requests
    • 26fe114 feat(chat): protect view-once media on Android
    • 072c4d3 feat(chat): persist Signal sessions and encrypted media
    • 3403cc7 feat(chat): enforce encrypted messaging and retention
    • 5a4b970 feat(calls): add self-hosted encrypted call support
    • 0ca22ed feat(chat): add encrypted delivery and media endpoints
    • f71bf20 feat(chat): add encrypted messaging model and migrations
    • 1afb5dd build(calls): vendor LiveKit browser runtime
    • 6e3126d build(chat): vendor Signal WebAssembly runtime
    • 7b7d966 build(chat): add Signal and LiveKit dependencies
    • 2e13924 ci: set release status by repository
    • e2e4a48 ci: validate app release access
    • 658eb51 Merge remote-tracking branch 'origin/main'
    • d492571 feat(maui): separate app flavors
    • cb343e4 ci: disable scheduled production deploy
    • 4ef4612 test(ui): cover composer interactions
    • 0f275e5 test(api): cover story composition changes
    • 9ba8750 style(composer): update editor presentation
    • bf6fd7b feat(composer): refine editor interactions
    • 34192d5 feat(composer): update server story pipeline
    • c48bb80 ci: publish releases to app repository
    • c81c338 docs: organize project knowledge base
    • bf0a675 Update src/JustQueer.Maui/MauiProgram.cs
    • 2e2ed5c Update src/JustQueer.Maui/MauiProgram.cs
    • 78a6fc7 reworked: story and post creation - part 3
    • b6baf68 reworked: story and post creation - part 2
    • cfcf231 reworked: story and post creation - part 1
    • e8f9efc refactor: delete unnecessary files
    • c8d1cd9 test(composer): align resolved interaction contracts (SC-UX-07, SC-UX-12)
    • e5d6cdf fix(composer): reveal preview on wide screens (SC-UX-28)
    • 3e69bcb fix(composer): preserve native interaction semantics (SC-UX-27)
    • c7a8de5 fix(story): use layout-independent layer keys (SC-UX-26)
    • 3760af1 fix(composer): describe supported mentions flow (SC-UX-25)
    • f744158 fix(composer): remove redundant more action (SC-UX-24)
    • e28bac2 test(composer): add mobile touch projects (SC-UX-23)
    • 93af5b1 fix(story): reflect layer action limits (SC-UX-22)
    • fb7666a fix(story): reject unsupported catalog stickers (SC-UX-21)
    • d13f52b fix(story): label gallery design action truthfully (SC-UX-20)
    • 9c8587e fix(composer): expose search and catalog states (SC-UX-19)
    • eee7c2d feat(composer): preview selected music track (SC-UX-18)
    • 65e8a37 feat(composer): preview text and filters in sheets (SC-UX-17)
    • 8475d45 feat(composer): edit captions as timed cues (SC-UX-16)
    • ecd7c75 fix(story): make remaining gestures discoverable (SC-UX-15)
    • 269876b fix(camera): require deliberate hold to record (SC-UX-14)
    • c2f969f fix(camera): remove hidden viewport gestures (SC-UX-13)
    • ec5c32b fix(composer): expand small touch targets (SC-UX-12)
    • 788d86e fix(composer): explain invalid poll and sticker fields (SC-UX-11)
    • a42909c fix(composer): keep error focus in opened sheet (SC-UX-10)
    • 47fefb6 fix(composer): map every API validation field (SC-UX-09)
    • f938f40 fix(composer): show rejected media in every flow (SC-UX-08)
    • 8bd8088 fix(composer): stack feedback above actions (SC-UX-07)
    • 2c53f32 fix(story): preserve drawing appearance (SC-UX-06)
    • 09584ab fix(composer): use browser timezone for local dates (SC-UX-05)
    • 18b0718 fix(story): expose native video playback (SC-UX-04)
    • a1178aa fix(composer): snapshot publish before yielding (SC-UX-02)
    • cb39cb8 fix(composer): keep media busy until buffered (SC-UX-03)
    • ce6a48b fix(composer): lock workspace while publishing (SC-UX-02)
    • d432728 fix(composer): unify modal lifecycle (SC-UX-01)
    • ea61016 cleanup: delete unused files
    • f6363ec test(composer): retire stale source assertions (CP-25)
    • 1ba110f test(composer): validate rendered user flows (CP-25)
    • 960fdf0 fix(story): fit tools in the initial viewport (CP-21)
    • 7e7cb59 fix(story): expose layer and sticker limits (CP-26)
    • f7ca14a fix(composer): use native choice semantics (CP-27)
    • e118ef4 fix(composer): remove placeholder modes (CP-24)
    • a8ccb4d fix(story): hide invalid gallery multi-select (CP-22)
    • d9633d1 fix(composer): focus real validation targets (CP-19)
    • e66aa65 fix(composer): enforce people selection limits (CP-18)
    • 4700f31 fix(composer): stop camera while gallery is open (CP-23)
    • 07d8cd1 fix(composer): persist camera booleans faithfully (CP-20)
    • cada670 fix(composer): ignore stale search responses (CP-17)
    • fdd6ad9 fix(story): unify layer undo history (CP-15)
    • a780bca fix(composer): preserve complete post edit metadata (CP-14)
    • a88a338 fix(composer): track dirty state from snapshots (CP-13)
    • 3f4467b fix(composer): isolate state across modes (CP-12)
    • 81fb0ae fix(story): replace base media in the editor (CP-11)
    • b8fc277 fix(composer): accept valid files from mixed batches (CP-16)
    • 2845340 fix(composer): block publish while media loads (CP-10)
    • 1be59de fix(composer): validate per-file media limits (CP-09)
    • ab42d8b fix(story): use composition byte limit for layouts (CP-08)
    • 66144fb fix(composer): limit video duration only for stories (CP-07)
    • 9456899 fix(story): keep composer canvas at 9 by 16 (CP-06)
    • 1ec7204 fix(story): bind accessibility captions to payload (CP-05)
    • 5e4fee4 fix(composer): scope drafts by surface and intent (CP-04)
    • 81a7c3b fix(composer): persist complete draft state (CP-03)
    • 4bec0f9 fix(story): project active interactive elements (CP-02)
    • e0b5552 fix(composer): bind dynamic string parameters (CP-01)
    • 9ec9037 refactor(camera): move zoom into settings
    • 51b0060 style(camera): match reference control spacing
    • 38b1c7c style(composer): align reference proportions
    • 17a6fcc feat(camera): mirror reference mode rail
    • 285c25c feat(composer): match reference gallery actions
    • eee2ff0 docs(design): add composer references
    • bb178f8 test(composer): assert phone canvas width
    • 2d710c8 refactor(composer): reuse overlay color tokens
    • 289a87a fix(camera): keep unavailable state usable
    • c917657 fix(composer): restore gallery header actions
    • 7cc42e8 fix(android): request complete media access
    • d409c72 fix(apple): include media library on catalyst
    • f794bd1 test(composer): update gallery browser flows
    • 86ec981 fix(camera): preserve readable mode labels
    • c793c87 feat(camera): switch formats with horizontal swipe
    • c7df520 feat(apple): browse photo library assets
    • 2d32d05 refactor(media): reuse bounded browser files
    • c24c806 feat(android): browse device media library
    • 03bcb74 feat(media): request photo library access
    • 8a956aa feat(composer): add reference media galleries
    • 199af73 feat(media): define gallery browsing contract
    • b0c4078 feat(camera): match reference capture controls
    • 8931e7a feat(composer): constrain workspace to phone frame
    • f127784 test(composer): align story text e2e action
    • d736340 feat(composer): keep sheet actions reachable
    • b053d44 feat(stories): cycle overlapping layer selection
    • 797bcd8 fix(stories): guard unsaved text edits
    • fb7bdaa feat(composer): add direct crop gestures
    • 807b102 fix(media): preserve uncropped original aspect
    • 5831d21 feat(stories): add accessible layer list
    • 5fc9d26 feat(composer): complete media preview paging
    • 6025d24 feat(stories): add direct text editing gestures
    • 94c18c4 feat(composer): add sheet dismissal gestures
    • 491c2ef fix(composer): render confirmed gesture updates
    • 9813113 feat(composer): add direct media reordering
    • c4135a6 fix(stories): preserve confirmed canvas transforms
    • d1b2a9b refactor(composer): extract capture view
    • e2a85a9 fix(composer): localize media and upload feedback
    • 0a5a838 test(composer): complete responsive size matrix
    • dc630c9 fix(composer): unify safe back navigation
    • 06451f3 feat(camera): harden capture gestures
    • e015250 feat(stories): document accessible editing controls
    • 762d03a feat(composer): confirm pending media edits
    • 2c10652 feat(posts): complete media tile actions
    • 2037ecb feat(stories): add accessible layer controls
    • b871a63 feat(composer): harden accessible interactions
    • ebc6748 test(composer): cover responsive viewport contract
    • f2e0941 feat(composer): clarify audiences and validation
    • 38158f1 feat(composer): guard drafts when leaving
    • f25f7e2 feat(composer): make draft recovery explicit
    • e5b9f7f feat(composer): standardize contextual sheets
    • 541ab0e feat(stories): group editor tools into four actions
    • e9b3359 feat(camera): separate story capture modes
    • 9d8a6f8 feat(composer): add focused post media editor
    • 1fbb45b feat(composer): add text-first post workspace
    • 465b1bc feat(posts): allow publishing text without media
    • 93078fd docs(composer): define completion criteria
    • ba2ed28 docs(composer): clarify rework exclusions
    • a5f4250 docs(composer): document recommended tests
    • 253bc91 docs(composer): define measurable success criteria
    • fa1131c docs(composer): outline technical architecture
    • e899ad5 docs(composer): prioritize rework delivery
    • c9ca881 docs(composer): standardize interface copy
    • 9dafcc4 docs(composer): document accessibility requirements
    • cbf9f66 docs(composer): define responsive behavior
    • c75ef35 docs(composer): specify visual design
    • 966084d docs(composer): define status and error states
    • ad1801a docs(composer): define draft recovery behavior
    • 6f28f13 docs(composer): specify sheets and dialogs
    • 1fddf92 docs(composer): define gesture interactions
    • cee9e66 docs(composer): specify story creation flow
    • 50f49f2 docs(composer): specify post creation flow
    • e720e9a docs(composer): define composer entry flows
    • 9694c27 docs(composer): specify shared UI foundation
    • 5dcbffa docs(composer): establish rework design principles
    • e4c787a docs(composer): document current composer issues
    • c691e4a docs(composer): define rework goals
    • d97335f fix: import
    • b35272e test(auth): cover disabled registration
    • 465ed59 feat(auth): allow disabling registration
    • 6ac26bd docs(config): document registration toggle
    • 096c9b8 chore(database): standardize media migration identifiers
    • 4340cd1 fix(posts): publish video covers and audio ducking
    • 0025794 fix(posts): render media edits from preserved sources
    • f5cc3f2 fix(posts): display accepted collaborators as coauthors
    • 55896ef fix(posts): preserve media tags across later edits
    • 696ff55 fix(stories): connect live transform and snap gestures
    • 2c3700d feat(composer): add optional reduced-motion feedback (I08)
    • 4ecaf3a feat(composer): harden responsive safe-area layouts (I07)
    • e525068 feat(composer): complete accessible interaction paths (I06)
    • 62612b7 feat(composer): enforce rendering and memory budgets (I05)
    • 61d50e6 feat(composer): emit privacy-safe analytics events (I04)
    • c32eee2 feat(composer): enforce target privacy and content safety (I03)
    • 4463c33 feat(composer): preserve pending drafts offline (I02)
    • 1084300 feat(composer): unify actionable publish errors (I01)
    • e5253a0 feat(posts): recover safely from edit conflicts (H10)
    • 561b75d feat(posts): publish feed posts atomically (H09)
    • 2223aa2 feat(composer): gate provider-backed feed features (H08)
    • 47ed950 feat(posts): publish scheduled posts reliably (H07)
    • 36b4c6e feat(posts): persist advanced interaction settings (H06)
    • 2f37811 feat(posts): edit per-media accessibility metadata (H05)
    • f63f596 feat(posts): persist canonical locations (H04)
    • e747157 feat(posts): model collaborator invitations (H03)
    • 676be03 feat(posts): tag people per media item (H02)
    • cc46830 feat(posts): normalize captions mentions and hashtags (H01)
    • f38e373 feat(posts): add bounded video editing (G05)
    • 6665ef9 feat(posts): add bounded media adjustments (G04)
    • 8feb2f6 feat(posts): add deterministic image transforms (G03)
    • 791acdd feat(posts): enforce carousel aspect ratios (G02)
    • 5e4173e feat(posts): support ordered twenty-item carousels (G01)
    • 1ae236f fix(stories): render authoritative viewer state (F03)
    • f182e6c fix(stories): serialize atomic publish operations (F02)
    • e5bb725 feat(stories): validate audience sharing (F01)
    • 66ae332 feat(stories): add effects save and more menu (E09)
    • b8b5c4f feat(composer): isolate experimental story flags (E08)
    • 00a0132 feat(stories): add timed captions and chains (E07)
    • 47be1ff feat(stories): add interactive stickers (E06)
    • d5ebc40 feat(music): integrate Epidemic clip editors (E05)
    • 8aba697 feat(stories): resolve reference stickers safely (E04)
    • b980a06 feat(stories): add searchable sticker catalog (E03)
    • 7a0a8b8 feat(stories): complete drawing tools (E02)
    • 4f237d9 feat(stories): add rich text layers (E01)
    • 35cf19a feat(stories): transact layer undo and redo (D07)
    • fb153ef feat(stories): manage layer ordering and copies (D06)
    • 4b7997d feat(stories): add accessible layer deletion (D05)
    • b8e2698 feat(stories): add snapping and safe zones (D04)
    • dd93fa1 feat(stories): constrain layer transforms (D03)
    • 2c7096d feat(stories): arbitrate canvas gestures (D02)
    • c339c62 feat(stories): normalize editor layers (D01)
    • bc7e1f8 feat(stories): edit background media (C05)
    • a9a9a54 feat(gallery): harden picker previews (C04)
    • d270166 feat(stories): gate extended capture modes (C03)
    • a77fec7 feat(camera): require capture review (C02)
    • b2fa884 fix(camera): harden capture lifecycle (C01)
    • c987e1d feat(composer): persist versioned media drafts (B06)
    • 37a4b4c feat(database): add composer metadata migration (B05)
    • 0ab765b feat(posts): add atomic composer contracts (B04)
    • 12851ce feat(posts): model publishing metadata (B03)
    • e7b3072 feat(stories): model interactive elements (B02)
    • ac903dd feat(stories): add versioned composition schema (B01)
    • 43cfac2 feat(composer): expose account capabilities (A05)
    • 15e815e refactor(composer): split focused editor regions (A04)
    • 52f53cf feat(composer): add typed overlay stack (A03)
    • 413859f feat(composer): add typed session state machine (A02)
    • 440c2e6 test(composer): characterize existing flow (A01)
    • a3fb8cc feat(posts): apply music moderation retroactively
    • 9947b5e feat(stories): apply music moderation retroactively
    • 36f863f feat(music): expose moderated Epidemic catalog
    • 170c2a5 feat(music): persist catalog moderation state
    • 477d0b4 feat(music): add Epidemic Sound API client
    • 929ad08 docs(music): document Epidemic Sound configuration
    • c8eb177 docs(plan): add composer implementation plan
    • 4389c12 docs(spec): add Instagram composer specification
    • 2cc417f docs(findings): record final verification limits
    • a438f6c test(ui): align question counter contract (F-13)
    • 44655c1 test(ci): restore serial browser validation (F-15)
    • b16efa5 fix(layout): expose root overflow regressions (F-14)
    • 684edeb fix(ui): bound action counters on narrow layouts (F-13)
    • eb947d0 fix(settings): keep active section discoverable (F-12)
    • b3e316f fix(a11y): keep settings ARIA state valid (F-11)
    • 8e7c066 test(a11y): verify live busy-button contrast (F-10)
    • 092aad4 fix(layout): stabilize mobile topbar allocation (F-09)
    • 990a668 fix(admin): keep primary tabs visible and distinct (F-08)
    • 24dabe6 fix(layout): keep focused actions visible (F-07)
    • 242a0ae fix(layout): honor the active shell scroller (F-06)
    • e528da8 test(layout): guard bottom navigation separation (F-05)
    • c74e1d1 fix(media): preserve preview and carousel ratios (F-04)
    • 0fa61f6 fix(stories): align preview with rendered canvas (F-03)
    • 54e19e8 fix(ui): preserve team logos in avatar frames (F-02)
    • 22a879c fix(maui): clear hybrid boot state and verify assets (F-01)
    • 7d2630c fix(ci): repair gitea build and release workflows
    • d6ae346 fix(ci): make dev deploy version step resilient when run_number is missing
    • b11f319 chore(ci): setup android sdk for solution build
    • b1da698 chore(ci): restore maui workload before validation build
    • 7d25103 chore(ci): simplify build validation and gate dev deploy
    • a3745a4 chore(ci): add signed apk pre-release sftp upload and docs
    • 90a2609 docs(ui): record verified mobile findings
    • 3faf53f test(ui): cover populated mobile renderings
    • 75f00c4 fix(ui): resolve remaining mobile layout findings
    • 8de6748 fix(maui): package current hybrid assets
    • daca0ac fix(stories): accept composer overlay payloads
    • 8c2b9eb fix(stories): align full-bleed output with preview
    • 9acae41 fix(settings): preserve section deep links
    • 4311c4e fix(ui): resolve mobile layout findings
    • 5af0dba feat(ui): finalize media publishing and unified inbox
    • 35ffc54 fix(posts): preserve original media framing
    • e914d0d fix(composer): return published posts to profile
    • 1fe2600 docs(bugs): add visual issue references
    • af335ed feat(inbox): combine messages and notifications
    • e0d7ace fix(composer): tolerate incomplete restored drafts
    • 96ee720 fix(ui): constrain avatar dimensions
    • 33bb885 Revert "fix(docker): persist data protection keys"
    • 0e9d30f fix(docker): persist data protection keys
    • 3764d04 refactor(media): remove legacy storage volume
    • 3f00917 docs(cache): complete Redis implementation checklist
    • 73eb57d style(cache): format Redis changes
    • 3acaa51 test(cache): verify transactional invalidation
    • 8d1a7de test(cache): verify Redis integration behavior
    • f951f62 test(cache): cover cache policy and resilience
    • 23b4729 feat(media): add conditional HTTP caching
    • 7e6998d fix(cache): bound negative cache lifetime
    • 1c7f87b feat(cache): cache public profile base
    • 654f03f feat(cache): cache feed reads and user context
    • cd0d164 feat(cache): cache tag suggestions
    • 2e6444c feat(cache): cache story asset catalogs
    • 9d5dd61 feat(cache): cache public organization queries
    • 82ff31e feat(cache): cache public discovery queries
    • fb83534 feat(cache): add cache access primitives
    • b591505 feat(cache): configure hybrid Redis caching
    • 6cfb1d2 feat(cache): add Redis runtime foundation
    • 308de41 test(composer): align unified flow assertions
    • be63763 feat(composer): log the publish funnel
    • 046a897 refactor(composer): remove legacy story flow
    • cd314ad refactor(media): share validation contract limits
    • 77e56cf perf(composer): load metadata for inactive videos
    • f01b1a3 feat(search): submit composer searches with enter
    • a6a4aa9 feat(composer): show errors in their local context
    • e1f9446 feat(composer): recover session draft values
    • 6104686 feat(publish): retry with the same operation
    • 53d57f1 feat(publish): show upload and processing phases
    • 6bb6bc2 feat(publish): run local preflight validation
    • 024e777 feat(stories): separate gallery export with progress
    • d5b157a refactor(stories): reserve more menu for rare actions
    • ccd4d0c feat(stories): publish to one selected audience
    • 538729d feat(stories): fit music to story duration
    • 75b1094 feat(stories): return to canvas after insertion
    • ca30373 feat(stories): insert location widget in one flow
    • de5865c fix(stories): label visual text accurately
    • d215b5a feat(posts): edit accessibility for all media
    • 900cb1a feat(posts): apply edits to all media
    • bea0c9c feat(posts): reorder media with drag handles
    • 6d4162f feat(posts): reveal advanced options progressively
    • 2435d12 feat(posts): edit caption inline
    • 3ae954b feat(editor): undo the latest edit
    • 5f59404 feat(editor): drag overlays on the preview
    • ebe30cd feat(editor): show active tool states
    • 7ab381d feat(editor): close single-choice sheets automatically
    • 88c922f refactor(editor): keep four distinct post tools
    • 029c5aa feat(gallery): retain valid files on partial success
    • 4004a97 feat(gallery): open editor after confirmation
    • 168c5fa feat(gallery): select mixed media in one action
    • 9240282 feat(capture): show media limits before selection
    • f2436ac feat(capture): clarify post capture progression
    • b0b1898 feat(camera): explain capture gestures once
    • 60f753e refactor(camera): remove duplicate settings menu
    • 59a5c6a feat(camera): offer permission recovery actions
    • 809a475 fix(composer): bind intent entry actions
    • 1b2428f feat(composer): preserve media across mode switches
    • d97471d feat(camera): initialize capture only on demand
    • daff8f8 feat(composer): open entry points by intent
    • 8de0ae6 fix(stories): surface media refresh failures
    • 0d86dbf fix(maui): require api url on physical devices
    • 7d6cd48 fix(posts): check idempotency before transcoding
    • b56f677 fix(posts): persist edits per media element
    • 8c6ec83 fix(stories): preview overlays with object urls
    • c8f642a fix(media): accept native iphone gallery formats
    • ae001e6 fix(gallery): review selected media inside the app
    • cef77f8 fix(camera): hide unsupported automatic flash
    • 9f663dc fix(camera): constrain zoom to recordable output
    • b52ff55 fix(media): refresh expired signed urls automatically
    • 13f5a1b fix(captions): exclude media blobs from metadata queries
    • 68bf184 fix(media): fetch only requested content byte ranges
    • f4bcae4 fix(uploads): align client timeout with media processing
    • c033557 fix(camera): recover from initialization failures
    • 28e8168 fix(media): isolate preview loading failures
    • c58ccab fix(camera): await recording finalization
    • f9337a7 fix(composer): reuse publish operation identifiers
    • ad0c86f fix(posts): open newly published content
    • 8f7c06c fix(stories): preserve composed video duration
    • cf9cab6 test(composer): cover reference media editor layout
    • 48e9997 feat(composer): align media editor with reference design
    • 45db819 test(composer): cover responsive story camera
    • 42bc5e7 fix(a11y): include media sheets in modal lifecycle
    • deea67a feat(composer): integrate story camera workflow
    • e48c67f feat(composer): support story capture modes
    • 4a15777 feat(composer): add story camera controls
    • 50afd5f style(ui): standardize responsive layouts
    • ffbc47a refactor(ui): replace composer glyphs with svg icons
    • f0eb1cd fix(web): enable detailed development errors
    • 177597a fix(maui): reduce adaptive icon foreground scale
    • 51d3613 test(composer): cover media capture flows
    • fe8ea3e fix(composer): stabilize camera capture and zoom
    • cfb14f3 feat(composer): refine capture controls
    • 1eb0ee9 fix(ui): preserve mobile proportions
    • af1b210 test(maui): verify native brand assets
    • a0f3ef8 fix(maui): render mask-safe app icon
    • f65459e fix(ci): make package linking idempotent
    • ecbf2f2 fix(ui): improve mobile responsiveness
    • 63a1685 fix(web): support mobile safe areas
    • 5bf7370 fix(a11y): correct story loading semantics
    • 127a656 test(ui): cover unified media composer
    • 63a4138 test(api): cover composer audiences and overlays
    • 9e2cb56 test(domain): cover expanded story visibility
    • e43289a feat(maui): save stories and request device access
    • 8f9a862 refactor(ui): route creation through media composer
    • 1935114 feat(ui): add unified media composer
    • 00686a4 feat(composer): add client media workflows
    • 63582b6 feat(weather): add current conditions endpoint
    • 5c2342b feat(stories): extend composition and audiences
    • 287f9cd feat(posts): support unified media workflows
    • a0e04ca feat(privacy): expand audience query rules
    • 0bc8203 feat(database): persist unified composer metadata
    • 99c0be2 feat(composer): extend media and audience contracts
    • b0e5d1a docs(style): replace composer reference images
    • 85d4c7c fix(ci): authenticate package links with registry token
    • c99b379 test(ui): cover modal history completion
    • 6f28461 fix(ui): await modal history completion
    • e7da48c test(ui): guard modal history navigation
    • 6c1fd2c fix(ui): prevent modal history from reloading routes
    • fb4c57b test(ui): cover modular composer behavior
    • 4b05543 test(api): cover story composition validation
    • f9ecf0d style(ui): add composer studio layouts
    • 0a6637d feat(admin): link the story media catalog
    • 4bbfd73 feat(admin): add story media catalog management
    • e91e588 fix(stories): stabilize ownership and viewer cleanup
    • 700e9af feat(stories): implement the modular story studio
    • 967f1cf build(ui): load modular story scripts
    • 0421904 feat(stories): add media inspection module
    • 221ad7f feat(stories): add canvas interaction module
    • 22e36f7 feat(stories): add camera gesture module
    • 6f34f10 feat(ui): extend composer DOM helpers
    • f0bb926 refactor(posts): modularize the content composer
    • 78ee73e feat(story-ui): add composer building blocks
    • c90936c feat(client): support composed stories and asset catalogs
    • f97244a fix(stories): prioritize own stories in feed
    • 5ff3570 feat(api): expose composed story and catalog endpoints
    • 2b297e4 feat(media): compose layered story output
    • 4418708 feat(migrations): add story composition catalogs
    • 4dff24e feat(data): map story composition persistence
    • 9872a1a feat(contracts): define composed story asset APIs
    • 97c83d7 feat(domain): add story composition catalog entities
    • a0f1ce9 docs(composer): document modular post and story flows
    • 0c4a8b5 docs(ui): add composer reference images
    • 6b9f315 ci(packages): link container images to repository
    • 4340d7e test(ui): cover post interactions and shared branding
    • 4d261b0 feat(branding): add shared logo to web app
    • 6bb8cdf feat(branding): use shared logo for Android app
    • adf0dda fix(ui): stabilize modal transitions
    • 92736e0 fix(ui): preserve post styling across interactions
    • 3c9cb19 refactor(posts): simplify actions and improve comment replies
    • 9fdc0bf fix(auth): open login directly from guest profile action
    • 301eb5c fix(auth): persist sessions over local HTTP
    • e1a3758 fix(feed): exclude own posts from all personal feeds
    • 7871b52 fix(ui): prevent vertical post media scrolling
    • f561366 refactor(ui): remove guest feed lock icons
    • 96cd3e1 feat(ui): refresh feed with pull gesture
    • 94385a5 fix(ui): ignore canceled story cleanup
    • 257fe47 refactor(ui): render complete posts directly in feed
    • f1132ae fix(ui): keep one centered header search
    • 760a13c fix(ui): show only custom audio controls
    • 0f93ae9 fix(auth): preserve sessions until backend rejection
    • 4b0b9e7 chore(ui): remove completed UI UX findings
    • 1bb78b8 fix(ui): resolve finding STORY-009 - allow runtime safe-area offsets
    • 0cf7903 fix(ui): resolve finding GLOBAL-009 - verify atomic preference persistence
    • 03efd74 test(ui): align mobile typography regression gate
    • 823e4ce fix(ui): resolve finding BUG-033 - verify responsive comment dialog
    • 15ef37c fix(ui): resolve finding FEED-009 - verify comment textarea focus
    • 3939d7c fix(ui): resolve finding STORY-008 - verify semantic story selections
    • 4e8eec0 fix(ui): resolve finding MEDIA-014 - verify stable video playback segment
    • 8addd58 fix(ui): resolve finding GLOBAL-017 - verify modal attribute restoration
    • 044c7b2 fix(ui): resolve finding STORY-009 - constrain long story text
    • 3c7a97a fix(ui): resolve finding GLOBAL-008 - complete story semantic tokens
    • 3c084db fix(ui): resolve finding BUG-045 - dismiss mobile topbar menus
    • f16b625 fix(ui): resolve finding BUG-044 - align search input validation
    • bf67b3e fix(ui): resolve finding BUG-043 - serialize reconnect recovery
    • 3879c7b fix(ui): resolve finding BUG-042 - guide guest topbar actions
    • b0bc8f0 fix(ui): resolve finding BUG-041 - preserve place detail metadata
    • c20f64b fix(ui): resolve finding BUG-040 - prevent duplicate create actions
    • 9c4d24f fix(ui): resolve finding BUG-039 - validate optional usernames
    • ff9b1f4 fix(ui): resolve finding BUG-038 - clarify multi-day event times
    • 2863659 fix(ui): resolve finding BUG-037 - qualify accessibility information
    • a9d019a fix(ui): resolve finding BUG-036 - correct discovery filter copy
    • f99d34b fix(ui): resolve finding BUG-035 - preserve answer focus on reorder
    • c6129f1 fix(ui): resolve finding BUG-034 - key dynamic content cards
    • c36cec6 fix(ui): resolve finding BUG-033 - preserve comments while paging
    • 629ec4f fix(ui): resolve finding BUG-032 - secure account confirmations
    • 07d2473 fix(ui): resolve finding BUG-031 - isolate support ticket requests
    • b2ddee2 fix(ui): resolve finding BUG-030 - contain request timeouts
    • a235364 fix(ui): resolve finding BUG-029 - validate moderation target actions
    • 3227c89 fix(ui): resolve finding BUG-027 - route event proposals correctly
    • 62e8d53 fix(ui): resolve finding BUG-026 - keep guest help content visible
    • 0f26118 fix(ui): resolve finding BUG-025 - distinguish anonymous sessions
    • 403502a fix(ui): resolve finding BUG-024 - honor safe login return targets
    • 06c7375 fix(ui): resolve finding BUG-023 - save settings atomically
    • 4c450e8 fix(ui): resolve finding BUG-022 - clear hidden request fields
    • c090984 fix(ui): resolve finding BUG-021 - identify own profile routes
    • 1f8ad29 fix(ui): resolve finding BUG-020 - reject stale search results
    • b237c2e fix(ui): resolve finding BUG-019 - persist search in browser history
    • 5750a52 fix(ui): resolve finding BUG-017 - decouple notification navigation
    • fb6f3ea fix(ui): resolve finding BUG-016 - route message request notifications
    • 1adbf0f fix(ui): resolve finding BUG-015 - keep reconnect recovery visible
    • b9fbc0f fix(ui): resolve finding BUG-014 - expose fatal error recovery
    • eb55d56 fix(ui): resolve finding BUG-013 - preserve navigation section context
    • 9bf4a3d fix(ui): resolve finding BUG-012 - retain mobile page guidance
    • 70eb0fb fix(ui): resolve finding BUG-011 - align effective theme effects
    • 72020e9 fix(ui): resolve finding BUG-010 - guard story playback lifecycle
    • 8ff4b90 fix(ui): resolve finding BUG-008 - stabilize reply composer layout
    • 20fd3ef fix(ui): resolve finding BUG-007 - preserve comment drafts
    • 6afe8ce fix(ui): resolve finding BUG-006 - paginate complete comment threads
    • 158c03e fix(ui): resolve finding BUG-005 - synchronize content mutations
    • 81f56d8 fix(ui): resolve finding BUG-004 - show full detail text
    • f813432 fix(ui): resolve finding BUG-003 - canonicalize feed modes
    • 4785c78 fix(ui): resolve finding BUG-002 - reject stale feed modes
    • 1510177 fix(ui): resolve finding MOTION-006 - stop autoplay for reduced motion
    • c187a59 fix(ui): resolve finding MOTION-005 - animate list mutations
    • 93bea33 fix(ui): resolve finding MOTION-004 - coordinate modal exits
    • c54bbec fix(ui): resolve finding MOTION-003 - orient tab transitions
    • c469aeb fix(ui): resolve finding MOTION-002 - confirm optimistic toggles
    • 04f60e5 fix(ui): resolve finding MOTION-001 - standardize press feedback
    • 8bdb805 fix(ui): resolve finding A11Y-015 - focus visible media pickers
    • 852bc12 fix(ui): resolve finding A11Y-014 - name answer vote actions
    • 350d82f fix(ui): resolve finding A11Y-013 - identify selected poll options
    • a986353 fix(ui): resolve finding A11Y-012 - enforce WCAG browser matrix
    • e17abe1 fix(ui): resolve finding A11Y-011 - enlarge specialist touch targets
    • 2a455e7 fix(ui): resolve finding A11Y-010 - link and focus form errors
    • dc67b0f fix(ui): resolve finding A11Y-009 - preserve question media alternatives
    • 34486d9 fix(ui): resolve finding A11Y-008 - expose an accessible message log
    • a6f8bdc fix(ui): resolve finding A11Y-007 - clarify recursive comment threads
    • 47d0392 fix(ui): resolve finding A11Y-006 - manage dynamic panel focus
    • 87fff4c fix(ui): resolve finding A11Y-005 - make region search accessible
    • e44a5d7 fix(ui): resolve finding A11Y-004 - use native profile selects
    • 0ef12e7 fix(ui): resolve finding A11Y-003 - include native modal controls
    • a1ec930 fix(ui): resolve finding A11Y-002 - scope post background colors
    • 9eb0b54 fix(ui): resolve finding MEDIA-010 - normalize uploaded media
    • 557435a fix(ui): resolve finding MEDIA-009 - reserve feed media space
    • d62706e fix(ui): resolve finding MEDIA-008 - isolate active carousel slides
    • cd1a4f1 fix(ui): resolve finding MEDIA-007 - refresh expired media links
    • e59e0a2 fix(ui): resolve finding MEDIA-006 - restore accessible audio controls
    • 97c8eae fix(ui): resolve finding MEDIA-005 - separate transcripts and timed captions
    • 32b20e4 fix(ui): resolve finding MEDIA-004 - preserve image uploads during optimization
    • c9635c1 fix(ui): resolve finding MEDIA-015 - unify reversible story layers
    • ceea280 fix(ui): resolve finding MEDIA-014 - add story video editing
    • d6ae716 fix(ui): resolve finding MEDIA-013 - add accessible story text overlays
    • 710b8ff fix(ui): resolve finding MEDIA-012 - add post image adjustments
    • 7346952 fix(ui): resolve finding MEDIA-011 - enable media replacement and ordering
    • a1cd8c2 fix(ui): resolve finding MEDIA-003 - add story image transform editor
    • b82aa45 fix(ui): resolve finding MEDIA-002 - add post image crop and rotation
    • 8dc3102 fix(ui): resolve finding MEDIA-001 - recover blocked media permissions
    • a4a4ab6 fix(ui): resolve finding STORY-012 - announce story item changes
    • d9944d9 fix(ui): resolve finding STORY-011 - use honest story mode toggles
    • 8fb531f fix(ui): resolve finding STORY-008 - expose story selection states
    • ac0d0a9 fix(ui): resolve finding STORY-007 - detect story audio server side
    • c785c4d fix(ui): resolve finding STORY-006 - add persistent media error recovery
    • 7d5ebac fix(ui): resolve finding STORY-005 - preserve story drafts and back navigation
    • 7886fa8 fix(ui): resolve finding STORY-004 - show owner story visibility
    • 0cb5393 fix(ui): resolve finding STORY-010 - protect story viewer controls
    • a63e945 fix(ui): resolve finding STORY-009 - constrain long story text
    • 977331c fix(ui): resolve finding STORY-003 - fit story media in landscape
    • 69f8967 fix(ui): resolve finding STORY-002 - bind story mutations to items
    • bab4c04 fix(ui): resolve finding STORY-001 - make story publishing cancellable
    • 2f96284 fix(ui): resolve finding POST-010 - explain composer validation states
    • b73740b fix(ui): resolve finding POST-009 - reuse composer for post editing
    • 9eb1e41 fix(ui): resolve finding POST-008 - add capture review workflow
    • 0ae97b5 fix(ui): resolve finding POST-007 - preserve composer detail state
    • 7278278 fix(ui): resolve finding POST-007 - add mentions and post locations
    • 940a169 fix(ui): resolve finding POST-005 - add cancellable upload progress
    • 9dbf098 fix(ui): resolve finding POST-006 - prevent duplicate post publishing
    • b229b34 fix(ui): resolve finding POST-004 - add final production preview
    • ffbbfad fix(ui): resolve finding POST-003 - protect account draft recovery
    • a41ac59 fix(ui): resolve finding POST-002 - add responsive composer steps
    • e83d6a3 fix(ui): resolve finding FEED-015 - add private saved posts
    • 8f6bf23 fix(ui): resolve finding FEED-014 - add complete post links
    • 1b96122 fix(ui): resolve finding FEED-013 - expose additional post tags
    • 1498c59 fix(ui): resolve finding FEED-012 - add native content sharing
    • 684696e fix(ui): resolve finding FEED-011 - clarify question answer path
    • cb5184c fix(ui): resolve finding FEED-010 - report comments and answers
    • 7549a30 fix(ui): resolve finding FEED-009 - support multiline comment submission
    • 8f21403 fix(ui): resolve finding FEED-008 - orient horizontal feed tabs
    • a4858d2 fix(ui): resolve finding FEED-007 - announce loaded feed pages
    • b994c94 fix(ui): resolve finding FEED-006 - update mutated feed cards locally
    • 2af9776 fix(ui): resolve finding FEED-005 - match feed skeleton structure
    • 2435625 fix(ui): resolve finding FEED-004 - buffer refreshed feed items
    • 122ef19 fix(ui): resolve finding FEED-003 - add manual feed pagination
    • 32ba936 fix(ui): resolve finding FEED-002 - preserve loaded feed context
    • 7a62bb1 fix(ui): resolve finding FEED-001 - identify protected feed modes
    • 53e33fd fix(ui): resolve finding WEB-005 - align native platform support
    • e24454d fix(ui): resolve finding WEB-004 - add accessible icon tooltips
    • bd8b9a1 fix(ui): resolve finding WEB-003 - align card hover affordances
    • 34cb73c fix(ui): resolve finding WEB-002 - render static web boot state
    • 6825620 fix(ui): resolve finding WEB-001 - constrain desktop reading widths
    • da35fcf fix(ui): resolve finding MOBILE-007 - support small-height sheets
    • 979c1f6 fix(ui): resolve finding MOBILE-006 - expand small-screen search
    • f6b5765 fix(ui): resolve finding MOBILE-005 - support legacy WebKit fallbacks
    • 53472de fix(ui): resolve finding MOBILE-004 - replace framework branding
    • 3e74ecf fix(ui): resolve finding MOBILE-003 - close modals on system back
    • 50a67e5 fix(ui): resolve finding MOBILE-002 - synchronize native system bars
    • 4fc0e1d fix(ui): resolve finding MOBILE-001 - centralize native safe areas
    • 53659c5 fix(ui): resolve finding GLOBAL-015 - clarify moderation confirmation
    • a4a8e09 fix(ui): resolve finding GLOBAL-014 - check username availability
    • 932b146 fix(ui): resolve finding GLOBAL-013 - add password visibility controls
    • 2fd38f3 fix(ui): resolve finding GLOBAL-012 - notify request owners
    • 1d20ae1 fix(ui): resolve finding GLOBAL-017 - restore modal page state
    • 5c24dde fix(ui): resolve finding GLOBAL-016 - indicate unread notifications
    • 491c6a8 fix(ui): resolve finding GLOBAL-011 - verify notification pagination
    • b4820e0 fix(ui): resolve finding GLOBAL-010 - prioritize active support queues
    • 9cfb2ec fix(ui): resolve finding GLOBAL-009 - expose notification preferences
    • 7c42ee3 fix(ui): resolve finding GLOBAL-008 - complete semantic color tokens
    • e9d6f97 fix(ui): resolve finding GLOBAL-007 - tolerate unavailable theme storage
    • 5adb514 fix(ui): resolve finding GLOBAL-006 - ignore stale async responses
    • 5532d17 fix(ui): resolve finding GLOBAL-005 - paginate growing lists
    • fc8b9a8 fix(ui): resolve finding GLOBAL-004 - protect unsaved form changes
    • ae8a733 fix(ui): resolve finding GLOBAL-003 - distinguish disabled and busy controls
    • eccb9ad fix(ui): resolve finding GLOBAL-002 - classify recoverable errors
    • 8748045 fix(ui): resolve finding GLOBAL-001 - preserve protected route return paths
    • e0744d8 fix(ui): resolve finding BUG-028 - serialize report resolutions
    • 9c269b4 fix(ui): resolve finding BUG-009 - scope story keyboard shortcuts
    • 4d96cff fix(ui): resolve finding BUG-001 - render infinite scroll updates
    • e9addfc fix(ui): resolve finding A11Y-001 - correct semantic color contrast
    • dca2e1c fix(ui): resolve finding MEDIA-001 - add native media permissions
    • 781d8a9 fix(ui): resolve finding POST-001 - add post visibility selection
    • 3e9c298 fix(ui): resolve finding BUG-018 - restrict external URLs
    • c39d483 docs(ui): add UI UX findings backlog
    • 65b0653 docs(ui/ux): design definition
    • 5936245 fix(feed): show protected modes to guests
    • d6a4810 fix(feed): show community posts to guests
    • 13555cf feat(comments): add threaded voting dialog
    • 4f2f8e1 feat(comments): add authenticated client interactions
    • 465b682 feat(comments): expose threaded voting api
    • 45426ed feat(comments): persist user votes
    • 8952ed1 fix(stories): refine guest and own story actions
    • 64a668e fix(content): wrap media carousel navigation
    • 6486d72 fix(feed): exclude own posts from recommendations
    • fe3c25f feat(feed): add public all mode
    • 1b9a780 fix(profile): reorder account actions
    • a663560 fix(auth): redirect successful login to feed
    • 2795d40 refactor(ui): standardize interface icons
    • eed41a8 fix(accessibility): announce reconnect states
    • 770661d feat(settings): add mobile section navigation
    • e30f1d7 fix(content): remove duplicate detail title
    • 9a10b88 fix(localization): format times in browser timezone
    • 96fe9d8 fix(accessibility): label external link behavior
    • 70b8e1b test(ui): add browser accessibility matrix
    • 23c1dc5 perf(ui): disable mobile backdrop blur
    • a9e555b perf(stories): reduce video preloading
    • e1f60c0 fix(stories): confirm destructive deletion
    • 84d71b2 fix(accessibility): announce feed loading states
    • 5f4344f fix(accessibility): focus persistent main content
    • d44d97e fix(responsive): simplify mobile team navigation
    • 438c833 fix(responsive): balance mobile typography
    • 9c84b15 fix(accessibility): honor forced color preferences
    • 34b69eb fix(accessibility): increase brand text contrast
    • c96ea3c fix(accessibility): identify active profile section
    • fa4bd71 fix(accessibility): limit character count announcements
    • d58a738 fix(accessibility): focus and describe form errors
    • 07d15d9 fix(accessibility): implement searchable combobox behavior
    • ef67bb4 fix(accessibility): expose story media picker
    • 37ea4a4 feat(accessibility): expose story playback status
    • 0dc3139 fix(accessibility): enlarge mobile touch targets
    • 88ef873 fix(accessibility): restore comment focus indicator
    • 66ff5fb fix(accessibility): isolate modal background
    • 9f3306b fix(layout): reflow complex mobile content
    • 8b74c73 feat(composer): streamline mobile creation tools
    • 6899122 fix(posts): use mobile viewport width
    • 5a0ca78 feat(posts): simplify mobile action menu
    • a537328 feat(discovery): add missing detail pages
    • d988939 feat(accessibility): add media captions and transcripts
    • ed790d2 feat(accessibility): add media alternative text
    • d797fc2 test(media): cover database upload buffering
    • 815ff9e feat(media): import legacy files into database
    • de1ed0a feat(media): store uploaded files in database
    • c32a23b refactor(feed): simplify stories and posts header
    • 6a00d22 fix(api): restore opt-in Swagger endpoint
    • 7e15bf9 fix(layout): contain root page scrolling
    • 0c6fa5c fix(comments): keep visibility query translatable
    • 04905ff fix(errors): show actionable server references
    • 76aa8a2 fix(errors): use application-specific exception handlers
    • 95928bd fix(migrations): recover content vote upgrade
    • 76db1ff test(web): smoke test public application routes
    • aee919b fix(database): apply migrations before serving requests
    • f583a0a test(copy): repair validation fixture encoding
    • 8dc13d8 test(ui): guard responsive accessibility styles
    • 2212dfd fix(hosting): respect HTTP-only container bindings
    • 9d62d1e test(containers): smoke test API and web images
    • 1f10b33 test(voting): cover concurrent database writes
    • 212c7bd test(privacy): verify content visibility on MariaDB
    • 049f543 docs(readme): align setup with current application
    • 1274f18 fix(copy): repair corrupted validation messages
    • 854088e fix(theme): define referenced visual tokens
    • e5c5a31 feat(content): add public content detail pages
    • d77d155 fix(feed): avoid duplicate ranking explanations
    • 1278244 feat(moderation): expose immutable decision history
    • f812ad4 feat(feed): explain personalized recommendations
    • 8725389 feat(composer): preserve text drafts locally
    • 102aff4 feat(stories): show private owner insights
    • 31b2c21 fix(account): purge personal interactions on deletion
    • 2efc819 fix(voting): enforce one content vote per user
    • 75bf5d0 fix(account): describe permanent anonymization accurately
    • b67589c fix(media): preserve signed content audience access
    • 8b8f06a fix(privacy): hide unavailable accounts from public reads
    • f279ba7 refactor(auth): remove obsolete email confirmation state
    • 14e2ec0 refactor(auth): align account API with username login
    • e9f4fb9 refactor(infrastructure): remove unused persistence models
    • 834f7e0 refactor(infrastructure): remove nonfunctional outbox processor
    • 53bd34c feat(account): provide immediate personal data export
    • c791429 perf(discovery): paginate events and places
    • 25472de perf(navigation): refresh header only when authentication changes
    • 412befe fix(accessibility): describe meaningful post and story media
    • 13f5017 fix(accessibility): allow zoom in mobile app
    • 29a2b04 fix(accessibility): preserve contrast on post backgrounds
    • e753219 fix(accessibility): increase form field contrast
    • 1597635 fix(accessibility): manage focus inside modal dialogs
    • bbac2de fix(accessibility): make custom dropdown keyboard operable
    • f2ee88e fix(stories): enforce media access and recovery
    • a3fdd7f fix(stories): verify video duration server side
    • bdf62d2 perf(profile): stream compressed avatars from storage
    • 19aec21 perf(media): stream uploads outside the database
    • beac4d8 feat(moderation): require contextual review decisions
    • 1fd3e98 feat(discovery): replace placeholder with OpenStreetMap
    • fa6471f feat(settings): apply saved appearance preferences
    • 52ecbee feat(comments): paginate replies with author context
    • 8fed2d4 fix(feed): replace bounded offsets with seek pagination
    • 34b28de fix(feed): align filters with personalization settings
    • f324bbe feat(notifications): add accessible notification center
    • 200a3f9 feat(profile): activate activity and relation tabs
    • bfa641f fix(content): manage all owned content types
    • 182a2ad feat(questions): add answer-focused detail page
    • fe7dbcc fix(events): render dedicated event cards
    • 61cf650 feat(moderation): publish approved help requests
    • bf61854 feat(messages): complete request and conversation flows
    • e422483 fix(search): render typed grouped results
    • a0d4732 fix(auth): expire rejected sessions explicitly
    • 9544814 fix(auth): protect persisted session tokens
    • 1d01ea3 fix(security): make development services opt in
    • 08c9fbc fix(media): use configured public API URLs
    • c522f80 fix(content): enforce visibility on public reads
    • c23afdb feat(feed): add media carousel and voice player
    • 6fce2ce feat(feed): allow guests to browse public content
    • 2c59d06 fix(docker): bind application settings from env file
    • 802af7e refactor(ci): share build and deploy workflow
    • ef0dd79 chore(ci): changed api url variable
    • 77f183a refactor(docker): simplify environment configuration
    • 119b0e3 fix(ci): inject API URL into Android build
    • b7dd6fe feat(maui): accept build-time API URL
    • 0930025 fix(ci): install Android SDK build tools
    • 5e37f7f docs: generalize .NET 10 requirement
    • 052819c fix(build): allow all .NET 10 feature bands
    • 27ee48a fix(docker): pin internal HTTP ports
    • d0ce491 fix(ci): publish api and web images
    • 8c465f8 refactor(docker): simplify runtime compose configuration
    • 9d010aa refactor(docker): extract service dockerfiles
    • c961263 fix(ci): provide compose variables during image builds
    • c3651ff ci(deploy): schedule development releases nightly
    • a1fbea4 ci(deploy): publish development images and apk releases
    • 2af0e50 build(version): configure development versioning
    • 1d0c9b1 test(app): cover expanded account and content workflows
    • 82cf65e fix(web): skip unavailable https redirect in development
    • 2445120 style(ui): polish responsive content surfaces
    • 8de49d1 feat(profile): expand profile and account settings
    • 47ccf7d feat(help): add standalone support ticket views
    • 891fde9 feat(feed): redesign composer and post interactions
    • 444e575 feat(stories): add creation and viewing experience
    • e059cf2 feat(client): integrate expanded community workflows
    • f10aff7 feat(api): add profile and account controls
    • df489c8 feat(api): add support ticket lifecycle
    • d39d210 feat(api): support rich posts and moderation reports
    • 7a0bf4c feat(api): expose story publishing and interactions
    • a2c5e88 feat(auth): simplify registration and stabilize sessions
    • db4fadb feat(database): persist stories media and profile sexuality
    • 2a53654 feat(contracts): expand account content and story APIs
    • ad5bc55 feat(domain): model stories reports and account metadata
    • 648ec79 test(client): cover session feed and comment requests
    • 4c60acc feat(ui): redesign responsive application shell
    • e41f62b feat(feed): add polls comments and bounded loading
    • 8d6e7ea feat(profile): enhance profile and settings
    • cf2f2aa feat(help): add request and moderation views
    • ca073ef feat(client): integrate community and profile APIs
    • 068c0e6 feat(api): expose community content and help workflows
    • c92bd79 feat(database): persist requests polls and birth dates
    • 5d63e23 feat(domain): add requests polls and profile metadata
    • 35d48a0 docs(safety): document moderation and privacy
    • 01f7908 docs(feed): document ranking model
    • 14b945c docs(api): document HTTP API
    • fa6e39d docs(database): document data model and migrations
    • ef45a15 docs(architecture): document system design
    • 1b594fa docs: add project overview
    • b78dfec test(api): add API boundary tests
    • 79f5563 test(architecture): add dependency rule tests
    • 45eafc0 test(application): add feed ranking tests
    • 0a1bf14 test(domain): add domain rule tests
    • 174a3b6 feat(maui): add Windows platform host
    • 546531d feat(maui): add Mac Catalyst platform host
    • 3a20705 feat(maui): add iOS platform host
    • 6060966 feat(maui): add Android platform host
    • af42dd3 feat(maui): add hybrid application shell
    • f0641a1 feat(web): add Blazor web host
    • 7b02b20 feat(ui): add moderation page
    • 47fc26e feat(ui): add account pages
    • ccd9c17 feat(ui): add messaging and search pages
    • 1a5d625 feat(ui): add discovery pages
    • 6965b6b feat(ui): add community feed
    • 7845ca6 feat(ui): add authentication pages
    • 4dfca0f feat(ui): add responsive application shell
    • 8956d96 feat(ui): add reusable components
    • 6e5b4a3 feat(ui): add API client
    • 3251413 feat(ui): initialize shared UI
    • 3be577b feat(api): add application host
    • 2f32dcf feat(api): add community endpoints
    • 719942a feat(api): add discovery endpoints
    • d1d4aa2 feat(api): add content endpoints
    • 316f9e1 feat(api): add user endpoints
    • 3816915 feat(api): add authentication endpoints
    • 6a7ec66 feat(api): add routing and authorization foundation
    • f74d710 chore(observability): add service defaults
    • 14527d0 feat(database): extend profiles and remove saved content
    • 429fc2c perf(database): optimize conversation participant lookup
    • 7bd1cde perf(database): index session access tokens
    • 087578e feat(database): add initial schema
    • d90dcb3 chore(migrations): add migration project
    • e28b3b4 feat(infrastructure): register infrastructure services
    • 697fd16 feat(infrastructure): add development fixtures
    • 8340d85 feat(infrastructure): add background services
    • c622c8f feat(auth): add session token service
    • 55875b1 feat(infrastructure): add identity persistence
    • 773abf4 feat(application): add feed ranking
    • be484c0 feat(application): add input validators
    • 3419c02 feat(application): add result model
    • aeb2e91 feat(contracts): add community contracts
    • fe7193d feat(contracts): add discovery contracts
    • dbf685e feat(contracts): add content contracts
    • 730f999 feat(contracts): add authentication contracts
    • 651b7f3 feat(contracts): add common API contracts
    • dab075d feat(domain): add trust and safety model
    • a8eb32e feat(domain): add organization model
    • 6832178 feat(domain): add messaging model
    • d183d26 feat(domain): add discovery model
    • ceaf47f feat(domain): add content model
    • d12d9bd feat(domain): add user model
    • fecb6de feat(domain): add shared domain primitives
    • 6ef1777 chore: add local development environment
    • 67d2851 chore: initialize .NET solution
    Downloads