Skip to main content

Environment & Tooling

Complete reference for all environment variables used across the monorepo. Variables are split between the web app (Next.js) and the functions backend (Firebase Cloud Functions).


System requirements​

ToolVersionPurpose
Node.js22Runtime (enforced via engines in root package.json)
pnpm9.12.2+Package manager (specified via packageManager field)
Firebase CLILatestFunctions deployment and emulators
gcloud CLILatestCloud Tasks queue management
Turbo2.5+Monorepo task runner (installed as devDependency)

Web app variables (apps/web/.env.local)​

Firebase (client-side)​

These are exposed to the browser via the NEXT_PUBLIC_ prefix.

NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID= # Optional, for Google Analytics

Firebase Admin (server-side)​

FIREBASE_SERVICE_ACCOUNT_BASE64=

Base64-encode your service account JSON: base64 -i service-account.json. Used by firebase-admin in Next.js API routes for session cookie management.

Stripe​

STRIPE_SECRET_KEY=sk_test_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_STARTER_PRICE_ID=price_...
STRIPE_PRO_PRICE_ID=price_...

Important notes​

  • Never expose secret keys on the client. Only NEXT_PUBLIC_* variables are bundled into client-side code.
  • NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET should match the bucket name in Firebase Console (e.g., my-project.firebasestorage.app).
  • You can verify env variable presence at runtime using the /api/debug-env endpoint (shows presence, not values).

Functions backend variables​

These are set in the Cloud Functions runtime environment. For local development, use apps/functions/.env or Firebase's environment configuration.

Storage and orchestration​

MEDIA_BUCKET=                            # Cloud Storage bucket name
MEDIA_PUBLIC_BASE_URL=https://storage.mysoku.io # Public media proxy base URL
FUNCTION_REGION=us-central1 # Must match Cloud Tasks queue region

Social platform credentials​

Facebook / Instagram / Threads (Meta)​

FACEBOOK_APP_ID=
FACEBOOK_APP_SECRET=
FACEBOOK_CALLBACK_URL= # Optional override

INSTAGRAM_APP_ID=
INSTAGRAM_APP_SECRET=
INSTAGRAM_CALLBACK_URL= # Optional override

THREADS_APP_ID=
THREADS_APP_SECRET=
THREADS_CALLBACK_URL= # Optional override

X (Twitter)​

X_CLIENT_ID=
X_CLIENT_SECRET=
X_CALLBACK_URL= # Optional override

# OAuth 1.0a credentials (for v1.1 API endpoints)
X_CONSUMER_KEY=
X_CONSUMER_SECRET=
X_OAUTH1_CALLBACK_URL= # Optional override

TikTok​

TIKTOK_CLIENT_KEY=
TIKTOK_CLIENT_SECRET=
TIKTOK_CALLBACK_URL= # Optional override

# Optional: TikTok content verification
TIKTOK_VERIFY_FILENAME=
TIKTOK_VERIFY_CONTENT=

YouTube​

YOUTUBE_CLIENT_ID=
YOUTUBE_CLIENT_SECRET=
YOUTUBE_CALLBACK_URL= # Optional override

LinkedIn​

LINKEDIN_CLIENT_ID=
LINKEDIN_CLIENT_SECRET=
LINKEDIN_CALLBACK_URL= # Optional override

Snapchat​

SNAPCHAT_CLIENT_ID=
SNAPCHAT_CLIENT_SECRET=
SNAPCHAT_CALLBACK_URL= # Optional override

Payments and AI​

STRIPE_WEBHOOK_SECRET=                   # Stripe webhook signing secret

OPENAI_API_KEY= # For transcription and caption generation

Optional​

APIFY_TOKEN=                             # TikTok polling helper (optional)

Notes​

  • MEDIA_PUBLIC_BASE_URL maps to the media Cloud Function domain; returned URLs use this base for public access.
  • FUNCTION_REGION must match the region where your Cloud Tasks queues are created.
  • Callback URL overrides are optional. If not set, callbacks default to the deployed Cloud Function URL. Use overrides when running behind a proxy or custom domain.

Turbo global environment​

These variables are declared in turbo.json under globalEnv so Turborepo's cache correctly invalidates when they change:

{
"globalEnv": [
"NEXT_PUBLIC_FIREBASE_API_KEY",
"NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN",
"NEXT_PUBLIC_FIREBASE_PROJECT_ID",
"NEXT_PUBLIC_FIREBASE_APP_ID"
]
}