Back to projects

Recipe blog and baking archive

Sweetly Mollie

A long-running recipe site for Mollie's baking, rebuilt across multiple stacks and currently powered by Next.js, TypeScript, Tailwind, and UploadThing.

Next.jsTypeScriptTailwindVercel

Sweetly Mollie is a baking blog and recipe site I built for my wife, Mollie. It gives her a place to share recipes, baking photography, and the desserts she has made over the years in a format that feels personal, approachable, and easy to browse. The live site is available at sweetlymollie.com.

The project is different from most of my other work because it is not primarily a developer tool or a technical experiment. It is a real site for someone else's creative work. The technology matters, but the purpose of the project has always been to support Mollie: her recipes, her photos, her writing, and the small details that make the site feel like hers.

Why I Built It

Mollie has always loved baking and photography. Friends and family had encouraged her to start a baking blog or sell baked goods, and Sweetly Mollie became the home for that idea. My role was to build the software around the thing she actually wanted to do: write recipes, share photos, and create a happy place for her baking projects.

Her about page says that her husband is a software engineer and a fantastic taste tester. That is probably the most accurate job description for the project. I built the site, but the point was never to make the software the center of attention. The site exists so Mollie can share the recipes and baked goods she is excited about.

The site has existed for years and has gone through several versions. The stack often mirrored whatever I was using most often at the time, which made it a useful place to apply new tools in a real context. Only two versions were ever productionalized, though. The other versions were experiments that helped me learn without turning the live site into a moving target.

What It Does

Sweetly Mollie is organized around a few core sections.

Recipes

The recipes section is the main content area. Each recipe has a title, hero image, date, short description, timing information, ingredients, and step-by-step instructions. Recipes like S'mores Cookies and Cookie Butter Cupcakes are written in Mollie's voice, with enough context to make the recipe feel personal without getting in the way of the instructions.

That structure matters because recipes are both content and reference material. Someone may read the introduction once, but they may come back to the ingredients and instructions several times while baking. The page needs to support both modes without making the author write in a rigid or impersonal format.

Gallery

The gallery is a visual archive of Mollie's baking. It includes cakes, cupcakes, cookies, pies, truffles, seasonal desserts, and in-progress shots. Not every dessert needs a full recipe, and the gallery gives those projects a place to exist without forcing every photo into the same content model.

This has been one of the more important parts of the site because baking is visual. The photos are not decoration around the content; they are part of the content. The site needs to make them feel central.

About

The about page explains the heart of the project. Mollie describes herself as an elementary music teacher by day and a baking lover by night. The page is intentionally personal, including the small details and playful tone that make the site feel like hers rather than a generic recipe archive.

That tone influenced the rest of the site. Sweetly Mollie should feel polished enough to be a real blog, but not so polished that it loses the warmth of someone sharing recipes with friends and family.

Technical History

The first production version was a Node and Express app hosted on Heroku. It used Handlebars for templating, SCSS for styling, SQL Server for storage, and S3 for images. The S3 bucket stayed private, so the app proxied images instead of exposing the bucket directly.

After that, the site became a useful place to experiment. I wrote a pure React version where the content lived in JSON. I also wrote a Blazor and .NET version while I was getting more familiar with that ecosystem. Those versions were not production releases, but they helped me explore how the same product felt across different stacks.

The current production version is built with Next.js, TypeScript, and Tailwind. It is hosted on Vercel and uses UploadThing for file storage. This version keeps the data model intentionally familiar while modernizing the frontend, deployment model, and image pipeline.

Design Choices

The most important design choice was to treat the site as a home for Mollie's content, not as a showcase for whatever technology I wanted to use at the time. Because the project has gone through multiple tech stacks, each rebuild had to preserve the parts that mattered most: the recipes, the photography, the brand, and the feeling of the site.

That led to a few practical priorities:

  • Keep recipes easy to scan.
  • Give images enough room to carry the visual identity.
  • Preserve existing content through rebuilds.
  • Keep the navigation simple: home, about, recipes, and gallery.
  • Let the writing sound like Mollie instead of forcing it into a generic food-blog pattern.

The recipe pages balance personality with utility. The introduction gives Mollie room to tell the story behind a bake, while the structured timing, ingredients, and instructions make the page useful when someone is actively following the recipe.

The data model has stayed fairly consistent over time, which made migrations manageable. Instead of treating each rebuild as a manual content project, I wrote small scripts to transform existing data into JSON and upload it through private endpoints. Image migrations followed the same pattern: automation scripts pulled images from the production bucket and uploaded them to UploadThing.

Image handling has been one of the more interesting technical parts of the project. A baking site depends heavily on photography, so prefetching and optimization matter more here than they might in a text-heavy application. The site needs to feel image-rich without making browsing feel slow or fragile.

What I Learned

Sweetly Mollie has been a useful reminder that personal projects can become long-running products, even when they are small. The engineering challenge is not only building the first version. It is making sure the site can change over time without making the content feel disposable.

The project reinforced a few habits I care about:

  • Build around the user's workflow, not the developer's preferences.
  • Treat content migrations as part of the product, not cleanup work.
  • Make room for visual content instead of treating images as an afterthought.
  • Preserve the author's voice through technical changes.
  • Avoid overcomplicating the site just because the underlying stack can support more.

The biggest takeaway is that a project does not need to be technically loud to be meaningful. Sweetly Mollie matters because it gives Mollie a durable place for something she loves. The best version of the site is the one that lets her keep sharing recipes and photos without thinking about the software behind it.

Status

Sweetly Mollie is an active personal blog and recipe archive. The current site includes recipe pages, a gallery of baking photography, and an about page that introduces Mollie and the purpose of the site.

Mollie currently writes recipes in a Word document, and I convert them into JSON for the site. That works, but it still puts me in the publishing path. A future improvement is a small CMS that lets her write and manage recipes more directly while preserving the structured data that makes the recipe pages useful.

Other future improvements could include richer recipe browsing, better filtering or search, and continued cleanup from the site's earlier versions. The project has already lived through multiple rebuilds, so the next step is less about proving the idea and more about making the site easier for Mollie to maintain as the recipe collection grows.