Messy Magnus is children's picture book about a 3rd grader who can’t stop spilling. Magnus makes a mess wherever he goes, and he’s sick of it. So much clean-up, and so much embarrassing attention.

Time for a change.

Follow Magnus on his journey of self-discovery, through household obstacles and unknown portals as he attempts to set the dinner table without spilling.

Help publish Messy Magnus!

Raised so far

$0

Goal

$4,500

0% funded$4,500 to go

$22per copy of Messy Magnus

Every purchase of a hardcopy book includes a character sticker and bookmark. Proceeds go directly to the printing, publishing and illustrator fees.

Buy the book — $22

You'll be taken to a secure Stripe checkout page.

Be the first to back this book!

var MM_GOAL = 4500; var MM_SHEET_URL = 'https://script.google.com/macros/s/AKfycbxakEPgHSt9hTPtmIpIIOnkA4S1neJHVb57Jn8fXtzSVxsy4wzX9evcmxvHNuAgTcBQ/exec'; function mmUpdateBar(amount, backers) { var pct = Math.min(100, Math.round((amount / MM_GOAL) * 100)); var remaining = Math.max(0, MM_GOAL - amount); document.getElementById('mm-bar').style.width = pct + '%'; document.getElementById('mm-raised').textContent = '$' + amount.toLocaleString(); document.getElementById('mm-pct').textContent = pct + '% funded'; document.getElementById('mm-remaining').textContent = '$' + remaining.toLocaleString() + ' to go'; document.getElementById('mm-backers').textContent = backers > 0 ? backers + ' backers so far' : 'Be the first to back this book!'; } function mmFetchData() { fetch(MM_SHEET_URL) .then(function(r) { return r.json(); }) .then(function(d) { mmUpdateBar(d.raised || 0, d.backers || 0); }) .catch(function() { mmUpdateBar(0, 0); }); } function mmToggleCustom() { var wrap = document.getElementById('mm-custom-wrap'); wrap.style.display = wrap.style.display === 'none' ? 'block' : 'none'; } function mmCustomPledge() { var val = document.getElementById('mm-custom-amount').value; if (!val || parseInt(val) < 1) { alert('Please enter a valid amount.'); return; } window.open('YOUR_LIVE_STRIPE_LINK', '_blank'); } mmFetchData();