social.craftsky.project.defs

craftsky.social

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "abstract": {
      "description": "Abstract or non-representational design.",
      "type": "token"
    },
    "accessory": {
      "description": "Worn or carried accessories.",
      "type": "token"
    },
    "alteration": {
      "description": "Mending, repair, refashioning, or adjustment of an existing item.",
      "type": "token"
    },
    "animal": {
      "description": "Animal-themed design or motif.",
      "type": "token"
    },
    "aran": {
      "description": "Aran weight yarn.",
      "type": "token"
    },
    "boho": {
      "description": "Boho or bohemian-inspired design.",
      "type": "token"
    },
    "botanical": {
      "description": "Botanical, leaf, plant, or garden-inspired design.",
      "type": "token"
    },
    "bulky": {
      "description": "Bulky weight yarn.",
      "type": "token"
    },
    "checkerboard": {
      "description": "Checkerboard or checked design.",
      "type": "token"
    },
    "colorblock": {
      "description": "Color-blocked design.",
      "type": "token"
    },
    "component": {
      "description": "Motifs, swatches, parts, trims, blocks, appliques, or other components.",
      "type": "token"
    },
    "costume": {
      "description": "Costume, cosplay, theatre, or fancy-dress projects.",
      "type": "token"
    },
    "cottagecore": {
      "description": "Cottagecore design or aesthetic.",
      "type": "token"
    },
    "dk": {
      "description": "DK weight yarn.",
      "type": "token"
    },
    "fingering": {
      "description": "Fingering weight yarn.",
      "type": "token"
    },
    "floral": {
      "description": "Floral design, motif, or aesthetic.",
      "type": "token"
    },
    "folk": {
      "description": "Folk-inspired design or aesthetic.",
      "type": "token"
    },
    "garment": {
      "description": "Clothing worn on the body.",
      "type": "token"
    },
    "gauge": {
      "description": "Structured stitch gauge measured over a stated distance. Rows are optional because many crafters record only stitch gauge.",
      "properties": {
        "measurement": {
          "description": "Measurement distance for the gauge swatch, interpreted with unit.",
          "minimum": 1,
          "type": "integer"
        },
        "rows": {
          "description": "Number of rows or rounds measured, when recorded.",
          "minimum": 1,
          "type": "integer"
        },
        "stitches": {
          "description": "Number of stitches measured across the gauge swatch.",
          "minimum": 1,
          "type": "integer"
        },
        "unit": {
          "description": "Measurement unit for the gauge swatch.",
          "knownValues": [
            "cm",
            "in"
          ],
          "maxGraphemes": 10,
          "maxLength": 10,
          "type": "string"
        }
      },
      "required": [
        "stitches",
        "measurement",
        "unit"
      ],
      "type": "object"
    },
    "geometric": {
      "description": "Geometric design, motif, or layout.",
      "type": "token"
    },
    "gothic": {
      "description": "Gothic design or aesthetic.",
      "type": "token"
    },
    "holiday": {
      "description": "Holiday-themed design.",
      "type": "token"
    },
    "homeGoods": {
      "description": "Household items and decor.",
      "type": "token"
    },
    "lace": {
      "description": "Lace weight yarn.",
      "type": "token"
    },
    "lettering": {
      "description": "Design featuring lettering, words, initials, or typography.",
      "type": "token"
    },
    "material": {
      "description": "One visible material entry for a project. Rich-text annotations are scoped to text.",
      "properties": {
        "facets": {
          "description": "Byte-range annotations over text for material mentions and hashtags.",
          "items": {
            "ref": "app.bsky.richtext.facet",
            "type": "ref"
          },
          "type": "array"
        },
        "text": {
          "description": "Visible material text, e.g. '3m of @sewmesunshine.bsky.social #viscose fabric'.",
          "maxGraphemes": 100,
          "maxLength": 1000,
          "type": "string"
        }
      },
      "required": [
        "text"
      ],
      "type": "object"
    },
    "maximalist": {
      "description": "Maximalist design or aesthetic.",
      "type": "token"
    },
    "medical": {
      "description": "Medical, adaptive, support, or care-related projects.",
      "type": "token"
    },
    "minimalist": {
      "description": "Minimalist design or aesthetic.",
      "type": "token"
    },
    "modern": {
      "description": "Modern design or aesthetic.",
      "type": "token"
    },
    "nautical": {
      "description": "Nautical or maritime-inspired design.",
      "type": "token"
    },
    "novelty": {
      "description": "Novelty or playful themed design.",
      "type": "token"
    },
    "other": {
      "description": "Intentionally uncategorized or not covered by the current vocabulary.",
      "type": "token"
    },
    "pattern": {
      "description": "Optional metadata for the pattern used. Every field is optional. Self-drafted patterns may still carry a name, difficulty, URL, designer, or publisher.",
      "properties": {
        "designer": {
          "description": "The person or people who designed the pattern. Free text so physical patterns, indie designers, and multiple-designer credits can be represented without account references. Rich-text annotations for this string live in designerFacets.",
          "maxGraphemes": 200,
          "maxLength": 500,
          "type": "string"
        },
        "designerFacets": {
          "description": "Byte-range annotations over 'designer'. Mention facets may notify credited Craftsky accounts.",
          "items": {
            "ref": "app.bsky.richtext.facet",
            "type": "ref"
          },
          "type": "array"
        },
        "difficulty": {
          "description": "Pattern difficulty. A property of the pattern, not the post. Self-drafted patterns may include the author's own rating. knownValues are tokens.",
          "knownValues": [
            "social.craftsky.feed.defs#beginner",
            "social.craftsky.feed.defs#confidentBeginner",
            "social.craftsky.feed.defs#intermediate",
            "social.craftsky.feed.defs#advanced"
          ],
          "maxGraphemes": 100,
          "maxLength": 100,
          "type": "string"
        },
        "name": {
          "description": "Pattern name or visible pattern hashtag, e.g. 'Simplicity 8265', 'Hitchhiker Shawl', or '#hitchhiker'. Useful when there is no URL (e.g. a physical pattern), or alongside a URL as a display label. Rich-text annotations for this string live in nameFacets.",
          "maxGraphemes": 200,
          "maxLength": 500,
          "type": "string"
        },
        "nameFacets": {
          "description": "Byte-range annotations over 'name'. Used for pattern hashtags and future links/mentions in the visible pattern name string.",
          "items": {
            "ref": "app.bsky.richtext.facet",
            "type": "ref"
          },
          "type": "array"
        },
        "publisher": {
          "description": "The person, company, or entity that published the pattern. Optional and free text because pattern publishing differs across crafts and eras. Rich-text annotations for this string live in publisherFacets.",
          "maxGraphemes": 200,
          "maxLength": 500,
          "type": "string"
        },
        "publisherFacets": {
          "description": "Byte-range annotations over 'publisher'. Mention facets may notify credited Craftsky accounts.",
          "items": {
            "ref": "app.bsky.richtext.facet",
            "type": "ref"
          },
          "type": "array"
        },
        "selfDrafted": {
          "description": "True when the author identifies the pattern as self-drafted. Omit when false. This may coexist with other pattern metadata.",
          "type": "boolean"
        },
        "url": {
          "description": "Link to the pattern.",
          "format": "uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "pet": {
      "description": "Pet clothing, bedding, toys, and accessories.",
      "type": "token"
    },
    "plaid": {
      "description": "Plaid or tartan-inspired design.",
      "type": "token"
    },
    "project": {
      "description": "Wraps a craft project's shared fields (#projectCommon) and optional craft-specific fields (#details, open union). The wrapper exists so shared fields live in one place (common) while per-craft specialisations are added additively via the union. See ADR 001.",
      "properties": {
        "common": {
          "description": "Shared project fields that apply across all crafts.",
          "ref": "#projectCommon",
          "type": "ref"
        },
        "details": {
          "description": "Optional craft-specific fields. Open union — new crafts add new variants here without breaking existing records.",
          "refs": [
            "social.craftsky.project.sewing#details",
            "social.craftsky.project.quilting#details",
            "social.craftsky.project.crochet#details",
            "social.craftsky.project.knitting#details"
          ],
          "type": "union"
        }
      },
      "required": [
        "common"
      ],
      "type": "object"
    },
    "projectCommon": {
      "description": "Project fields shared across every craft. A post with project.common present but no project.details is a valid craft-tagged project post without specialised fields — useful when craftType references a craft that has no #details lexicon yet.",
      "properties": {
        "colors": {
          "description": "Primary colors used in the project, normalized by clients for search and filtering. knownValues are open suggestions; clients may write other bounded color strings when needed.",
          "items": {
            "knownValues": [
              "black",
              "white",
              "gray",
              "brown",
              "beige",
              "red",
              "orange",
              "yellow",
              "green",
              "blue",
              "purple",
              "pink",
              "cream",
              "gold",
              "silver",
              "multicolor",
              "natural"
            ],
            "maxGraphemes": 64,
            "maxLength": 64,
            "type": "string"
          },
          "maxLength": 10,
          "type": "array"
        },
        "craftType": {
          "description": "The craft this project belongs to. Required — a project post without a craft type is meaningless. knownValues are tokens; new crafts can be added to feed.defs without breaking old clients.",
          "knownValues": [
            "social.craftsky.feed.defs#knitting",
            "social.craftsky.feed.defs#crochet",
            "social.craftsky.feed.defs#sewing",
            "social.craftsky.feed.defs#embroidery",
            "social.craftsky.feed.defs#quilting"
          ],
          "maxGraphemes": 100,
          "maxLength": 100,
          "type": "string"
        },
        "designTags": {
          "description": "Visual design, motif, or aesthetic tags for the project, normalized by clients for cross-craft search and filtering. knownValues are open suggestions; clients may write other bounded design strings when needed.",
          "items": {
            "knownValues": [
              "social.craftsky.project.defs#floral",
              "social.craftsky.project.defs#botanical",
              "social.craftsky.project.defs#animal",
              "social.craftsky.project.defs#geometric",
              "social.craftsky.project.defs#abstract",
              "social.craftsky.project.defs#stripes",
              "social.craftsky.project.defs#colorblock",
              "social.craftsky.project.defs#plaid",
              "social.craftsky.project.defs#checkerboard",
              "social.craftsky.project.defs#lettering",
              "social.craftsky.project.defs#novelty",
              "social.craftsky.project.defs#holiday",
              "social.craftsky.project.defs#seasonal",
              "social.craftsky.project.defs#traditional",
              "social.craftsky.project.defs#modern",
              "social.craftsky.project.defs#vintage",
              "social.craftsky.project.defs#minimalist",
              "social.craftsky.project.defs#maximalist",
              "social.craftsky.project.defs#whimsical",
              "social.craftsky.project.defs#folk",
              "social.craftsky.project.defs#boho",
              "social.craftsky.project.defs#cottagecore",
              "social.craftsky.project.defs#gothic",
              "social.craftsky.project.defs#romantic",
              "social.craftsky.project.defs#nautical",
              "social.craftsky.project.defs#sporty"
            ],
            "maxGraphemes": 64,
            "maxLength": 64,
            "type": "string"
          },
          "maxLength": 10,
          "type": "array"
        },
        "duration": {
          "description": "Free-text description of how long the project took, e.g. '3 weeks', 'a weekend', '6 months of evenings'. Deliberately unstructured — crafters describe duration informally. Not range-queryable.",
          "maxGraphemes": 100,
          "maxLength": 500,
          "type": "string"
        },
        "materials": {
          "description": "Materials used in the project as visible rich-text entries. Each entry is indexed for search by text and may carry mention or hashtag facets over that text.",
          "items": {
            "ref": "#material",
            "type": "ref"
          },
          "maxLength": 10,
          "type": "array"
        },
        "pattern": {
          "description": "Optional pattern reference.",
          "ref": "#pattern",
          "type": "ref"
        },
        "status": {
          "description": "Whether the project is in progress or finished at the time this post was created. Snapshot — not a mutable lifecycle flag. knownValues are tokens so new statuses (e.g. planned, frogged) can be added without breaking old clients.",
          "knownValues": [
            "social.craftsky.feed.defs#wip",
            "social.craftsky.feed.defs#finished"
          ],
          "maxGraphemes": 100,
          "maxLength": 100,
          "type": "string"
        },
        "tags": {
          "description": "Structured search tags. Composer responsibility to normalise to ASCII kebab-case (pattern ^[a-z0-9]+(-[a-z0-9]+)*$). AppView search materialisation also merges hashtag facets from post text and faceted project metadata, so this field is not required to duplicate every visible hashtag.",
          "items": {
            "maxGraphemes": 64,
            "maxLength": 64,
            "type": "string"
          },
          "maxLength": 10,
          "type": "array"
        },
        "title": {
          "description": "Optional project name, e.g. 'Hitchhiker Shawl' or 'Linen Summer Dress'. Clients showing grid/card views should fall back to truncated text when title is absent.",
          "maxGraphemes": 200,
          "maxLength": 500,
          "type": "string"
        }
      },
      "required": [
        "craftType"
      ],
      "type": "object"
    },
    "quilt": {
      "description": "Quilts as a primary project category.",
      "type": "token"
    },
    "romantic": {
      "description": "Romantic design or aesthetic.",
      "type": "token"
    },
    "seasonal": {
      "description": "Seasonal design or aesthetic.",
      "type": "token"
    },
    "sport": {
      "description": "Sport weight yarn.",
      "type": "token"
    },
    "sporty": {
      "description": "Sporty or athletic-inspired design.",
      "type": "token"
    },
    "stripes": {
      "description": "Striped design.",
      "type": "token"
    },
    "superBulky": {
      "description": "Super bulky weight yarn.",
      "type": "token"
    },
    "toyHobby": {
      "description": "Toys, hobby objects, games, dolls, and play items.",
      "type": "token"
    },
    "traditional": {
      "description": "Traditional design or aesthetic.",
      "type": "token"
    },
    "vintage": {
      "description": "Vintage or retro-inspired design.",
      "type": "token"
    },
    "whimsical": {
      "description": "Whimsical or fanciful design.",
      "type": "token"
    },
    "worsted": {
      "description": "Worsted weight yarn.",
      "type": "token"
    }
  },
  "description": "Shared objects and tokens for craft project metadata. These are used by social.craftsky.feed.post and multiple social.craftsky.project.* detail lexicons.",
  "id": "social.craftsky.project.defs",
  "lexicon": 1
}

