Collections View all →
Today
Keep every artifact from one course or project together, shown as a stacked deck. Built from the real workspace: 38 artifacts, 13 projects, real covers and colours. Hover a deck to fan it.
A new row at the top of Artifacts shows one deck per collection, newest activity first. The day-by-day stream below stays exactly as it is.
No new row. When a day holds several artifacts from one project, they collapse into a single deck tile in place. Click it to open the stack inline.
Where a deck leads. A collection gets a name, a colour, a description, an order, and optionally one public link, so a whole course can be shared, not just one page.
collections table only adds what labels can't hold (description, order, share link).collections(tenant_id, name, slug, description, sort_mode, positions, share_slug, created_at), backfilled from existing distinct project values. Artifacts keep their project label; no rewrite.updated_at and the 3 newest artifact ids for the deck. Today Projects() returns only name and count./app/collections, /app/collections/{slug}, and a public /s/{share_slug}/ index page (/c/* is already taken by comments).cover.ProjectColor; about 60 lines of CSS, pure transforms, reduced-motion safe.--project "learnpath: Async Rust" already files a page into its collection.byagent collections and byagent collection share <name>; an MCP collection_list tool so agents can find "the course" instead of guessing ids.#fafafa in dark mode.