{"slug": "we-spent-5-months-building-ai-features-nobody-paid-for-until-a-user-asked-for", "title": "We spent 5 months building AI features nobody paid for—until a user asked for 300 DPI PDFs and Watermarks", "summary": "A developer behind an online fuse-bead and pixel-art pattern generator (pindouai.app) spent five months earning $0 MRR from an AI cartoonizer credit model, then shipped a 300 DPI PDF export with custom watermarks and logo headers after a craft seller said she would pay for it on the spot. The feature uses an offscreen TypeScript rendering pipeline with jsPDF, a 24px-per-bead cell density, aspect-safe bounding boxes and a diagonally tiled low-opacity watermark, and the requesting user upgraded immediately, followed by other craft sellers.", "body_md": "As developers, we have a bad habit: we equate *technical complexity* with *commercial value*. \n\nIf 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.\n\nThat 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.\n\nWe built an online fuse bead (Perler/Hama) and pixel art pattern generator. Under the hood, it was a fun engineering challenge:\n\n`transform: scale()` matrices.\nWe hit 4,000+ monthly active users organically. People loved the editor.\n\nOur monetization plan? Sell \"Magic Beans\" (credits) for the AI cartoonizer.\n\nThe result? Almost five months of $0 MRR from our core audience.\n\nWhy? 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.\n\nLast 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:\n\nShe 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.\"*\n\nInstead 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):](<https://pindouai.app):>)\n\n```\n// Simplified view of our high-DPI offscreen PDF pipeline\nexport async function exportPatternToPdf(options: ExportPdfOptions): Promise<void> {\n  const { config, pageSize = \"a4\", watermark } = options;\n\n  // Force a higher cell density (24px per bead cell) specifically for 300 DPI print crispness\n  const canvas = await generateExportCanvasAsync({\n    ...options,\n    cellSize: 24,\n  });\n\n  const orientation = config.effW > config.effH ? \"landscape\" : \"portrait\";\n  const pdf = new jsPDF({\n    orientation,\n    unit: \"mm\",\n    format: pageSize === \"letter\" ? \"letter\" : \"a4\",\n    compress: true,\n  });\n\n  // Calculate aspect-ratio-safe bounding box with 10mm physical print margins\n  const pageWidth = pdf.internal.pageSize.getWidth();\n  const pageHeight = pdf.internal.pageSize.getHeight();\n  // ... render composite sheet (Header + Grid + Diagonal Tiled Watermark + BOM Legend)\n}\n```\n\nWe added four specific capabilities to this offscreen compositor:\n\n`HTMLImageElement` loader, calculates aspect-safe bounding boxes, and renders their shop name and social links at the top of the sheet.`ctx.rotate(-Math.PI / 6)`) and loops over the pattern bounds to stamp a low-opacity copyright string right across the bead coordinates.\nThe moment we shipped this and notified the user, she upgraded immediately. Other craft sellers followed right behind her.\n\nFor 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**. \n\nIf 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.", "url": "https://wpnews.pro/news/we-spent-5-months-building-ai-features-nobody-paid-for-until-a-user-asked-for", "canonical_source": "https://dev.to/fatt/we-spent-5-months-building-ai-features-nobody-paid-for-until-a-user-asked-for-300-dpi-pdfs-and-1d22", "published_at": "2026-11-10 11:26:19+00:00", "updated_at": "2026-11-10 11:52:04.129662+00:00", "lang": "en", "topics": ["ai-products", "generative-ai", "ai-tools"], "entities": ["pindouai.app", "jsPDF", "TypeScript"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/we-spent-5-months-building-ai-features-nobody-paid-for-until-a-user-asked-for", "markdown": "https://wpnews.pro/news/we-spent-5-months-building-ai-features-nobody-paid-for-until-a-user-asked-for.md", "text": "https://wpnews.pro/news/we-spent-5-months-building-ai-features-nobody-paid-for-until-a-user-asked-for.txt", "jsonld": "https://wpnews.pro/news/we-spent-5-months-building-ai-features-nobody-paid-for-until-a-user-asked-for.jsonld"}}