You made one. Ditto the rest.
A web-based platform that turns one design and your data into hundreds of personalized versions. Upload a finished design, map your data to dynamic fields, and bulk-generate personalized outputs ready for download.
- Certificates — Bulk-generate personalized certificates for seminars, training, and events
- Event Badges — Name badges, speaker badges, and attendee passes
- Invitations — Personalized invites and name cards
- ID Cards — Employee or participant ID cards
- Speaker Graphics — Social graphics with different names and titles
- Any repeatable, data-driven design
- 🎨 Bring Your Design — Upload existing templates (PDF, PNG, JPG). No need to recreate inside Ditto
- 📝 Dynamic Text Fields — Place any variable (name, serial, role, company, etc.) on your design
- 🔄 Live Preview — See real data on the canvas, not abstract placeholders. Switch between records while editing
- 📊 Bulk Generation — Generate hundreds of personalized outputs from pasted names, CSV, or XLSX
- 🚀 Next.js Powered — Fast and responsive web interface
- 🎨 Tailwind CSS + shadcn/ui — Beautiful and consistent UI components
- 📦 Modular Architecture — Easy to extend and maintain
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm (v9 or higher) or yarn
- Git (for version control)
- Clone the repository:
git clone https://github.com/louispawaon/ditto.git- Navigate to the project directory:
cd easycert- Install dependencies:
npm install- Start the development server:
npm run dev- Open your browser and visit
http://localhost:3000for the landing page, or go directly to the workspace athttp://localhost:3000/generate
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a new branch from the
developbranch:
git checkout -b feature/your-feature-name- Make your changes and commit them:
git commit -m 'Add some feature'- Push to the branch:
git push origin feature/your-feature-name- Open a pull request to the
developbranch