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.
View raw schema
{
"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"
}