selahdocs

What we’ve shipped

Every change to Selah, newest first, written for the people who use it rather than the people who built it. Last shipped .

June 23, 2026

v0.39.8.5 → v0.39.8.3

Focus rings are crisp and consistent.

Fixed

  • Focus rings are crisp and consistent.

    Keyboard navigation now shows a clean sage outline with a 3px gap on every focusable element — buttons, links, inputs. The previous faint washed-out ring has been replaced by a single authoritative rule in globals.css.

  • Keyboard shortcut hints are readable on every button variant.

    The "N" key hint on the New Note button no longer looks like a persistent focus ring; its border and text now inherit the button's text color at 50% opacity, so it reads clearly on sage, secondary, and ghost buttons alike.

Changed

  • Onboarding: role cards auto-advance.

    Selecting a role moves directly to the companion step after a 160ms visual pause — no separate "Continue" tap required.

  • Onboarding: translation pills auto-scroll.

    Picking a translation on the companion step scrolls the tradition section into view so the next question appears without manual scrolling.

  • Onboarding: tradition +more button is now a pill.

    The expand button is inline with the tradition grid at 44px touch target height, replacing the small text link that appeared below the grid.

  • Onboarding: translation row scrolls horizontally on mobile.

    Nine translation options now lay out in a single scrollable row with snap points and a right-edge fade instead of wrapping into three rows.

  • Onboarding: new users skip the reading-plan gate.

    Completing onboarding sets formatChoiceSeen so the home screen shows the first-day hero and companion invitation instead of immediately redirecting to the reading plan.

  • First-visit tour works on mobile.

    The drawer opens automatically when a tour step needs to spotlight a nav item — previously the spotlight fell back to a centered popup with no visual anchor.

  • "How it works" now names the rhythm.

    The three-phase capture → organize → companion cycle replaces the old four-step journey. Each card names a real moment: capture a verse mid-sermon, find themes surfacing from your notes, let the companion ask the question you haven't asked yourself yet.

  • The companion section shows the conversation.

    Chat bubbles animate into view as you scroll the landing page, demonstrating a real exchange between user and Selah before signing up.

  • Feature sections stack vertically.

    The reader, prayer board, notes, and plan tiles now stack in a single centered column — each section has room to breathe. The responsive grid adjusts without breakpoints.

June 22, 2026

v0.39.8.2 → v0.39.8.0

Notes cards have depth.

Changed

  • Notes cards have depth.

    List and grid note cards now use the elevated card shadow pattern from the design system — they lift subtly and press on tap, matching the visual weight of cards elsewhere in the app.

  • Journal editor headings use Lora.

    The note title and all H2/H3 headings inside the editor are now set in Lora (serif), giving the writing surface a distinct journal-like character separate from the navigation UI.

  • Filter pills follow the design system.

    Active status and folder filters now use bg-sage text-white — the same vocabulary as filter strips everywhere else — replacing the previous ring/opacity variants.

  • Folder chip trigger is clearer.

    The add-to-folder button reads "Add folder" when no folder is assigned and "Add another" when one or more are present, replacing the ambiguous "Folder" label.

  • Empty state copy is warmer.

    When no notes exist, the placeholder now reads "A blank page is an invitation." The icon sits in a soft gold circle rather than appearing inline with low contrast.

  • Updated landing headline.

    "Selah is one place." is now "Your faith life, finally in one place."

  • Removed the small all-caps eyebrow label above the demo card in onboarding — the label was clutter, not context.

Fixed

  • Toolbar buttons meet 44px touch target.

    All four action buttons in the note editor (favorite, publish, reformat, delete) now have min-h-[44px] min-w-[44px] padding, meeting the iOS/WCAG minimum for interactive touch targets.

  • Saved timestamp is concise.

    "Last saved" timestamps now display as 09:45 AM instead of the system locale's verbose format with seconds.

  • Keyboard shortcut `N` is safe.

    The new-note shortcut now ignores Shift+N and modifier combos — only plain n while no input is focused fires the shortcut.

  • Screen reader announcements.

    Error banners now carry role="alert" so they are announced immediately on insertion. Status and folder filter strips have role="group" + aria-label; the "All" button has aria-pressed.

  • "Folders" eyebrow label removed.

    The uppercase section label above the folder filter strip is gone — the aria-label carries that context for assistive technology without the visual clutter.

  • Videos on mobile stay in the background.

    Tapping a screen-capture video on the landing page no longer triggers native player controls, fullscreen requests, or the Android video overlay. Videos are purely decorative: pointer-events: none on both .lp-vid and the knowledge plate video, disablePictureInPicture on all five video elements, preload="none" so they don't buffer on cellular.

  • CTA links go to sign-up.

    "Get started" in the nav, hero, and final section now goes to /sign-up instead of #pricing.

  • Copy is clearer for first-timers.

    FAQ answer about Telegram no longer uses "captures" or "your Stream" — rewritten as "notes" and "your study". Pricing and FAQ consistently say "knowledge map" instead of "knowledge graph", matching the section heading. Section eyebrows removed from Reader, Prayer board, Reading plan, and "How Selah is different" — down from five to one (Notes & journal, which uses the kicker intentionally).

  • Reading plan description is prose, not a checklist.

    The three-item bullet list is replaced by a single paragraph that reads naturally.

  • Switched-to plans stayed missing in settings.

    Switching to a new reading plan paused the old one, but only the active plan was shown — your other in-progress plans had no way to reappear or be resumed. The full library now renders.

  • The plan picker in settings had no way to go back.

    Opening the picker from Settings → Daily Message led to a dead end with no back button. A "← Settings" link now appears at the top of the pick step.

  • Updated the Telegram invite link.

    The community group link in the app was pointing to an expired invite URL.

