{
  "$schema": "https://ndcodex.com/schemas/object/v1.json",
  "id": "codex://object/archive-first",
  "archive_id": "archive-first",
  "slug": "archive-first",
  "url": "https://ndcodex.com/objects/archive-first/",
  "type": "artifact",
  "object_form": null,
  "title": "Archive First",
  "summary": "Torn Frames. Most websites that sell art start by behaving like stores. Torn Frames started somewhere else. The work is not inventory first. It is object, archive, story. and only then commerce. That idea became the",
  "content_text": "Torn Frames\n\nMost websites that sell art start by behaving like stores.\n\nTorn Frames started somewhere else.\n\nThe work is not inventory first.\n\nIt is object, archive, story—\n\nand only then commerce.\n\nThat idea became the spine of the site.\n\n---\n\n✦ THE SPLIT ✦\n\nThe build itself is straightforward:\n\nAstro\n\nDecap CMS\n\nShopify\n\nNetlify\n\nBut the stack isn’t the interesting part.\n\nThe operating model is.\n\nWe made a deliberate split:\n\nShopify = commercial truth\n\nSite = editorial + archival truth\n\nThat division does real work.\n\nShopify handles what it’s built for:\n\nprice\n\ninventory\n\ncheckout\n\nshipping\n\ntax\n\norder records\n\nThe site handles what makes the work legible as work:\n\ntitle\n\nquote\n\nstory\n\ndimensions\n\nmaterials\n\nimage treatment\n\nfeatured state\n\narchive state\n\npost-sale presence\n\nThat was the central decision.\n\nTorn Frames is not a store with some art in it.\n\nIt is an archive with commerce attached.\n\n---\n\n✦ WHAT FOLLOWED ✦\n\nOnce that was clear, everything else aligned.\n\nVisual language\n\nWe leaned into a dark, restrained gallery system.\n\nSpacing mattered.\n\nTypography mattered.\n\nHierarchy mattered.\n\nImage handling mattered.\n\nThe homepage stopped being a banner and became a composition:\n\nstatement\n\nobject\n\nnegative space\n\nThe goal was simple:\n\nmake the work feel placed, not dropped.\n\n---\n\nShape-aware display\n\nMost sites flatten artwork into identical containers.\n\nWe didn’t.\n\nThe pieces vary:\n\ntall and narrow\n\nsquare\n\nhorizontal\n\nInstead of forcing uniformity, we built around difference.\n\nthumbnails respond to shape\n\npage layouts respect proportion\n\ndetail views preserve presence\n\nThe result feels closer to an exhibit than a grid.\n\n---\n\nReal work as the system test\n\nThe shift from placeholders to real artwork changed everything.\n\nReal objects expose weak assumptions:\n\nbad crops\n\nawkward spacing\n\nbroken ratios\n\nThat pressure made the system sharper.\n\nThe design didn’t just hold the work—\n\nit started learning from it.\n\n---\n\n✦ THE ARCHIVE LOGIC ✦\n\nThe artifact page is the center of gravity.\n\nWhen a piece sells:\n\nthe page stays live\n\nthe writing stays intact\n\nthe images remain\n\nthe object persists\n\nOnly one thing changes:\n\nthe sale state\n\nThis matters.\n\nA sale is not the disappearance of the object.\n\nIt is a transition in its lifecycle.\n\n---\n\n✦ THE LOOP ✦\n\nThe operating rhythm became clear:\n\nprepare images\n\n→ create CMS draft\n\n→ write the object\n\n→ create Shopify product\n\n→ link them\n\n→ publish\n\n→ deploy\n\n→ QA\n\nEditorial first.\n\nCommerce second.\n\nPublish third.\n\nThat order keeps the system sane.\n\n---\n\n✦ WHY IT WORKS ✦\n\nBecause each system does what it’s good at.\n\nCMS controls meaning and presentation\n\nShopify controls availability and transaction\n\nNetlify handles delivery\n\nNothing is overloaded.\n\nNothing is pretending.\n\n---\n\n✦ THE MIDDLE ✦\n\nThere’s a tension most art sites fall into:\n\nstorefront pretending to be a gallery\n\nor gallery ignoring the reality of selling\n\nTorn Frames sits between those on purpose.\n\nThat middle is the idea.\n\n---\n\n✦ WHAT THIS IS ✦\n\nA living archive of one-of-one collage objects.\n\nThe site’s job is to:\n\npreserve meaning\n\npresent the work with care\n\nlet commerce confirm availability\n\nwithout letting commerce define the object\n\n---\n\n✦ FINAL ✦\n\nThe system works when:\n\na piece can be published in minutes\n\na piece can be purchased cleanly\n\na sold piece still holds its place\n\nThe object remains.\n\nThat’s the point.",
  "content_markdown": "Torn Frames\n\nMost websites that sell art start by behaving like stores.\n\nTorn Frames started somewhere else.\n\nThe work is not inventory first.  \nIt is object, archive, story—  \nand only then commerce.\n\nThat idea became the spine of the site.\n\n---\n\n## ✦ THE SPLIT ✦\n\nThe build itself is straightforward:\n\n- Astro  \n- Decap CMS  \n- Shopify  \n- Netlify  \n\nBut the stack isn’t the interesting part.\n\nThe operating model is.\n\nWe made a deliberate split:\n\n**Shopify = commercial truth**  \n**Site = editorial + archival truth**\n\nThat division does real work.\n\nShopify handles what it’s built for:\n- price  \n- inventory  \n- checkout  \n- shipping  \n- tax  \n- order records  \n\nThe site handles what makes the work *legible as work*:\n- title  \n- quote  \n- story  \n- dimensions  \n- materials  \n- image treatment  \n- featured state  \n- archive state  \n- post-sale presence  \n\nThat was the central decision.\n\nTorn Frames is not a store with some art in it.  \nIt is an archive with commerce attached.\n\n---\n\n## ✦ WHAT FOLLOWED ✦\n\nOnce that was clear, everything else aligned.\n\n### Visual language\n\nWe leaned into a dark, restrained gallery system.\n\nSpacing mattered.  \nTypography mattered.  \nHierarchy mattered.  \nImage handling mattered.\n\nThe homepage stopped being a banner and became a composition:\n- statement  \n- object  \n- negative space  \n\nThe goal was simple:\n\n> make the work feel placed, not dropped.\n\n---\n\n### Shape-aware display\n\nMost sites flatten artwork into identical containers.\n\nWe didn’t.\n\nThe pieces vary:\n- tall and narrow  \n- square  \n- horizontal  \n\nInstead of forcing uniformity, we built around difference.\n\n- thumbnails respond to shape  \n- page layouts respect proportion  \n- detail views preserve presence  \n\nThe result feels closer to an exhibit than a grid.\n\n---\n\n### Real work as the system test\n\nThe shift from placeholders to real artwork changed everything.\n\nReal objects expose weak assumptions:\n- bad crops  \n- awkward spacing  \n- broken ratios  \n\nThat pressure made the system sharper.\n\nThe design didn’t just hold the work—  \nit started learning from it.\n\n---\n\n## ✦ THE ARCHIVE LOGIC ✦\n\nThe artifact page is the center of gravity.\n\nWhen a piece sells:\n\n- the page stays live  \n- the writing stays intact  \n- the images remain  \n- the object persists  \n\nOnly one thing changes:\n\nthe sale state\n\nThis matters.\n\nA sale is not the disappearance of the object.  \nIt is a transition in its lifecycle.\n\n---\n\n## ✦ THE LOOP ✦\n\nThe operating rhythm became clear:\n\nprepare images  \n→ create CMS draft  \n→ write the object  \n→ create Shopify product  \n→ link them  \n→ publish  \n→ deploy  \n→ QA  \n\nEditorial first.  \nCommerce second.  \nPublish third.\n\nThat order keeps the system sane.\n\n---\n\n## ✦ WHY IT WORKS ✦\n\nBecause each system does what it’s good at.\n\n- CMS controls meaning and presentation  \n- Shopify controls availability and transaction  \n- Netlify handles delivery  \n\nNothing is overloaded.  \nNothing is pretending.\n\n---\n\n## ✦ THE MIDDLE ✦\n\nThere’s a tension most art sites fall into:\n\n- storefront pretending to be a gallery  \n- or gallery ignoring the reality of selling  \n\nTorn Frames sits between those on purpose.\n\nThat middle is the idea.\n\n---\n\n## ✦ WHAT THIS IS ✦\n\nA living archive of one-of-one collage objects.\n\nThe site’s job is to:\n- preserve meaning  \n- present the work with care  \n- let commerce confirm availability  \n\nwithout letting commerce define the object\n\n---\n\n## ✦ FINAL ✦\n\nThe system works when:\n\na piece can be published in minutes  \na piece can be purchased cleanly  \na sold piece still holds its place  \n\nThe object remains.\n\nThat’s the point.",
  "author": {
    "id": "nathan-davis",
    "name": "Nathan Davis",
    "designation": "Archive Operator",
    "role": "Archive Operator",
    "handle": "@nathandavis",
    "avatar": "/media/people/nathan-davis.jpg",
    "bio": "Designer, builder, and curator of the Codex Archive."
  },
  "contributors": [
    {
      "id": "nathan-davis",
      "name": "Nathan Davis",
      "designation": "Archive Operator",
      "role": "Archive Operator",
      "handle": "@nathandavis",
      "avatar": "/media/people/nathan-davis.jpg",
      "bio": "Designer, builder, and curator of the Codex Archive."
    }
  ],
  "date_published": "2026-04-16T00:05:40.832Z",
  "date_modified": "2026-04-16T00:05:40.832Z",
  "status": "published",
  "visibility": "public",
  "language": "en-US",
  "axes": {
    "scale": "meso",
    "depth": "structural",
    "focus": "system",
    "function": "comparative"
  },
  "themes": [],
  "constellations": [],
  "tags": [],
  "keywords": [
    "Artifact"
  ],
  "relations": [],
  "media": [
    {
      "kind": "image",
      "src": "/media/pigeon/artifact/archive-first-01.jpeg",
      "role": "hero",
      "alt": "88303AF9 4C05 46C2 87A9 B76B42868808",
      "capture": {
        "width": 1500,
        "height": 2000,
        "shape": "portrait",
        "format": "jpg",
        "originalFilename": "88303AF9-4C05-46C2-87A9-B76B42868808.jpeg",
        "uploadedAt": "2026-04-16T00:05:40.814Z"
      }
    },
    {
      "kind": "image",
      "src": "/media/pigeon/artifact/archive-first-02.jpeg",
      "role": "gallery",
      "alt": "6D7D9340 8A7A 474C B411 012CCF091F96",
      "capture": {
        "width": 1500,
        "height": 2000,
        "shape": "portrait",
        "format": "jpg",
        "originalFilename": "6D7D9340-8A7A-474C-B411-012CCF091F96.jpeg",
        "uploadedAt": "2026-04-16T00:05:40.814Z"
      }
    },
    {
      "kind": "image",
      "src": "/media/pigeon/artifact/archive-first-03.jpeg",
      "role": "gallery",
      "alt": "1987A29A D11C 4F22 AB05 B324FFA5B194",
      "capture": {
        "width": 1500,
        "height": 2000,
        "shape": "portrait",
        "format": "jpg",
        "originalFilename": "1987A29A-D11C-4F22-AB05-B324FFA5B194.jpeg",
        "uploadedAt": "2026-04-16T00:05:40.814Z"
      }
    }
  ],
  "capture": null
}