There's a quiet tax in most starter kits: they hard-wire you to one vendor. One auth SaaS, one mail SDK, one AI provider. Convenient on day one, expensive on day ninety.
Wire to the protocol, not the vendor
The trick is boring and powerful: integrate against the standard interface, not a specific company's SDK.
- Email → SMTP. Resend, SES, Postmark, Mailgun, even Gmail all speak it. Change three env vars, keep your code.
- AI → the OpenAI-compatible chat API. OpenRouter, OpenAI, llama.cpp, Ollama, Groq, Together all expose it. Point
AI_BASE_URLwherever you want. - Payments → a webhook + a signed event. The processor is replaceable behind it.
The payoff
When the interface is the contract, the provider is a config value. You test locally against a free model, ship to a paid one, and never touch application code in between.
# test for free, locally
AI_BASE_URL=http://localhost:8080/v1
# ship to production
AI_BASE_URL=https://openrouter.ai/api/v1
Lock-in isn't a feature. Optionality is.