The live Sweet Squares homepage: the headline “Every square is spoken for before it is cut.” with three photographed squares set into the sentence, on a dark ground scored into squares.

A family bakery

The day comes first, because the kitchen does.

A brochure with an email form becomes a shop the family runs: a fourteen-day calendar showing how much the kitchen can really bake, a pan you fill and can see, an order saved as a record with a status, and an admin screen instead of an inbox.

Client
Sweet Squares
Sector
Local food · Dessert bakery
Where
Greater Houston, Texas
Engagement
Storefront rebuild plus ordering and operations platform
Year
2026
Services
Experience and technical audit · Commerce and capacity modeling · Storefront design and build · Ordering interaction · Checkout and order lifecycle · Owner admin and fulfillment · Accessibility and performance passes · Launch, hosting and payments
Built with
Next.js · TypeScript · PostgreSQL · Drizzle · Square payments · Transactional outbox · GSAP · Playwright

The problem

A business that sells boxes of squares had no way for a customer to say what goes in the box. It also had no way to promise a day it could actually bake on.

Every order arrived as email. Nothing was recorded, so nothing could be looked up, counted or checked, and a failed send took the order with it.

The site published rules it had no way to apply: three to five days' notice with no calendar behind it, a delivery area nothing checked an address against, and a deposit its own terms page contradicted.

Before: a menu you could read and an order you could only describe

The old site is nineteen display-only code components and one data file: forty-four flavor names, three box sizes and two add-ins, typed straight into the code. An order leaves the browser as two emails sent through EmailJS. Nothing is recorded, nothing is priced by the system, no day is reserved, and no payment is taken. The checkout just lists Cash App, Venmo and Zelle handles as options to pick. That's the site getsweetsquares.com replaced, and every image of it below is a capture.

The design is competent and the words are the family's own. The problem is all underneath.

The order page is the whole business on one screen: a size dropdown, forty-four flavor checkboxes, two add-ins, and a cart that adds itself up in the browser before emailing itself off. Read the small print in the panel beside it and you'll find the contradictions.

The old Sweet Squares homepage in full, showing the flavor line-up, the About Us band and the family's values.Before
The old homepage, captured in full.
The old Sweet Squares order page: a size dropdown, forty-four flavor checkboxes, two add-ins, and a cart panel stating a $15 deposit and free delivery over $70.Before
The order page. Forty-four checkboxes, a total worked out in the browser, and an email, with the deposit and delivery rules in the panel beside it.

What the audit found

We read the code as well as the published pages, because the ordering rules only exist in the code. Every line below quotes a page that's public today, and the answer beside it is on the live site now.

  1. 01

    You couldn't say what went in a thirty-count box

    The rules say you may pick up to three flavors “or multiples of the same flavor.” But the code only sends three names and a price. The site could describe how many of each, but a customer had no way to choose it.

  2. 02

    An order is an email, not a record

    Two emails go out, one to the owner and one to the customer. There's no order to look up, no status to check, and no way to know what was promised once the inbox scrolls. If a send fails, the order is lost without a trace, and the customer's confirmation still says it worked.

  3. 03

    Nothing knows what the kitchen can bake

    The site asks for three to five days' notice, then offers no dates at all. Does a Saturday already have two hundred squares promised on it? Only the family can say, one message at a time, after the order is placed.

  4. 04

    Prices were worked out in the browser

    Box rules and totals are worked out on the page, then emailed. Someone who tampered with the page could order anything at any price, and nothing on the other end would notice.

  5. 05

    The site contradicts itself about money

    The order page requires a $15 deposit. The terms page says payment must be made in full at the time of purchase. Both are published, today, on the same site.

  6. 06

    And about where it delivers

    The order page says Greater Houston only. The terms page says “We ship within the United States only.” A customer in Dallas can't tell which applies to them.

The big idea

Sell the day, then the pan.

Bake-to-order isn't a detail of this business. It's the whole model: nothing sits on a shelf, and every square is baked because someone asked for it. So the scarce thing isn't the dessert. It's room in the oven on a particular morning. A shop that opens on a catalog is selling the wrong thing first.

So the site opens on a fourteen-day strip instead. Each day is drawn as a pan with its remaining squares still open. Sundays are marked as not baking. Anything inside the notice period is marked too soon, instead of being quietly offered and refused later. Pick a day and you're choosing a real slot, with a real number of squares left in it.

