Adds LinkedIn and Instagram as crosspost targets alongside Bluesky.
Framework (core @stacksjs/socials)
LinkedInPublishingDriver— OAuth 2.0 (w_member_social) + versioned/rest/posts.InstagramPublishingDriver— Facebook Graph OAuth + two-step container/media_publish.PublishPostInput.mediafor media-only providers.
App
LinkedInService/InstagramService— connect via OAuth or an env access token (mirrors Bluesky'sconnectFromEnv).CrosspostService— onepostsrow fanned out to each selected provider as an isolatedpost_target; per-provider failures don't abort the others.- Actions + routes:
/postline/{linkedin,instagram}/{status,connect,auth,callback}, unified/postline/publishand/postline/providers. - Bluesky publishing refactored onto the shared
publishToPost(post, content)contract (existing/bluesky/publishbehavior preserved).
UI
- Composer renders provider toggles from
/providers, crossposts to all selected accounts, adapts the character limit to the min, and shows an image-URL field for Instagram (which rejects text-only posts). - Accounts page gains LinkedIn + Instagram connect cards (OAuth +
.env-token).
Config
.env.exampledocumentsLINKEDIN_*andINSTAGRAM_*keys.
Lint: clean (pickier, 0 errors). Type-check: 0 errors in changed files.