SmoothBay Knitworks

Sign in

By continuing you agree to our Terms and Privacy Policy.

Continue

Theme

Knit with confidence, one thoughtful stitch at a time.

At SmoothBay Knitworks, we teach modern knitters the timeless craft—through structured paths, tactile practice, and supportive instruction.

Structured Learning Paths

From first knit and purl to advanced shaping, our paths reduce overwhelm and build durable muscle memory.

Explore Paths

Journal-Driven Practice

Personal stitch logs and reflection prompts help you connect technique to feel—like a craft journal that grows with you.

Our Method

Community without Noise

Office hours and Q&A threads focus on clarity, not clutter—your time is precious, your stitches are too.

How It Works

Featured: Sweater Foundations Bundle

A trio of courses to take you from swatch to seamed mastery—sizing, shaping, and finishing without second-guessing.

What makes SmoothBay Knitworks different?

`; const footerHTML = ``; document.querySelector('header').innerHTML = headerHTML; document.querySelector('footer').innerHTML = footerHTML; } function initSiteScripts() { // Nav toggle const navToggle = document.getElementById('navToggle'); const nav = document.getElementById('nav'); if (navToggle && nav) { navToggle.addEventListener('click', () => { nav.classList.toggle('hidden'); nav.classList.toggle('flex'); nav.classList.toggle('flex-col'); nav.classList.toggle('absolute'); nav.classList.toggle('bg-white'); nav.classList.toggle('dark:bg-stone-900'); nav.classList.toggle('p-4'); nav.classList.toggle('top-16'); nav.classList.toggle('left-4'); nav.classList.toggle('right-4'); nav.classList.toggle('shadow-lg'); }); } // Theme toggle const themeToggle = document.getElementById('themeToggle'); const themeModal = document.getElementById('themeModal'); if (themeToggle && themeModal) { themeToggle.addEventListener('click', () => themeModal.showModal()); themeModal.querySelectorAll('button[data-theme]').forEach(btn => { btn.addEventListener('click', () => { const mode = btn.getAttribute('data-theme'); document.documentElement.classList.remove('dark'); if (mode === 'dark') document.documentElement.classList.add('dark'); localStorage.setItem('theme', mode); themeModal.close(); }); }); } // Text size toggle const textToggle = document.getElementById('textToggle'); if (textToggle) { textToggle.addEventListener('click', () => { document.body.classList.toggle('text-lg'); document.body.classList.toggle('md:text-xl'); }); } // Auth modal const loginBtn = document.getElementById('loginBtn'); const signupBtn = document.getElementById('signupBtn'); const authModal = document.getElementById('authModal'); const authTitle = document.getElementById('authTitle'); if (loginBtn && authModal) { loginBtn.addEventListener('click', () => { authTitle.textContent = 'Sign in'; authModal.showModal(); }); } if (signupBtn && authModal) { signupBtn.addEventListener('click', () => { authTitle.textContent = 'Create account'; authModal.showModal(); }); } // Apply saved theme const savedTheme = localStorage.getItem('theme'); if (savedTheme === 'dark') { document.documentElement.classList.add('dark'); } // Swatch prompt generator const prompts = [ "Knit a 20-row swatch alternating garter and stockinette; note how edges behave.", "Try 2x2 rib with three needle sizes; record stretch and recovery.", "Swatch linen stitch in two colors; observe fabric density.", "Practice German short rows across 40 sts; mark turning points.", "Test three cast-ons (long-tail, cable, German twisted) and compare elasticity.", "Knit seed stitch with a looser purl; document texture change.", "Create a mini colorwork chart (8x8) and test floats every 5 stitches.", "Swatch a mini raglan increase sequence; check angle and drape.", "Try tubular cast-on for 1x1 rib; measure edge roundness.", "Swatch slip-stitch colorwork; track yarn dominance." ]; const box = document.getElementById('swatchPrompt'); const btn = document.getElementById('newPrompt'); if (box && btn) { function setRandom() { const p = prompts[Math.floor(Math.random() * prompts.length)]; box.textContent = p; } btn.addEventListener('click', setRandom); setRandom(); } } function boot() { injectHeaderFooter(); setTimeout(() => { initSiteScripts(); }, 50); } boot();