Scenario 1 · Canva round-trip

Interactive prototype · simulated data and actions. No Canva account or CO8 workspace is changed.

Keep the Canva edit
The export button already exists · this flow adds what happens after it
Ad Batches → Batch #471
Exists today
What already works: users can send an image to Canva from three places. What is missing is the return trip — once the user edits in Canva, CO8 never hears about it again, and the improved version has to be downloaded and re-uploaded by hand.
Creative Library
Concept layout row
Edit in Canva ↗
Expanded layouts under a concept — e.g. TOFU · YDAPGJ.
Creative Library
Idea card
Edit in Canva ↗
Single creative idea detail inside a concept pack.
Ad Batches
Result image hover
Edit in Canva ↗
Followed below. This surface already keeps a version history, so a returning Canva edit has somewhere natural to land.
↑ The same button in all three places. The round-trip is one shared behaviour behind it, not three separate features.
The rest of this prototype follows one surface — the Ad Batch result — to keep the flow readable. The Creative Library surfaces get the identical status row and sync action.
Proposed
The link is remembered: after the export, CO8 keeps the connection between this result image and the Canva design. The user sees where the image went and can reopen the same design instead of exporting a second copy.
Disease Risk & Prevention
CircleDNA · Item #4953 · Fix #7 selected
Completed
SOURCE · RYZE SUPERFOODS
FIX #7 · LATEST
CCanva
Exported 2h ago · no edits yet
Fix #7 is linked to a Canva design. Reopening continues the same design rather than starting a new one.
Proposed
Edits surface where the work lives: when the linked design changes in Canva, the asset shows it on next view — no background polling, and nothing is pulled in without the user asking. The current image stays in place until they choose to sync.
Disease Risk & Prevention
CircleDNA · Item #4953 · Fix #7 selected
1 Canva edit available
SOURCE · RYZE SUPERFOODS
FIX #7 · LATEST
CCanva
● Edited in Canva · 12 min ago
Bring the finished Canva design back as a new version. Fix #7 stays available and nothing is overwritten.
Proposed
Not instant, and it does not need to be: Canva renders the export on its side, so the sync runs in the background. The user can leave the page; the new version appears when it lands.
Syncing from Canva
Fix #7 · Disease Risk & Prevention
Canva renderwaiting…
Saved to version historyqueued
Typically a few seconds. Leaving the page is safe — the sync continues and the result is waiting in the batch. A failed render can be retried without re-exporting.
Proposed
The edit becomes a version, not a replacement: the Canva result joins the same history as the generated image and its fixes. The lineage stays intact — which AI output it came from, and that a person edited it afterwards.
Disease Risk & Prevention
CircleDNA · Item #4953 · Canva edit selected
Synced just now
PREVIOUS · FIX #7
CANVA EDIT · LATEST
CCanva
✓ Synced just now
Saved as a new version derived from Fix #7. It can be used in the ad wizard like any other version.
ALL VERSIONS — CLICK TO COMPAREDownload all
Generated
Fix #1
Fix #6
Fix #7
Canva edit · new
Proposed · the reason to build it
Why the round-trip is worth it: because the edit came back into CO8, it inherits ad tracking like any other version. The manual edit stops being a dead end in someone's Canva account and becomes a measurable comparison against the AI original.
Version performance · Item #4953
Last 14 days · same campaign, same audience
Illustrative figures
VersionAdsImpressionsLink CTRCPAvs AI original
Fix #7 · AI original 6184,2201.42%$18.60baseline
Canva edit 4121,9401.68%$16.90CTR +18% · CPA −9%
Insight: the human edit added a price-led headline. Across this account, versions with an explicit discount line outperform by roughly 14% CTR — worth adding to the generation brief so the next batch starts there. This feedback loop only exists because the edit returned to CO8.
Proposed · fixes a live bug
Today this fails badly: when a Canva authorization expires, the user sees a generic “Canva export failed.” with no way to fix it — there is no Canva entry in Settings to reconnect from. Any authorization problem should say so plainly and offer reconnection right where it failed.
Disease Risk & Prevention
CircleDNA · Item #4953 · Fix #7 selected
Action needed
AUTHORIZATION EXPIRED
CCanva
Reconnection required
The Canva connection expired or was revoked. The design link is kept — reconnecting resumes exactly where this left off, with nothing to redo.
Replaces the generic failure message users see today
RENDER TIMED OUT
CCanva
Sync did not finish
Canva did not return the export in time. This is usually temporary and unrelated to the connection — retrying does not require exporting again.
Separated from authorization failures, so the fix matches the cause
Build notes · what each state needs
2 · LinkedStore the design link per asset (new canva_design_links table, tenant-scoped) at export time. Reuses the existing OAuth connection and exportImageToCanva.
3 · Edit detectedOn asset view, compare the design's updated_at against the exported timestamp via GET /designs/{id}. On-demand only, no polling. Needs the design:meta:read scope.
4 · SyncingWorker job: POST /exports → poll → download → store → append version. Reuses the existing image ingest path; retries are resumable because the link is already stored.
5 · New versionAppend to the existing version history with lineage back to the source version. No new surface — the batch and library version strips already render it.
6 · PerformanceNo new tracking. Once the Canva edit is a normal version, existing ad-performance joins cover it; only the comparison view is new.
7 · Failure & reconnectTwo current defects: token refresh throws outside the try block (500), and a Canva 401 surfaces as a generic 502. Map every auth failure to the reconnect path, and add a Canva row in Settings → Integrations so reconnecting is possible at all.