Skip to content

Releases: Selftend/selftend

v0.25.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 28 Sep 20:33
0453186

0.25.0 (2026-09-28)

Features

  • design: Nunito leaves the app surface - headings are Noto Sans 700 (#2770) (26bb69f)
  • home: the catalogue loses its cards - hairline rows, one item per line (#2771) (34c6bcc)
  • releasing: the r/Selftend post becomes a link to the GitHub Release, like Discord's #changelog (#2761) (41a0522)
  • tools: move session start CTA to the top of setup scroll order (#2769) (bcd16af)

Bug Fixes

  • meditation: fade the bell's tail to silence and gate bell tails from below (#2777) (edddb17)

v0.24.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 25 Sep 12:41
6fc470b

0.24.0 (2026-09-25)

Features

  • capture: the capture job seeds a staging account itself, behind an allowlist that fails closed (#2730) (#2749) (b1d49d5)
  • db: drop record_days (#2459) (#2720) (8248142)
  • modules: the module gate and the three explainer pages fail together, and the readiness bar moves to where the lifter reads (#2716) (122aa51)
  • policies: redden when production holds a policyVersion that main does not ship (#2737) (#2739) (9d2ee48)
  • privacy: §8 names what a programme leaves behind, in en and bg (#2554) (#2611) (625868e)
  • releasing: one hold-out register, a merge gate that makes a hold-out findable, and a weekly alarm when its condition comes true (#2717) (5be1270)
  • reminders: the general and DBT reminders start arriving - the hold-out list is empty for the first time (#2698) (7b64e96)
  • review: the App Review account gets an owner-only production seed and a weekly staleness alarm (#2731) (#2750) (3069fa7)
  • routines: the six DBT tools become routine steps - the write hold-out is lifted (#2713) (7bc7ca8)
  • store: the App Store release notes get a file, a corpus join and a README row (#2604) (#2634) (5413345)
  • store: the Play feature graphic loses beat two, and its README stops citing a retired clause (#2610 item 10) (#2637) (52a9f27)

Bug Fixes

  • a11y: the modal Escape rendered under the status bar, because SafeAreaView measures zero in a Modal (#2650) (3a83b54)
  • auth: the age gate's Continue sat under the keyboard, because nothing padded for it (#2649) (6531c8f)
  • ci: recover from the two flakes that have cost the iPad half its runs (#2651) (2270d58)
  • ci: the App Store capture job stops reporting into production Sentry as a user (#2726) (#2727) (f0f551c)
  • ci: the capture flow reaches sign-in by deep link, and the phone's age gate actually submits (#2645) (adf7bd7)
  • ci: the capture job's flake fixes land, and its header stops saying it cannot capture (#2704) (6007a55)
  • ci: the dormant screenshot flow is corrected to the decided five (#2610 item 16) (#2642) (a3ab320)
  • ci: the screenshot flow predated the age gate, and that was the real blocker (#2610 item 16 follow-up) (#2644) (ba8bfc0)
  • sentry: screen the spoofed device farm in beforeSend, because Sentry cannot filter it inbound (#2577) (#2612) (8dcfbd5)
  • sound: the web bed plays again - require() of an audio file is a URL string on web (#2509) (#2748) (a42a724)

v0.23.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 18 Sep 11:15
aed79a2

0.23.0 (2026-09-18)

Documentation

  • releasing: the squash title comes from the PR title, and a stale one stranded a release (#2587) (d63d43d)

v0.22.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 18 Sep 09:02
a85a19a

0.22.0 (2026-09-18)

Features

  • modules: CBT, ACT and DBT hidden on iOS, shipped as beta on Android and web (#2579) (2500b2d)

Bug Fixes

  • sentry: the offline filter only spoke Android and Chrome, and an emailed link opened elsewhere paged someone (#2578) (dc55e67)

v0.21.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 17 Sep 08:42
7ce115a

0.21.0 (2026-09-17)

Features

  • analytics: a degenerate account half announces itself in the segment orderings (#2559) (#2571) (3c12997)
  • analytics: quiet-duration buckets, with no threshold and no such word (#2553) (#2566) (ff538e4)
  • analytics: the report sees the fossil - who left, and at which phase (#2552) (#2565) (42544eb)
  • android: optimised resource shrinking, measured rather than assumed (#2335) (#2522) (73b0e11)
  • modules: the programme fossil becomes a contract, not an accident (#2551) (#2564) (ee7641a)
  • nav: Looking back leaves the product (#2431, #2455) (#2462) (4fc038e)
  • reminders: the general reminder target, held out - registry, client, edge and copy (#2491) (#2498) (b4f7d5c)
  • reminders: the general reminder's columns, dedup keys and export (#2489) (#2497) (2618b9a)
  • reminders: the Reminders screen's two runs - the "For each tool" eyebrow under the general row (#2492) (#2499) (34685a1)
  • routines: the completion sheet states the record and stops (#2488) (#2514) (87e3706)
  • seo: /habits, the second public explainer page (#2470) (#2518) (6836509)
  • seo: /meditation, the first public explainer page (#2469) (#2512) (a74ced8)
  • seo: one SiteFooter on every public page, labelled by each page's H1, with its pin (#2467) (#2487) (09d9c88)
  • seo: the privacy page links /security and /account-deletion as real anchors (#2476) (#2486) (55dbc23)
  • seo: two truthful properties on the WebSite node, and nothing else (#2468) (#2502) (cede03a)
  • sound: each ambient bed declares its nominal length, pinned by an mdhd byte test (#2504) (#2511) (a656195)
  • sound: the lane holds two players and crossfades a swap, and the web bed loops on a buffer (#2506) (#2517) (f75ea91)
  • sound: the sound door and the sound panel, changing the bed from inside a sit (#2507) (#2519) (f39c65a)
  • store: the App Store description joins the repository, and every copy gate now reads it (#2524) (#2543) (97416c2)

Bug Fixes

  • a11y: the crisis callout and the cookie banner become real anchors (#2496) (#2561) (e1a6e04)
  • audio: the limiter's head hole leaves the beds - :latency=1 and the nine masters re-run (#2508) (#2521) (4a8421f)
  • favorites: the card's web hover washes the card, not a box inside it (#2407) (#2427) (1c97653)
  • modules: completion stops being erased - completed_at means the last time you finished (#2550) (#2563) (3c5530f)
  • seo: sameAs must name canonical URLs, and the deploy now checks (#2410) (#2444) (9ca8448)
  • store: a field the pull does not carry is not drift, and the run now says which (#2540) (#2541) (19b3713)
  • store: promoText leaves the mirror, because App Store Connect never held it (#2540) (#2545) (fabe719)

v0.20.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 15 Sep 12:18
36ce5ad

0.20.0 (2026-09-15)

Features

  • analytics: first occurrences (#2379) (#2392) (787cfa4)
  • analytics: gate the content-table list against the live schema (#2374) (#2383) (f277192)
  • analytics: guest-to-registered conversion, favourites, and the word completion (#2376) (#2387) (0a144be)
  • analytics: k=5 governs all three reports, and each one says who is in its population (#2373) (#2382) (86f5a18)
  • analytics: open-shape sections say when they have no rows (#2378) (#2391) (2b69c64)
  • analytics: re-base the segment report onto locale and module usage (#2377) (#2390) (d242f77)
  • analytics: read auth through digest-owned views, so the digest role can exist (#2393) (#2394) (9ae0cd6)
  • analytics: report the programme funnel and reminder adoption (#2375) (#2385) (bb0a2a1)
  • analytics: the scheduled monthly digest (#2381) (#2395) (b2ff36a)
  • cbt: the patterns and the feelings become rows (#2349) (#2351) (89187a9)
  • cbt: the patterns list folds to what was chosen (#2350) (#2352) (625bd86)
  • ios: the app claims the apex only for universal links, and the www carve-out has its retirement step (#2298) (#2321) (da13182)
  • journal: the writing chart reserves its space while it loads (#2347) (#2358) (f957161)
  • measurement: every new account records which of the four doors it came through (#2323) (#2326) (7a52220)
  • measurement: the three web-facing store links carry a source tag (#2324) (#2339) (196d409)
  • mood: the emotion grid holds its space, and ADR-0009 says why (#2345) (#2354) (e5f046b)
  • mood: the emotion grid moves to the end of its column (#2348) (#2359) (83e37a9)
  • mood: the week block holds its space while it loads (#2346) (#2357) (13e6958)
  • notifications: the completion moment stops asking (#2342) (#2355) (06dabc9)
  • privacy: drop reminder_prompted_tools, column and rows (#2343) (#2356) (0b79698)
  • progress: Your days gates on span, and opens on the last mark (#2344) (#2353) (382e5df)

Bug Fixes

  • ci: the iOS release job waits out Apple's queue, not just the build (#2337) (#2397) (3d9be78)
  • measurement: the user menu is not a visitor surface, and the tag guards say what they cannot see (#2324) (#2340) (fc55d0d)
  • mood: the manage-emotions door stays shut while its read is in flight (#2360) (#2361) (8f95a8c)

v0.19.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 10 Sep 20:50
a04750b

0.19.0 (2026-09-10)

Features

  • web: every public route owns its head, and the document title follows the H1 everywhere (#2294) (#2300) (60ad87d)
  • web: the index list prunes the export, writes the sitemap, and every other path is a real 404 (#2295) (#2311) (7c9fe06)
  • web: the landing page says who publishes it, in one structured-data block (#2296) (#2312) (71ac85b)
  • web: the static export, with the landing page complete (#2293) (#2299) (1e438dc)

v0.18.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 09 Sep 12:50
362d8ff

0.18.0 (2026-09-09)

Features

  • a11y: CrisisSupportCallout takes a heading level, and /support + /faq raise it to 2 (#2137) (#2164) (949d42e)
  • a11y: Disclosure becomes a full-width heading row (#2143) (#2156) (72e600a)
  • a11y: the crisis callout is a level-2 block on the module homes too (#2167) (#2168) (b9f320e)
  • a11y: the parents' letter gets its five sub-heads (#2149) (#2161) (6944416)
  • a11y: the underage-report route gets its own sub-head in the parents' letter (#2162) (41dadaa)
  • act: a help door in each ACT process list-screen header (#1549) (d8656e1)
  • act: archive rows read compact, detail screens absolute (#1558) (bfd09df)
  • act: every ACT record type gets a reachable archive (#1552) (ca9b662), closes #1517
  • analytics: retention gets a concern axis, and every report gets a guest axis (#1613) (#1649) (8e3e4c9)
  • audio: an opt-in tap for each meditation bell and each breath phase, off by default (#1741) (#1754) (961d777)
  • audio: nine background beds, a fixed loudness gate, and the app plays them (#1130) (#1569) (65b823d)
  • audio: the render pipeline speaks two languages (#1578) (#1584) (9a7d7d5)
  • auth: a guest's Sign in door in the header menu (#1869) (#1895) (73a854a)
  • auth: the Art. 9 consent becomes its own act, asked of everyone (#1766) (#1858) (ffc0df1)
  • auth: the neutral age and country gate, on every entry path (#1764) (#1806) (fd49def)
  • auth: the per-country age floor, and the check that reads it (#1761) (#1773) (cac547f)
  • auth: the under-floor exit erases the account and blocks the device (#1765) (#1821) (db30794)
  • auth: user_preferences remembers the age gate's verdict, never the birth date (#1762) (#1797) (4cfa2cf)
  • breathing: the ambient bed fades in and out instead of cutting dead (#1743) (#1751) (b4433af)
  • breathing: the voice cues are real, and the male voice becomes reachable (#1130) (#1572) (5ede2c4)
  • cbt: the assessment week leads with the active practice (#1676) (#1680) (654a26f)
  • cbt: the Learn surface teaches pace and mode, and the FAQ answers over-use (#1671) (#1684) (1e3ba33)
  • db: a favorites table, the 25→11 copy migration, export and seeds (#1953) (#1962) (44b5f21)
  • dbt: opposite action and the interpersonal script (#1980) (#2031) (0efb12e)
  • dbt: routines, the starter offer, the demo seed, the reports and the docs (#1980) (#2033) (a4236b5)
  • dbt: the coping plan, its card, and Pause and choose (#1980) (#2027) (8542b26)
  • dbt: the data layer - seven born-encrypted tables, preferences, record_days, export (#1980) (#2024) (dcc8a79)
  • dbt: the emotion record - one feeling from what happened to what came after (#1980) (#2029) (e543b08)
  • dbt: the module home, the learn primer and four skill-group pages (#1980) (#2026) (a10a581)
  • dbt: the muscle relaxation session, the module's first timed practice (#1980) (#2028) (ca72f87)
  • dbt: the programme, its graduation, and the module's one reminder (#1980) (#2032) (4cfcab2)
  • dbt: the wise mind check-in and the judgement record (#1980) (#2030) (0cf32f7)
  • donate: the donation path is wired — a Donate row, the Sponsor button, and present-tense policy copy (#1711) (#1720) (c29d52b)
  • grounding: cold-water technique carries its medical caution inline (#1996) (#2014) (2cb062a)
  • home: one card with a star, and Home becomes Favourites, Tools, Modules (#1955, #1956)...
Read more

v0.17.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 28 Aug 08:59
5647601

0.17.0 (2026-08-28)

Features

  • i18n: screen the Weblate component pass against main before it creates anything (#1105) (#1503) (be2cc78)
  • meditation: mindful walking and eating return to the practices reference (#1530) (#1534) (1fac11c)
  • meditation: TMI's half-time check-in bell (#1189) (#1276) (d2a9e18)

Bug Fixes

  • i18n: call the recovery mindfulness strategy a calming practice (#1507) (#1508) (180500e)
  • i18n: tell a missing alerts endpoint apart from an unreadable one (#1105) (#1506) (5bada16)
  • i18n: title-case the calming practice strategy label (#1507) (#1509) (4b85652)

v0.16.0

Choose a tag to compare

@vasilyoshev vasilyoshev released this 27 Aug 17:28
a6372ef

0.16.0 (2026-08-27)

Features

  • act: ACT overview gets real headings and three lifetime stats (#1378) (#1404) (b183f35)
  • act: converge the Also try chips onto SharedToolsRow (#1216) (#1487) (6bdb351)
  • act: defuse a thought becomes one column with a labelled rail (#1380) (#1412) (1630d30)
  • act: fold the alignment check-in onto the values screen (#1379) (#1407) (f85ef90)
  • act: one shared defusion log row for home and the full list (#1388) (#1462) (ae53575)
  • act: the committed action's target date is picked, not typed (#1303) (#1410) (5faea2f)
  • app: every visible modal reports into one overlay-count registry (#1473) (#1477) (2ae87b2)
  • app: the update popup replaces the banner (#1475) (#1479) (801eadc)
  • app: the update trigger hoists to the shell, with per-platform timing and suppression (#1474) (#1478) (c5ef519)
  • audio: Round B gets an audition, a zero-lead gate, and a record in the repo (#1210) (#1393) (d409774)
  • audio: the size budget gets an instrument, and each voice its own file (#1210) (#1405) (522c63b)
  • auth: a guest signing in over data gets one calm warning (#1444) (#1469) (2f99159)
  • auth: a native cold start with no session becomes a guest (#1440) (#1454) (168e63d)
  • auth: a returning cleaned-up device gets one calm fresh-start notice (#1450) (#1468) (708a7e8)
  • auth: email and password convert the guest in place (#1443) (#1463) (307a439)
  • auth: Google and Apple convert the guest by linking, never by sign-in (#1445) (#1471) (bdb6a54)
  • auth: quiet settings card and wizard line invite the guest to register (#1446) (#1465) (eb13707)
  • auth: sign-out and the verify banner do not exist for a guest (#1442) (#1464) (3bea2cb)
  • auth: the landing Start-now CTA creates a guest and enters the app (#1441) (#1466) (3448eec)
  • cbt: a thought record rates the same belief twice (#1376) (#1398) (0ce8dbb)
  • cbt: shared-tool chips open the tool, not a guide that closes back (#1192) (36ece46)
  • cbt: speaking to yourself, on the Self-care log (#1283) (#1306) (2e0a3a1)
  • cbt: the overview takes the shared section grammar and one history door (#1386) (#1459) (05f58de)
  • cbt: the record detail shows only the rows you filled (#1384) (#1457) (0cc9922)
  • cbt: the thought record becomes one scrolling column (#1381) (#1455) (176233b)
  • cbt: three header stats and this-month thinking-pattern bars on the overview (#1387) (#1461) (86b8032)
  • cbt: widen Be's kicker to Wellbeing and rewrite its description (#1285) (#1322) (944dd51)
  • db: dormant guests are purged after 12 months of inactivity (#1449) (#1460) (a5ba4f9)
  • db: factor account deletion into a shared purge helper (#1448) (#1456) (37ce2c9)
  • errors: errors raised inside a native modal go inline (#1335) (#1365) (1e3e735)
  • escape: shared components record where they were reached from (#1265) (#1403) (9a7e89e)
  • escape: the first-run gate's Escape wears the word (#1258) (#1418) (ce58aa4)
  • escape: the focus sessions carry an Escape of their own (#1256) (#1422) (5c21b50)
  • escape: the six (auth) screens get an Escape (#1254) (#1420) (5dd0532)
  • escape: the three chrome-less screens reach chrome (#1255) (#1423) ([0e8960a](0e8960a...
Read more