{"slug": "how-i-ship-single-purpose-ai-photo-apps-on-vercel-with-one-time-payments-no", "title": "How I ship single-purpose AI photo apps on Vercel with one-time payments (no accounts)", "summary": "A developer who runs the Sadana apps described building single-purpose AI photo tools (old-photo restoration, headshots, room redesign, product shots) as static sites with a few Vercel serverless functions, sold via one-time payments with no user accounts. License keys issued by Lemon Squeezy are validated in an /api function and track remaining credits, while photos are processed in memory and never written to disk, a database or a bucket. Failed generations automatically return the credit, and new per-use-case landing pages are submitted to IndexNow after each release.", "body_md": "I run the Sadana apps used as examples.\n\nI build single-purpose AI photo apps (old-photo restoration, headshots, room redesign, product shots). Each one is a static site plus a few serverless functions on Vercel, and each is sold as a one-time payment with no user accounts. Here is the setup and what I learned.\n\nThe front end is plain static HTML, CSS and a little JS. No framework, so pages load fast and are easy to index. Anything that needs a secret (the model call, payment verification) lives in a serverless function under /api. The browser never sees an API key.\n\nNo accounts, no passwords. After checkout, Lemon Squeezy emails a license key. The app asks for that key, and the /api function validates it against the Lemon Squeezy license API before doing any work. The key also tracks how many credits remain (for example 3 photos). That removes sign-up friction and means there is no user database to protect.\n\nPhotos are processed in memory and sent only to the image model provider for generation. We never write them to disk, a database or a bucket, and results go straight to the browser. State this plainly on the page; users care.\n\nIf a generation fails (no image comes back or the model errors), the credit is automatically returned and the user can retry for free. Failed generations, service errors and unused codes within 7 days are refunded; once a result is delivered, change-of-mind refunds aren't offered. Decide this before launch, because it drives the credit-accounting logic in the API.\n\nSingle-purpose tools win on long-tail searches. I generate many small landing pages (one per use case) from a template and data file, then submit the new and changed URLs to IndexNow after each release (a small script batches and pings them), so Bing and others pick up changes quickly. Keep each page genuinely useful, not thin.\n\nIf you want to see the apps behind these examples: [Sadana](https://sadana.app)", "url": "https://wpnews.pro/news/how-i-ship-single-purpose-ai-photo-apps-on-vercel-with-one-time-payments-no", "canonical_source": "https://dev.to/buildlog/how-i-ship-single-purpose-ai-photo-apps-on-vercel-with-one-time-payments-no-accounts-2gam", "published_at": "2026-10-16 08:32:38+00:00", "updated_at": "2026-10-16 08:38:37.629355+00:00", "lang": "en", "topics": ["ai-products", "ai-tools", "generative-ai", "developer-tools"], "entities": ["Vercel", "Lemon Squeezy", "IndexNow", "Sadana", "Bing"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-i-ship-single-purpose-ai-photo-apps-on-vercel-with-one-time-payments-no", "markdown": "https://wpnews.pro/news/how-i-ship-single-purpose-ai-photo-apps-on-vercel-with-one-time-payments-no.md", "text": "https://wpnews.pro/news/how-i-ship-single-purpose-ai-photo-apps-on-vercel-with-one-time-payments-no.txt", "jsonld": "https://wpnews.pro/news/how-i-ship-single-purpose-ai-photo-apps-on-vercel-with-one-time-payments-no.jsonld"}}