Skip to content

Placeholder Reference

Complete list of all template placeholders and how to use them


Standard Placeholders

All configuration values are defined using consistent placeholder syntax: {PLACEHOLDER_NAME}

Organization Identity

Placeholder Description Example Used In
{ORG_NAME} Full organization name Ski Golfklubb Docs, emails, UI
{ORG_SHORT} Short abbreviation SkiGK Folder names, prefixes
{ORG_LOWER} Lowercase org name skigk Internal prefixes
{DOMAIN} Email domain skigk.no Email addresses, configs
{DISPLAY_NAME} Display name in Workspace Ski Golfklubb Google Workspace settings

Administrative Contacts

Placeholder Description Example Used In
{ADMIN_EMAIL} Primary admin email admin@skigk.no GAM config, docs
{ADMIN_NAME} Admin person name John Doe Email templates, docs
{ADMIN_PHONE} Admin phone number +47-XXX-XXX-XX Contact pages
{SUPPORT_EMAIL} Support contact email support@skigk.no Help docs, emails
{IT_EMAIL} IT department email it@skigk.no Technical docs

Google Cloud & API

Placeholder Description Example Used In
{GCP_PROJECT_ID} Google Cloud project ID skigk-workspace-prod GAM config, APIs
{GCP_FOLDER_ID} Google Cloud folder ID 123456789 Organization structure
{GCP_BILLING_ACCOUNT} Billing account ID 01ABCD-EF012G-HI3JKL Cost tracking

GAM Configuration

Placeholder Description Example Used In
{GAM_ADMIN_EMAIL} GAM admin email admin@skigk.no gam.cfg
{GAM_DOMAIN} GAM domain setting skigk.no gam.cfg
{GAM_CUSTOMER_ID} Google Workspace customer ID C0xxxxx gam.cfg
Placeholder Description Example Used In
{GITHUB_REPO} GitHub repository path Golfklubb-IT/workspace-setup-gkit Docs, scripts
{GITHUB_OWNER} GitHub organization Golfklubb-IT Docs, links
{DOC_SITE_URL} Documentation site URL https://golfklubb-it.github.io/workspace/ README, emails
{GITHUB_PAGES_URL} GitHub Pages URL https://Golfklubb-IT.github.io/workspace-setup/ MkDocs config

Workspace Settings

Placeholder Description Example Used In
{ENFORCE_2FA} 2FA enforcement (true/false) true Security scripts
{MIN_PASSWORD_LENGTH} Minimum password length 12 Security scripts
{SESSION_TIMEOUT_MINUTES} Session timeout minutes 30 Security scripts
{PASSWORD_EXPIRY_DAYS} Password expiry in days 90 Security policies

Where Placeholders Are Used

Configuration Files

  • .env.example - Template for environment variables
  • mkdocs.yml - Documentation site configuration
  • data/structure.json - Organization structure template
  • gam.cfg.example - GAM configuration template

Documentation

  • README.md - Project introduction
  • docs/index.md - Documentation home page
  • docs/ORGANIZATION_SETUP_GUIDE.md - Setup instructions
  • All .md files in docs/

