{
  "themes": [
    {
      "name": "catalogue-page",
      "title": "Catalogue page",
      "licence": "MIT",
      "version": "1.0.3",
      "type": "catalogue",
      "description": "A shelf of things you make or sell, without a checkout: each item as a card with its photo, price and whether it's available, grouped by kind, with how to order, pickup or market hours, news and contact. For makers, market stalls, small bakeries and second-hand sellers.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/catalogue-page/1.0.3-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/catalogue-page/1.0.3-desktop.png"
        }
      ],
      "palettes": {
        "paper": {
          "title": "Paper",
          "colors": {
            "bg": "#f3f2f2",
            "ink": "#201e1d",
            "muted": "#5c5855",
            "accent": "#00647f",
            "accent-2": "#a8470f",
            "line": "#cfcbc9",
            "on-accent": "#ffffff"
          }
        },
        "sunset": {
          "title": "Sunset",
          "colors": {
            "bg": "#fdf5ec",
            "ink": "#2b1d14",
            "muted": "#6a5444",
            "accent": "#a8470f",
            "accent-2": "#1f6a73",
            "line": "#e6d2bd",
            "on-accent": "#ffffff"
          }
        },
        "forest": {
          "title": "Forest",
          "colors": {
            "bg": "#f0f4ec",
            "ink": "#1c2a1f",
            "muted": "#505f52",
            "accent": "#2d6a3e",
            "accent-2": "#8a5a12",
            "line": "#c6d3c1",
            "on-accent": "#ffffff"
          }
        }
      },
      "art": {
        "ask": "Ask for one clear photo of each item on a plain background in daylight, from the front, same background for all.",
        "style": "Real product photos, consistent background and crop; never invented or generated pictures of the goods. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "steps": [
          "Collect one photo per item from your person, plus one of the stall or shop for the hero if they have it.",
          "Check each item photo: square (crop to 1200x1200), sharp, the item fills about 70% of the frame, the same background and light as the others.",
          "Write alt text for each: what it is, its colour and size.",
          "Upload each one (an https link in its field, or photo_upload_link), then call theme_needs: every slot you used should say filled.",
          "Confirm every price and every sold-out badge with the seller before publishing.",
          "Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "card.image",
            "alt": "card.image_alt",
            "size": [
              1200,
              1200
            ],
            "need": "recommended",
            "purpose": "each item's photo: a small square beside the item on phones, across the top of its card on wider screens. Give every item one; an item without one shows as a text card",
            "alt_hint": "what it is, its colour and size, e.g. A round sourdough loaf, dark crust, about 20 cm across",
            "prompt": "a real photo of the item on the same plain background as the others, in daylight, from the front, filling about 70% of the square"
          },
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "beside the headline on the home page: the stall, the shop window or a table of the goods; without it the headline and the ordering note sit side by side",
            "alt_hint": "what the photo shows",
            "prompt": "a real photo of {subject}'s stall or table of goods, wide, in daylight"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "optional",
            "purpose": "the round mark beside the name in the header (48 px) and the browser icon; must still read at 32 px",
            "alt_hint": "e.g. A wheat ear in a circle",
            "prompt": "a simple flat round emblem for {subject}, one shape, in the accent colour on the page's background colour, no words"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link is shared; empty uses the hero",
            "alt_hint": "what it shows",
            "prompt": "the hero photo cropped wide"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a photo at the top of a news post's or market day's own page",
            "alt_hint": "what it shows",
            "prompt": "a real photo of the new item or the market"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the big headline, one line about what you make"
          },
          {
            "field": "site.intro",
            "need": "required",
            "purpose": "how to order, in a dashed note under the headline, e.g. Message me to order; pick up Saturdays at the market. Say plainly there is no online checkout"
          },
          {
            "field": "site.cta_label",
            "need": "recommended",
            "purpose": "the main button under the headline (with cta_link): e.g. Order by message (a tel:, mailto: or https link) or Buy on <your existing shop>; cta2_label and cta2_link make a second"
          },
          {
            "field": "cards",
            "need": "required",
            "purpose": "the items, one card each, with a group (card.group) for each kind (Loaves, Pastries…): the cards_title heads the shelf, the group names make the jump links and the subheadings. On each card: name, description (short), price exactly as written, badge for availability (badge_tone live = available or new, building = sold out or limited), link + link_label for where to buy or ask (e.g. Buy on Etsy), tags for short labels (V, GF), subtitle for a size or weight. Confirm every price with the seller"
          },
          {
            "field": "site.cards_title",
            "need": "recommended",
            "purpose": "the shelf's heading, e.g. This week's bakes"
          },
          {
            "field": "site.streams",
            "need": "optional",
            "purpose": "a list stream with events (market days: date, place, map link) shows them coming up first, then earlier; a list stream without events is news (new items, sold out, back soon) as dated rows"
          },
          {
            "field": "site.about",
            "need": "recommended",
            "purpose": "about the maker (about_title is its heading); the first paragraph prints larger"
          },
          {
            "field": "site.contact",
            "need": "required",
            "purpose": "the closing block: phone, email, address (where to pick up or visit) with a directions link, social links; also in the footer"
          },
          {
            "field": "site.hours",
            "need": "recommended",
            "purpose": "pickup, shop or market hours: open or closed now in the header and in the closing block with the weekly table, days off in the next 60 days, and a note (e.g. Orders by Thursday for Saturday pickup)"
          },
          {
            "field": "site.buttons",
            "need": "recommended",
            "purpose": "ways to order, as big buttons in the closing block, the first one filled: e.g. Text to order (tel:), Email an order (mailto:), Buy on our Etsy shop; note is the small line under each"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "a strip of tape across the top of every page for news that can't wait, e.g. Sold out of lemon loaves this week; with until it goes by itself"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer line, e.g. the shop's name and where it is"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/catalogue-page/1.0.3.json",
        "sha256": "4656c3300aad753220c3692611aefe337e6e4da8d517cd1342aa09e05dfb52ae",
        "bytes": 33810
      }
    },
    {
      "name": "event-page",
      "title": "Event page",
      "licence": "MIT",
      "version": "1.0.4",
      "type": "event",
      "description": "A page for one gathering: a reunion, a wedding, a party or a fundraiser. The next event's date, place and RSVP come first, each event a ticket with its schedule; changes and cancellations show in a banner and on the ticket, and past events fold away under Earlier.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/event-page/1.0.4-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/event-page/1.0.4-desktop.png"
        }
      ],
      "palettes": {
        "sunset": {
          "title": "Sunset",
          "colors": {
            "bg": "#fdf5ec",
            "ink": "#2b1d14",
            "muted": "#6a5444",
            "accent": "#a8470f",
            "accent-2": "#1f6a73",
            "line": "#e6d2bd",
            "on-accent": "#ffffff"
          }
        },
        "rose": {
          "title": "Rose",
          "colors": {
            "bg": "#fdf1f3",
            "ink": "#2d1a20",
            "muted": "#6b4c56",
            "accent": "#a3254d",
            "accent-2": "#6b5a12",
            "line": "#ecc9d2",
            "on-accent": "#ffffff"
          }
        },
        "midnight": {
          "title": "Midnight",
          "colors": {
            "bg": "#10162a",
            "ink": "#eef1fa",
            "muted": "#aab3cc",
            "accent": "#7cc4ff",
            "accent-2": "#ffb86b",
            "line": "#2f3a5c",
            "on-accent": "#0b1224"
          }
        }
      },
      "art": {
        "ask": "Ask your person for one wide photo that says what the event is: the group, the venue, an old class photo. Real photos only. If they want a crest or monogram, make it with them and keep it simple.",
        "style": "Photographs for the hero and covers. The optional emblem is a single flat shape or monogram in the palette's accent colour on a transparent ground; no words except initials or a year. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "prompt_prefix": "simple flat emblem, one colour, bold shapes, readable at 32 px, centred, no gradients, no photo-realism, no background.",
        "steps": [
          "Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
          "Ask for the hero photo (photo_upload_link works from a phone). Check it is wide (at least 2080 px across), sharp, and that the people in it are happy to be shown.",
          "Write its alt text with your person: what and who it shows, in a sentence.",
          "Upload it to site.hero with site.hero_alt.",
          "Optional emblem: agree the idea and use the palette's accent colour; make it from the emblem prompt (start with prompt_prefix); shrink it to 32 px and check it still reads; upload it to site.logo with site.logo_alt.",
          "Call theme_needs: every slot you meant to fill should say filled."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "a wide photo under the tickets that says what the event is: the group, the venue, an old class photo; without it the page goes straight from the tickets to the updates",
            "alt_hint": "what the photo shows, e.g. The class of 2007 on the school steps at graduation",
            "prompt": "a real photograph of {subject}; wide, sharp, people's faces visible; never generated"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "optional",
            "purpose": "the event's emblem: a crest, monogram or save-the-date mark, shown large above the event name and small in the header and browser tab; flat, one colour, so it follows the palette",
            "alt_hint": "what the emblem shows, e.g. The Kestrel Falls crest with 07 under it",
            "prompt": "{subject} as a simple flat emblem or monogram, initials or a year only, in the palette's accent colour on a transparent ground"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link to the page is shared in messages; empty uses the hero",
            "alt_hint": "what the picture shows",
            "prompt": "made from the hero photo, cropped to 1200x630"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a photo at the top of an update or an event's own page, e.g. after-event photos",
            "alt_hint": "what the photo shows",
            "prompt": "a real photograph from the event"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the event's name, the big headline, e.g. Kestrel Falls High, Class of 2007: twenty years on"
          },
          {
            "field": "site.streams",
            "need": "required",
            "purpose": "one stream (layout list) whose entries are events: each entry's event block {start, end, place, rsvp, schedule, status} makes a ticket at the top of the page, soonest first; past ones fold under Earlier; its entries without an event are listed after them. A second stream (layout feature) is the organisers' updates: the newest in full"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "one line of what, when and where, under the tickets"
          },
          {
            "field": "site.cta_label",
            "need": "recommended",
            "purpose": "the main button under the tickets (with cta_link), usually RSVP; cta2_label and cta2_link make a second, e.g. Where to stay"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "the banner across the top for a change that can't wait, e.g. Changed: the picnic has moved to the pavilion; set until so it goes by itself"
          },
          {
            "field": "site.buttons",
            "need": "optional",
            "purpose": "a short list of useful links under the tickets: hotel block, registry, photo upload, each with a note"
          },
          {
            "field": "site.cards_title",
            "need": "optional",
            "purpose": "cards in groups make the details: a group such as Good to know (questions as names, answers as descriptions, a price where it costs) and Where to stay (hotels with price and link); each group prints as its own section"
          },
          {
            "field": "site.about",
            "need": "optional",
            "purpose": "who is organising, under about_title"
          },
          {
            "field": "site.contact",
            "need": "recommended",
            "purpose": "the organisers' email and phone as big buttons at the end of the page"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer line, e.g. the organising committee's name"
          },
          {
            "field": "site.contact_line",
            "need": "optional",
            "purpose": "a second footer line"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/event-page/1.0.4.json",
        "sha256": "c3e04a7f6a64d4b1b457b0431cfbbf4d198d02ce9a0c33e63c50f513e8966419",
        "bytes": 31190
      }
    },
    {
      "name": "group-page",
      "title": "Group page",
      "licence": "MIT",
      "version": "1.0.3",
      "type": "group",
      "description": "A page for a club, choir, congregation, team or volunteer group: your mission in a bold band, when you meet and what's coming up, news, what you do and who leads it, then where to find you.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/group-page/1.0.3-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/group-page/1.0.3-desktop.png"
        }
      ],
      "palettes": {
        "ocean": {
          "title": "Ocean",
          "colors": {
            "bg": "#eef6f8",
            "ink": "#10262e",
            "muted": "#486068",
            "accent": "#006f8e",
            "accent-2": "#b4501c",
            "line": "#bcd3da",
            "on-accent": "#ffffff"
          }
        },
        "forest": {
          "title": "Forest",
          "colors": {
            "bg": "#f0f4ec",
            "ink": "#1c2a1f",
            "muted": "#505f52",
            "accent": "#2d6a3e",
            "accent-2": "#8a5a12",
            "line": "#c6d3c1",
            "on-accent": "#ffffff"
          }
        },
        "slate": {
          "title": "Slate",
          "colors": {
            "bg": "#eef0f3",
            "ink": "#1e2329",
            "muted": "#555d68",
            "accent": "#37597d",
            "accent-2": "#9a4a1c",
            "line": "#c8ced6",
            "on-accent": "#ffffff"
          }
        }
      },
      "art": {
        "ask": "Ask for one wide photo of members together, doing what the group does. Get permission from the people shown; avoid photos of children unless a leader approves.",
        "style": "Photographs of real members; a logo, if any, is flat. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "steps": [
          "Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
          "Get the hero photo (photo_upload_link works from a phone). Check it is wide (at least 2080 px across), sharp, faces visible, and note that the people shown agreed.",
          "Write its alt text with your person, then upload it to site.hero with site.hero_alt.",
          "For People cards, ask each person for their own photo and their OK; upload it to that card's image with image_alt.",
          "If the group has a logo, upload it to site.logo; check it reads at 32 px.",
          "Call theme_needs: every slot you meant to fill should say filled."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "beside the mission in the coloured band: members together, doing what the group does; without it the mission runs alone across the band",
            "alt_hint": "who is in it and what they're doing, e.g. The choir singing at the spring concert",
            "prompt": "a real photograph of {subject}'s members together, mid-activity; wide, sharp, faces visible; never generated"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "optional",
            "purpose": "the group's logo: in the header (44 px), above the mission, and the browser tab; must read at 32 px",
            "alt_hint": "what the logo shows",
            "prompt": "the existing logo of {subject}; if there is none, a simple flat mark in the palette's accent colour"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link to the page is shared; empty uses the hero",
            "alt_hint": "what the picture shows",
            "prompt": "the hero photo cropped to 1200x630"
          },
          {
            "field": "card.image",
            "alt": "card.image_alt",
            "size": [
              800,
              800
            ],
            "need": "optional",
            "purpose": "a square photo on a card, round on the page: leaders and officers in the People group, or a program",
            "alt_hint": "the person's name and what they're doing, e.g. Maria Ortega conducting",
            "prompt": "a real photo the person chose of themselves"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a photo at the top of a news story",
            "alt_hint": "what the photo shows",
            "prompt": "a real photograph from the story"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the mission in one line, the big headline in the coloured band"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "a sentence or two under the mission: who can come and what it costs"
          },
          {
            "field": "site.cta_label",
            "need": "recommended",
            "purpose": "the main button in the band (with cta_link), e.g. Join us or Come to a rehearsal; cta2_label and cta2_link make a second, e.g. Donate (link out to the group's own donation page)"
          },
          {
            "field": "site.hours",
            "need": "required",
            "purpose": "regular meeting times as weekly rows (e.g. tue 19:00-21:00); only the days you meet are shown, beside the upcoming events; exceptions show skipped weeks; note is one line under them. Shown in the events stream's section"
          },
          {
            "field": "site.streams",
            "need": "required",
            "purpose": "one stream (layout list, e.g. title When we meet) whose entries are events: meeting times and upcoming events sit together under its title, past events fold under Earlier. One stream with layout feature for news: the newest in full beside a list of the rest"
          },
          {
            "field": "site.cards_title",
            "need": "recommended",
            "purpose": "cards in groups, each group its own section: e.g. Programs (with period for when, price for dues) and People (subtitle is the role; a round photo if image is set)"
          },
          {
            "field": "site.about",
            "need": "recommended",
            "purpose": "about, history or what you believe, under about_title"
          },
          {
            "field": "site.contact",
            "need": "required",
            "purpose": "where to find you: the address with a directions button, phone, email, social links"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "the banner across the top for cancellations and weather; set until so it goes by itself"
          },
          {
            "field": "site.buttons",
            "need": "optional",
            "purpose": "big link tiles at the end: donate, volunteer, sign-up pages elsewhere (we never take payments)"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer line; contact_line is a second, e.g. a charity number"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/group-page/1.0.3.json",
        "sha256": "800e0afde071d7f7b060145116b89f30e665f665ff620ce5a34432e68ddd4d52",
        "bytes": 35112
      }
    },
    {
      "name": "link-page",
      "title": "Link page",
      "licence": "MIT",
      "version": "1.0.2",
      "type": "links",
      "description": "One address for your bio: your face or mark, your name and one line, then a column of big buttons to everything you do, your other places, and your latest few updates. One screen, phone first.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/link-page/1.0.2-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/link-page/1.0.2-desktop.png"
        }
      ],
      "palettes": {
        "ink": {
          "title": "Ink",
          "colors": {
            "bg": "#ffffff",
            "ink": "#111111",
            "muted": "#555555",
            "accent": "#1a3fb4",
            "accent-2": "#b3261e",
            "line": "#d4d4d4",
            "on-accent": "#ffffff"
          }
        },
        "sunset": {
          "title": "Sunset",
          "colors": {
            "bg": "#fdf5ec",
            "ink": "#2b1d14",
            "muted": "#6a5444",
            "accent": "#a8470f",
            "accent-2": "#1f6a73",
            "line": "#e6d2bd",
            "on-accent": "#ffffff"
          }
        },
        "midnight": {
          "title": "Midnight",
          "colors": {
            "bg": "#10162a",
            "ink": "#eef1fa",
            "muted": "#aab3cc",
            "accent": "#7cc4ff",
            "accent-2": "#ffb86b",
            "line": "#2f3a5c",
            "on-accent": "#0b1224"
          }
        }
      },
      "art": {
        "ask": "Ask for one clear square photo of their face, or their logo.",
        "style": "A photograph or a flat mark; subject centred with room to be cropped into a circle. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "steps": [
          "Get the photo or logo from the person.",
          "Check it: square or near it, subject centred, sharp at 112 px and at 32 px for the icon.",
          "Write the alt text: who or what it shows.",
          "Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
          "Upload it (an https link in site.logo, or photo_upload_link), then call theme_needs: every slot should say filled.",
          "Open every button's link and check it returns a page before you publish."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              800,
              800
            ],
            "need": "recommended",
            "purpose": "the round picture at the top (112 px, cropped to a circle) and the browser icon: a face or a logo, subject centred; without it the name leads",
            "alt_hint": "who or what it shows, e.g. Juno Marsh smiling, in a yellow coat",
            "prompt": "a clear square photo of the person's face, or their logo on a plain ground, centred with room to crop to a circle"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when the link is shared",
            "alt_hint": "what the picture shows",
            "prompt": "the avatar on the palette's background colour with the name beside it"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a picture at the top of an update's own page",
            "alt_hint": "what it shows",
            "prompt": "a real photo of what the update is about"
          }
        ],
        "content": [
          {
            "field": "site.title",
            "need": "required",
            "purpose": "your name or handle, the big line at the top"
          },
          {
            "field": "site.tagline",
            "need": "recommended",
            "purpose": "one line under the name: what you do"
          },
          {
            "field": "site.intro",
            "need": "optional",
            "purpose": "a sentence more, smaller, under that"
          },
          {
            "field": "site.buttons",
            "need": "required",
            "purpose": "the buttons, in order, 3-12: label, link, and an optional one-line note. The first one is filled with the accent colour, so put the one that matters most first"
          },
          {
            "field": "site.contact",
            "need": "recommended",
            "purpose": "social links print as a row of small pills under the buttons; the email goes in the footer"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "a pill above everything for news that can't wait, e.g. New single out Friday"
          },
          {
            "field": "site.streams",
            "need": "optional",
            "purpose": "each stream prints as a short list of its newest three entries (or upcoming events) under the buttons, linking to its pages"
          },
          {
            "field": "site.cards_title",
            "need": "optional",
            "purpose": "cards print as a compact list (name, price or period, a line), e.g. what you sell"
          },
          {
            "field": "site.about",
            "need": "optional",
            "purpose": "a few centred lines near the bottom"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the last line, e.g. For bookings, email me"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/link-page/1.0.2.json",
        "sha256": "6a1c681ebccdf495ff0268c077cd8a53265c7dc224740325605de06944833400",
        "bytes": 20793
      }
    },
    {
      "name": "listing-page",
      "title": "Listing",
      "licence": "MIT",
      "version": "1.0.0",
      "type": "property",
      "description": "One property, room to look. A wide photograph, the price and key figures, a gallery, video and walk-through tour, then open-house and visit details. Built for a phone first.",
      "heading_ids": true,
      "body_h1_as_h2": true,
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/listing-page/1.0.0-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/listing-page/1.0.0-desktop.png"
        }
      ],
      "palettes": {
        "linen": {
          "title": "Linen & evergreen",
          "colors": {
            "bg": "#f8f6f0",
            "ink": "#20372e",
            "muted": "#59675f",
            "accent": "#245343",
            "accent-2": "#9c6545",
            "line": "#d9ded5",
            "on-accent": "#ffffff"
          }
        },
        "stone": {
          "title": "Stone & ink",
          "colors": {
            "bg": "#f5f5f2",
            "ink": "#252b30",
            "muted": "#626970",
            "accent": "#344f63",
            "accent-2": "#956c42",
            "line": "#d8dcde",
            "on-accent": "#ffffff"
          }
        }
      },
      "art": {
        "ask": "Ask for the actual property photographs: a wide exterior or best-room hero, then a curated set of room, garden and view photos. Ask which details may be public.",
        "style": "Real property photography in natural light. Preserve the actual rooms, proportions, finishes, views and surroundings. Never invent or materially alter a property. No engravings, animal mascots or generated room photographs.",
        "prompt_prefix": "Use the owner-supplied photograph of this property; keep it truthful.",
        "steps": [
          "Get the real property photos and confirm the asking price, location, room counts and visit details with the owner.",
          "Choose a wide hero and a small set of useful gallery views. Do not invent a missing room, view or feature.",
          "Shrink pictures to web size, about 2400 pixels on the long side and usually under 1 MB; originals need the existing plain warning first.",
          "Write a useful description for each photo. Put gallery pictures in separate Markdown paragraphs in the main listing entry.",
          "Add the video and 3D-tour URLs as !embed lines under their own headings; request approval for each new source.",
          "Check the phone layout, menu anchors, contact details, map and media, then run site_check with deep:true before asking for approval."
        ]
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              1600,
              900
            ],
            "need": "recommended",
            "purpose": "the wide opening photograph: the actual exterior or best room, with space around the property",
            "alt_hint": "Describe the real property and viewpoint, without a sales claim.",
            "prompt": "Use the owner’s actual property photograph. Do not generate or invent a property, room, view or feature."
          },
          {
            "field": "body",
            "size": [
              1600,
              1200
            ],
            "need": "recommended",
            "purpose": "the photo gallery in the listing entry: put each ![description](image) in its own paragraph after the Photos heading",
            "alt_hint": "Name the room and what is visible, e.g. The kitchen looking toward the garden.",
            "prompt": "Use actual photographs supplied for this property. Keep the rooms, proportions, finishes and views truthful."
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture shared in messages; otherwise the hero is used",
            "alt_hint": "The actual property shown.",
            "prompt": "Crop the real hero photograph to a wide share image. Do not alter the property."
          }
        ],
        "content": [
          {
            "field": "site.title",
            "need": "required",
            "purpose": "the property name or address in the top bar"
          },
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "a short, factual headline for the property"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "the location and one sentence about the home"
          },
          {
            "field": "site.hero_caption",
            "need": "recommended",
            "purpose": "the asking price and availability, exactly as confirmed by the owner"
          },
          {
            "field": "site.streams",
            "need": "required",
            "purpose": "one feature stream for the main listing entry; put the stat tiles in entry.stats and the photo gallery, video, 3D tour and open-house details in its body"
          },
          {
            "field": "entry.body",
            "need": "recommended",
            "purpose": "Use headings such as Photos, Video tour, Walk through and Open house. Put each picture in its own paragraph. Put !embed[Video tour](https://…) and !embed[3D tour](https://…) on their own lines, in place. Each source needs owner approval. Heading ids make /listing/home/#video-tour work."
          },
          {
            "field": "site.cta_label",
            "need": "recommended",
            "purpose": "the primary action with cta_link, e.g. Arrange a visit, linking to an on-site heading or the contact method"
          },
          {
            "field": "site.cta2_label",
            "need": "optional",
            "purpose": "a second action with cta2_link, e.g. Video tour to /listing/home/#video-tour"
          },
          {
            "field": "site.links",
            "need": "recommended",
            "purpose": "short menu links to on-site headings, e.g. /listing/home/#photos and /listing/home/#video-tour"
          },
          {
            "field": "site.contact",
            "need": "recommended",
            "purpose": "the owner-approved visit contact, phone/email and map link; never publish private contact details without approval"
          },
          {
            "field": "site.about",
            "need": "optional",
            "purpose": "a short note about arranging a visit, shown with contact information"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the agent/owner’s required listing disclaimer or confirmed attribution"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/listing-page/1.0.0.json",
        "sha256": "3703eb61c05b49fcf5e0634e27e641bab39843abb1c7bab3423c0296b7f2ab58",
        "bytes": 19538
      }
    },
    {
      "name": "local-business",
      "title": "Local business",
      "licence": "MIT",
      "version": "1.0.3",
      "type": "business",
      "description": "For a shop, salon, clinic, studio or trade: your name and what you do, then your hours (open now, holiday closures) and how to call or find you, right at the top. Services follow as cards with prices, then reviews, news and questions.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/local-business/1.0.3-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/local-business/1.0.3-desktop.png"
        }
      ],
      "palettes": {
        "paper": {
          "title": "Paper",
          "colors": {
            "bg": "#f3f2f2",
            "ink": "#201e1d",
            "muted": "#5c5855",
            "accent": "#00647f",
            "accent-2": "#a8470f",
            "line": "#cfcbc9",
            "on-accent": "#ffffff"
          }
        },
        "ocean": {
          "title": "Ocean",
          "colors": {
            "bg": "#eef6f8",
            "ink": "#10262e",
            "muted": "#486068",
            "accent": "#006f8e",
            "accent-2": "#b4501c",
            "line": "#bcd3da",
            "on-accent": "#ffffff"
          }
        },
        "forest": {
          "title": "Forest",
          "colors": {
            "bg": "#f0f4ec",
            "ink": "#1c2a1f",
            "muted": "#505f52",
            "accent": "#2d6a3e",
            "accent-2": "#8a5a12",
            "line": "#c6d3c1",
            "on-accent": "#ffffff"
          }
        }
      },
      "art": {
        "ask": "Ask for one real photo of the shopfront, the team or the work. People trust a real place.",
        "style": "Photographs, bright and natural; the logo flat on transparent. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "steps": [
          "Get the hero photo from your person: the shopfront, the team or the work. Never make one up.",
          "Check it: wide (landscape, at least 2080x1160), sharp, not dark, nothing private in frame (customers' faces, number plates, addresses).",
          "Write the alt text: what the photo shows, in plain words.",
          "If there is no logo, use none; if one is made, it is a flat mark in the palette's accent colour, never a picture of a real place or person.",
          "Upload each picture (an https link in its field, or photo_upload_link).",
          "Read the phone number, address, map link and every day's hours back to your person and get a yes before anything goes live: these are the facts small-business sites most often get wrong.",
          "Call theme_needs: every required slot should say filled."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "beside the headline on wide screens, under it on phones: the shopfront, the team or the work; without it the headline and buttons stand alone",
            "alt_hint": "what the photo shows, e.g. The front of the shop on Market Street, bikes in the window",
            "prompt": "a real photo of {subject}: the shopfront from across the street, the team at work, or a finished job; wide, bright, natural light"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "optional",
            "purpose": "the mark beside the name in the top bar (36 px) and the browser icon; flat, on transparent",
            "alt_hint": "e.g. A pine tree in a circle",
            "prompt": "a flat, simple mark for {subject}, one shape, in the palette's accent colour, on transparent; must read at 32 px"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link is shared; empty uses the hero",
            "alt_hint": "what it shows",
            "prompt": "the hero photo cropped to 1200x630"
          },
          {
            "field": "card.image",
            "alt": "card.image_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a photo across the top of a service card; leave every card without one or give every card in a group one",
            "alt_hint": "the work shown, e.g. A wheel being trued on the stand",
            "prompt": "a real photo of this service being done at {subject}"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a photo at the top of a news post or event page",
            "alt_hint": "what it shows",
            "prompt": "a real photo from the day or the thing announced"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the headline: what you do and where, e.g. Bike repair in Millbrook, done the same week"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "a line or two under the headline"
          },
          {
            "field": "site.contact",
            "need": "required",
            "purpose": "phone, address and map link: the Call and Get directions buttons in the hero and the Contact panel beside the hours; with no premises, leave the address empty and name the service area in footer_line"
          },
          {
            "field": "site.hours",
            "need": "recommended",
            "purpose": "the Hours panel straight after the hero: the week with today marked, open now or when you open next, holiday closures for the next 60 days, and the note under it"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "a band across the top of every page, e.g. Closed Friday for a family wedding"
          },
          {
            "field": "site.cards_title",
            "need": "recommended",
            "purpose": "the heading for cards without a group, and the menu item for the cards"
          },
          {
            "field": "card.group",
            "need": "recommended",
            "purpose": "each group prints as its own section with the group as heading, in the order the cards sort. A group named Services shows price cards; one named Reviews (or Testimonials) prints each card as a quote (name = who said it, description = the quote, subtitle = e.g. customer since 2019); one named FAQ prints question (name) and answer (description)"
          },
          {
            "field": "card.price",
            "need": "recommended",
            "purpose": "the price on a service card, exactly as written, e.g. From $45"
          },
          {
            "field": "site.buttons",
            "need": "optional",
            "purpose": "a row of link buttons under the hours and contact, e.g. Book online, Gift cards; note prints under each"
          },
          {
            "field": "site.streams",
            "need": "recommended",
            "purpose": "news and specials as a list stream; an events stream (entries with event) shows coming-up and earlier events with time and place"
          },
          {
            "field": "site.about",
            "need": "recommended",
            "purpose": "who is behind it, how long, licences and insurance"
          },
          {
            "field": "site.cta_label",
            "need": "optional",
            "purpose": "a third hero button after Call and Get directions (with cta_link), e.g. See prices to #cards"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer: licence numbers, service area"
          },
          {
            "field": "site.links",
            "need": "optional",
            "purpose": "the menu in the top bar; empty uses the home sections"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/local-business/1.0.3.json",
        "sha256": "5451903dcae9c04ba72a3d45c5533d24e751b014db0289432b4cfc1f1c8fd54d",
        "bytes": 34834
      }
    },
    {
      "name": "menu-page",
      "title": "Menu page",
      "licence": "MIT",
      "version": "1.0.3",
      "type": "food",
      "description": "For a restaurant, cafe, bakery, bar or food truck: a page that reads like the menu on the table, with each dish, its price and dietary marks, then your hours, open now, and how to call, book or find you.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/menu-page/1.0.3-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/menu-page/1.0.3-desktop.png"
        }
      ],
      "palettes": {
        "sunset": {
          "title": "Sunset",
          "colors": {
            "bg": "#fdf5ec",
            "ink": "#2b1d14",
            "muted": "#6a5444",
            "accent": "#a8470f",
            "accent-2": "#1f6a73",
            "line": "#e6d2bd",
            "on-accent": "#ffffff"
          }
        },
        "forest": {
          "title": "Forest",
          "colors": {
            "bg": "#f0f4ec",
            "ink": "#1c2a1f",
            "muted": "#505f52",
            "accent": "#2d6a3e",
            "accent-2": "#8a5a12",
            "line": "#c6d3c1",
            "on-accent": "#ffffff"
          }
        },
        "midnight": {
          "title": "Midnight",
          "colors": {
            "bg": "#10162a",
            "ink": "#eef1fa",
            "muted": "#aab3cc",
            "accent": "#7cc4ff",
            "accent-2": "#ffb86b",
            "line": "#2f3a5c",
            "on-accent": "#0b1224"
          }
        }
      },
      "art": {
        "ask": "Ask for a photo of the room, or the dish people order most. Real food from the real kitchen. A menu photo is not a menu: type the menu in.",
        "style": "Photographs, natural light, no filters; the logo is flat. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "steps": [
          "Get the hero photo from your person: the room or the signature dish. Never make up a picture of food or of the place.",
          "Check it: wide (landscape, at least 2080x1160), sharp, the food looks appetising (not blurry, no flash glare).",
          "Write the alt text: what the photo shows, in plain words.",
          "Type the menu in as cards (one per dish, grouped by course). Never publish a photo of a paper menu as the menu: it can't be searched or read on a phone.",
          "Upload each picture (an https link in its field, or photo_upload_link).",
          "Ask the owner to read the typed menu and every price back, and the hours, phone and address, before approval.",
          "Call theme_needs: every required slot should say filled."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "a wide photo under the headline and buttons: the room, or the dish people order most; without it the menu follows straight on",
            "alt_hint": "what the photo shows, e.g. The dining room at dusk, tables set by the window",
            "prompt": "a real photo of {subject}: the dining room, or its best-known dish on the table; natural light, no filters"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "optional",
            "purpose": "the mark above the name at the top of every page (56 px) and the browser icon; flat",
            "alt_hint": "e.g. A fig leaf",
            "prompt": "a flat, simple emblem for {subject}, one shape, in the palette's accent colour, on transparent; must read at 32 px"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link is shared; empty uses the hero",
            "alt_hint": "what it shows",
            "prompt": "the hero photo cropped to 1200x630"
          },
          {
            "field": "card.image",
            "alt": "card.image_alt",
            "size": [
              1200,
              900
            ],
            "need": "optional",
            "purpose": "a small photo beside a dish on the menu; most menus have none, and a few signature dishes are enough",
            "alt_hint": "the dish as served, e.g. Roast chicken with lemon and herbs on a white plate",
            "prompt": "a real photo of this dish from {subject}'s kitchen, as served"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a photo at the top of a special, news post or event page",
            "alt_hint": "what it shows",
            "prompt": "a real photo of the special or the evening announced"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the headline under the name: the cuisine and the town, e.g. A neighbourhood bistro in Millbrook"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "a line or two under the headline"
          },
          {
            "field": "site.cards_title",
            "need": "required",
            "purpose": "the menu's heading, e.g. Menu; set cards_anchor to menu and the hero button's cta_link to #menu"
          },
          {
            "field": "card",
            "need": "required",
            "purpose": "each dish is a card: name, price (exactly as written, e.g. $14 or Market price), description, tags for dietary marks (V, VG, GF, N), subtitle for a second line (e.g. for two, or a pairing), badge for New or Chef's choice. Typed in, never a photo of a paper menu"
          },
          {
            "field": "card.group",
            "need": "required",
            "purpose": "the menu's courses (Starters, Mains, Desserts, Drinks), each printed under its own heading in the order the cards sort"
          },
          {
            "field": "site.hours",
            "need": "required",
            "purpose": "Hours after the menu: the week (split lunch and dinner as two rows for one day), open now, holiday closures for the next 60 days, and the note (e.g. Kitchen closes 30 minutes before close)"
          },
          {
            "field": "site.contact",
            "need": "required",
            "purpose": "address, phone, email, map link: the Call and Get directions buttons and the Contact column beside the hours"
          },
          {
            "field": "site.buttons",
            "need": "recommended",
            "purpose": "order and booking links the restaurant already has, under the menu, e.g. Book a table, Order for pickup; note prints under each. No checkout here"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "a band across the top of every page, e.g. Closed Monday; kitchen closes at 9"
          },
          {
            "field": "site.cta_label",
            "need": "recommended",
            "purpose": "the first hero button, e.g. See the menu (cta_link #menu)"
          },
          {
            "field": "site.streams",
            "need": "optional",
            "purpose": "specials and news as a list stream; an events stream (entries with event) shows coming-up and earlier evenings with time and place"
          },
          {
            "field": "site.about",
            "need": "recommended",
            "purpose": "the story and the people in the kitchen"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the allergens note, first in the footer, e.g. Tell your server about any allergy. V vegetarian · VG vegan · GF gluten-free"
          },
          {
            "field": "site.links",
            "need": "optional",
            "purpose": "the menu of links under the name; empty uses the home sections"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/menu-page/1.0.3.json",
        "sha256": "88025376d8d91879cc07824f9825df6518c9b2029c12f541551d4cc44515c35e",
        "bytes": 33185
      }
    },
    {
      "name": "personal-homepage",
      "title": "Personal homepage",
      "licence": "MIT",
      "version": "1.0.3",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/personal-homepage/1.0.3-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/personal-homepage/1.0.3-desktop.png"
        }
      ],
      "type": "personal",
      "description": "A personal homepage with a live log: who you are at the top, then a journal your assistant keeps, your projects as cards, your writing, and an About.",
      "art": {
        "ask": "Ask your person for one wide photo of themselves or their world (their work, their place). A real photo, not a made-up picture.",
        "style": "Photographs. One wide hero photo; covers for writing entries are optional.",
        "steps": [
          "Get the hero photo from your person (photo_upload_link if they send it from their phone).",
          "Check it: wide (about 16:9), at least 2080 px across, sharp; ask for another if not.",
          "Write its alt text with your person: what it shows, in a few words.",
          "Upload it into site.hero, then call theme_needs: the hero should say filled."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "the wide photo beside the headline",
            "alt_hint": "what the photo shows",
            "prompt": "a wide photograph of the person or their world"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link is shared; empty uses the hero",
            "alt_hint": "what it shows",
            "prompt": ""
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a writing entry's cover photo",
            "alt_hint": "what it shows",
            "prompt": ""
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the headline"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "the paragraph under the headline"
          },
          {
            "field": "site.handle",
            "need": "recommended",
            "purpose": "the X handle: follow buttons and the byline"
          },
          {
            "field": "site.streams",
            "need": "required",
            "purpose": "one stream with layout feature (the journal your assistant keeps: newest entry in full, with notes) and one with layout list (writing)"
          },
          {
            "field": "site.cards_title",
            "need": "optional",
            "purpose": "projects as cards"
          },
          {
            "field": "site.about",
            "need": "recommended",
            "purpose": "the About section"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer line"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/personal-homepage/1.0.3.json",
        "sha256": "7f4f63a03243252675b6f9973a891085e2771c7aaff2fa2dc4cedd55ec23e51b",
        "bytes": 30773
      }
    },
    {
      "name": "portfolio",
      "title": "Portfolio",
      "licence": "MIT",
      "version": "1.0.2",
      "type": "portfolio",
      "description": "A plain gallery wall for your own work: your name and what you do set large, a grid of pieces grouped into series, then an optional CV (Experience, Education), commissions with prices, and a big email address to reach you.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/portfolio/1.0.2-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/portfolio/1.0.2-desktop.png"
        }
      ],
      "palettes": {
        "ink": {
          "title": "Ink",
          "colors": {
            "bg": "#ffffff",
            "ink": "#111111",
            "muted": "#555555",
            "accent": "#1a3fb4",
            "accent-2": "#b3261e",
            "line": "#d4d4d4",
            "on-accent": "#ffffff"
          }
        },
        "slate": {
          "title": "Slate",
          "colors": {
            "bg": "#eef0f3",
            "ink": "#1e2329",
            "muted": "#555d68",
            "accent": "#37597d",
            "accent-2": "#9a4a1c",
            "line": "#c8ced6",
            "on-accent": "#ffffff"
          }
        },
        "midnight": {
          "title": "Midnight",
          "colors": {
            "bg": "#10162a",
            "ink": "#eef1fa",
            "muted": "#aab3cc",
            "accent": "#7cc4ff",
            "accent-2": "#ffb86b",
            "line": "#2f3a5c",
            "on-accent": "#0b1224"
          }
        }
      },
      "art": {
        "ask": "Ask for the person's best 6-12 pieces and which one leads. The work stays theirs; the assistant never generates samples of it.",
        "style": "The person's own work, shown on a plain page; nothing competes with it. The palette is neutral (Ink, Slate) so colours in the work read true; Midnight suits photography. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "steps": [
          "Collect the pieces from the person, with which one leads (it becomes the hero, and the first card shows large).",
          "Check each: at least 1600 px on the long edge, sharp, sRGB, nothing cropped that matters. Don't recompress below the site's own resizing.",
          "Agree the order and the groups (series, commissions, Experience, Education) with the person; set each card's sort.",
          "Write alt text for each piece: what is in it, not 'photo' or 'image'.",
          "Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
          "Upload each one (an https link in its field, or photo_upload_link), then call theme_needs: every slot should say filled."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "the signature piece, full width under your name; without it the name and line stand alone",
            "alt_hint": "what the piece shows, e.g. A cyanotype of fern leaves on blue paper",
            "prompt": "the person's own best piece, cropped wide; never generated"
          },
          {
            "field": "card.image",
            "alt": "card.image_alt",
            "size": [
              1600,
              1200
            ],
            "need": "recommended",
            "purpose": "one piece of work per card in the work grid (6-60, 1600 px on the long edge; shown 4:3, the first one large); a card without a picture shows its name set large on a tinted plate",
            "alt_hint": "what is in the piece, not 'photo', e.g. Poster: a red heron over a grey harbour",
            "prompt": "the person's own work, photographed or exported flat; never generated"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "optional",
            "purpose": "a small round mark beside your name in the masthead (32 px) and the browser icon",
            "alt_hint": "e.g. The initials I C in a circle",
            "prompt": "a simple monogram of the person's initials, flat, in the palette's accent colour on white"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "the lead picture on a project's own page",
            "alt_hint": "what the piece shows",
            "prompt": "the project's lead piece, from the person's own work"
          },
          {
            "field": "body",
            "size": [
              1600,
              1067
            ],
            "need": "optional",
            "purpose": "more pictures inside a project page: put ![description](image) on its own line",
            "alt_hint": "what the piece shows",
            "prompt": "further pieces or details from the same project, from the person's own work"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link is shared; empty uses the hero",
            "alt_hint": "what the picture shows",
            "prompt": "the hero piece cropped to 1200x630"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the big line at the top: your name and what you do, e.g. Ines Calder draws maps and book covers"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "a sentence or two under it"
          },
          {
            "field": "site.cards_title",
            "need": "required",
            "purpose": "the work grid's heading when cards have no group; with groups each group is its own block under its group name"
          },
          {
            "field": "card.group",
            "need": "recommended",
            "purpose": "sorts cards into blocks, in card sort order: series of work (e.g. Selected work, Posters), commissions, and for a CV: Experience, Education"
          },
          {
            "field": "card.period",
            "need": "optional",
            "purpose": "CV mode: a card with a period (e.g. 2021 – now) prints as a CV line: period, then name (the role or degree), subtitle (the employer or school) and description"
          },
          {
            "field": "card.price",
            "need": "optional",
            "purpose": "a card with a price (and no period) prints as a commission or service: name, price, description, link"
          },
          {
            "field": "card.subtitle",
            "need": "optional",
            "purpose": "on a work card: a small line like the medium and year; on a CV line: the employer or school"
          },
          {
            "field": "card.link",
            "need": "recommended",
            "purpose": "on a work card, makes the whole piece a link, usually to its project page in a stream"
          },
          {
            "field": "site.streams",
            "need": "recommended",
            "purpose": "list streams print as dated lists (projects, exhibitions, news); entries with an event split into upcoming and earlier. A feature stream shows its newest entry in full"
          },
          {
            "field": "site.about",
            "need": "recommended",
            "purpose": "the About block; its first paragraph is set large"
          },
          {
            "field": "site.contact",
            "need": "required",
            "purpose": "the Contact block: the email set large, phone, address, and social links"
          },
          {
            "field": "site.buttons",
            "need": "optional",
            "purpose": "small buttons under the contact details, e.g. Download CV (PDF), with a note"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "one line across the top, e.g. your availability: Booking commissions for spring"
          },
          {
            "field": "site.links",
            "need": "optional",
            "purpose": "the menu; empty uses the home sections and Contact"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer line, e.g. your name and a copyright"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/portfolio/1.0.2.json",
        "sha256": "773f235c92935d5e703acf02e840c9069d05253b801dcb1db1d9415613bb8cf6",
        "bytes": 31341
      }
    },
    {
      "name": "product-page",
      "title": "Product page",
      "licence": "MIT",
      "version": "1.2.4",
      "description": "A page for one thing you make or launch, set like a newspaper front: a masthead with a dateline, the headline beside your picture, a row of key figures, then the story, a few promises as columns, and inner pages.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/product-page/1.2.4-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/product-page/1.2.4-desktop.png"
        }
      ],
      "type": "product",
      "art": {
        "ask": "Pick one subject that stands for what your person makes (an animal or an object), with them. It appears in every picture, drawn the same way. Example: a site-building product uses a bowerbird, the bird that builds a display and keeps it.",
        "style": "Engraved illustration, like a 19th-century print: black ink linework and cross-hatching on plain off-white paper (not transparent), generous empty paper around the subject. One spot colour only (the site's accent, e.g. cyan #0088b0), used on one or two small details; everything else black ink. No words in any picture except the share picture.",
        "prompt_prefix": "19th-century steel engraving, fine black ink linework with cross-hatching and stipple, on plain off-white paper, generous empty margins, no background scenery, no text, no frame.",
        "steps": [
          "Agree the subject and the one spot colour with your person.",
          "Make each picture in `images` from its prompt (replace {subject}; start every prompt with prompt_prefix), at its size. The subject must look the same in every picture.",
          "Check each one: the right size and shape; an off-white ground, not transparent; the same paper colour edge to edge; only the one spot colour; no words except in the share picture.",
          "Shrink the mark to 32 px. If it no longer reads as the subject, make it bolder and simpler and try again.",
          "Make the share picture from the hero: the hero on the left, the site's name and headline on the right in a serif, nothing within 50 px of the edges.",
          "Name each file by its slot, keep its alt text with it, and show your person the whole set before you use any of it.",
          "Upload each one (an https link in its field, or photo_upload_link), then call theme_needs: every slot should say filled."
        ]
      },
      "palettes": {
        "press": {
          "title": "Press",
          "colors": {
            "bg": "#f3f2f2",
            "ink": "#201e1d",
            "muted": "#5c5653",
            "accent": "#00647f",
            "accent-2": "#d6006c",
            "line": "#cfcbc9",
            "on-accent": "#ffffff"
          }
        },
        "slate": {
          "title": "Slate",
          "colors": {
            "bg": "#eef0f3",
            "ink": "#1e2329",
            "muted": "#555d68",
            "accent": "#37597d",
            "accent-2": "#9a4a1c",
            "line": "#c8ced6",
            "on-accent": "#ffffff"
          }
        },
        "sunset": {
          "title": "Sunset",
          "colors": {
            "bg": "#fdf5ec",
            "ink": "#2b1d14",
            "muted": "#6a5444",
            "accent": "#a8470f",
            "accent-2": "#1f6a73",
            "line": "#e6d2bd",
            "on-accent": "#ffffff"
          }
        }
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              1408,
              1408
            ],
            "need": "recommended",
            "purpose": "beside the headline on the home page; without it the headline runs alone",
            "alt_hint": "what the picture shows, e.g. An engraved bird at its nest",
            "prompt": "{subject} at work, doing what the product does, with one or two small details in the spot colour; square; subject in the lower two thirds, paper above"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "recommended",
            "purpose": "the mark beside the name in the masthead (46 px) and the browser icon; must still read at 32 px",
            "alt_hint": "e.g. An engraved bird's head",
            "prompt": "the head of {subject} in profile, bold simple lines, little hatching, filling the frame; the spot colour on one small detail (an eye, a tip)"
          },
          {
            "field": "site.follow_image",
            "alt": "site.follow_image_alt",
            "size": [
              96,
              96
            ],
            "need": "optional",
            "purpose": "a small round photo of the owner in the masthead's follow link (shown alone on a phone); without it the link is words only",
            "alt_hint": "the owner's name, e.g. Sam Lee",
            "prompt": "a friendly head-and-shoulders photo of the owner, face centred, plain background; square"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "recommended",
            "purpose": "the picture when a link is shared on X or in messages; put the site name and headline in it, in the site's serif",
            "alt_hint": "the site name and headline, then what the picture shows",
            "prompt": "made from the hero: hero on the left, paper on the right for the site's name and headline"
          },
          {
            "field": "body",
            "size": [
              2128,
              912
            ],
            "need": "optional",
            "purpose": "a wide band inside the front-page story: put ![description](image) on its own line between two sections",
            "alt_hint": "what the band shows",
            "prompt": "a wide scene from {subject}'s world without {subject} in it, a few small details in the spot colour, paper at both ends"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1408,
              1408
            ],
            "need": "optional",
            "purpose": "spot art on an inner page, shown small (about 200 px) beside the words",
            "alt_hint": "what it shows",
            "prompt": "one small object from {subject}'s world, alone, small in the frame, in the spot colour with black hatching"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the headline"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "the paragraph under the headline"
          },
          {
            "field": "site.hero_caption",
            "need": "recommended",
            "purpose": "the dateline under the masthead, e.g. Vol. I — October 2026 · what it is · what it costs · its licence"
          },
          {
            "field": "site.cta_label",
            "need": "recommended",
            "purpose": "the main button under the headline (with cta_link); cta2_label and cta2_link make a second"
          },
          {
            "field": "site.links",
            "need": "recommended",
            "purpose": "the menu in the masthead: usually the inner pages"
          },
          {
            "field": "site.streams",
            "need": "required",
            "purpose": "one stream with layout feature: its newest entry is the front-page story (its stats are the row of figures, up to 4; its body is the story; a > quote is the pull quote). One stream with layout list: the inner pages (How it works, Install, ...)"
          },
          {
            "field": "site.cards_title",
            "need": "optional",
            "purpose": "cards print as columns under this heading: short promises or features"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer line, e.g. the product's name and licence"
          },
          {
            "field": "site.handle",
            "need": "optional",
            "purpose": "an X handle: the masthead's follow link"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/product-page/1.2.4.json",
        "sha256": "922ad54622dcb210e5b81094b4266abf4cddf7d16b07d93aced7ac1eb93e90c0",
        "bytes": 29503
      }
    },
    {
      "name": "services-page",
      "title": "Services page",
      "licence": "MIT",
      "version": "1.0.3",
      "type": "services",
      "description": "A calm page for someone who sells their time (a coach, consultant, tutor or freelancer): a one-line promise with a booking button, services with prices, how it works, what clients say, questions, about you, workshops and how to reach you.",
      "sections": [
        "entries",
        "cards",
        "about"
      ],
      "layouts": [
        "feature",
        "list"
      ],
      "previews": [
        {
          "label": "phone",
          "url": "https://get.porchsite.dev/themes/services-page/1.0.3-phone.png"
        },
        {
          "label": "desktop",
          "url": "https://get.porchsite.dev/themes/services-page/1.0.3-desktop.png"
        }
      ],
      "palettes": {
        "slate": {
          "title": "Slate",
          "colors": {
            "bg": "#eef0f3",
            "ink": "#1e2329",
            "muted": "#555d68",
            "accent": "#37597d",
            "accent-2": "#9a4a1c",
            "line": "#c8ced6",
            "on-accent": "#ffffff"
          }
        },
        "ocean": {
          "title": "Ocean",
          "colors": {
            "bg": "#eef6f8",
            "ink": "#10262e",
            "muted": "#486068",
            "accent": "#006f8e",
            "accent-2": "#b4501c",
            "line": "#bcd3da",
            "on-accent": "#ffffff"
          }
        },
        "paper": {
          "title": "Paper",
          "colors": {
            "bg": "#f3f2f2",
            "ink": "#201e1d",
            "muted": "#5c5855",
            "accent": "#00647f",
            "accent-2": "#a8470f",
            "line": "#cfcbc9",
            "on-accent": "#ffffff"
          }
        }
      },
      "art": {
        "ask": "Ask for one friendly, well-lit photo of them working or welcoming a client. A face builds trust.",
        "style": "Photographs; no stock photos of handshakes. Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour.",
        "steps": [
          "Get the photos from your person: one of them at work for the hero, and any of real sessions or finished work for the service cards.",
          "Check each one: sharp, well lit, the right shape (crop to the slot's size), nobody in it who hasn't agreed to be there.",
          "Write alt text for each: who is in it and what they are doing.",
          "Upload each one (an https link in its field, or photo_upload_link), then call theme_needs: every slot you used should say filled.",
          "Ask for permission for every named testimonial before it goes on the page.",
          "Use real photos for real things; never make up pictures of real places, people or food. Illustrated art only for a mark or emblem, in the palette's accent colour."
        ]
      },
      "author": {
        "x": "cooksbayouboy"
      },
      "slots": {
        "images": [
          {
            "field": "site.hero",
            "alt": "site.hero_alt",
            "size": [
              2080,
              1160
            ],
            "need": "recommended",
            "purpose": "beside the headline on the home page: the person at work, or their space; without it the headline sits beside a small card with their email, phone and availability",
            "alt_hint": "who and what it shows, e.g. Ada at her desk going through a client's receipts",
            "prompt": "a real, well-lit photo of {subject} at work or welcoming a client, looking toward the camera, room around them on the left and right"
          },
          {
            "field": "site.logo",
            "alt": "site.logo_alt",
            "size": [
              512,
              512
            ],
            "need": "optional",
            "purpose": "the mark beside the name in the header (40 px, rounded corners) and the browser icon; must still read at 32 px",
            "alt_hint": "e.g. A leaf over an open ledger",
            "prompt": "a simple flat emblem for {subject}, one shape, in the accent colour on the page's background colour, no words"
          },
          {
            "field": "site.share_image",
            "alt": "site.share_image_alt",
            "size": [
              1200,
              630
            ],
            "need": "optional",
            "purpose": "the picture when a link is shared; empty uses the hero",
            "alt_hint": "what it shows, then the name and promise if they are written in it",
            "prompt": "the hero photo cropped wide, with room on one side for the name and the one-line promise"
          },
          {
            "field": "card.image",
            "alt": "card.image_alt",
            "size": [
              1200,
              800
            ],
            "need": "optional",
            "purpose": "a photo across the top of a service card (a session in progress, the finished work); leave every card in a group without one or give each one",
            "alt_hint": "what the photo shows",
            "prompt": "a real photo of {subject} giving this service"
          },
          {
            "field": "entry.cover",
            "alt": "entry.cover_alt",
            "size": [
              1600,
              900
            ],
            "need": "optional",
            "purpose": "a photo at the top of a workshop's or post's own page",
            "alt_hint": "what the photo shows",
            "prompt": "a real photo from the workshop or its room"
          }
        ],
        "content": [
          {
            "field": "site.tagline",
            "need": "required",
            "purpose": "the promise in one line, the big headline (e.g. Calm, practical help with your books)"
          },
          {
            "field": "site.intro",
            "need": "recommended",
            "purpose": "under the headline: who it is for and the problem you solve, two or three sentences"
          },
          {
            "field": "site.cta_label",
            "need": "recommended",
            "purpose": "the main button under the headline (with cta_link): where people book, e.g. Book a free call, linking out to the booking page; cta2_label and cta2_link make a second, e.g. See prices -> #g-services"
          },
          {
            "field": "cards",
            "need": "required",
            "purpose": "everything in boxes, sorted into groups (card.group), each group its own section headed by its group name, in the cards' sort order. How a group looks follows what its cards carry: with a price it is the services (name, description = what you get, period = how long, price, link = book this); with a subtitle and no price it is testimonials (description = the quote, name = who said it, subtitle = their role or town; ask permission for every name); with a period and no price it is numbered steps (How it works: name, description, period = the step's label or length, e.g. First week); with none of those it is questions and answers (name = the question, description = the answer)"
          },
          {
            "field": "site.cards_title",
            "need": "optional",
            "purpose": "the heading of cards that have no group; the menu item for the cards (cards_nav overrides it)"
          },
          {
            "field": "site.about",
            "need": "recommended",
            "purpose": "about you (about_title is its heading): short credentials; the first paragraph prints larger"
          },
          {
            "field": "site.streams",
            "need": "optional",
            "purpose": "a list stream of entries with an event (date, place, RSVP link) shows as upcoming workshops or sessions, then earlier ones; a stream without events lists its posts; a feature stream shows its newest post in full"
          },
          {
            "field": "site.contact",
            "need": "required",
            "purpose": "email and phone show in the card beside the headline and in the Contact section at the end; the address (or just a town for the area you serve) and social links show there too. The Contact menu item and section appear when there is any"
          },
          {
            "field": "site.hours",
            "need": "recommended",
            "purpose": "when you take calls or sessions: the weekly table and whether you are available now (also in the card beside the headline), holidays in the next 60 days, and a note (e.g. Replies within one working day)"
          },
          {
            "field": "site.buttons",
            "need": "recommended",
            "purpose": "big link buttons at the top of the Contact section, the first one filled: e.g. Book a free 20-minute call, Send me your paperwork; note is the small line under each"
          },
          {
            "field": "site.notice",
            "need": "optional",
            "purpose": "a banner across the top of every page, e.g. Taking new clients from January"
          },
          {
            "field": "site.footer_line",
            "need": "recommended",
            "purpose": "the footer line, e.g. the business name and the area served"
          }
        ]
      },
      "package": {
        "url": "https://get.porchsite.dev/themes/services-page/1.0.3.json",
        "sha256": "8c1eb4056d413bf0c25ba3ce0c8cb26cd18ef7c1298cdff7f523bd5b2c678b3a",
        "bytes": 35132
      }
    }
  ]
}
