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
app/Actions/Postline/CrosspostPublishAction.tsmodified+12-1
Changes to app/Actions/Postline/CrosspostPublishAction.ts
@@ -35,8 +35,19 @@ export default new Action({
3535 ? [{ url: imageUrl, altText: imageAlt || undefined }]
3636 : undefined
3737
38 // Optional multi-segment thread: JSON array of post texts. Segments are
39 // reply-chained on providers that support it (Bluesky).
40 let thread: string[] = []
3841 try {
39 const data = await crosspost.publish(text, providers, { external, media })
42 const parsed = JSON.parse(String(request.get('thread') || '[]'))
43 if (Array.isArray(parsed)) thread = parsed.map(value => String(value).trim()).filter(Boolean)
44 }
45 catch {}
46
47 try {
48 const data = thread.length > 1
49 ? await crosspost.publishThread(thread, providers, { external, media })
50 : await crosspost.publish(thread[0] || text, providers, { external, media })
4051 // Surface a partial-failure (some targets failed) as a 207-style payload
4152 // while still returning 200 so the client can report per-provider state.
4253 const allFailed = data.results.length > 0 && data.results.every(result => !result.ok)