fix: MVP-readiness fixes — restore lost UI feedback, register safety, analytics error state, mobile + a11y#31
Open
glennmichael123 wants to merge 3 commits into
mainstacksjs/postline:mainfrom
fix/readiness-batch-1-feedback-timingstacksjs/postline:fix/readiness-batch-1-feedback-timingCopy head branch name to clipboard
Open
fix: MVP-readiness fixes — restore lost UI feedback, register safety, analytics error state, mobile + a11y#31glennmichael123 wants to merge 3 commits intomainstacksjs/postline:mainfrom fix/readiness-batch-1-feedback-timingstacksjs/postline:fix/readiness-batch-1-feedback-timingCopy head branch name to clipboard
glennmichael123 wants to merge 3 commits into
mainstacksjs/postline:mainfrom
fix/readiness-batch-1-feedback-timingstacksjs/postline:fix/readiness-batch-1-feedback-timingCopy head branch name to clipboard
Conversation
…le timing The provider + toast helper scripts load as deferred `type="module"` after the page content, but the inline page scripts captured window.postlineToast / window.postlineBluesky eagerly at parse time — undefined on every full page load, refresh, or OAuth-redirect-back. Symptoms: the composer and queue dropped all success/error/validation feedback to the console, and Accounts rendered a genuinely-connected Bluesky as "Not connected". It only looked fine when SPA-navigating between already-loaded pages. Resolve the helpers at call time (and gate Bluesky's initial status fetch on DOMContentLoaded, mirroring the LinkedIn/Twitter cards that already do this). Also: - Queue: confirm before the irreversible Delete. - Remove the dead `/blog` keyboard shortcut (key 6) — no blog page exists, so it 404'd; settings moves to key 6. Found via an MVP-readiness audit. Verified by lint + reading; the app's own dev server wasn't running locally (another app occupied the ports), so this wasn't browser-exercised — worth a click-through on the next run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… small wins More MVP-readiness fixes: - login: add a Confirm-password field (shown/required only in register mode) so a first-run typo can't create the sole owner account with no recovery path; make name required in register too. - accounts: provider cards stack on mobile (flex-col → sm:flex-row) instead of crushing the text column; add aria-labels to the placeholder-only Mastodon instance/token inputs. - queue: the "View" link now resolves any stored http(s) permalink (not just Bluesky at:// URIs); the item action row wraps on narrow screens; the calendar scrolls horizontally (min-width + overflow-x-auto) instead of squishing to unreadable columns. Lint-and-read verified (Postline's dev server wasn't running locally). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@stacksjs/actions
@stacksjs/ai
@stacksjs/alias
@stacksjs/analytics
@stacksjs/api
@stacksjs/arrays
@stacksjs/audio
@stacksjs/auth
@stacksjs/browser
@stacksjs/browser-extension
@stacksjs/buddy
@stacksjs/build
@stacksjs/cache
@stacksjs/calendar-api
@stacksjs/charts
@stacksjs/chat
@stacksjs/cli
@stacksjs/cloud
@stacksjs/cms
@stacksjs/collections
@stacksjs/commerce
@stacksjs/composables
@stacksjs/config
@stacksjs/cron
@stacksjs/database
@stacksjs/datetime
@stacksjs/defaults
@stacksjs/desktop
@stacksjs/dns
@stacksjs/docs
@stacksjs/email
@stacksjs/enums
@stacksjs/env
@stacksjs/error-handling
@stacksjs/events
@stacksjs/faker
@stacksjs/feature-flags
@stacksjs/git
@stacksjs/github
@stacksjs/health
@stacksjs/http
@stacksjs/i18n
@stacksjs/image
@stacksjs/lint
@stacksjs/logging
@stacksjs/newsletter
@stacksjs/notifications
@stacksjs/objects
@stacksjs/orm
@stacksjs/path
@stacksjs/payments
@stacksjs/push
@stacksjs/query-builder
@stacksjs/queue
@stacksjs/realtime
@stacksjs/registry
@stacksjs/repl
@stacksjs/router
@stacksjs/scheduler
@stacksjs/search-engine
@stacksjs/security
@stacksjs/server
@stacksjs/shell
@stacksjs/skills
@stacksjs/slug
@stacksjs/slugs
@stacksjs/sms
@stacksjs/socials
@stacksjs/storage
@stacksjs/strings
@stacksjs/testing
@stacksjs/tinker
@stacksjs/tunnel
@stacksjs/types
@stacksjs/ui
@stacksjs/utils
@stacksjs/validation
@stacksjs/video
@stacksjs/whois
commit: |
…failure A failed metrics fetch used to return silently, leaving the dashboard's stat values on "—" and every trend on "Loading…" forever with no explanation. loadAnalytics now renders an inline error banner with a Retry button and flips the stat trends to "Unavailable", instead of swallowing the error. Retry re-fetches and restores the dashboard on success. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes from an MVP-readiness audit (three independent reviewers across composer/queue, accounts/login, and shell/analytics/actions). Grouped into reviewable commits.
Batch 1 — the root-cause feedback bug (highest impact)
Provider + toast helper scripts load as deferred
type="module"after the page content, but inline scripts capturedwindow.postlineToast/window.postlineBlueskyeagerly at parse time →undefinedon every full page load / refresh / OAuth-redirect-back. Composer + Queue silently dropped all feedback toconsole.log; Accounts showed a connected Bluesky as "Not connected". Fixed by resolving the helpers at call time + gating Bluesky's initial fetch onDOMContentLoaded(mirroring the LinkedIn/Twitter cards). Plus: Queue delete confirmation, and removed the dead/blogkeyboard shortcut (404'd).Batch 2a — register safety + mobile + small wins
http(s)permalink (not just Bluesky); item action row wraps on mobile; calendar scrolls horizontally instead of squishing.Batch 2b — analytics no longer hangs
A failed metrics fetch used to leave the dashboard stuck on "Loading…" forever. Now renders an inline error banner + Retry; Retry re-fetches and restores on success.
Verification
pickierclean ·bun run typecheckexit 0 ·bun test74/0buddy devis recommended before merge.Still queued (safe wins, next batch)
Client-side validation gates (over-limit / past-schedule / IG-needs-image) · OAuth callback toasts (defer the post-redirect confirmation) ·
aria-pressed/aria-currenton mode/view/theme toggles.🤖 Generated with Claude Code