Web Applications
Ditto
Built by Louis Miguel Pawaon
Automate design personalization, dynamic data mapping, and bulk generation so repetitive edits become a thing of the past.
Hidden Gem
Editorial honor
Connected to GitHub
Repository
Has live demo
Live demo
Builder GitHub verified
Verification
Builder email verified
Verification
Builder website verified
Verification

- Type
- Personal
- Category
- Web Applications
- Published
- Jul 5, 2026
- Updated
- Jul 29, 2026
louispawaon/ditto
About this project
- What I built & why
I built Ditto, a bulk design personalization platform that transforms a single design into hundreds of personalized outputs using structured data. It evolved from an internal certificate generation tool I originally created for our family business (EasyCert). After a year of real-world usage and user feedback, I realized the underlying problem wasn't certificate generation, it was the repetitive task of personalizing the same design over and over. That insight led to rethinking the product from the ground up.
- The problem
Ditto eliminates repetitive design personalization by combining a finished design with structured data to generate personalized outputs at scale. Instead of manually editing names, serial numbers, roles, or other fields one by one, users can define dynamic variables once and generate hundreds of versions automatically.
It is designed for organizations, event hosts, training providers, designers, marketing teams, HR departments, and anyone who frequently personalizes visual assets for multiple recipients.
- What I owned
I owned the project end-to-end, including product strategy, UX design, frontend architecture, implementation, and deployment. I was responsible for defining the product direction, designing the user workflow, building the editor with Next.js, React, Tailwind CSS, and Fabric.js, implementing client-side processing, and evolving the product from EasyCert into Ditto based on real-world feedback.
- Technical & product decisions
One of the biggest product decisions was shifting the platform from a certificate generator to a bulk design personalization tool. Instead of building certificate-specific functionality, I redesigned the architecture around generic dynamic variables so any structured data could drive personalized outputs.
Technically, I chose a local-first, client-side architecture, allowing users to process designs and data directly in the browser without uploading sensitive information to a server. This reduced infrastructure complexity while improving privacy, responsiveness, and accessibility.
- Hardest challenge
The biggest challenge was designing a system that could remain flexible without becoming complicated. Early versions were tightly coupled to certificate-specific concepts like name placeholders, making it difficult to support broader use cases.
To solve this, I redesigned the data model around generic dynamic variables and separated the editor from the underlying personalization engine. This allowed any column from a CSV or Excel file to become a reusable field, making the platform extensible while keeping the editing experience intuitive.
- Result & impact
The project evolved from a niche internal utility into a broader platform with applications far beyond certificates. It established a scalable architecture capable of supporting multiple personalization workflows while remaining simple enough for non-technical users.
More importantly, I learned that successful products are defined by the underlying problem they solve, not by their initial implementation. By listening to user feedback and challenging my original assumptions, I transformed a certificate generator into a platform built around a much more universal workflow: turning one design into many personalized versions.
- Who else worked on it
Greatest appreciation to Julienne Andrea Panes and Lloyd Andrei Pawaon for testing this project end-to-end.