Jeff Emmett
ec83f5c9c1
feat: replace rSocials canvas with n8n-style campaign planner
...
Add flow-based campaign planner with draggable Post/Thread/Platform/
Audience/Phase nodes, port wiring, 3 edge types (publish/sequence/
target), inline config panels, context menu, keyboard shortcuts,
touch gestures, and Automerge local-first persistence.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:18:30 -08:00
Jeff Emmett
a1b50eb0da
fix: Automerge undefined rejection + thread not synced to server
...
- tweetImages and imageUrl set to null instead of undefined when empty
(Automerge rejects undefined as invalid JSON)
- Updated ThreadData schema to allow null for optional fields
- This was the root cause of the 404 on image generation: saveDraft
threw on undefined, so the thread never synced to the server, and
the server-side route returned "Thread not found"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 17:14:06 -08:00
Jeff Emmett
831c8b1c24
feat: refactor rSocials from monolith to full rApp
...
Decompose the 2,116-line mod.ts into a canonical rApp matching the
rFlows/rBooks pattern with Automerge sync, web components, and
extracted CSS.
New files:
- schemas.ts: SocialsDoc, ThreadData, Campaign types + Automerge schema
- local-first-client.ts: browser-side sync client
- lib/types.ts: shared types, DEMO_FEED, PLATFORM_LIMITS
- lib/image-gen.ts: server-only fal.ai + file upload helpers
- components/folk-thread-builder.ts: compose/preview/readonly component
- components/folk-thread-gallery.ts: thread listing grid component
- components/folk-campaign-manager.ts: campaign viewer with import modal
- components/socials.css: all extracted CSS (~550 lines)
mod.ts slimmed to ~616 lines: ensureDoc, image APIs, page routes
injecting <folk-*> web components, file→Automerge migration, seed
template, and module export. Thread/campaign CRUD moved from REST
to Automerge local-first sync.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:42:18 -08:00