ChatGPT Ads campaigns can be built and managed inside the brand dashboard, the app shell becomes a dark plate with the content inset as a card, Autopilot returns behind an org-level opt-in, chats can be renamed straight from the sidebar without dragging them to the top of Today, and LinkedIn Ads metrics start landing at all
ChatGPT Ads: a real campaign manager on the brand dashboard
- ChatGPT Ads stops being something you only read about in reports and becomes something you operate. A Campaigns tab appears on the brand dashboard with a list view, a three-pane campaign builder, record dialogs, bulk operations, CSV export and column visibility controls — the full surface, not a summary widget. The tab renders only when the brand actually has a granted ChatGPT Ads account, and falls back to Overview the moment that grant is revoked, so it never shows up as an empty promise.
- Two design decisions are worth stating because they change what you can trust. Every write returns an honest outcome — success, partial failure, or unknown — rather than reporting optimistically and letting you discover the truth in the platform later; "unknown" means the request left us and we genuinely cannot confirm what happened upstream, which is a different thing from failure. And every mutation carries an idempotency key, so a retry after a flaky connection resolves to the same operation instead of creating a second campaign.
- Campaigns are created paused, always. That is enforced in the operations layer rather than in the form, so there is no path — bulk, CSV or otherwise — that quietly launches spend before you have looked at it.
- Metrics stay deliberately separate from live entities. Performance numbers are aggregated from our own daily tables and stamped with an explicit as-of timestamp in UTC, with the platform's America/New_York reporting day made explicit rather than assumed. A campaign you edited thirty seconds ago will show its new settings immediately and its old numbers honestly, instead of blending the two into a figure that is true of neither.
The app shell is one dark plate, with your content inset as a card
- The navigation rail and the gutter around the content are now a single dark surface, with the main content sitting on top as a rounded, inset card. The rail runs on a genuinely dark palette rather than a handful of overridden tokens — several rows relied on generic muted-foreground colours that would have been unreadable otherwise — and it narrows slightly, from 224px to 200px. Dropdowns that portal out of the rail stay light, as they should. The overscroll gap at the edges of the shell is painted dark too, so bouncing a scroll on a trackpad no longer flashes a white strip where the frame should be.
- The rail also stops re-skinning itself when you navigate to Autopilot. Chrome is how you move around the product; changing its appearance per destination made a page change read as a mode switch, which it was not.
Autopilot is back in the navigation, behind two gates
- The Autopilot entry was removed from the navigation a while ago as an IA simplification — the routes, components and API were all kept and never stopped working, but there was no longer a way to click to them. It now sits next to Automations, which is where it belongs: both are "the agent works without me", with Autopilot at the always-on end of that range.
- It appears only when two independent conditions hold. An org admin opts the organization in under Settings → Labs, and Nex has made Autopilot visible to that brand. The first is chrome only — it decides whether you can see the entry. The second is the real access control, enforced on every Autopilot endpoint, so the opt-in switch cannot grant an organization access the API is withholding.
Rename a chat without opening it — and without moving it
- The chat-history row menu gains a Rename entry between Share and Archive. Picking it swaps the row for an input in place, so a conversation can be retitled from the sidebar without opening it. Enter or clicking away commits, Escape cancels.
- The more useful half of this fix is invisible until you notice it missing. The sidebar orders and buckets chats by when they were last updated, and renaming used to count as activity — so retitling a chat from last week yanked it out of Earlier and dropped it at the top of Today, which is precisely the opposite of what tidying up your history is for. A title-only edit now leaves that timestamp alone. Actually using the chat still bumps it.
Creative remix templates and localized copy
- Six new creative remix templates are synced into the product, along with refreshed canvas seeds and updated template taxonomy copy in both English and Chinese.
- Three Settings and Automations surfaces were rendering hardcoded English no matter which language you had selected, and they are now properly localized: the recommended-automation starter cards, the integration cards, and the 966-app Composio catalogue grid. For the automation starters, the seeded prompt is translated too — that prompt is what the agent actually runs, so a Chinese-language user wants it in Chinese, not just the card blurb around it.
- The Composio catalogue needed a different approach, because those descriptions are upstream data re-synced daily and are far too large to ship to the browser as translations. They get a locale overlay instead, and each translated entry records a fingerprint of the English text it came from. When the upstream description is rewritten, the fingerprint stops matching and the card falls back to English rather than confidently serving a translation of copy that no longer exists.
Integrations: commerce and delivery groundwork
- DoorDash arrives as a read-only integration. You claim the business you have already authorized to Soku on DoorDash's side, confirm your stores, grant them to a brand, and the agent gains eight read-only actions across orders, sales summaries, transactions, refunds and cancellations, payouts, and — where your account has them — Sponsored Listings and Promotions performance. The read-only posture is structural rather than a policy we are asking you to take on faith: the client exposes only report creation and retrieval, has no general-purpose request escape hatch, and no write verbs at all. DoorDash's write-side Ads and Promotion Management APIs are not touched.
- One honest note on DoorDash: platform approval is still in progress, so until credentials are provisioned the integration reports a clear not-configured state rather than pretending to connect.
- SHOPLINE and Uber Eats land as groundwork rather than as things you can switch on today. SHOPLINE's App Store install and attribution funnel is complete but ships dark pending app-store review. Uber Eats is deliberately not visible in the interface at all — not even as a "coming soon" card — because Uber's platform approval has not come through and a card would advertise a partnership that does not yet exist. Both will appear here again when they are genuinely usable.
Reliability
- LinkedIn Ads metrics could not land. At all. An audit that went past the previously-reported "sync stuck forever" symptom found six further defects, none of them on the OAuth handshake that earlier fixes had repaired — the headline one caused an exception during job setup that killed bootstrap, scheduled and catch-up syncs before any call to LinkedIn was ever made. A LinkedIn-only brand also saw an empty ads namespace, and the agent would claim LinkedIn served breakdown dimensions it never ingests. All six are fixed, and the release includes a recovery migration, because a code-only fix would have left every already-damaged credential broken until each customer manually reconnected.
- Automation runs triggered against an unusable internal-send configuration used to stay in a running state indefinitely — retrying every sixty seconds, forever, never failing and never succeeding. Errors that are decided before any request leaves the process are now permanent failures, so a misconfigured run tells you it is broken instead of pretending to still be working.
- Bootstrap recovery is unblocked and a class of deep background jobs no longer runs out of memory, and the demo organization's seeded dashboard metrics are now properly isolated so live provider syncs cannot overwrite them.
Marketing site
- Six new pages shipped on soku.ai from the daily content run, alongside changelog and sitemap updates.