One stack, zero decisions
Queue, search, auth, billing and storage each have one answer — Better Auth, QStash, Postgres, Creem — behind an interface, not a picklist.
How it helps
One answer per domain
Better Auth for identity, QStash for queues, Postgres (pgvector + full-text) for search, Creem for billing — the interface stayed, the alternatives didn't.
TS-by-default backend
A documented policy for when Python is justified keeps the stack from sprawling.
China pairs, not a matrix
Payments (Creem + WeChat Pay/Alipay), SMS (Twilio Verify + Aliyun) and storage (R2/OSS on one S3-compatible client) keep a second adapter only where mainland law or network access makes the default unusable — both live as soon as their keys are set.
Powered by
FAQ
- What if I need a provider that isn't kept?
- Each domain still ships behind an interface — add an adapter without touching call sites. The ones that remain were kept because production runs on them, not because the interface only fits them.
Commencer
Arrêtez de configurer. Commencez à construire.
Initialisez une architecture SaaS scalable localement avec le Nebutra CLI.
$ npx create-sailor@latestOpen source under the Apache-2.0 license. No credit card required.