Validate Record

Validate a record against social.craftsky.project.defs

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:lmmx63zcns6gewgxqfdt4kof
CID
bafyreia2oz5soxj5jyedsidkfqzsh2hxswjwra2nyzcet7dmgmcu5vbsaq
Indexed At
2026-10-12 12:51 UTC
AT-URI
at://did:plc:lmmx63zcns6gewgxqfdt4kof/com.atproto.lexicon.schema/social.craftsky.project.defs

Referenced Schemas (5)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • social.craftsky.feed.defs not from the namespace authority

    Shared tokens for feed and project metadata. Tokens are referenced from social.craftsky.project.defs#projectCommon.craftType, social.craftsky.project.defs#projectCommon.status, and social.craftsky.project.defs#pattern.d…

  • social.craftsky.project.knitting not from the namespace authority

    Knitting-specific fields for a craft project post. Referenced from social.craftsky.project.defs#project.details as one variant of the open union. This file defines a referenced type (#details) only; no main record.

  • social.craftsky.project.crochet not from the namespace authority

    Crochet-specific fields for a craft project post. Referenced from social.craftsky.project.defs#project.details as one variant of the open union. This file defines a referenced type (#details) only; no main record.

  • social.craftsky.project.crochet.defs not from the namespace authority

    Subtype tokens for crochet projects. Referenced from social.craftsky.project.crochet#details.projectSubtype via knownValues.

  • social.craftsky.project.sewing not from the namespace authority

    Sewing-specific fields for a craft project post. Referenced from social.craftsky.project.defs#project.details as one variant of the open union. This file defines a referenced type (#details) only; no main record.

Lexicon Garden

@