I built an invoice SaaS and the most interesting part was making AI providers switchable at runtime.
Here's the core idea — provider and model stored as DB singleton:
const settings = await db.aISettings.findUnique({ where: { id: "singleton" } });
switch (settings.provider) {
case "openai":
case "groq": // same OpenAI-compatible API
return generateOpenAICompat(settings, apiKey, prompt);
case "anthropic":
return generateAnthropic(settings, apiKey, prompt);
case "gemini":
return generateGemini(settings, apiKey, prompt);
}
Admin changes provider in UI → takes effect immediately, no restart.
Also used pdf-lib for server-side PDF (no Puppeteer) and Vercel Cron for recurring invoices.
https://stepanova12.gumroad.com/l/urykyi
https://nastasiia16.lemonsqueezy.com/checkout/buy/3d3e5ae5-f8fc-46bc-a1bd-1ba9d8271d34
Top comments (0)