Label Buddy is a personalized label e-commerce platform. Parents and individuals can design custom name labels for school supplies, lunchboxes, and clothing. The platform features a custom SVG rendering engine that shows a live, pixel-perfect preview of the label as the user types a name, picks a font, chooses a design, and selects colors — all updating instantly in the browser.

Parents need personalized name labels for their children's school items, but most label shops offer static previews or require back-and-forth with a designer. Customers cannot see exactly what their label will look like before ordering. They cannot change fonts, icons, or colors and see the result right away. This leads to uncertainty, returns, and a slow ordering process.
I worked as a full-stack developer, responsible for the entire platform from frontend to backend. I used Next.js 15 for the web interface and Supabase for the database, authentication, and storage.
The most challenging part was building the real-time label customization engine. The idea is simple: designers create SVG files with specially named placeholder elements that define where text, icons, and background colors should go. The system reads these markers at runtime and injects the user's content into the right spots. This means adding a new label design is just uploading an SVG following the naming convention — no code changes needed.
For text rendering, I used opentype.js to load font files in the browser and convert typed text into SVG path data — actual vector outlines of the letters. This removes any dependency on the user having the font installed. I built a binary search algorithm that finds the largest font size that fits inside the label's text area, handling multiple layout modes depending on how many text fields the user fills in. The system detects which mode to use based on what placeholder elements exist in the SVG template.
For the icon system, when a user picks a different design, the system fetches the icon SVG, reads its dimensions, scales and centers it into the designated slot, and injects it. Since both the template and the icon can have conflicting CSS class names, I built a style isolation system that prevents collisions between the host SVG and injected content.
Color changes are applied by finding the background element and swapping its fill, and by setting fill colors on the generated text paths. For performance, I added font caching, debounced inputs, React.memo with custom comparators, and memoized processing functions.
I built the checkout as a multi-step flow supporting both registered and guest users. Guests provide their info and the system creates a user record automatically, or updates an existing one if the email matches. The checkout handles two delivery methods: door-to-door delivery with region-based shipping rates and a free shipping threshold, or free in-person pickup.
For payments, I integrated Yoco. The system creates an order in Supabase, calls Yoco's API to start a checkout session, and redirects the user to pay. On the backend, I wrote a webhook handler with proper security: HMAC-SHA256 signature verification, replay attack protection with a 3-minute timestamp window, and constant-time comparison. On successful payment, the system updates order status and sends a confirmation email via Resend.
The cart is built with Zustand and persists to localStorage. It handles individual items, customized variants, and combo bundles. Items with the same product and identical customizations merge automatically; different customizations create separate line items. I also handled SSR hydration carefully — the cart starts empty on the server and loads from localStorage on mount to avoid React mismatches.
I built the admin dashboard with 17+ sections for managing products, orders, customers, designs, color schemes, SVG templates, fonts, categories, coupons, reviews, blog posts, footer links, newsletter subscribers, and payments. Every admin action is wrapped with role-based access checks. Data tables use @tanstack/react-table and all fetching goes through React Query with caching.
For authentication, I set up email/password registration with Zod validation, Google OAuth, password reset, and guest checkout. Middleware protects admin and profile routes.
I also built a blog system with a rich text editor, markdown rendering with syntax highlighting and auto-generated table of contents, and SEO metadata support. I created 3D product visualization scenes with React Three Fiber, and implemented a contact form, newsletter signup, coupon system, and review moderation.
I worked closely with the business owner who handled product strategy, label design, and customer relationships. I was responsible for all technical decisions, development, and deployment. We communicated regularly to align on features and priorities. The SVG template convention I designed allowed the team to add new label designs independently — they create SVGs with the right element IDs and upload them through the admin panel without needing my involvement.
Label Buddy gives customers an interactive preview that eliminates guesswork before ordering. The SVG template system makes adding new designs a non-technical task — just upload an SVG. Guest checkout and Yoco integration make purchasing simple for customers. The admin dashboard gives the business full control over their catalog, orders, and content without developer help.