Global Configuration

Learn how to define the global configuration for your application.

We store the global configuration of a Lotru application in src/config.ts.

The configuration has the following structure:

export const config = {
  site: {
    name: '',
    description: '',
    colorScheme: 'light',
    themeColor: '#0e0f11',
    primaryColor: 'purple',
    url: process.env.NEXT_PUBLIC_SITE_URL,
  },
  logLevel: process.env.NEXT_PUBLIC_LOG_LEVEL,
  auth: {
    strategy: process.env.NEXT_PUBLIC_AUTH_STRATEGY || AuthStrategy.CUSTOM,
  },
  mapbox: {
    apiKey: process.env.NEXT_PUBLIC_MAPBOX_API_KEY,
  },
  supabase: {
    url: process.env.NEXT_PUBLIC_SUPABASE_URL,
    anonKey: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
  },
};

These values are used throughout the application instead of being hardcoded into the codebase.

Loading Environment Variables

Both Next.js and Vite have built-in support for loading environment variables from .env.local into process.env.

// File .env.local
 
DB_HOST=localhost
DB_USER=myuser
DB_PASS=mypassword

Development Environment Variables

The development environment variables:

# App
NEXT_PUBLIC_SITE_URL=
 
# Logger
NEXT_PUBLIC_LOG_LEVEL=
 
# Auth
NEXT_PUBLIC_AUTH_STRATEGY=
 
# Supabase
NEXT_PUBLIC_SUPABASE_REF_ID=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
 
# Mapbox
NEXT_PUBLIC_MAPBOX_API_KEY=

Vite uses a similar approach to Next.js, but instead of loading the environment variables into process.env, it exposes them as import.meta.env.

// File .env.local
 
VITE_SITE_NAME=My App
// File src/config.ts
 
export const config = {
  site: {
    name: import.meta.env.VITE_SITE_NAME,
  },
};