Then the pan. A half dozen is three across and two down, a dozen is four by three, and a thirty-count box is the whole six by five. The same grid is the flavor wall, the day's capacity, the customer's order page and the kitchen's bake sheet. It's one object seen from four places, which is why you can learn the site from one screen.

Underneath both are the parts a family business actually runs on: how much can be baked each day, notice periods by box size and by total, an order process that can't oversell a day, messages sent through a queue that retries, and an admin screen the family runs without calling anyone.

Before and after

The same page, before and after. Drag the slider, or select it and use the arrow keys.

The live Sweet Squares homepage: the headline “Every square is spoken for before it is cut.” with three photographed squares set into the sentence, on a dark ground scored into squares.
The old Sweet Squares homepage in full, showing the flavor line-up, the About Us band and the family's values.
BeforeThe old homepage, captured in full.AfterThe live homepage. The squares in the sentence are photographs.

The first question is the day

Fourteen days, each drawn as a pan with its open squares still showing. The number under each one is what the kitchen can bake minus what's already promised. So a day fills up in public, not in a reply three hours later.

The labels are the honest ones, not the flattering ones. Sunday says not baking. The next two days say too soon, because the notice period is three days, and offering a date the kitchen can't hit is worse than not offering it. The line under the strip names the first day that's actually available, which is what most customers came to find out.

It's the same piece of the site on the homepage and the order page, reading the same records. Nobody has to remember to update the second one.

The Pick a day chapter of the live Sweet Squares homepage: fourteen day cards, each drawn as a pan of squares, marked 120 open, too soon or not baking.
Each day is a pan, and the squares still open in it are the squares still open in the oven.
The top of the live Sweet Squares order page, headed “First, pick a day”, with the same fourteen-day strip.
The order page opens on the same strip. Step one is the day; the pan doesn't appear until you've picked one.

Then the pan: one shape, three sizes

The thirty-count box is the pan: six across, five down. A dozen is four by three, and a half dozen is three by two, cut from the same grid. So the three box sizes aren't three products to compare. They're one shape at three sizes.

A tap fills a share of the box, not a single square. The first flavor takes a third of thirty, the second takes half of what's left, and the third takes the rest. Tapping a flavor that's already in the pan nudges it by one square. Twelve, ten and eight is three taps, two taps and one. Nobody fills thirty squares with thirty taps, and the counter shows where you are the whole way: thirty of thirty squares, three flavors, up to three.

That's the rule the old site could write but not apply. “Up to three flavors, or multiples of the same flavor” was a sentence on a page. Now it's what your hands are doing, and the button at the end says exactly what you asked for.

With JavaScript turned off, the same page is a plain form with a size and a quantity for each flavor. It sends to the same code on the server, which re-prices and re-checks everything from the records either way. The pan is an extra. It's never the thing being trusted.

The live Sweet Squares order page with a thirty-count box filled: twelve Banana Nut, ten Oreo Blast and eight Butter Pecan photographed in a six by five pan, beside a counter reading “30 of 30 squares · 3 flavors (up to 3)”.
Twelve, ten and eight. The counter under the pan, and the button that reads “Continue: 30 squares spoken for”.
The Fill the pan chapter of the live homepage, showing a full pan of thirty photographed squares beside the three box sizes and their prices.
The same builder on the homepage, as a preview. You can play with it before you've picked a day; the real order starts once you have one.

The rules come from the settings that enforce them

Every sentence in this part of the site is generated from the same settings the order form follows. Change the notice period in the admin and the paragraph changes with it. The paragraph isn't text someone typed. It's the rule itself, put into words.

This is the direct answer to what the audit found. Two pages disagreeing about a deposit isn't a writing mistake. It's what happens when the same fact is typed in two places and only one of them does anything. Here there's one place, and the words come from it.

The How ordering works chapter of the live homepage: four numbered rules covering the boxes, lead time, pickup and delivery, and paying.
Four rules. The order form would enforce each one even if nobody had written it down.
The full How ordering works page on the live Sweet Squares site, listing the boxes, lead time, pickup and delivery, and paying in detail.
The long version, at its own address, from the same records.

Ten flavors, not forty-four

The old site lists forty-four. The live one lists ten. That was the family's decision, made with the site open: only flavors with a real photo go on the wall. The rest are waiting to be photographed, instead of showing up as a name next to a checkbox.

The allergen statements follow the same rule, even more strictly. Every flavor page says “Not listed yet”, with the phone number beside it. Nobody outside the family has ever written an allergen statement for these squares, and nobody outside the family ever will. The allergens page says it plainly: never read a blank as nothing to declare. It's the least impressive thing on the site, and the one a food business needs most.

