Date: June 26, 2025
Author: Ronald Zinn
In Phase 1 of building ZinnWorks, I laid the foundation — defining the vision, shaping the brand, and designing the logo with a lot of AI assistance and iteration. Phase 2 has been all about taking those ideas and putting them into motion: building infrastructure, establishing an online presence, and learning the hard way what I didn’t know I didn’t know.
🚧 The Build Begins
Once the core identity was in place, I focused on creating the ZinnWorks website. I started with a static HTML+CSS version to get a functional landing page up quickly. Hosting it on Netlify with continuous deployment from GitHub was smooth — a major win for getting a live presence fast.
But then came the desire to embed our freshly minted logo — which introduced the next leap: React and Next.js.
⚛️ Transitioning to React + Next.js (App Router)
I wanted to scale the site for future functionality, so we transitioned to a modern React-based framework using Next.js 15 with App Router. That turned out to be a bigger shift than expected.
At first, ChatGPT provided code for embedding the logo using React components, but I didn’t yet have a React setup — I was still working in static HTML. I spent time troubleshooting, trying to make sense of the React code until we stepped back and identified the gap.
Once the framework was upgraded and the app structured using /app
routing, deployment issues cropped up — particularly 404 errors on Netlify. These were eventually resolved by correcting the netlify.toml
configuration and making sure output folders matched Netlify’s expectations.
🧱 Infrastructure Snags & Learnings
There were a few other pain points along the way:
-
GitHub Push Errors – I ran into file size issues pushing to GitHub. Turns out large binary files from
node_modules
were being tracked, exceeding GitHub’s limits. The problem? I didn’t have a.gitignore
file set up. This was a perfect example of how easy it is to make big mistakes when you're not aware of the tooling conventions. -
Contact Form Fails – While the site looked great, I later discovered that the contact form wasn’t actually sending emails. This has now been logged for resolution in Phase 3.
-
Tooling Setup – I registered zinnworks.com for the business and ronzinn.com for the blog. I also created a professional email (hello@zinnworks.com) through Zoho Mail, completing the minimum setup for client-facing communication.
📣 Going Public
With the foundation live, I started publishing updates:
-
Blog at ronzinn.com — where I’m documenting every step of the journey, including this post.
-
LinkedIn — including visual content like the logo evolution carousel and shorter updates for broader engagement.
These updates aren’t just about marketing — they’re about accountability and building in public.
💡 Lessons from the Field
-
Framework assumptions matter. Don’t copy/paste code without knowing the context it was built for.
-
Default setups (like
.gitignore
) exist for a reason. If you’re missing them, your life will be harder. -
Public doesn’t mean perfect. Going live with some flaws is better than waiting indefinitely for perfection.
What’s Next (Phase 3 Preview)
Phase 3 will focus on:
-
Fixing the contact form and adding basic functionality to internal tools
-
Creating MVP demos for our first AI services
-
Adding internal pages and content for ZinnWorks’ core offerings
Thanks again for following along. If you’re building something too — or thinking about it — I’d love to connect. Let’s learn in the open and make AI work for real.
— Ronald Zinn
Founder, ZinnWorks