One major patch today covering three features.
Instagram "Cannot Parse Access Token" — Dual-Flow Fix
Instagram connection was failing with "Cannot parse access token" and I finally understood why. The flow was taking a Facebook user token (obtained via Facebook Login with Instagram Business permissions) and sending it to graph.instagram.com. That endpoint rejects Facebook tokens — it only accepts tokens from Instagram's own Basic Display API, which is a different product entirely. Instagram Business accounts are linked to Facebook Pages and use the Facebook Graph API, not the Instagram endpoint.
Fixed with a dual-flow fallback: tries graph.instagram.com/me first (correct path for Instagram Login), then falls back to graph.facebook.com/me/accounts (Facebook Business API path) when the first attempt returns no account ID. The fallback is what actually works for Business accounts. Instagram now connects successfully.
Media Uploads on Create and Edit Post
Social post create and edit both now have a drag-drop upload zone with URL input and removable thumbnail preview grid. Files save to public/uploads/social/, URLs are accepted directly. On edit, existing media shows as removable thumbnails; keep_media[] inputs preserve existing URLs through the save so you do not lose previous media by only uploading one new file.
30-Day AI Content Plan
New page at /admin/social-media/plan — generates a day-by-day content calendar using a GenerateContentPlanSkill. Supports 7, 14, and 30-day plans with brand, audience, goal, and tone inputs. The preview page shows all days as editable text areas so you can adjust any caption before committing. Toggle individual days on or off before bulk-saving. Approved days save as draft posts in the queue, ready for scheduling.