It goes further than the pages you can see. The reviews section doesn't exist until there's a review with an author, a source and a date. The markets section doesn't exist until there's a booking. The code now refuses to show a placeholder event at all, because one sample event, dated the next day, reached the live site before launch and had to be deleted. A shop that invents a market day to look busy will invent anything.

The Every flavor chapter of the live homepage: ten photographed squares in a six by five pan on a dark ground, under the heading “10 flavors on the wall right now.”
Ten flavors, in the same six by five pan. The empty spaces aren't a layout mistake: the wall is a pan, and the pan holds thirty.
The Banana Nut flavor page on the live Sweet Squares site, showing the photograph, the caramel family label, and an allergens line reading “Not listed yet. Ask us or call 281-515-9016 before you order Banana Nut.”
Every flavor page, until the family writes the statement themselves.
The allergens page of the live Sweet Squares site, headed “Exactly as the family wrote it.”, with a table of flavors each reading “Not listed yet”.
The allergens page, with nothing in it yet, saying so as plainly as it can.

The parts that were already right

A rebuild doesn't mean everything before it was wrong. The origin story is why this business exists, and it's why the old site felt like a real one: a family started baking in 2018, during a hard year, to help with a founder's medical bills. Their four values are theirs. The product photos are theirs. None of it was rewritten.

What changed is where it lives. It moved over as content the family can edit, not text locked inside the code. And it's placed where it does the most good: the story is the one part of the site where the motion nearly stops, because it's the only thing here that isn't asking for an order.

The family's claim about ingredients gets the same care as an allergen statement. “We offer high-quality, homemade desserts that leave out all the seed oils and artificial ingredients” is quoted, credited to the family, and sits above a line saying nothing on this site guesses at an allergen. It's their claim, made in their name, and the site is clear about whose it is.

The story chapter of the live Sweet Squares homepage, headed “It began in 2018, in a hard year.”, with the family's own account beside their four values.
The family's words, unchanged, and now editable without a developer.
The What is in them chapter of the live homepage, quoting the family on leaving out seed oils and artificial ingredients, above a line about allergens.
Quoted and credited, with the allergen note right underneath.

Catering, markets, and the things people phone to ask

Catering used to be a paragraph and an email address. Now it's a page that does the math in front of you: a thirty-count box feeds a table of sixty a square each. It states the five days' notice it needs, and asks the four questions the family would have had to ask anyway: the date, the headcount, roughly how many boxes, and the occasion.

The markets page is the more interesting one, because most of the time it has nothing to say. It says so, instead of filling the space. There are no dates on it today, so it tells you where they'll appear and points you to what's available instead. The homepage section about markets simply doesn't appear until there's a real booking.

The catering page of the live Sweet Squares site, headed “Boxes for a crowd.”, with the lead time and pickup terms beside a form asking for the date, headcount, boxes and occasion.
The questions are asked up front, so the family's first reply can be an answer.
The Where to find us page of the live Sweet Squares site, stating that every date is a real booking, that there are none yet, and where they will be posted.
A page with nothing to announce, saying so. The homepage section about markets doesn't exist at all until there's a date.

The first screen, and the laptop it didn't fit on

One bug, on the screen that asks for the order. The headline was sized from the window's width alone. On a short, wide window, like a 1366 by 768 laptop or a 1440 by 780 browser, it grew to fill the width. That pushed the two buttons and the line under them off the bottom of the screen. Anyone on the most common screen there is had to scroll to find out they could order anything.

Now it's sized from the height as well. A script checks thirteen real window sizes, and the automated end-to-end tests check seven more, because this is exactly the kind of fault a designer's own monitor never shows.

Behind the sentence is the sheet it's printed on: scored into squares, not cut, with some already spoken for and more claimed as you read. It's the headline's own claim, drawn. None of those squares is a real order, and no number on the page comes from them. The animation is left out for anyone who asks for less motion, has scripts off, or is on a slow machine. They get the same scored sheet, standing still.

The first screen of the live Sweet Squares site: the headline “Every square is spoken for before it is cut.” with photographed squares set into it, two buttons, and a line reading “10 flavors on the wall. Six by five to a pan.”
Everything that matters fits on the first screen, on a short window as well as a tall one.

The half of it nobody sees

