-
Production 0.4.0 Stable
released this
2026-09-15 17:12:04 +00:00 Production 0.4.0
Docker Images
git.lechner-systems.at/justqueer/api:0.4.0git.lechner-systems.at/justqueer/web:0.4.0
Zusätzlich zeigen beide Images mit dem Tag
latestauf diesen Build.Commits seit dem letzten Release
3e261d7chore(preview): remove outdated chat layout screenshot2102d68feat(audio): unify voice message players in chats and posts3e0f873chore(design): add chat layout reference67e72a9docs(chat): document encryption calls and view-once behaviorbca36e8docs(composer): describe inline post editing6e87a37build(web): disable static asset compression in debug8abfe51fix(stories): refresh playback and route replies to encrypted chat8616811feat(composer): integrate media previews and editing workspace57df24cfeat(stories): refine drawing text and sticker editors2c8f251feat(stories): add crop controls and color picker55ee0bffeat(stories): add font administration and font loadinga25c53bfeat(media): filter native galleries and preserve selectionscab996cfeat(chat): integrate accessible conversation layoutc5f22d7feat(client): expose encrypted chat and story font APIs0fcaef7feat(stories): validate and render custom fonts and crops1d1c2e9feat(stories): extend crop and text layer contracts0e3fbc9fix(android): restrict WebView media permission requests26fe114feat(chat): protect view-once media on Android072c4d3feat(chat): persist Signal sessions and encrypted media3403cc7feat(chat): enforce encrypted messaging and retention5a4b970feat(calls): add self-hosted encrypted call support0ca22edfeat(chat): add encrypted delivery and media endpointsf71bf20feat(chat): add encrypted messaging model and migrations1afb5ddbuild(calls): vendor LiveKit browser runtime6e3126dbuild(chat): vendor Signal WebAssembly runtime7b7d966build(chat): add Signal and LiveKit dependencies2e13924ci: set release status by repositorye2e4a48ci: validate app release access658eb51Merge remote-tracking branch 'origin/main'd492571feat(maui): separate app flavorscb343e4ci: disable scheduled production deploy4ef4612test(ui): cover composer interactions0f275e5test(api): cover story composition changes9ba8750style(composer): update editor presentationbf6fd7bfeat(composer): refine editor interactions34192d5feat(composer): update server story pipelinec48bb80ci: publish releases to app repositoryc81c338docs: organize project knowledge basebf0a675Update src/JustQueer.Maui/MauiProgram.cs2e2ed5cUpdate src/JustQueer.Maui/MauiProgram.cs78a6fc7reworked: story and post creation - part 3b6baf68reworked: story and post creation - part 2cfcf231reworked: story and post creation - part 1e8f9efcrefactor: delete unnecessary filesc8d1cd9test(composer): align resolved interaction contracts (SC-UX-07, SC-UX-12)e5d6cdffix(composer): reveal preview on wide screens (SC-UX-28)3e69bcbfix(composer): preserve native interaction semantics (SC-UX-27)c7a8de5fix(story): use layout-independent layer keys (SC-UX-26)3760af1fix(composer): describe supported mentions flow (SC-UX-25)f744158fix(composer): remove redundant more action (SC-UX-24)e28bac2test(composer): add mobile touch projects (SC-UX-23)93af5b1fix(story): reflect layer action limits (SC-UX-22)fb7666afix(story): reject unsupported catalog stickers (SC-UX-21)d13f52bfix(story): label gallery design action truthfully (SC-UX-20)9c8587efix(composer): expose search and catalog states (SC-UX-19)eee7c2dfeat(composer): preview selected music track (SC-UX-18)65e8a37feat(composer): preview text and filters in sheets (SC-UX-17)8475d45feat(composer): edit captions as timed cues (SC-UX-16)ecd7c75fix(story): make remaining gestures discoverable (SC-UX-15)269876bfix(camera): require deliberate hold to record (SC-UX-14)c2f969ffix(camera): remove hidden viewport gestures (SC-UX-13)ec5c32bfix(composer): expand small touch targets (SC-UX-12)788d86efix(composer): explain invalid poll and sticker fields (SC-UX-11)a42909cfix(composer): keep error focus in opened sheet (SC-UX-10)47fefb6fix(composer): map every API validation field (SC-UX-09)f938f40fix(composer): show rejected media in every flow (SC-UX-08)8bd8088fix(composer): stack feedback above actions (SC-UX-07)2c53f32fix(story): preserve drawing appearance (SC-UX-06)09584abfix(composer): use browser timezone for local dates (SC-UX-05)18b0718fix(story): expose native video playback (SC-UX-04)a1178aafix(composer): snapshot publish before yielding (SC-UX-02)cb39cb8fix(composer): keep media busy until buffered (SC-UX-03)ce6a48bfix(composer): lock workspace while publishing (SC-UX-02)d432728fix(composer): unify modal lifecycle (SC-UX-01)ea61016cleanup: delete unused filesf6363ectest(composer): retire stale source assertions (CP-25)1ba110ftest(composer): validate rendered user flows (CP-25)960fdf0fix(story): fit tools in the initial viewport (CP-21)7e7cb59fix(story): expose layer and sticker limits (CP-26)f7ca14afix(composer): use native choice semantics (CP-27)e118ef4fix(composer): remove placeholder modes (CP-24)a8ccb4dfix(story): hide invalid gallery multi-select (CP-22)d9633d1fix(composer): focus real validation targets (CP-19)e66aa65fix(composer): enforce people selection limits (CP-18)4700f31fix(composer): stop camera while gallery is open (CP-23)07d8cd1fix(composer): persist camera booleans faithfully (CP-20)cada670fix(composer): ignore stale search responses (CP-17)fdd6ad9fix(story): unify layer undo history (CP-15)a780bcafix(composer): preserve complete post edit metadata (CP-14)a88a338fix(composer): track dirty state from snapshots (CP-13)3f4467bfix(composer): isolate state across modes (CP-12)81fb0aefix(story): replace base media in the editor (CP-11)b8fc277fix(composer): accept valid files from mixed batches (CP-16)2845340fix(composer): block publish while media loads (CP-10)1be59defix(composer): validate per-file media limits (CP-09)ab42d8bfix(story): use composition byte limit for layouts (CP-08)66144fbfix(composer): limit video duration only for stories (CP-07)9456899fix(story): keep composer canvas at 9 by 16 (CP-06)1ec7204fix(story): bind accessibility captions to payload (CP-05)5e4fee4fix(composer): scope drafts by surface and intent (CP-04)81a7c3bfix(composer): persist complete draft state (CP-03)4bec0f9fix(story): project active interactive elements (CP-02)e0b5552fix(composer): bind dynamic string parameters (CP-01)9ec9037refactor(camera): move zoom into settings51b0060style(camera): match reference control spacing38b1c7cstyle(composer): align reference proportions17a6fccfeat(camera): mirror reference mode rail285c25cfeat(composer): match reference gallery actionseee2ff0docs(design): add composer referencesbb178f8test(composer): assert phone canvas width2d710c8refactor(composer): reuse overlay color tokens289a87afix(camera): keep unavailable state usablec917657fix(composer): restore gallery header actions7cc42e8fix(android): request complete media accessd409c72fix(apple): include media library on catalystf794bd1test(composer): update gallery browser flows86ec981fix(camera): preserve readable mode labelsc793c87feat(camera): switch formats with horizontal swipec7df520feat(apple): browse photo library assets2d32d05refactor(media): reuse bounded browser filesc24c806feat(android): browse device media library03bcb74feat(media): request photo library access8a956aafeat(composer): add reference media galleries199af73feat(media): define gallery browsing contractb0c4078feat(camera): match reference capture controls8931e7afeat(composer): constrain workspace to phone framef127784test(composer): align story text e2e actiond736340feat(composer): keep sheet actions reachableb053d44feat(stories): cycle overlapping layer selection797bcd8fix(stories): guard unsaved text editsfb7bdaafeat(composer): add direct crop gestures807b102fix(media): preserve uncropped original aspect5831d21feat(stories): add accessible layer list5fc9d26feat(composer): complete media preview paging6025d24feat(stories): add direct text editing gestures94c18c4feat(composer): add sheet dismissal gestures491c2effix(composer): render confirmed gesture updates9813113feat(composer): add direct media reorderingc4135a6fix(stories): preserve confirmed canvas transformsd1b2a9brefactor(composer): extract capture viewe2a85a9fix(composer): localize media and upload feedback0a5a838test(composer): complete responsive size matrixdc630c9fix(composer): unify safe back navigation06451f3feat(camera): harden capture gesturese015250feat(stories): document accessible editing controls762d03afeat(composer): confirm pending media edits2c10652feat(posts): complete media tile actions2037ecbfeat(stories): add accessible layer controlsb871a63feat(composer): harden accessible interactionsebc6748test(composer): cover responsive viewport contractf2e0941feat(composer): clarify audiences and validation38158f1feat(composer): guard drafts when leavingf25f7e2feat(composer): make draft recovery explicite5b9f7ffeat(composer): standardize contextual sheets541ab0efeat(stories): group editor tools into four actionse9b3359feat(camera): separate story capture modes9d8a6f8feat(composer): add focused post media editor1fbb45bfeat(composer): add text-first post workspace465b1bcfeat(posts): allow publishing text without media93078fddocs(composer): define completion criteriaba2ed28docs(composer): clarify rework exclusionsa5f4250docs(composer): document recommended tests253bc91docs(composer): define measurable success criteriafa1131cdocs(composer): outline technical architecturee899ad5docs(composer): prioritize rework deliveryc9ca881docs(composer): standardize interface copy9dafcc4docs(composer): document accessibility requirementscbf9f66docs(composer): define responsive behaviorc75ef35docs(composer): specify visual design966084ddocs(composer): define status and error statesad1801adocs(composer): define draft recovery behavior6f28f13docs(composer): specify sheets and dialogs1fddf92docs(composer): define gesture interactionscee9e66docs(composer): specify story creation flow50f49f2docs(composer): specify post creation flowe720e9adocs(composer): define composer entry flows9694c27docs(composer): specify shared UI foundation5dcbffadocs(composer): establish rework design principlese4c787adocs(composer): document current composer issuesc691e4adocs(composer): define rework goalsd97335ffix: importb35272etest(auth): cover disabled registration465ed59feat(auth): allow disabling registration6ac26bddocs(config): document registration toggle096c9b8chore(database): standardize media migration identifiers4340cd1fix(posts): publish video covers and audio ducking0025794fix(posts): render media edits from preserved sourcesf5cc3f2fix(posts): display accepted collaborators as coauthors55896effix(posts): preserve media tags across later edits696ff55fix(stories): connect live transform and snap gestures2c3700dfeat(composer): add optional reduced-motion feedback (I08)4ecaf3afeat(composer): harden responsive safe-area layouts (I07)e525068feat(composer): complete accessible interaction paths (I06)62612b7feat(composer): enforce rendering and memory budgets (I05)61d50e6feat(composer): emit privacy-safe analytics events (I04)c32eee2feat(composer): enforce target privacy and content safety (I03)4463c33feat(composer): preserve pending drafts offline (I02)1084300feat(composer): unify actionable publish errors (I01)e5253a0feat(posts): recover safely from edit conflicts (H10)561b75dfeat(posts): publish feed posts atomically (H09)2223aa2feat(composer): gate provider-backed feed features (H08)47ed950feat(posts): publish scheduled posts reliably (H07)36b4c6efeat(posts): persist advanced interaction settings (H06)2f37811feat(posts): edit per-media accessibility metadata (H05)f63f596feat(posts): persist canonical locations (H04)e747157feat(posts): model collaborator invitations (H03)676be03feat(posts): tag people per media item (H02)cc46830feat(posts): normalize captions mentions and hashtags (H01)f38e373feat(posts): add bounded video editing (G05)6665ef9feat(posts): add bounded media adjustments (G04)8feb2f6feat(posts): add deterministic image transforms (G03)791acddfeat(posts): enforce carousel aspect ratios (G02)5e4173efeat(posts): support ordered twenty-item carousels (G01)1ae236ffix(stories): render authoritative viewer state (F03)f182e6cfix(stories): serialize atomic publish operations (F02)e5bb725feat(stories): validate audience sharing (F01)66ae332feat(stories): add effects save and more menu (E09)b8b5c4ffeat(composer): isolate experimental story flags (E08)00a0132feat(stories): add timed captions and chains (E07)47be1fffeat(stories): add interactive stickers (E06)d5ebc40feat(music): integrate Epidemic clip editors (E05)8aba697feat(stories): resolve reference stickers safely (E04)b980a06feat(stories): add searchable sticker catalog (E03)7a0a8b8feat(stories): complete drawing tools (E02)4f237d9feat(stories): add rich text layers (E01)35cf19afeat(stories): transact layer undo and redo (D07)fb153effeat(stories): manage layer ordering and copies (D06)4b7997dfeat(stories): add accessible layer deletion (D05)b8e2698feat(stories): add snapping and safe zones (D04)dd93fa1feat(stories): constrain layer transforms (D03)2c7096dfeat(stories): arbitrate canvas gestures (D02)c339c62feat(stories): normalize editor layers (D01)bc7e1f8feat(stories): edit background media (C05)a9a9a54feat(gallery): harden picker previews (C04)d270166feat(stories): gate extended capture modes (C03)a77fec7feat(camera): require capture review (C02)b2fa884fix(camera): harden capture lifecycle (C01)c987e1dfeat(composer): persist versioned media drafts (B06)37a4b4cfeat(database): add composer metadata migration (B05)0ab765bfeat(posts): add atomic composer contracts (B04)12851cefeat(posts): model publishing metadata (B03)e7b3072feat(stories): model interactive elements (B02)ac903ddfeat(stories): add versioned composition schema (B01)43cfac2feat(composer): expose account capabilities (A05)15e815erefactor(composer): split focused editor regions (A04)52f53cffeat(composer): add typed overlay stack (A03)413859ffeat(composer): add typed session state machine (A02)440c2e6test(composer): characterize existing flow (A01)a3fb8ccfeat(posts): apply music moderation retroactively9947b5efeat(stories): apply music moderation retroactively36f863ffeat(music): expose moderated Epidemic catalog170c2a5feat(music): persist catalog moderation state477d0b4feat(music): add Epidemic Sound API client929ad08docs(music): document Epidemic Sound configurationc8eb177docs(plan): add composer implementation plan4389c12docs(spec): add Instagram composer specification2cc417fdocs(findings): record final verification limitsa438f6ctest(ui): align question counter contract (F-13)44655c1test(ci): restore serial browser validation (F-15)b16efa5fix(layout): expose root overflow regressions (F-14)684edebfix(ui): bound action counters on narrow layouts (F-13)eb947d0fix(settings): keep active section discoverable (F-12)b3e316ffix(a11y): keep settings ARIA state valid (F-11)8e7c066test(a11y): verify live busy-button contrast (F-10)092aad4fix(layout): stabilize mobile topbar allocation (F-09)990a668fix(admin): keep primary tabs visible and distinct (F-08)24dabe6fix(layout): keep focused actions visible (F-07)242a0aefix(layout): honor the active shell scroller (F-06)e528da8test(layout): guard bottom navigation separation (F-05)c74e1d1fix(media): preserve preview and carousel ratios (F-04)0fa61f6fix(stories): align preview with rendered canvas (F-03)54e19e8fix(ui): preserve team logos in avatar frames (F-02)22a879cfix(maui): clear hybrid boot state and verify assets (F-01)7d2630cfix(ci): repair gitea build and release workflowsd6ae346fix(ci): make dev deploy version step resilient when run_number is missingb11f319chore(ci): setup android sdk for solution buildb1da698chore(ci): restore maui workload before validation build7d25103chore(ci): simplify build validation and gate dev deploya3745a4chore(ci): add signed apk pre-release sftp upload and docs90a2609docs(ui): record verified mobile findings3faf53ftest(ui): cover populated mobile renderings75f00c4fix(ui): resolve remaining mobile layout findings8de6748fix(maui): package current hybrid assetsdaca0acfix(stories): accept composer overlay payloads8c2b9ebfix(stories): align full-bleed output with preview9acae41fix(settings): preserve section deep links4311c4efix(ui): resolve mobile layout findings5af0dbafeat(ui): finalize media publishing and unified inbox35ffc54fix(posts): preserve original media framinge914d0dfix(composer): return published posts to profile1fe2600docs(bugs): add visual issue referencesaf335edfeat(inbox): combine messages and notificationse0d7acefix(composer): tolerate incomplete restored drafts96ee720fix(ui): constrain avatar dimensions33bb885Revert "fix(docker): persist data protection keys"0e9d30ffix(docker): persist data protection keys3764d04refactor(media): remove legacy storage volume3f00917docs(cache): complete Redis implementation checklist73eb57dstyle(cache): format Redis changes3acaa51test(cache): verify transactional invalidation8d1a7detest(cache): verify Redis integration behaviorf951f62test(cache): cover cache policy and resilience23b4729feat(media): add conditional HTTP caching7e6998dfix(cache): bound negative cache lifetime1c7f87bfeat(cache): cache public profile base654f03ffeat(cache): cache feed reads and user contextcd0d164feat(cache): cache tag suggestions2e6444cfeat(cache): cache story asset catalogs9d5dd61feat(cache): cache public organization queries82ff31efeat(cache): cache public discovery queriesfb83534feat(cache): add cache access primitivesb591505feat(cache): configure hybrid Redis caching6cfb1d2feat(cache): add Redis runtime foundation308de41test(composer): align unified flow assertionsbe63763feat(composer): log the publish funnel046a897refactor(composer): remove legacy story flowcd314adrefactor(media): share validation contract limits77e56cfperf(composer): load metadata for inactive videosf01b1a3feat(search): submit composer searches with entera6a4aa9feat(composer): show errors in their local contexte1f9446feat(composer): recover session draft values6104686feat(publish): retry with the same operation53d57f1feat(publish): show upload and processing phases6bb6bc2feat(publish): run local preflight validation024e777feat(stories): separate gallery export with progressd5b157arefactor(stories): reserve more menu for rare actionsccd4d0cfeat(stories): publish to one selected audience538729dfeat(stories): fit music to story duration75b1094feat(stories): return to canvas after insertionca30373feat(stories): insert location widget in one flowde5865cfix(stories): label visual text accuratelyd215b5afeat(posts): edit accessibility for all media900cb1afeat(posts): apply edits to all mediabea0c9cfeat(posts): reorder media with drag handles6d4162ffeat(posts): reveal advanced options progressively2435d12feat(posts): edit caption inline3ae954bfeat(editor): undo the latest edit5f59404feat(editor): drag overlays on the previewebe30cdfeat(editor): show active tool states7ab381dfeat(editor): close single-choice sheets automatically88c922frefactor(editor): keep four distinct post tools029c5aafeat(gallery): retain valid files on partial success4004a97feat(gallery): open editor after confirmation168c5fafeat(gallery): select mixed media in one action9240282feat(capture): show media limits before selectionf2436acfeat(capture): clarify post capture progressionb0b1898feat(camera): explain capture gestures once60f753erefactor(camera): remove duplicate settings menu59a5c6afeat(camera): offer permission recovery actions809a475fix(composer): bind intent entry actions1b2428ffeat(composer): preserve media across mode switchesd97471dfeat(camera): initialize capture only on demanddaff8f8feat(composer): open entry points by intent8de0ae6fix(stories): surface media refresh failures0d86dbffix(maui): require api url on physical devices7d6cd48fix(posts): check idempotency before transcodingb56f677fix(posts): persist edits per media element8c6ec83fix(stories): preview overlays with object urlsc8f642afix(media): accept native iphone gallery formatsae001e6fix(gallery): review selected media inside the appcef77f8fix(camera): hide unsupported automatic flash9f663dcfix(camera): constrain zoom to recordable outputb52ff55fix(media): refresh expired signed urls automatically13f5a1bfix(captions): exclude media blobs from metadata queries68bf184fix(media): fetch only requested content byte rangesf4bcae4fix(uploads): align client timeout with media processingc033557fix(camera): recover from initialization failures28e8168fix(media): isolate preview loading failuresc58ccabfix(camera): await recording finalizationf9337a7fix(composer): reuse publish operation identifiersad0c86ffix(posts): open newly published content8f7c06cfix(stories): preserve composed video durationcf9cab6test(composer): cover reference media editor layout48e9997feat(composer): align media editor with reference design45db819test(composer): cover responsive story camera42bc5e7fix(a11y): include media sheets in modal lifecycledeea67afeat(composer): integrate story camera workflowe48c67ffeat(composer): support story capture modes4a15777feat(composer): add story camera controls50afd5fstyle(ui): standardize responsive layoutsffbc47arefactor(ui): replace composer glyphs with svg iconsf0eb1cdfix(web): enable detailed development errors177597afix(maui): reduce adaptive icon foreground scale51d3613test(composer): cover media capture flowsfe8ea3efix(composer): stabilize camera capture and zoomcfb14f3feat(composer): refine capture controls1eb0ee9fix(ui): preserve mobile proportionsaf1b210test(maui): verify native brand assetsa0f3ef8fix(maui): render mask-safe app iconf65459efix(ci): make package linking idempotentecbf2f2fix(ui): improve mobile responsiveness63a1685fix(web): support mobile safe areas5bf7370fix(a11y): correct story loading semantics127a656test(ui): cover unified media composer63a4138test(api): cover composer audiences and overlays9e2cb56test(domain): cover expanded story visibilitye43289afeat(maui): save stories and request device access8f9a862refactor(ui): route creation through media composer1935114feat(ui): add unified media composer00686a4feat(composer): add client media workflows63582b6feat(weather): add current conditions endpoint5c2342bfeat(stories): extend composition and audiences287f9cdfeat(posts): support unified media workflowsa0e04cafeat(privacy): expand audience query rules0bc8203feat(database): persist unified composer metadata99c0be2feat(composer): extend media and audience contractsb0e5d1adocs(style): replace composer reference images85d4c7cfix(ci): authenticate package links with registry tokenc99b379test(ui): cover modal history completion6f28461fix(ui): await modal history completione7da48ctest(ui): guard modal history navigation6c1fd2cfix(ui): prevent modal history from reloading routesfb4c57btest(ui): cover modular composer behavior4b05543test(api): cover story composition validationf9ecf0dstyle(ui): add composer studio layouts0a6637dfeat(admin): link the story media catalog4bbfd73feat(admin): add story media catalog managemente91e588fix(stories): stabilize ownership and viewer cleanup700e9affeat(stories): implement the modular story studio967f1cfbuild(ui): load modular story scripts0421904feat(stories): add media inspection module221ad7ffeat(stories): add canvas interaction module22e36f7feat(stories): add camera gesture module6f34f10feat(ui): extend composer DOM helpersf0bb926refactor(posts): modularize the content composer78ee73efeat(story-ui): add composer building blocksc90936cfeat(client): support composed stories and asset catalogsf97244afix(stories): prioritize own stories in feed5ff3570feat(api): expose composed story and catalog endpoints2b297e4feat(media): compose layered story output4418708feat(migrations): add story composition catalogs4dff24efeat(data): map story composition persistence9872a1afeat(contracts): define composed story asset APIs97c83d7feat(domain): add story composition catalog entitiesa0f1ce9docs(composer): document modular post and story flows0c4a8b5docs(ui): add composer reference images6b9f315ci(packages): link container images to repository4340d7etest(ui): cover post interactions and shared branding4d261b0feat(branding): add shared logo to web app6bb8cdffeat(branding): use shared logo for Android appadf0ddafix(ui): stabilize modal transitions92736e0fix(ui): preserve post styling across interactions3c9cb19refactor(posts): simplify actions and improve comment replies9fdc0bffix(auth): open login directly from guest profile action301eb5cfix(auth): persist sessions over local HTTPe1a3758fix(feed): exclude own posts from all personal feeds7871b52fix(ui): prevent vertical post media scrollingf561366refactor(ui): remove guest feed lock icons96cd3e1feat(ui): refresh feed with pull gesture94385a5fix(ui): ignore canceled story cleanup257fe47refactor(ui): render complete posts directly in feedf1132aefix(ui): keep one centered header search760a13cfix(ui): show only custom audio controls0f93ae9fix(auth): preserve sessions until backend rejection4b0b9e7chore(ui): remove completed UI UX findings1bb78b8fix(ui): resolve finding STORY-009 - allow runtime safe-area offsets0cf7903fix(ui): resolve finding GLOBAL-009 - verify atomic preference persistence03efd74test(ui): align mobile typography regression gate823e4cefix(ui): resolve finding BUG-033 - verify responsive comment dialog15ef37cfix(ui): resolve finding FEED-009 - verify comment textarea focus3939d7cfix(ui): resolve finding STORY-008 - verify semantic story selections4e8eec0fix(ui): resolve finding MEDIA-014 - verify stable video playback segment8addd58fix(ui): resolve finding GLOBAL-017 - verify modal attribute restoration044c7b2fix(ui): resolve finding STORY-009 - constrain long story text3c7a97afix(ui): resolve finding GLOBAL-008 - complete story semantic tokens3c084dbfix(ui): resolve finding BUG-045 - dismiss mobile topbar menusf16b625fix(ui): resolve finding BUG-044 - align search input validationbf67b3efix(ui): resolve finding BUG-043 - serialize reconnect recovery3879c7bfix(ui): resolve finding BUG-042 - guide guest topbar actionsb0bc8f0fix(ui): resolve finding BUG-041 - preserve place detail metadatac20f64bfix(ui): resolve finding BUG-040 - prevent duplicate create actions9c4d24ffix(ui): resolve finding BUG-039 - validate optional usernamesff9b1f4fix(ui): resolve finding BUG-038 - clarify multi-day event times2863659fix(ui): resolve finding BUG-037 - qualify accessibility informationa9d019afix(ui): resolve finding BUG-036 - correct discovery filter copyf99d34bfix(ui): resolve finding BUG-035 - preserve answer focus on reorderc6129f1fix(ui): resolve finding BUG-034 - key dynamic content cardsc36cec6fix(ui): resolve finding BUG-033 - preserve comments while paging629ec4ffix(ui): resolve finding BUG-032 - secure account confirmations07d2473fix(ui): resolve finding BUG-031 - isolate support ticket requestsb2ddee2fix(ui): resolve finding BUG-030 - contain request timeoutsa235364fix(ui): resolve finding BUG-029 - validate moderation target actions3227c89fix(ui): resolve finding BUG-027 - route event proposals correctly62e8d53fix(ui): resolve finding BUG-026 - keep guest help content visible0f26118fix(ui): resolve finding BUG-025 - distinguish anonymous sessions403502afix(ui): resolve finding BUG-024 - honor safe login return targets06c7375fix(ui): resolve finding BUG-023 - save settings atomically4c450e8fix(ui): resolve finding BUG-022 - clear hidden request fieldsc090984fix(ui): resolve finding BUG-021 - identify own profile routes1f8ad29fix(ui): resolve finding BUG-020 - reject stale search resultsb237c2efix(ui): resolve finding BUG-019 - persist search in browser history5750a52fix(ui): resolve finding BUG-017 - decouple notification navigationfb6f3eafix(ui): resolve finding BUG-016 - route message request notifications1adbf0ffix(ui): resolve finding BUG-015 - keep reconnect recovery visibleb9fbc0ffix(ui): resolve finding BUG-014 - expose fatal error recoveryeb55d56fix(ui): resolve finding BUG-013 - preserve navigation section context9bf4a3dfix(ui): resolve finding BUG-012 - retain mobile page guidance70eb0fbfix(ui): resolve finding BUG-011 - align effective theme effects72020e9fix(ui): resolve finding BUG-010 - guard story playback lifecycle8ff4b90fix(ui): resolve finding BUG-008 - stabilize reply composer layout20fd3effix(ui): resolve finding BUG-007 - preserve comment drafts6afe8cefix(ui): resolve finding BUG-006 - paginate complete comment threads158c03efix(ui): resolve finding BUG-005 - synchronize content mutations81f56d8fix(ui): resolve finding BUG-004 - show full detail textf813432fix(ui): resolve finding BUG-003 - canonicalize feed modes4785c78fix(ui): resolve finding BUG-002 - reject stale feed modes1510177fix(ui): resolve finding MOTION-006 - stop autoplay for reduced motionc187a59fix(ui): resolve finding MOTION-005 - animate list mutations93bea33fix(ui): resolve finding MOTION-004 - coordinate modal exitsc54bbecfix(ui): resolve finding MOTION-003 - orient tab transitionsc469aebfix(ui): resolve finding MOTION-002 - confirm optimistic toggles04f60e5fix(ui): resolve finding MOTION-001 - standardize press feedback8bdb805fix(ui): resolve finding A11Y-015 - focus visible media pickers852bc12fix(ui): resolve finding A11Y-014 - name answer vote actions350d82ffix(ui): resolve finding A11Y-013 - identify selected poll optionsa986353fix(ui): resolve finding A11Y-012 - enforce WCAG browser matrixe17abe1fix(ui): resolve finding A11Y-011 - enlarge specialist touch targets2a455e7fix(ui): resolve finding A11Y-010 - link and focus form errorsdc67b0ffix(ui): resolve finding A11Y-009 - preserve question media alternatives34486d9fix(ui): resolve finding A11Y-008 - expose an accessible message loga6f8bdcfix(ui): resolve finding A11Y-007 - clarify recursive comment threads47d0392fix(ui): resolve finding A11Y-006 - manage dynamic panel focus87fff4cfix(ui): resolve finding A11Y-005 - make region search accessiblee44a5d7fix(ui): resolve finding A11Y-004 - use native profile selects0ef12e7fix(ui): resolve finding A11Y-003 - include native modal controlsa1ec930fix(ui): resolve finding A11Y-002 - scope post background colors9eb0b54fix(ui): resolve finding MEDIA-010 - normalize uploaded media557435afix(ui): resolve finding MEDIA-009 - reserve feed media spaced62706efix(ui): resolve finding MEDIA-008 - isolate active carousel slidescd1a4f1fix(ui): resolve finding MEDIA-007 - refresh expired media linkse59e0a2fix(ui): resolve finding MEDIA-006 - restore accessible audio controls97c8eaefix(ui): resolve finding MEDIA-005 - separate transcripts and timed captions32b20e4fix(ui): resolve finding MEDIA-004 - preserve image uploads during optimizationc9635c1fix(ui): resolve finding MEDIA-015 - unify reversible story layersceea280fix(ui): resolve finding MEDIA-014 - add story video editingd6ae716fix(ui): resolve finding MEDIA-013 - add accessible story text overlays710b8fffix(ui): resolve finding MEDIA-012 - add post image adjustments7346952fix(ui): resolve finding MEDIA-011 - enable media replacement and orderinga1cd8c2fix(ui): resolve finding MEDIA-003 - add story image transform editorb82aa45fix(ui): resolve finding MEDIA-002 - add post image crop and rotation8dc3102fix(ui): resolve finding MEDIA-001 - recover blocked media permissionsa4a4ab6fix(ui): resolve finding STORY-012 - announce story item changesd9944d9fix(ui): resolve finding STORY-011 - use honest story mode toggles8fb531ffix(ui): resolve finding STORY-008 - expose story selection statesac0d0a9fix(ui): resolve finding STORY-007 - detect story audio server sidec785c4dfix(ui): resolve finding STORY-006 - add persistent media error recovery7d5ebacfix(ui): resolve finding STORY-005 - preserve story drafts and back navigation7886fa8fix(ui): resolve finding STORY-004 - show owner story visibility0cb5393fix(ui): resolve finding STORY-010 - protect story viewer controlsa63e945fix(ui): resolve finding STORY-009 - constrain long story text977331cfix(ui): resolve finding STORY-003 - fit story media in landscape69f8967fix(ui): resolve finding STORY-002 - bind story mutations to itemsbab4c04fix(ui): resolve finding STORY-001 - make story publishing cancellable2f96284fix(ui): resolve finding POST-010 - explain composer validation statesb73740bfix(ui): resolve finding POST-009 - reuse composer for post editing9eb1e41fix(ui): resolve finding POST-008 - add capture review workflow0ae97b5fix(ui): resolve finding POST-007 - preserve composer detail state7278278fix(ui): resolve finding POST-007 - add mentions and post locations940a169fix(ui): resolve finding POST-005 - add cancellable upload progress9dbf098fix(ui): resolve finding POST-006 - prevent duplicate post publishingb229b34fix(ui): resolve finding POST-004 - add final production previewffbbfadfix(ui): resolve finding POST-003 - protect account draft recoverya41ac59fix(ui): resolve finding POST-002 - add responsive composer stepse83d6a3fix(ui): resolve finding FEED-015 - add private saved posts8f6bf23fix(ui): resolve finding FEED-014 - add complete post links1b96122fix(ui): resolve finding FEED-013 - expose additional post tags1498c59fix(ui): resolve finding FEED-012 - add native content sharing684696efix(ui): resolve finding FEED-011 - clarify question answer pathcb5184cfix(ui): resolve finding FEED-010 - report comments and answers7549a30fix(ui): resolve finding FEED-009 - support multiline comment submission8f21403fix(ui): resolve finding FEED-008 - orient horizontal feed tabsa4858d2fix(ui): resolve finding FEED-007 - announce loaded feed pagesb994c94fix(ui): resolve finding FEED-006 - update mutated feed cards locally2af9776fix(ui): resolve finding FEED-005 - match feed skeleton structure2435625fix(ui): resolve finding FEED-004 - buffer refreshed feed items122ef19fix(ui): resolve finding FEED-003 - add manual feed pagination32ba936fix(ui): resolve finding FEED-002 - preserve loaded feed context7a62bb1fix(ui): resolve finding FEED-001 - identify protected feed modes53e33fdfix(ui): resolve finding WEB-005 - align native platform supporte24454dfix(ui): resolve finding WEB-004 - add accessible icon tooltipsbd8b9a1fix(ui): resolve finding WEB-003 - align card hover affordances34cb73cfix(ui): resolve finding WEB-002 - render static web boot state6825620fix(ui): resolve finding WEB-001 - constrain desktop reading widthsda35fcffix(ui): resolve finding MOBILE-007 - support small-height sheets979c1f6fix(ui): resolve finding MOBILE-006 - expand small-screen searchf6b5765fix(ui): resolve finding MOBILE-005 - support legacy WebKit fallbacks53472defix(ui): resolve finding MOBILE-004 - replace framework branding3e74ecffix(ui): resolve finding MOBILE-003 - close modals on system back50a67e5fix(ui): resolve finding MOBILE-002 - synchronize native system bars4fc0e1dfix(ui): resolve finding MOBILE-001 - centralize native safe areas53659c5fix(ui): resolve finding GLOBAL-015 - clarify moderation confirmationa4a8e09fix(ui): resolve finding GLOBAL-014 - check username availability932b146fix(ui): resolve finding GLOBAL-013 - add password visibility controls2fd38f3fix(ui): resolve finding GLOBAL-012 - notify request owners1d20ae1fix(ui): resolve finding GLOBAL-017 - restore modal page state5c24ddefix(ui): resolve finding GLOBAL-016 - indicate unread notifications491c6a8fix(ui): resolve finding GLOBAL-011 - verify notification paginationb4820e0fix(ui): resolve finding GLOBAL-010 - prioritize active support queues9cfb2ecfix(ui): resolve finding GLOBAL-009 - expose notification preferences7c42ee3fix(ui): resolve finding GLOBAL-008 - complete semantic color tokense9d6f97fix(ui): resolve finding GLOBAL-007 - tolerate unavailable theme storage5adb514fix(ui): resolve finding GLOBAL-006 - ignore stale async responses5532d17fix(ui): resolve finding GLOBAL-005 - paginate growing listsfc8b9a8fix(ui): resolve finding GLOBAL-004 - protect unsaved form changesae8a733fix(ui): resolve finding GLOBAL-003 - distinguish disabled and busy controlseccb9adfix(ui): resolve finding GLOBAL-002 - classify recoverable errors8748045fix(ui): resolve finding GLOBAL-001 - preserve protected route return pathse0744d8fix(ui): resolve finding BUG-028 - serialize report resolutions9c269b4fix(ui): resolve finding BUG-009 - scope story keyboard shortcuts4d96cfffix(ui): resolve finding BUG-001 - render infinite scroll updatese9addfcfix(ui): resolve finding A11Y-001 - correct semantic color contrastdca2e1cfix(ui): resolve finding MEDIA-001 - add native media permissions781d8a9fix(ui): resolve finding POST-001 - add post visibility selection3e9c298fix(ui): resolve finding BUG-018 - restrict external URLsc39d483docs(ui): add UI UX findings backlog65b0653docs(ui/ux): design definition5936245fix(feed): show protected modes to guestsd6a4810fix(feed): show community posts to guests13555cffeat(comments): add threaded voting dialog4f2f8e1feat(comments): add authenticated client interactions465b682feat(comments): expose threaded voting api45426edfeat(comments): persist user votes8952ed1fix(stories): refine guest and own story actions64a668efix(content): wrap media carousel navigation6486d72fix(feed): exclude own posts from recommendationsfe3c25ffeat(feed): add public all mode1b9a780fix(profile): reorder account actionsa663560fix(auth): redirect successful login to feed2795d40refactor(ui): standardize interface iconseed41a8fix(accessibility): announce reconnect states770661dfeat(settings): add mobile section navigatione30f1d7fix(content): remove duplicate detail title9a10b88fix(localization): format times in browser timezone96fe9d8fix(accessibility): label external link behavior70b8e1btest(ui): add browser accessibility matrix23c1dc5perf(ui): disable mobile backdrop blura9e555bperf(stories): reduce video preloadinge1f60c0fix(stories): confirm destructive deletion84d71b2fix(accessibility): announce feed loading states5f4344ffix(accessibility): focus persistent main contentd44d97efix(responsive): simplify mobile team navigation438c833fix(responsive): balance mobile typography9c84b15fix(accessibility): honor forced color preferences34b69ebfix(accessibility): increase brand text contrastc96ea3cfix(accessibility): identify active profile sectionfa4bd71fix(accessibility): limit character count announcementsd58a738fix(accessibility): focus and describe form errors07d15d9fix(accessibility): implement searchable combobox behavioref67bb4fix(accessibility): expose story media picker37ea4a4feat(accessibility): expose story playback status0dc3139fix(accessibility): enlarge mobile touch targets88ef873fix(accessibility): restore comment focus indicator66ff5fbfix(accessibility): isolate modal background9f3306bfix(layout): reflow complex mobile content8b74c73feat(composer): streamline mobile creation tools6899122fix(posts): use mobile viewport width5a0ca78feat(posts): simplify mobile action menua537328feat(discovery): add missing detail pagesd988939feat(accessibility): add media captions and transcriptsed790d2feat(accessibility): add media alternative textd797fc2test(media): cover database upload buffering815ff9efeat(media): import legacy files into databasede1ed0afeat(media): store uploaded files in databasec32a23brefactor(feed): simplify stories and posts header6a00d22fix(api): restore opt-in Swagger endpoint7e15bf9fix(layout): contain root page scrolling0c6fa5cfix(comments): keep visibility query translatable04905fffix(errors): show actionable server references76aa8a2fix(errors): use application-specific exception handlers95928bdfix(migrations): recover content vote upgrade76db1fftest(web): smoke test public application routesaee919bfix(database): apply migrations before serving requestsf583a0atest(copy): repair validation fixture encoding8dc13d8test(ui): guard responsive accessibility styles2212dfdfix(hosting): respect HTTP-only container bindings9d62d1etest(containers): smoke test API and web images1f10b33test(voting): cover concurrent database writes212c7bdtest(privacy): verify content visibility on MariaDB049f543docs(readme): align setup with current application1274f18fix(copy): repair corrupted validation messages854088efix(theme): define referenced visual tokense5c5a31feat(content): add public content detail pagesd77d155fix(feed): avoid duplicate ranking explanations1278244feat(moderation): expose immutable decision historyf812ad4feat(feed): explain personalized recommendations8725389feat(composer): preserve text drafts locally102aff4feat(stories): show private owner insights31b2c21fix(account): purge personal interactions on deletion2efc819fix(voting): enforce one content vote per user75bf5d0fix(account): describe permanent anonymization accuratelyb67589cfix(media): preserve signed content audience access8b8f06afix(privacy): hide unavailable accounts from public readsf279ba7refactor(auth): remove obsolete email confirmation state14e2ec0refactor(auth): align account API with username logine9f4fb9refactor(infrastructure): remove unused persistence models834f7e0refactor(infrastructure): remove nonfunctional outbox processor53bd34cfeat(account): provide immediate personal data exportc791429perf(discovery): paginate events and places25472deperf(navigation): refresh header only when authentication changes412befefix(accessibility): describe meaningful post and story media13f5017fix(accessibility): allow zoom in mobile app29a2b04fix(accessibility): preserve contrast on post backgroundse753219fix(accessibility): increase form field contrast1597635fix(accessibility): manage focus inside modal dialogsbbac2defix(accessibility): make custom dropdown keyboard operablef2ee88efix(stories): enforce media access and recoverya3fdd7ffix(stories): verify video duration server sidebdf62d2perf(profile): stream compressed avatars from storage19aec21perf(media): stream uploads outside the databasebeac4d8feat(moderation): require contextual review decisions1fd3e98feat(discovery): replace placeholder with OpenStreetMapfa6471ffeat(settings): apply saved appearance preferences52ecbeefeat(comments): paginate replies with author context8fed2d4fix(feed): replace bounded offsets with seek pagination34b28defix(feed): align filters with personalization settingsf324bbefeat(notifications): add accessible notification center200a3f9feat(profile): activate activity and relation tabsbfa641ffix(content): manage all owned content types182a2adfeat(questions): add answer-focused detail pagefe7dbccfix(events): render dedicated event cards61cf650feat(moderation): publish approved help requestsbf61854feat(messages): complete request and conversation flowse422483fix(search): render typed grouped resultsa0d4732fix(auth): expire rejected sessions explicitly9544814fix(auth): protect persisted session tokens1d01ea3fix(security): make development services opt in08c9fbcfix(media): use configured public API URLsc522f80fix(content): enforce visibility on public readsc23afdbfeat(feed): add media carousel and voice player6fce2cefeat(feed): allow guests to browse public content2c59d06fix(docker): bind application settings from env file802af7erefactor(ci): share build and deploy workflowef0dd79chore(ci): changed api url variable77f183arefactor(docker): simplify environment configuration119b0e3fix(ci): inject API URL into Android buildb7dd6fefeat(maui): accept build-time API URL0930025fix(ci): install Android SDK build tools5e37f7fdocs: generalize .NET 10 requirement052819cfix(build): allow all .NET 10 feature bands27ee48afix(docker): pin internal HTTP portsd0ce491fix(ci): publish api and web images8c465f8refactor(docker): simplify runtime compose configuration9d010aarefactor(docker): extract service dockerfilesc961263fix(ci): provide compose variables during image buildsc3651ffci(deploy): schedule development releases nightlya1fbea4ci(deploy): publish development images and apk releases2af0e50build(version): configure development versioning1d0c9b1test(app): cover expanded account and content workflows82cf65efix(web): skip unavailable https redirect in development2445120style(ui): polish responsive content surfaces8de49d1feat(profile): expand profile and account settings47ccf7dfeat(help): add standalone support ticket views891fde9feat(feed): redesign composer and post interactions444e575feat(stories): add creation and viewing experiencee059cf2feat(client): integrate expanded community workflowsf10aff7feat(api): add profile and account controlsdf489c8feat(api): add support ticket lifecycled39d210feat(api): support rich posts and moderation reports7a0bf4cfeat(api): expose story publishing and interactionsa2c5e88feat(auth): simplify registration and stabilize sessionsdb4fadbfeat(database): persist stories media and profile sexuality2a53654feat(contracts): expand account content and story APIsad5bc55feat(domain): model stories reports and account metadata648ec79test(client): cover session feed and comment requests4c60accfeat(ui): redesign responsive application shelle41f62bfeat(feed): add polls comments and bounded loading8d6e7eafeat(profile): enhance profile and settingscf2f2aafeat(help): add request and moderation viewsca073effeat(client): integrate community and profile APIs068c0e6feat(api): expose community content and help workflowsc92bd79feat(database): persist requests polls and birth dates5d63e23feat(domain): add requests polls and profile metadata35d48a0docs(safety): document moderation and privacy01f7908docs(feed): document ranking model14b945cdocs(api): document HTTP APIfa6e39ddocs(database): document data model and migrationsef45a15docs(architecture): document system design1b594fadocs: add project overviewb78dfectest(api): add API boundary tests79f5563test(architecture): add dependency rule tests45eafc0test(application): add feed ranking tests0a1bf14test(domain): add domain rule tests174a3b6feat(maui): add Windows platform host546531dfeat(maui): add Mac Catalyst platform host3a20705feat(maui): add iOS platform host6060966feat(maui): add Android platform hostaf42dd3feat(maui): add hybrid application shellf0641a1feat(web): add Blazor web host7b02b20feat(ui): add moderation page47fc26efeat(ui): add account pagesccd9c17feat(ui): add messaging and search pages1a5d625feat(ui): add discovery pages6965b6bfeat(ui): add community feed7845ca6feat(ui): add authentication pages4dfca0ffeat(ui): add responsive application shell8956d96feat(ui): add reusable components6e5b4a3feat(ui): add API client3251413feat(ui): initialize shared UI3be577bfeat(api): add application host2f32dcffeat(api): add community endpoints719942afeat(api): add discovery endpointsd1d4aa2feat(api): add content endpoints316f9e1feat(api): add user endpoints3816915feat(api): add authentication endpoints6a7ec66feat(api): add routing and authorization foundationf74d710chore(observability): add service defaults14527d0feat(database): extend profiles and remove saved content429fc2cperf(database): optimize conversation participant lookup7bd1cdeperf(database): index session access tokens087578efeat(database): add initial schemad90dcb3chore(migrations): add migration projecte28b3b4feat(infrastructure): register infrastructure services697fd16feat(infrastructure): add development fixtures8340d85feat(infrastructure): add background servicesc622c8ffeat(auth): add session token service55875b1feat(infrastructure): add identity persistence773abf4feat(application): add feed rankingbe484c0feat(application): add input validators3419c02feat(application): add result modelaeb2e91feat(contracts): add community contractsfe7193dfeat(contracts): add discovery contractsdbf685efeat(contracts): add content contracts730f999feat(contracts): add authentication contracts651b7f3feat(contracts): add common API contractsdab075dfeat(domain): add trust and safety modela8eb32efeat(domain): add organization model6832178feat(domain): add messaging modeld183d26feat(domain): add discovery modelceaf47ffeat(domain): add content modeld12d9bdfeat(domain): add user modelfecb6defeat(domain): add shared domain primitives6ef1777chore: add local development environment67d2851chore: initialize .NET solution
Downloads