ReviewOS

also looking at this

stacks/postline

UI polish, real queue + scheduling, Bluesky threads, live analytics, blog target

#8
Merged glennmichael123 wants to merge feat/ui-polish into main
54 files +2036 -589
9 days ago

Summary

Started as the UI polish pass (#7) and grew into the feature round from #5/#6. Six areas, in commit order:

UI polish (#7)

Consistent page headers, mobile nav (sidebar no longer swallows the viewport below lg), working 1–7 keyboard shortcuts, status-colored pills, dead buttons removed, hover/focus states everywhere, favicon.

Fixes

  • @ts-charts/charts was a link: to a nonexistent target breaking bun install; the chart helpers are now vendored (~30 lines) because the published @ts-charts packages declare a bun export condition pointing at unshipped src/ and can never bundle under Bun (this is also why the analytics chart never rendered).
  • dtsx emits unparseable d.ts for module augmentations (interface Xextends); router build repairs it post-build. Upstream: stacksjs/dtsx#3103.

Real queue (#5)

Composer drafts and a schedule picker persist posts/post_targets rows; the Queue page lists real posts with publish-now/delete/view actions; a PublishScheduledPosts job sweeps due posts every minute. Includes a workaround for a query-builder bug (where in mis-compiles on DELETE).

Bluesky threads (#5)

Thread mode now publishes in one request and reply-chains segments via ATProto root/parent refs, so they render as an actual thread. Segments share a thread_key post group.

Live analytics (#7)

GET /postline/analytics computes weekly counts, channel mix, best posting windows, and a 30-day series from real rows; the page renders that instead of hardcoded mocks.

Blog target (#6)

"Blog" is now a crosspost provider: publishing writes markdown to content/blog/, which the framework's BunPress blog serves at /blog/<slug> with RSS. Also fixes the post_targets provider CHECK constraint that was silently rejecting Threads inserts (it predated that driver).

Verification

  • bunx --bun pickier . clean; bun run typecheck exit 0; bun test 11 pass
  • Driver-level tests cover plain records, reply chains, link cards, char limit, missing token
  • Exercised live against the dev servers: queue save/list/delete/publish-now, due-post sweep, thread post rows, analytics payload, blog publish → rendered page (screenshots in session)
  • No real social credentials were present, so provider failure paths were exercised end-to-end; actual Bluesky delivery is covered by the mocked driver tests

Closes #7. Refs #5, #6.

54 changed files on the files tab, with 0 review threads.

Sign in to comment on this pull request.