Skip to content
supastack
Browse documentation
WebNext.js

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /docs/web/github-sign-in.md (or send Accept: text/markdown).

Add GitHub sign-in

Create a GitHub OAuth App per environment and wire Continue with GitHub into the app.

Beginner walkthrough

Prerequisites: the web app running locally and a migrated database for real accounts. You need a GitHub account — the same one that owns the repository is fine. Free, about 5 minutes per environment.

Quick terms: a GitHub OAuth App is the registration that lets GitHub sign users in for you. Unlike most providers, one OAuth App allows exactly one Authorization callback URL — so local (http://localhost:3000/…) and production (https://yourdomain.com/…) each need their own app. Reusing one app and editing its callback back and forth will break one side every time.

1. Create a local OAuth App under your account's Developer settings. 2. Copy its Client ID and generate a Client Secret. 3. Set the three environment values and restart. 4. Repeat once with your real domain before going live.

Create the local OAuth App

1. Open github.com and sign in. Click your profile photo in the top-right corner → Settings.

2. Scroll to the bottom of the left sidebar and open Developer settings → OAuth Apps → New OAuth App.

3. Application name: something like supastack local — users see this name on GitHub's authorization page. Homepage URL: http://localhost:3000. Authorization callback URL: http://localhost:3000/api/auth/callback/github. Click Register application.

4. On the app's page copy the Client ID, click Generate a new client secret, and copy the secret immediately — GitHub shows it only once, though you can always generate another.

Create the production OAuth App

Repeat the same New OAuth App steps with your product's name, Homepage URL https://yourdomain.com, and Authorization callback URL https://yourdomain.com/api/auth/callback/github.

Keep each app's credentials in its own environment: the local app's pair lives in apps/web/.env.local, the production app's pair lives in your host's secret store. The local secret must never reach production config and vice versa.

Add the values to the app

Set the three lines below in apps/web/.env.local using the local app's credentials. AUTH_GITHUB_ENABLED=true turns the button on; the pair identifies the OAuth App.

The client secret stays server-only — never in NEXT_PUBLIC_/EXPO_PUBLIC_ variables and never committed. Restart the dev server after editing.

Do not reuse any GITHUB_APP_* values you may see elsewhere — those belong to an unrelated GitHub App integration, not to user sign-in. The kit's docs/github-auth-setup.md walks this whole flow end to end if you want a second reference.

# apps/web/.env.local — from the LOCAL OAuth App
AUTH_GITHUB_ENABLED=true
GITHUB_CLIENT_ID=your-oauth-app-client-id
GITHUB_CLIENT_SECRET=your-oauth-app-secret

Verify and troubleshoot

Open http://localhost:3000/auth and click the GitHub button. Authorize the app on github.com and confirm you return signed in.

Until AUTH_GITHUB_ENABLED=true is set, the GitHub option on /auth remains visible but disabled — check the env file names, then restart. Setting the flag without both GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET fails startup and names the missing variable.

A callback mismatch is the usual failure: the app's Authorization callback URL must equal {APP_URL}/api/auth/callback/github exactly — protocol, host, port, and path. A redirect_uri error after deploying usually means the request hit the local app's credentials while APP_URL says production, or the reverse.

Restart the dev server after every env edit; values are read at startup only.

If you want to continue setup, read Add Apple sign-in.

Frequently asked questions

14 questions

What is supastack?

supastack is a modular foundation for building AI-powered SaaS products. It brings together common infrastructure so you can focus on product-specific features.

Does it support web and mobile?

Yes. supastack includes Next.js and Expo apps as starting points for web and mobile experiences.

What authentication is included?

Better Auth covers email OTP, magic-link, and social sign-in; email/password stays available at the API layer and through the Auth.js credentials engine for products that need it. Personal workspaces are provisioned with the account so product records stay scoped from day one.

How does it support AI?

supastack includes configurable multi-provider AI, usage tracking, budgets, and encrypted bring-your-own-key support.

How are subscriptions handled?

For products built on the kit, Stripe billing, subscriptions, and entitlements form the paid-access foundation. Provider secrets stay server-only.

Where does my product-specific code live?

Product-specific features remain in a separate codebase while the product configures and integrates supastack’s foundation modules.

How does supastack pricing work?

The kit is a one-time purchase with lifetime updates: One Platform at $249 (temporary launch price, $100 off the regular $349) — your pick of Next.js (Web), Expo (iOS & Android), or Tauri (macOS & Windows Desktop) — or the All Platforms Bundle at $499 (temporary launch price, $100 off the regular $599) with every platform and the full monorepo, plus $75 per extra developer seat. No kit subscription. Checkout on this site delivers your license key by email, with repository access via GitHub invite.

How do workspaces scope my data?

User-owned records are scoped by workspaceId. Identity, entitlements, AI usage, billing events, and audit entries stay inside the personal workspace boundary.

How do background jobs work?

Trigger.dev is the explicit job runtime. The JobRunner contract only promises enqueue, status, and cancel—workflow semantics stay Trigger.dev-specific and explicit.

How is email different from outreach?

Transactional email covers product workflows such as completion notices. Cold outreach and campaigns are product concerns outside this kit’s email module.

How do mobile purchases work?

Mobile includes native purchases and restore through RevenueCat, with access verified by your server. Configure the store accounts and complete device testing before release. Web billing remains separate.

Where do AI provider keys live?

Bring-your-own-key credentials are encrypted and stay server-only. Keys are redacted from logs; usage and budgets remain visible at the workspace level.

Which payment methods does checkout accept?

The Stripe-hosted checkout accepts cards and can also offer Alipay and WeChat Pay once those wallets are enabled on the Stripe account — handy for buyers in China. Wallet authorizations confirm asynchronously, so the license page updates as soon as the payment clears.

Can I get a refund?

After you've got access to the repository, supastack is yours forever, so it cannot be refunded. But rest assured, you get the complete source code with lifetime updates to build and ship unlimited products for yourself or clients. You just cannot resell the code or redistribute the repository as a starter kit or template.

EN
Theme