Skip to content

Instantly share code, notes, and snippets.

View aaronschachter's full-sized avatar

Aaron Schachter aaronschachter

  • San Francisco, CA
View GitHub Profile
@aaronschachter
aaronschachter / cms-overview-loom-script.md
Last active April 17, 2026 15:38
Content Index - Loom demo script (Hackathon April 2026)

CMS Overview - Loom Demo Script

Hackathon: Agents of Possibility (April 2026) Target length: ~4.5 minutes


1. The Problem (30 sec)

[Start on the Playlists collection view, showing items with "Changes in draft" status]

@aaronschachter
aaronschachter / iteration4.md
Created April 16, 2026 18:18
CMS Content Index - Iteration 4: Schema Diffs & AI-Powered Change Descriptions

CMS Content Index - Iteration 4: Schema Diffs & AI-Powered Change Descriptions

Iteration 1: https://gist.github.com/aaronschachter/709c3d9a112a55efc96adc1a1d841137 Iteration 2: https://gist.github.com/aaronschachter/67beba08603299b1340f2e563de7cbe0 Iteration 3: https://gist.github.com/aaronschachter/ed35701346266c313eaa3d61e65a4c99

Why this iteration exists

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.

@aaronschachter
aaronschachter / cms-overview-iteration-3.md
Created April 16, 2026 04:44
CMS Content Index - Iteration 3: Site Publishes

CMS Content Index - Iteration 3: Site Publishes

Iteration 1: https://gist.github.com/aaronschachter/709c3d9a112a55efc96adc1a1d841137 Iteration 2: https://gist.github.com/aaronschachter/67beba08603299b1340f2e563de7cbe0

Why this iteration exists

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."

@aaronschachter
aaronschachter / cms-overview-iteration-2.md
Last active April 16, 2026 04:41
CMS Overview - Iteration 2: Item Overview Table + Content Agent

CMS Content Index - Iteration 2: PG-native Content Index + Content Agent

Iteration 1 spec: https://gist.github.com/aaronschachter/709c3d9a112a55efc96adc1a1d841137

What changed since iteration 1

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.

@aaronschachter
aaronschachter / cms-overview-plan.md
Created April 16, 2026 00:44
CMS Overview - Plan and Roadmap

CMS Overview Panel

Problem

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:

  1. What items across all collections are scheduled to publish?
  2. What items are queued to publish (go live on next site publish)?
  3. What items have draft changes (won't go live on next publish)?
  4. Can I discard draft changes on items?
@aaronschachter
aaronschachter / CMSEXT-1850-investigation.md
Created April 10, 2026 20:19
CMSEXT-1850: Investigation of 'Called with no collections for database' warning during publish

CMSEXT-1850: "Called with no collections for database" Investigation

Ticket: https://webflow.atlassian.net/browse/CMSEXT-1850 Branch: CMSEXT-1850-investigation Last updated: 2026-04-10

Summary

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).

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.