Hackathon: Agents of Possibility (April 2026) Target length: ~4.5 minutes
[Start on the Playlists collection view, showing items with "Changes in draft" status]
Iteration 1: https://gist.github.com/aaronschachter/709c3d9a112a55efc96adc1a1d841137 Iteration 2: https://gist.github.com/aaronschachter/67beba08603299b1340f2e563de7cbe0 Iteration 3: https://gist.github.com/aaronschachter/ed35701346266c313eaa3d61e65a4c99
Iterations 1-3 built item-level visibility: which items have changes, what fields differ between staged and live. But there's a blind spot at the collection level. When a CMS developer adds a new field, renames one, or changes a field from optional to required, there's no way to see those schema changes before publishing. The user hits "Publish" and hopes for the best.
Iteration 1: https://gist.github.com/aaronschachter/709c3d9a112a55efc96adc1a1d841137 Iteration 2: https://gist.github.com/aaronschachter/67beba08603299b1340f2e563de7cbe0
Iteration 2 introduced has_live_changes and changed_fields on the content_index table. But an item can have multiple live versions across different domains (each domain gets its own publication). When the user sees "3 fields changed," the natural follow-up is "changed from what?" The answer requires knowing which publication lives on which domain and when it was published.
Without exposing publications, the diff endpoint can only say "these fields differ from live." With publications, it can say "title differs from the version on example.com, published 3 days ago, but matches what's on staging.webflow.io."
Iteration 1 spec: https://gist.github.com/aaronschachter/709c3d9a112a55efc96adc1a1d841137
Iteration 1 used a fan-out approach: query each collection separately via getCMSItems, merge server-side, return paginated results. This works for small sites but doesn't scale, and it gives the AI assistant nothing persistent to reason over.
Iteration 2 replaces fan-out with a PG-native content_index table living in the same CMS schema as the item data. A background job populates it. The table becomes both the data source for the Content Index UI and the knowledge base for a Content Agent.
The Webflow designer's CMS panel is always scoped to a single collection. There's no way to see the publish health of your content across all collections at a glance. Users can't easily answer:
Ticket: https://webflow.atlassian.net/browse/CMSEXT-1850
Branch: CMSEXT-1850-investigation
Last updated: 2026-04-10
During site publish, the Single-Tenant PG storage layer logs a warning "Called with no collections for database" when insertMany is called with an empty array. This happens when upstream batch filtering removes all items in a batch (archived items, unpublished drafts).
| HELLO WORLD |
| Chapter | Region | |
|---|---|---|
| Antelope Valley, CA | West | |
| Aracata, CA | West | |
| The Buckley School, Los Angeles, CA | West | |
| Buena Park, CA | West | |
| Corona, CA | West | |
| Cosumnes Oaks HS, Elkgrove CA | West | |
| Edison HS, Huntington Beach, CA | West | |
| Folsom, CA | West | |
| Heritage HS, Brentwood, CA | West |
| { | |
| "MRData": { | |
| "xmlns": "http://ergast.com/mrd/1.4", | |
| "series": "f1", | |
| "url": "http://ergast.com/api/f1/2018/circuits.json", | |
| "limit": "30", | |
| "offset": "0", | |
| "total": "21", | |
| "CircuitTable": { | |
| "season": "2018", |
| <?php | |
| use Northstar\Models\User; | |
| use Laravel\Socialite\AbstractUser; | |
| class GoogleTest extends BrowserKitTestCase | |
| { | |
| /** | |
| * Mock a Socialite user for the given | |
| * method and user fields. |