Added

  • Your paused plans are always visible in settings.

    The reading plan section now shows every in-progress plan you've put on hold — not just the one currently active. Each paused plan displays how far you got and lets you resume or make it active with one tap.

  • Discard a paused plan you no longer want.

    A "Discard" action removes the plan from your library after an inline confirmation. Your active plan is never affected.

  • A confirmation moment after picking a plan.

    Choosing a reading plan now ends with a brief "confirmed" screen showing the plan name and when your first reading arrives, before continuing to the app.

June 21, 2026

v0.39.5.1 → v0.39.7.0

The app feels more physical.

Changed

  • The app feels more physical.

    Buttons squeeze a touch when you press them, cards lift on hover and settle when you click, and the home screen and onboarding reveal their lines in sequence instead of all at once. Cards now rest on a soft shadow rather than a hairline border.

  • The landing page resolves as you scroll.

    Each section's heading and copy ease in from a gentle blur as they reach the screen.

  • A little more room on the free plan.

    The Companion's free allowance went from 5 to 7 messages a day, still shared across web and Telegram.

Fixed

  • Small buttons are easier to tap.

    Close, dismiss, and help buttons across modals, drawers, the prayer board, and the reader now carry a full-size tap target even where the icon itself is small.

  • Numbers stop nudging the layout.

    The weekly summary counts use fixed-width figures, so the row no longer shifts as they change.

  • Profile photos get a faint outline so they read cleanly against any background.
  • A stray em dash in the pricing copy is gone.
  • Dragging a prayer in the Active column no longer jumps to the top-left.

    The card now follows your cursor in every column, not just the others.

  • The prayer board drags cleanly on the first try.

    The first card you dragged could land misaligned while later drags were fine; the board now measures its columns continuously during a drag, so the first one behaves like the rest.

  • No more dead "Promote to prayer" button.

    The capture drawer had a permanently-disabled button that read as broken. It's hidden until the feature ships.

Added

  • Admins can give any user a timed Plus trial.

    From a user's admin page, "Start trial" grants Plus for 7, 14, or 30 days, and "Extend" adds time to an active one. The trial ends on its own, and you can remove it any time. Accounts that pay through Stripe point you to the Stripe dashboard instead.

  • Tables you can actually edit.

    Drop a table into a note and a small toolbar now appears while your cursor is in it — add or delete rows and columns, or remove the whole table. Before, an inserted table was stuck for good.

  • Terms and Privacy where you'd look for them.

    Sign-up and sign-in now carry a "By continuing, you agree to our Terms and Privacy Policy" line with links, and the landing-page footer links both pages.

June 20, 2026

v0.39.3 → v0.39.4

The admin dashboard is now one room.

Added

  • The admin dashboard is now one room.

    It's a left-rail command center with a searchable, filterable Users directory. Each person shows their plan, billing status, email verification, last sign-in, and activity at a glance — no more bouncing between Stripe and Clerk to look someone up.

  • Grant a friend Plus from the admin.

    A Plan control on each user's page comps a free Plus plan in one click, and revokes it just as easily, for anyone without a paid Stripe subscription.

  • Google One Tap sign-in.

    Signed-out visitors now see Google's One Tap prompt automatically — one click to authenticate without navigating away or filling a form.

Changed

  • The per-user page consolidates the tools.

    It now carries read-only Billing and Identity panels (live subscription detail, a Stripe deep-link, Clerk sign-in and ban state) alongside the rename, admin, nudge, and delete actions, all in one place.

  • The "+ New" button and Search bar are now flag-gated.

    Both nav entry points are hidden by default while the features are still being designed. Enable PostHog flags nav_new_menu_enabled and nav_search_enabled (0% rollout) to show them per user.

  • The "selah" wordmark is now set in Geist sans-serif.

    Every surface that showed the brand name — nav, mobile drawer, onboarding header, sign-in, sign-up, and email footers — now uses Geist at weight 500, all lowercase. Cleaner, more minimal, and consistent with the rest of the type system.

  • The landing page wordmark matches.

    Both the header and footer on the public landing page use the same Geist treatment.

Fixed

  • Google One Tap now actually shows up.

    The One Tap prompt shipped last release but was silently blocked by the site's content-security policy, so signed-out visitors never saw it. Google's sign-in domains are now allowed and the prompt appears.

  • Companion replies on Telegram no longer push a big link card.

    When the Companion sent a reading-plan or Selah link, Telegram rendered a large preview image that crowded the chat. The Companion's replies now suppress that card. Sharing Selah elsewhere still shows the preview.

  • Lifecycle emails can't double-send.

    A retried Stripe webhook could send the trial-ending reminder or win-back email twice. Each now sends at most once.

  • Email links point at the right place by default.

    The fallback base URL was selah.app; it's now selah.so, so links never break if the environment variable is unset.

  • Onboarding survives a refresh.

    Reloading mid-signup no longer bounces you back to the first step.

  • Landing page headline and community link.

    The scatter section now reads "Your faith life, finally in one place." The Telegram community invite was expired; it's been replaced so clicking "Join the community" works again.