Projects live in Supabase, scoped to your account. The editor is honest about save state at every moment so you always know whether the graph in front of you is safely persisted.
File → Save As…) always prompts, so you can fork the current graph into a new project row.File → Save Incremental snapshots a numbered copy of the current project without touching the original. The name auto-increments trailing digits: foo becomes foo_01, then foo_02, and so on. Useful for version-pinning a known-good state before a big experiment.
The file-name pill in the center of the menu bar shows the current project’s name with a colored dot on the left:
Clicking the pill opens a dropdown where you can rename the project and flip its visibility (public or private). Saving from there is equivalent to ⌘+S.
The Save As dialog and the rename field in the file-name pill both watch for name collisions against your existing projects. If you type a name that already exists, the button label flips from Save to Overwrite (and the hint line explains what will happen).
This matters because the default name for a fresh project is “Untitled” — without collision detection, quickly hitting Save on a few new projects would quietly stack multiple rows with the same name.
Starting a new project from an unsaved graph pops a confirm with Save / Don’t save / Cancel. Save routes through the normal save flow and only resets the editor after the save completes. Don’t save discards the current work. Cancel keeps everything as is.
File → Load… swaps the lower-right panel into a project browser with two tabs: Private (your projects) and Public(everyone else’s shared work). Both tabs support a grid view and a list view with sortable columns; toggle between the two with the icons on the right of the load-panel toolbar.
The refresh icon next to the view toggles re-pulls the listing from the database. Under the hood, listings are cached in memory for the session (up to an hour) so opening the Load panel repeatedly doesn’t re-bill you every time. Saves and deletes invalidate the cache automatically — you’ll only reach for the refresh button to see other people’s recent changes.
Thumbnails come from a 256px JPEG snapshot of whatever the canvas is showing at save time. Newer saves store thumbnails in Supabase Storage and serve them via the CDN; older pre-migration projects keep a base64 data URL inline in the row. Both render identically — the difference is invisible except that Storage thumbnails don’t bloat list-query bandwidth.
If you ever see a stale thumbnail, it’s the CDN cache. A re-save bumps the cache-busting parameter on the URL, so the next view picks up the new bytes.
Next: Public vs. private projects — the rules when you’re working on someone else’s graph.