PowerShell Scripts

  • scripts/setup-new-org.ps1 - Main setup automation
  • automation/*.ps1 - All automation scripts that reference org/domain
  • scripts/validate-setup.ps1 - Validation script

Email Templates

  • templates/welcome-email.html - Welcome email with org branding
  • templates/onboarding-email.html - Onboarding email
  • templates/password-reset-email.html - Password reset template

How to Use Placeholders

1. Create Your .env File

Copy .env.example and replace all placeholders with real values:

# Copy template
cp .env.example .env

# Edit .env with your values (never commit!)

2. Run Setup Script

The setup-new-org.ps1 script reads your .env file and replaces all placeholders:

.\scripts\setup-new-org.ps1

This will: - ✅ Read all placeholder values from .env - ✅ Find all {PLACEHOLDER} patterns in repository - ✅ Replace with actual values - ✅ Generate organization-specific files - ✅ Create summary report

3. Verify Replacements

Check that placeholders were replaced correctly:

# Search for remaining unreplaced placeholders
Get-ChildItem -Recurse | Select-String "{[A-Z_]+}" | Select-Object Path, Line

Should return no results after successful setup.


Environment Variables (.env)

All placeholders have corresponding environment variables:

# Load environment variables
Get-Content .env | ForEach-Object {
    if ($_ -match '^\s*([^=]+)=(.*)$') {
        [System.Environment]::SetEnvironmentVariable($Matches[1], $Matches[2])
    }
}

# Use in scripts
$orgName = $Env:ORG_NAME
$domain = $Env:DOMAIN

Validation Rules

When setting placeholder values, follow these rules:

{DOMAIN}

  • ✅ Must be valid email domain (lowercase)
  • ✅ Examples: skigk.no, example.com, myorg.org
  • ❌ Invalid: My Organization.no, SKIGK.NO

{ADMIN_EMAIL}

  • ✅ Must be valid email format
  • ✅ Must use your organization's domain
  • ✅ Example: admin@skigk.no
  • ❌ Invalid: admin, admin@example.com

{GCP_PROJECT_ID}

  • ✅ Must be 6-30 characters
  • ✅ Must contain only lowercase letters, numbers, hyphens
  • ✅ Example: skigk-workspace-prod
  • ❌ Invalid: SkiGK-Workspace-Prod, skigk_workspace

{ORG_NAME}

  • ✅ Can contain spaces and special characters
  • ✅ Will be used in documentation and emails
  • ✅ Example: Ski Golfklubb

{MIN_PASSWORD_LENGTH}

  • ✅ Must be number between 8 and 32
  • ✅ Recommended: 12+
  • ✅ Example: 12

{ENFORCE_2FA}

  • ✅ Must be true or false
  • ✅ Recommended: true for security
  • ✅ Example: true

Common Placeholder Values

Small Organization (~20-50 people)

ORG_NAME=My Sports Club
ORG_SHORT=MyClub
DOMAIN=myclub.no
ADMIN_EMAIL=admin@myclub.no
GCP_PROJECT_ID=myclub-workspace-prod
ENFORCE_2FA=true
MIN_PASSWORD_LENGTH=12
SESSION_TIMEOUT_MINUTES=30

Medium Organization (~50-200 people)

ORG_NAME=City Organization
ORG_SHORT=CityOrg
DOMAIN=cityorg.com
ADMIN_EMAIL=admin@cityorg.com
GCP_PROJECT_ID=cityorg-workspace-prod
ENFORCE_2FA=true
MIN_PASSWORD_LENGTH=12
SESSION_TIMEOUT_MINUTES=20

Large Organization (200+ people)

ORG_NAME=Global Enterprise
ORG_SHORT=GlobalEnt
DOMAIN=enterprise.com
ADMIN_EMAIL=workspace-admin@enterprise.com
GCP_PROJECT_ID=enterprise-workspace-prod
ENFORCE_2FA=true
MIN_PASSWORD_LENGTH=14
SESSION_TIMEOUT_MINUTES=15

FAQ

Q: Can I change placeholders after running setup?
A: Yes, but you'll need to manually update files. Easiest is to re-clone template and run setup again.

Q: What if I don't know a value yet?
A: Use a temporary placeholder (e.g., TBD). Update it later when you have the real value.

Q: Can I use different domains for different groups?
A: The main {DOMAIN} is for org domain. Group-specific domains can be added as custom fields in data/groups.json.

Q: Where do I store the .env file?
A: Keep it in the repository root, but NEVER commit it (it's in .gitignore).

Q: How do I share setup values with team?
A: Share .env file through secure channels (password manager, encrypted email, etc.) - NOT through Git.