{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "classic-granny-square-pattern",
  "title": "Classic Granny Square — Free Pattern (Beginner)",
  "meta_description": "Learn the classic granny square with this free beginner pattern — four rounds of simple dc clusters, exact stitch counts, plus color ideas and joining tips.",
  "published_at": "2026-07-07",
  "updated_at": "2026-07-07",
  "author": "Ruby",
  "thumbnail_url": "data/images/classic-granny-square-pattern-hero.webp",
  "meta": {
    "title": "Classic Granny Square — Free Pattern (Beginner)",
    "pattern_name": "Classic Granny Square — Free Pattern (Beginner)",
    "difficulty": "Beginner",
    "time_needed": "30-45 Minutes",
    "rating": 4.9,
    "made_count": "1.4K",
    "taxonomy": {
      "category": "Classic & Solid",
      "skill_level": "Beginner",
      "yarn_weight": "Worsted",
      "tags": [
        "granny square",
        "classic granny square",
        "free pattern",
        "beginner",
        "blanket square",
        "retro crochet"
      ]
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "Classic Granny Square — Free Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "hero-info-1",
          "label": "Skill Level",
          "value": "Beginner / The perfect first square — just chains and double crochet",
          "raw_text": "Skill Level: Beginner / The perfect first square — just chains and double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "hero-info-2",
          "label": "Time Estimate",
          "value": "30-45 minutes per square",
          "raw_text": "Time Estimate: 30-45 minutes per square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "hero-info-3",
          "label": "Vibe",
          "value": "The original. Retro, cozy, endlessly stackable into blankets",
          "raw_text": "Vibe: The original. Retro, cozy, endlessly stackable into blankets",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ],
      "image": {
        "url": "data/images/classic-granny-square-pattern-hero.webp"
      }
    },
    {
      "order": 2,
      "card_type": "about",
      "code": "about",
      "title": "About",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "about-info-1",
          "label": "",
          "value": "If you learn one crochet pattern in your life, make it this one. The classic granny square is four rounds of simple double-crochet clusters worked from the center out — and once your hands memorize the rhythm, you can make one with your eyes closed.",
          "raw_text": "If you learn one crochet pattern in your life, make it this one. The classic granny square is four rounds of simple double-crochet clusters worked from the center out — and once your hands memorize the rhythm, you can make one with your eyes closed.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "about-info-2",
          "label": "",
          "value": "This is the square that built a thousand blankets. Work it in one color for a clean, modern look, or change color every round for that unmistakable retro charm. Every round below ends with an exact stitch count, so you always know your square is on track.",
          "raw_text": "This is the square that built a thousand blankets. Work it in one color for a clean, modern look, or change color every round for that unmistakable retro charm. Every round below ends with an exact stitch count, so you always know your square is on track.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 3,
      "card_type": "why_love",
      "code": "why-love",
      "title": "Why You'll Love This Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "why-love-1",
          "label": "",
          "value": "It's the foundation of everything: blankets, bags, cardigans, pillow covers — they all start here. The pattern uses only chains, double crochet and slip stitches, teaches you to read cluster patterns, and works up in under an hour. Make one and you'll want to make twenty.",
          "raw_text": "It's the foundation of everything: blankets, bags, cardigans, pillow covers — they all start here. The pattern uses only chains, double crochet and slip stitches, teaches you to read cluster patterns, and works up in under an hour. Make one and you'll want to make twenty.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 4,
      "card_type": "switch_things_up",
      "code": "switch-things-up",
      "title": "Color Combination Suggestions",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "switch-1",
          "label": "",
          "value": "Retro 70s: terracotta center, mustard round 2, sage round 3, cream border — the palette this site is painted in.",
          "raw_text": "Retro 70s: terracotta center, mustard round 2, sage round 3, cream border — the palette this site is painted in.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "switch-2",
          "label": "",
          "value": "Modern neutral: work all four rounds in one undyed cotton shade and let the texture do the talking.",
          "raw_text": "Modern neutral: work all four rounds in one undyed cotton shade and let the texture do the talking.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "switch-3",
          "label": "",
          "value": "Scrap-buster: any three leftover colors + a consistent border color ties a whole blanket of mismatched squares together.",
          "raw_text": "Scrap-buster: any three leftover colors + a consistent border color ties a whole blanket of mismatched squares together.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 5,
      "card_type": "common_mistakes",
      "code": "common-mistakes",
      "title": "Common Mistakes & How to Fix Them",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "mistake",
          "code": "mistake-1",
          "label": "Square starts to ruffle",
          "value": "You're probably working extra clusters into the side spaces. Sides get exactly one 3-dc cluster per space — only corners get the (3 dc, ch 2, 3 dc) treatment.",
          "raw_text": "Square starts to ruffle: You're probably working extra clusters into the side spaces. Sides get exactly one 3-dc cluster per space — only corners get the (3 dc, ch 2, 3 dc) treatment.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "mistake",
          "code": "mistake-2",
          "label": "Square curls into a bowl",
          "value": "Your ch-1 side spaces are missing or your tension is tight. Don't skip the ch 1 between clusters, and try going up half a hook size.",
          "raw_text": "Square curls into a bowl: Your ch-1 side spaces are missing or your tension is tight. Don't skip the ch 1 between clusters, and try going up half a hook size.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "mistake",
          "code": "mistake-3",
          "label": "Corners look like holes",
          "value": "A ch-3 corner makes a loose, gappy corner in worsted yarn. Stick to ch 2 as written.",
          "raw_text": "Corners look like holes: A ch-3 corner makes a loose, gappy corner in worsted yarn. Stick to ch 2 as written.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "mistake",
          "code": "mistake-4",
          "label": "Can't find the corner space on round 2+",
          "value": "The corner is always the ch-2 space. Mark the first corner with a stitch marker until your eyes learn to spot it.",
          "raw_text": "Can't find the corner space on round 2+: The corner is always the ch-2 space. Mark the first corner with a stitch marker until your eyes learn to spot it.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 6,
      "card_type": "materials",
      "code": "materials",
      "title": "Materials",
      "raw_heading": "",
      "quantity": 1,
      "groups": [
        {
          "order": 1,
          "group_code": "yarn",
          "group_name": "Yarn",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-1-1",
              "label": "",
              "value": "Worsted weight (#4) yarn in 1–4 colors — about 25 g / 50 yd total per square. Cotton or acrylic both work.",
              "raw_text": "Worsted weight (#4) yarn in 1–4 colors — about 25 g / 50 yd total per square. Cotton or acrylic both work.",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-1-2",
              "label": "",
              "value": "Shown in: terracotta, mustard, sage and cream (any brand's worsted cotton).",
              "raw_text": "Shown in: terracotta, mustard, sage and cream (any brand's worsted cotton).",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            }
          ]
        },
        {
          "order": 2,
          "group_code": "hook-notions",
          "group_name": "Hook & Notions",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-2-1",
              "label": "",
              "value": "5.0 mm (H-8) crochet hook",
              "raw_text": "5.0 mm (H-8) crochet hook",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-2-2",
              "label": "",
              "value": "Yarn needle for weaving in ends",
              "raw_text": "Yarn needle for weaving in ends",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 3,
              "row_type": "item",
              "code": "mat-2-3",
              "label": "",
              "value": "Scissors",
              "raw_text": "Scissors",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 4,
              "row_type": "item",
              "code": "mat-2-4",
              "label": "",
              "value": "Stitch marker (optional, for marking the first corner)",
              "raw_text": "Stitch marker (optional, for marking the first corner)",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            }
          ]
        },
        {
          "order": 3,
          "group_code": "gauge-size",
          "group_name": "Gauge & Finished Size",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-3-1",
              "label": "",
              "value": "Finished square: approx. 11 cm / 4.5 in after 4 rounds with worsted + 5 mm hook.",
              "raw_text": "Finished square: approx. 11 cm / 4.5 in after 4 rounds with worsted + 5 mm hook.",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-3-2",
              "label": "",
              "value": "Gauge is not critical — a consistent tension matters more than an exact measurement. For blankets, just use the same yarn and hook for every square.",
              "raw_text": "Gauge is not critical — a consistent tension matters more than an exact measurement. For blankets, just use the same yarn and hook for every square.",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            }
          ]
        }
      ],
      "rows": []
    },
    {
      "order": 0,
      "card_type": "abbreviations",
      "code": "abbreviations",
      "title": "Abbreviations (US Terms)",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "abbrev",
          "code": "abbrev-ch",
          "label": "ch",
          "value": "chain",
          "raw_text": "ch = chain",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "ch",
          "meaning": "chain"
        },
        {
          "order": 2,
          "row_type": "abbrev",
          "code": "abbrev-dc",
          "label": "dc",
          "value": "double crochet",
          "raw_text": "dc = double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "dc",
          "meaning": "double crochet"
        },
        {
          "order": 3,
          "row_type": "abbrev",
          "code": "abbrev-sl-st",
          "label": "sl st",
          "value": "slip stitch",
          "raw_text": "sl st = slip stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sl st",
          "meaning": "slip stitch"
        },
        {
          "order": 4,
          "row_type": "abbrev",
          "code": "abbrev-st(s)",
          "label": "st(s)",
          "value": "stitch(es)",
          "raw_text": "st(s) = stitch(es)",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "st(s)",
          "meaning": "stitch(es)"
        },
        {
          "order": 5,
          "row_type": "abbrev",
          "code": "abbrev-sp",
          "label": "sp",
          "value": "space",
          "raw_text": "sp = space",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sp",
          "meaning": "space"
        },
        {
          "order": 6,
          "row_type": "abbrev",
          "code": "abbrev-MR",
          "label": "MR",
          "value": "magic ring",
          "raw_text": "MR = magic ring",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "MR",
          "meaning": "magic ring"
        },
        {
          "order": 7,
          "row_type": "abbrev",
          "code": "abbrev-rnd",
          "label": "rnd",
          "value": "round",
          "raw_text": "rnd = round",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "rnd",
          "meaning": "round"
        }
      ]
    },
    {
      "order": 7,
      "card_type": "part",
      "code": "the-square",
      "title": "The Square",
      "raw_heading": "The Square:",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "instruction",
          "code": "square-note-0",
          "label": "Steps",
          "value": "Start with a magic ring (or ch 4 and sl st to form a ring, then work round 1 into the ring). Ch 3 at the start of a round counts as 1 dc throughout.",
          "raw_text": "Start with a magic ring (or ch 4 and sl st to form a ring, then work round 1 into the ring). Ch 3 at the start of a round counts as 1 dc throughout.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "round",
          "code": "square-round-1",
          "label": "Rnd 1",
          "value": "in a MR: ch 3, 2 dc, ch 2, [3 dc, ch 2] 3 times; sl st to top of ch-3 to join",
          "raw_text": "Rnd 1: in a MR: ch 3, 2 dc, ch 2, [3 dc, ch 2] 3 times; sl st to top of ch-3 to join (12)",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": 12,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "square-note-1",
          "label": "",
          "value": "You now have 4 clusters of 3 dc separated by four ch-2 corner spaces. Pull the ring tail tight to close the center. If changing colors, fasten off here.",
          "raw_text": "You now have 4 clusters of 3 dc separated by four ch-2 corner spaces. Pull the ring tail tight to close the center. If changing colors, fasten off here.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "round",
          "code": "square-round-2",
          "label": "Rnd 2",
          "value": "sl st into the next ch-2 corner sp (or join new color there), ch 3, (2 dc, ch 2, 3 dc) in same sp, ch 1, [(3 dc, ch 2, 3 dc) in next corner sp, ch 1] 3 times; sl st to top of ch-3 to join",
          "raw_text": "Rnd 2: sl st into the next ch-2 corner sp (or join new color there), ch 3, (2 dc, ch 2, 3 dc) in same sp, ch 1, [(3 dc, ch 2, 3 dc) in next corner sp, ch 1] 3 times; sl st to top of ch-3 to join (24)",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": 24,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "info",
          "code": "square-note-2",
          "label": "",
          "value": "Each corner now holds two clusters split by ch 2, and each side has one ch-1 space between corners.",
          "raw_text": "Each corner now holds two clusters split by ch 2, and each side has one ch-1 space between corners.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "round",
          "code": "square-round-3",
          "label": "Rnd 3",
          "value": "sl st into the corner sp, ch 3, (2 dc, ch 2, 3 dc) in same sp, ch 1, 3 dc in next side sp, ch 1, [(3 dc, ch 2, 3 dc) in corner sp, ch 1, 3 dc in side sp, ch 1] 3 times; sl st to join",
          "raw_text": "Rnd 3: sl st into the corner sp, ch 3, (2 dc, ch 2, 3 dc) in same sp, ch 1, 3 dc in next side sp, ch 1, [(3 dc, ch 2, 3 dc) in corner sp, ch 1, 3 dc in side sp, ch 1] 3 times; sl st to join (36)",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": 36,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "round",
          "code": "square-round-4",
          "label": "Rnd 4",
          "value": "sl st into the corner sp, ch 3, (2 dc, ch 2, 3 dc) in same sp, ch 1, [3 dc in next side sp, ch 1] to the corner, [(3 dc, ch 2, 3 dc) in corner sp, ch 1, (3 dc in side sp, ch 1) twice] 3 times; sl st to join",
          "raw_text": "Rnd 4: sl st into the corner sp, ch 3, (2 dc, ch 2, 3 dc) in same sp, ch 1, [3 dc in next side sp, ch 1] to the corner, [(3 dc, ch 2, 3 dc) in corner sp, ch 1, (3 dc in side sp, ch 1) twice] 3 times; sl st to join (48)",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": 48,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "instruction",
          "code": "square-note-3",
          "label": "Steps",
          "value": "Fasten off and weave in all ends. Want a bigger square? Keep going — every round adds one more 3-dc cluster per side; corners always get (3 dc, ch 2, 3 dc).",
          "raw_text": "Fasten off and weave in all ends. Want a bigger square? Keep going — every round adds one more 3-dc cluster per side; corners always get (3 dc, ch 2, 3 dc).",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 8,
      "card_type": "important_notes",
      "code": "important-notes",
      "title": "Important Notes",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "note-1",
          "label": "Note",
          "value": "Counts in ( ) at the end of each round are total dc — chains are not counted.",
          "raw_text": "Note: Counts in ( ) at the end of each round are total dc — chains are not counted.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "note-2",
          "label": "Note",
          "value": "Written in US terms. UK crocheters: our dc = your tr.",
          "raw_text": "Note: Written in US terms. UK crocheters: our dc = your tr.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "note-3",
          "label": "Note",
          "value": "Joining a new color? Start it in a corner space with a standing dc or a sl st + ch 3 — corners hide the join best.",
          "raw_text": "Note: Joining a new color? Start it in a corner space with a standing dc or a sl st + ch 3 — corners hide the join best.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 9,
      "card_type": "faq",
      "code": "faq",
      "title": "FAQ",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "faq",
          "code": "faq-1",
          "label": "How do I join granny squares into a blanket?",
          "value": "The easiest join for beginners is the whip stitch through back loops, with squares held right-sides together. Join-as-you-go (JAYGO) on the final round is faster once you're comfortable reading corner spaces.",
          "raw_text": "How do I join granny squares into a blanket? The easiest join for beginners is the whip stitch through back loops, with squares held right-sides together. Join-as-you-go (JAYGO) on the final round is faster once you're comfortable reading corner spaces.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How do I join granny squares into a blanket?",
          "answer": "The easiest join for beginners is the whip stitch through back loops, with squares held right-sides together. Join-as-you-go (JAYGO) on the final round is faster once you're comfortable reading corner spaces.",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "Can I make this square bigger?",
          "value": "Yes — the pattern repeats forever. Every new round: (3 dc, ch 2, 3 dc) in each corner space, 3 dc in every side space, ch 1 between all clusters.",
          "raw_text": "Can I make this square bigger? Yes — the pattern repeats forever. Every new round: (3 dc, ch 2, 3 dc) in each corner space, 3 dc in every side space, ch 1 between all clusters.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I make this square bigger?",
          "answer": "Yes — the pattern repeats forever. Every new round: (3 dc, ch 2, 3 dc) in each corner space, 3 dc in every side space, ch 1 between all clusters.",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "Why does my square twist or lean?",
          "value": "Classic granny squares naturally skew slightly when every round starts in the same place. Either start each round in a different corner, or turn your work after each round (working alternate rounds from the wrong side).",
          "raw_text": "Why does my square twist or lean? Classic granny squares naturally skew slightly when every round starts in the same place. Either start each round in a different corner, or turn your work after each round (working alternate rounds from the wrong side).",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Why does my square twist or lean?",
          "answer": "Classic granny squares naturally skew slightly when every round starts in the same place. Either start each round in a different corner, or turn your work after each round (working alternate rounds from the wrong side).",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "What yarn is best for granny square blankets?",
          "value": "Worsted (#4) acrylic is the budget-friendly classic — machine washable and available everywhere. Cotton gives crisper stitch definition for bags and coasters.",
          "raw_text": "What yarn is best for granny square blankets? Worsted (#4) acrylic is the budget-friendly classic — machine washable and available everywhere. Cotton gives crisper stitch definition for bags and coasters.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "What yarn is best for granny square blankets?",
          "answer": "Worsted (#4) acrylic is the budget-friendly classic — machine washable and available everywhere. Cotton gives crisper stitch definition for bags and coasters.",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "How many squares do I need for a blanket?",
          "value": "With 4-round squares (~11 cm), a baby blanket is about 8×10 = 80 squares; a throw is roughly 12×16 = 192. Add a border round to every square to make the math faster.",
          "raw_text": "How many squares do I need for a blanket? With 4-round squares (~11 cm), a baby blanket is about 8×10 = 80 squares; a throw is roughly 12×16 = 192. Add a border round to every square to make the math faster.",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How many squares do I need for a blanket?",
          "answer": "With 4-round squares (~11 cm), a baby blanket is about 8×10 = 80 squares; a throw is roughly 12×16 = 192. Add a border round to every square to make the math faster.",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "source_url": null,
  "images": [
    "data/images/classic-granny-square-pattern-hero.webp",
    "data/images/classic-granny-square-pattern-styled.webp"
  ],
  "thumbnail_images": [
    {
      "url": "data/images/classic-granny-square-pattern-hero.webp",
      "alt": "Classic granny square crocheted in terracotta, mustard, sage and cream worsted yarn — finished square laid flat",
      "is_featured": true
    },
    {
      "url": "data/images/classic-granny-square-pattern-styled.webp",
      "alt": "Stack of colorful classic granny squares ready to be joined into a blanket",
      "is_featured": false
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/classic-granny-square-pattern-hero.webp",
      "alt": "Classic granny square crocheted in terracotta, mustard, sage and cream worsted yarn — finished square laid flat",
      "is_featured": true
    },
    {
      "url": "data/images/classic-granny-square-pattern-styled.webp",
      "alt": "Stack of colorful classic granny squares ready to be joined into a blanket",
      "is_featured": false
    }
  ]
}