My Build In Public Site - JamieWatters.work - Progress - 30 Nov 2025
From Hardcoded to Heartfelt: Transforming Project Metrics for Authenticity
TL;DR
Today, I embarked on a journey to replace generic hardcoded metrics in my portfolio with dynamic, project-specific metrics that truly reflect the essence of each project. It was a rollercoaster ride filled with challenges, breakthroughs, and a newfound understanding of how to better present my work. Let’s dive into the nitty-gritty of what I accomplished, the hurdles I faced, and the valuable lessons I learned along the way.
A New Era of Project Metrics 🚀
Picture this: I’ve been staring at my portfolio, and it dawned on me how stale and uninspired the metrics were. The hardcoded Monthly Recurring Revenue (MRR) and user counts felt like they belonged in the past. They didn’t capture the true spirit of my projects, and I knew it was time for a change.
Today, I finally implemented a Configurable Project Metrics System that allows me to display relevant metrics tailored specifically for each project type. Whether it’s a trading tool, a content site, or an open-source project, each now has its own unique metrics that tell a more authentic story.
Behind the Scenes: The Technical Journey
Building the Foundation
I kicked things off by creating a new ProjectType Database Schema. This involved developing a Prisma enum covering six project types: SAAS, TRADING, OPEN_SOURCE, CONTENT, PERSONAL, and MARKETPLACE. It was thrilling to see this structure take form! I also added fields for projectType and customMetrics to my Project model, which set the stage for what was to come.
Next up was the Metrics Template Library. I built a /lib/metrics/ folder filled with type-specific metric definitions, complete with icons, formatting options (currency, percent, number, duration), and labels. It felt like I was crafting a toolbox filled with everything I needed to bring each project to life visually!
Overcoming Hurdles
But, as any developer knows, the road is never entirely smooth. I ran into several issues that tested my patience and problem-solving skills.
Prisma Migration Conflict
One of my biggest obstacles was a Prisma migration conflict. I discovered that my database had a modified migration history, which clashed with the new migration I was attempting to run. The fix? Switching from migrate dev to npx prisma db push to sync the schema directly. This taught me a valuable lesson: for development databases, db push is much quicker and more efficient—note to self for the future!
Enum Value Missing
Another hiccup came when I realized an ACTIVE Enum value was missing from my database. The legacy status wasn’t defined in my schema, causing some confusion. To resolve this, I simply added ACTIVE // Legacy value to the ProjectStatus enum. This reminded me of the importance of checking existing data before making changes to enums.
TypeScript Errors
Lastly, I faced some frustrating TypeScript errors due to the new fields I had added. The ProjectForm and admin page interfaces didn’t include the new projectType field, resulting in a cascade of errors. After adding projectType and customMetrics to all relevant interfaces, I was back on track. This was a great reminder to always grep for all usages of a model interface when making changes.
The Impact of Change 🌟
With all the technical challenges behind me, I deployed my changes to production. I can now proudly say that my portfolio no longer displays a one-size-fits-all metric. Instead, trading tools now showcase win rates and profits, open-source projects highlight GitHub stars and forks, and content sites reveal visitor counts and sign-ups. This transformation has made my portfolio not only more authentic but also significantly more useful for anyone who checks it out.
What’s Next?
With the groundwork laid, I have some exciting next steps on my agenda:
- I’ll be entering actual metric values for each project through the admin form, adding depth to the metrics.
- I’m considering implementing metric history tracking to visualize trends over time.
- Lastly, I’d love to add visual charts and sparklines for a more dynamic display of metric trends.
Reflections
Today was a whirlwind of technical challenges and learning opportunities. I’m thrilled with how my portfolio has evolved, and I can’t wait to see how these changes resonate with visitors. If any of you are facing similar challenges in making your projects more relatable, remember that every obstacle is just a stepping stone to a breakthrough.
Thanks for joining me on this journey! Until next time, keep building in public and sharing your stories. 💪✨
AI-enhanced blog post generated from structured report on 2025-11-30 at 18:30 Original report: 2025-11-30.md Enhancement model: gpt-4o-mini