The storefront is the smaller half of this build. Behind the sign-in is the part that decides whether the family can actually run it, and that's where most of the work went.

  1. 01

    An order that can't oversell a day

    Placing an order is one all-or-nothing step. It re-checks how much room is left in the day, re-prices the box from the records, and refuses the whole order rather than accept half of it. Two people filling the last pan at the same time is a case in the tests, not a surprise in the kitchen.

  2. 02

    A bake sheet, a calendar and a printed ticket

    The same pan the customer filled, seen from the oven: what to bake, how much, and for which day. Orders can be entered by hand for the phone calls that will always happen, and they go through the same path and the same checks as an order placed on the site.

  3. 03

    Messages that survive a failure

    Every notification goes through a queue that retries without ever sending twice, instead of going straight out when the order is placed. The old site's silent failure, where a send fails and the customer is told it worked, can't happen here. A status check on the server reports how long the oldest unsent message has been waiting.

  4. 04

    The rules are settings, not code

    Capacity, notice periods, closures, box sizes, add-ins, the deposit, the cancellation window, delivery zones and every published legal sentence are settings the family edits. Nothing on the storefront is a number someone typed into the code.

  5. 05

    A launch gate that refuses to lie

    The admin won't leave test mode until ten decisions only the family can make are recorded. It also refuses to run with card payments switched on while the payment account is still in test mode, because a live shop that takes no money and doesn't say so is the worst outcome there is.

On a phone

Most of these orders will be placed on a phone, so the pan was designed for one, not squeezed onto one. Six squares across at forty pixels, with an eight-pixel gap, is two hundred and eighty pixels wide. That fits, so the phone gets the whole pan instead of a strip you have to scroll.

The flavors become a list with a count beside each one and a fill-the-rest button. The counter sits right under the pan, where the choosing happens. And the three things a phone customer actually wants are on a bar at the bottom of every page: pick a day, call, flavors.

The live Sweet Squares homepage on a phone, with the headline, both buttons and the flavor count inside the first screen.
Homepage, 390px.
The live Sweet Squares order page on a phone: a thirty-count pan holding twenty-one squares, a counter reading “21 of 30 squares · 2 flavors (up to 3)”, and the flavor list beneath it.
The pan on a phone, twenty-one of thirty. The counter sits under the pan, where the choosing is.
The Every flavor page of the live Sweet Squares site on a phone, showing the ten photographed squares three to a row.
The wall, 390px. Same pan, three columns.

Goals, not results yet

What this is designed to change

The shop opened on September 11, 2026. Everything below is on the public site, and you can check it by opening it. That's different from saying it has worked: there's no sales data yet, and there won't be anything worth reporting for a while. When there is, we'll report it with a number, not an adjective.

  • A customer can specify exactly what goes in a thirty-count box, including an uneven split across three flavors.
  • A customer picks a baking day the kitchen actually has room on, before filling anything in.
  • Every order exists as a record with a status the customer can check, not as two emails.
  • Prices, box rules, notice periods and capacity are enforced on the server, so a tampered page can't order anything at any price or oversell a day.
  • The deposit, the cancellation window, the delivery policy and the shipping policy are each stated once, from the settings that enforce them.
  • The deposit is taken at checkout, by card through the family's own payment account or by the handles they already used, instead of being promised and chased.
  • The family adds a flavor, closes a day, changes a price or publishes a market date without calling anyone.
  • No allergen, review, market date or founder's name appears anywhere on the site unless the family entered it.

The old site wasn't badly made. It was made to describe a business, not to run one, and the difference only shows the moment someone tries to buy something.

Still open

  • Card proof, better: one measured figure from the shop now that it's trading, to replace the owner quote currently on the card.
  • Allergen statements. All ten flavors currently read “Not listed yet”, with the phone number beside them. Only the family can write these, and it's the biggest single thing standing between this shop and a good one.
  • Delivery is switched off until the family sets the ZIP codes they're willing to drive to. Shipping stays off: the old site's two pages disagreed about it, and the answer turned out to be no.
  • The governing state in the terms defaults to Texas, which the family hasn't confirmed yet, and the cottage food notice is blank.
  • Market dates, the founders' names on the story page, and the pickup arrangement sentence are all waiting on the family rather than on the build.
  • Text messages are off by choice, so the site doesn't mention them and the checkout promises email only. Turning them on just needs a text-message provider, and isn't needed to start selling.

Is your site doing the same thing to you?

We can look at your site the way we looked at Sweet Squares’s, and tell you what we find before anyone designs anything.

Start a transformation