We spent 5 months building AI features nobody paid for—until a user asked for 300 DPI PDFs and Watermarks
As developers, we have a bad habit: we equate technical complexity with commercial value.
If a feature involves fine-tuning prompts, WebAssembly background removal, and LAB color-space quantization on an HTML5 Canvas, we assume users will gladly pay for it. If a feature is just drawing text at a 30-degree angle and wrapping a canvas inside jsPDF, we treat it as an afterthought.
That exact mindset cost my project 5 months of zero revenue. Here is the breakdown of how we got stuck in the "cool tech, no monetization" trap, and how a single feature request for high-res PDFs and custom watermarks turned non-paying users into immediate buyers.
The Setup: High Engagement, Zero Conversion
We built an online fuse bead (Perler/Hama) and pixel art pattern generator. Under the hood, it was a fun engineering challenge:
- Next.js App Router on Cloudflare Pages + D1 (Drizzle ORM).
- An AI pipeline that takes messy user photos, strips backgrounds, redraws them into clean 2-head-tall chibi characters, and maps every pixel to real-world plastic bead SKU codes.
- A custom HTML5 Canvas editor where we had to solve nasty iOS Safari memory crashes (where canvases over ~4096px silently turn transparent) by dynamically switching between physical pixel redraws and CSS
transform: scale()matrices.
We hit 4,000+ monthly active users organically. People loved the editor.
Our monetization plan? Sell "Magic Beans" (credits) for the AI cartoonizer.
The result? Almost five months of $0 MRR from our core audience.
Why? Because hobbyists only make one or two patterns a month. Once their free credits ran out, they either uploaded pre-made pixel art (bypassing the AI completely) or just took a screenshot of the browser viewport.
The Turning Point: A DM from a Power User
Last month, a user who sells physical bead kits and digital patterns reached out. She wasn't using our AI credits at all. Instead, she spent hours every week on our canvas designing patterns by hand, exporting them, and then opening Photoshop to do three tedious things:
- Scale the image up so the tiny grid numbers wouldn't blur when printed on A4 paper.
- Slap her shop logo at the top.
- Tile a semi-transparent copyright watermark across the bead grid so competitors wouldn't steal her previews on social media.
She told us straight up: "If you build a 300 DPI PDF export with my custom watermark and logo header built-in, I will buy it today."
How We Built the "Boring" Feature That Actually Sold
Instead of exporting the visible DOM <canvas> (which is constrained by viewport zoom and device pixel ratio), we architected an isolated offscreen rendering pipeline in TypeScript (you can see it live at https://pindouai.app):
// Simplified view of our high-DPI offscreen PDF pipeline export async function exportPatternToPdf(options: ExportPdfOptions): Promise<void> { const { config, pageSize = "a4", watermark } = options; // Force a higher cell density (24px per bead cell) specifically for 300 DPI print crispness const canvas = await generateExportCanvasAsync({ ...options, cellSize: 24, }); const orientation = config.effW > config.effH ? "landscape" : "portrait"; const pdf = new jsPDF({ orientation, unit: "mm", format: pageSize === "letter" ? "letter" : "a4", compress: true, }); // Calculate aspect-ratio-safe bounding box with 10mm physical print margins const pageWidth = pdf.internal.pageSize.getWidth(); const pageHeight = pdf.internal.pageSize.getHeight(); // ... render composite sheet (Header + Grid + Diagonal Tiled Watermark + BOM Legend) } We added four specific capabilities to this offscreen compositor:
- Dynamic Studio Header: Pre-loads the user's custom logo via an async
HTMLImageElementloader, calculates aspect-safe bounding boxes, and renders their shop name and social links at the top of the sheet. - Anti-Theft Tiled Watermarking: Rotates the 2D canvas context (
ctx.rotate(-Math.PI / 6)) and loops over the pattern bounds to stamp a low-opacity copyright string right across the bead coordinates. - White-Label Toggle: Allows Pro users to hide the default footer branding.
- 300 DPI A4 / US Letter Pagination: Fits both the coordinate grid and the localized color count legend onto standard print stock without pixel interpolation blur.
The Aftermath
The moment we shipped this and notified the user, she upgraded immediately. Other craft sellers followed right behind her.
For five months, we tried to charge people for an AI wrapper. It took one conversation with a real seller to realize that prosumers pay for IP protection and print-ready deliverables.
If your side project has traffic but zero sales, stop tweaking your AI prompts. Look at how your heaviest users export data out of your app, and automate the Photoshop steps they are forced to do right after leaving your tab.