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 |
URLs & Links¶
| 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 variablesmkdocs.yml- Documentation site configurationdata/structure.json- Organization structure templategam.cfg.example- GAM configuration template
Documentation¶
README.md- Project introductiondocs/index.md- Documentation home pagedocs/ORGANIZATION_SETUP_GUIDE.md- Setup instructions- All
.mdfiles indocs/
PowerShell Scripts¶
scripts/setup-new-org.ps1- Main setup automationautomation/*.ps1- All automation scripts that reference org/domainscripts/validate-setup.ps1- Validation script
Email Templates¶
templates/welcome-email.html- Welcome email with org brandingtemplates/onboarding-email.html- Onboarding emailtemplates/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
trueorfalse - ✅ Recommended:
truefor 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.