This is NOT an XMPie product. This application is a community-built demonstration of how the XMPie PersonalEffect APIs can be used to build custom web-to-print solutions. It is provided as-is, with no warranty or guarantee of any kind.
No support is provided for this code by XMPie support. If you encounter issues with this demo application, please use the GitHub Issues tab — do not contact XMPie support.
To run this application yourself, you will need access to a valid XMPie PersonalEffect server with the uProduce REST API licensed and enabled. No templates or artwork are included in this repository.
This demonstration showcases how the XMPie uProduce REST API can be used to build a fully interactive, web-based document customisation experience. Users can select from multiple templates, personalise content through a dynamic form, see real-time previews, and download print-ready PDFs — all powered by the PersonalEffect engine running on a remote XMPie server.
Browse and select from multiple pre-configured PersonalEffect templates, each with its own set of customisable variables, page sizes, and design options.
Modify text fields, select industries, choose languages, and adjust options. Each change triggers a new API call to the PersonalEffect server, generating a fresh preview in seconds.
View your customised document in single-page, spread, or interactive 3D view — all rendered from the JPG output returned by the uProduce API.
Generate and download a high-resolution, press-ready PDF (PDF/X-4:2010 compliant) directly from the browser, produced by the PersonalEffect engine.
The application acts as a lightweight middleware between the browser and the XMPie uProduce REST API. Here is how the pieces fit together:
The browser presents a dynamic form generated from products.json, which defines each template's variables (text fields, dropdowns, date pickers) and maps them to PersonalEffect plan objects (Variables and ADORs).
When a preview or PDF is requested, the Node.js server constructs a uProduce Job Ticket — a JSON payload specifying the campaign, plan, document, customisations, and output format. User values are injected into Plan.Customizations as PlanObjectExpression entries.
The job ticket is submitted to the uProduce API endpoint POST /v1/jobs/immediate, which processes the job synchronously and returns the result in a single request. This enables real-time preview generation.
Once the job completes, the server downloads the output ZIP file via GET /v1/jobs/{id}/output/download, extracts the JPG pages (for preview) or PDF (for download), and sends them back to the browser.
#DD/MM/YYYY# expression formatHTML / CSS / JavaScript
Dynamic form generation, preview display, 3D view, PDF download
Express middleware
Job ticket construction, input sanitisation, rate limiting, caching
PersonalEffect Server
Template rendering, variable data processing, PDF/JPG generation
The Node.js server acts as a secure proxy — API credentials are never exposed to the browser. All uProduce API calls are made server-side with input validation, rate limiting, and a circuit breaker for resilience.
The repository includes:
server.js) — Express server handling job ticket construction, API communication, and securitypublic/app.c5c64304.js) — Dynamic form generation, preview rendering, and 3D viewproducts.json) — Declarative product definitions mapping UI fields to PersonalEffect plan objectsthumbnailCache.js) — Optional Vercel Blob integration for persistent thumbnail storageIf you wish to run this application yourself, you will need:
UPRODUCE_API_URL, UPRODUCE_USERNAME, and UPRODUCE_PASSWORD in a .env file