Starter Kits · Starter kit
Phoenixir
A modular Phoenix LiveView SaaS starter kit: accounts, organizations, billing, API, jobs, AI and a marketing site, ready on day one.
Overview
Every SaaS needs the same foundation before its first real feature: accounts, teams, billing, email, background jobs and a public site. Phoenixir is that foundation for Phoenix 1.8 and LiveView 1.2, built and tested so you can start on what makes your product different. It starts from the official phx.gen.auth generator and extends it, so the code feels familiar. A setup task generates a new app with only the modules you choose, and every module is documented, including how to remove it.
Highlights
- Generate your app with only the modules you need: mix phoenixir.setup
- Accounts: magic links, passwords (Argon2), TOTP two-factor with recovery codes, GitHub and Google sign-in
- Organizations with owner, admin and member roles, invitations, live presence and an audit log
- Billing through Stripe, Polar or Lemon Squeezy, with seat-based plans
- JSON API with personal access tokens, OpenAPI docs, cursor pagination and idempotency keys
- AI with OpenAI, Anthropic and Google models, fallback, streaming and per-organization quotas
- Oban background jobs, feature flags, waitlist mode, file uploads and an admin area
- Marketing site, blog and SEO, English and Spanish, with Lighthouse budgets in CI
- Test suite with a 95% coverage floor, plus Credo, Sobelow and Dialyzer in CI
Why teams use it
Months of foundation, done
Accounts, teams, billing, email, jobs and a public site are built and tested, so your first sprint goes on your product.
Decisions written down
Architecture choices are documented with the reasons, and every module has a guide, including how to remove it.
Take only what you need
The setup task generates an app with just the modules you pick.
Current and checked
Phoenix 1.8, LiveView 1.2, Elixir 1.20, Tailwind CSS v4 and daisyUI 5, with a 95% coverage floor in CI.
How it compares
vsphx.gen.auth (Phoenix 1.8)
| Aspect | phx.gen.auth (Phoenix 1.8) | Phoenixir |
|---|---|---|
| Registration, confirmation, magic links | Yes | Yes |
| Two-factor authentication | No | TOTP, recovery codes, replay protection |
| GitHub and Google sign-in | No | Yes, with PKCE and verified-email linking |
| Sessions per device | No | Listed with IP and browser; revoke one or all |
| Rate limits | No | Per IP and per account |
| Security audit log | No | Yes, visible to the user |
| Organizations and roles | No | Owner, admin and member, with invitations |
vsBuilding the foundation from scratch
| Aspect | Building the foundation from scratch | Phoenixir |
|---|---|---|
| Billing | Provider integration, webhook verification, idempotency, seats, dunning | Stripe, Polar and Lemon Squeezy behind one behaviour |
| Background jobs | Queue design, retries, cron and monitoring | Oban with Oban Web |
| Marketing and SEO | Landing pages, blog, sitemaps and structured data | Two landing designs, blog, sitemaps and JSON-LD |
| Tests | Written as you go, if there is time | A suite with a 95% coverage floor, Credo, Sobelow and Dialyzer |
| Ownership | Every line is yours | Every line is yours too: full source, change anything |
Time it saves
| Work you skip | Estimated hours |
|---|---|
| Auth on top of phx.gen.auth: 2FA, OAuth, device sessions, rate limits, audit log | 50–90 hours |
| Organizations, roles, invitations and tenant isolation | 40–80 hours |
| Billing with three providers, webhooks and seats | 60–120 hours |
| JSON API with tokens and OpenAPI docs | 25–50 hours |
| Background jobs, admin area, feature flags and waitlist | 30–60 hours |
| File uploads with image processing | 15–30 hours |
| AI with provider fallback and usage quotas | 20–40 hours |
| Email templates, previews and a second language | 20–40 hours |
| Marketing site, blog and SEO | 30–60 hours |
| CI quality gates | 10–20 hours |
| Total saved | 300–590 hours |
Let's talk
Need something like this in your app?
Tell us what you are building. You will get a reply within two business days.