apple-notes-multi-env-setup

Configure Apple Notes across development, staging, and production environments. Use when setting up multi-environment deployments, configuring per-environment secrets, or implementing environment-specific Apple Notes configurations. Trigger with phrases like "apple-notes environments", "apple-notes staging", "apple-notes dev prod", "apple-notes environment setup", "apple-notes config by env".

claude-code
6 Tools
apple-notes-pack Plugin
saas packs Category

Allowed Tools

ReadWriteEditBash(aws:*)Bash(gcloud:*)Bash(vault:*)

Provided by Plugin

apple-notes-pack

Claude Code skill pack for Apple Notes (24 skills)

saas packs v1.0.0
View Plugin

Installation

This skill is included in the apple-notes-pack plugin:

/plugin install apple-notes-pack@claude-code-plugins-plus

Click to copy

Instructions

Apple Notes Multi-Environment Setup

Overview

Configure Apple Notes across development, staging, and production environments.

Prerequisites

  • Separate Apple Notes accounts or API keys per environment
  • Secret management solution (Vault, AWS Secrets Manager, etc.)
  • CI/CD pipeline with environment variables
  • Environment detection in application

Environment Strategy

Environment Purpose API Keys Data
Development Local dev Test keys Sandbox
Staging Pre-prod validation Staging keys Test data
Production Live traffic Production keys Real data

Configuration Structure


config/
├── apple-notes/
│   ├── base.json           # Shared config
│   ├── development.json    # Dev overrides
│   ├── staging.json        # Staging overrides
│   └── production.json     # Prod overrides

base.json


{
  "timeout": 30000,
  "retries": 3,
  "cache": {
    "enabled": true,
    "ttlSeconds": 60
  }
}

development.json


{
  "apiKey": "${APPLE-NOTES_API_KEY}",
  "baseUrl": "https://api-sandbox.apple-notes.com",
  "debug": true,
  "cache": {
    "enabled": false
  }
}

staging.json


{
  "apiKey": "${APPLE-NOTES_API_KEY_STAGING}",
  "baseUrl": "https://api-staging.apple-notes.com",
  "debug": false
}

production.json


{
  "apiKey": "${APPLE-NOTES_API_KEY_PROD}",
  "baseUrl": "https://api.apple-notes.com",
  "debug": false,
  "retries": 5
}

Environment Detection


// src/apple-notes/config.ts
import baseConfig from '../../config/apple-notes/base.json';

type Environment = 'development' | 'staging' | 'production';

function detectEnvironment(): Environment {
  const env = process.env.NODE_ENV || 'development';
  const validEnvs: Environment[] = ['development', 'staging', 'production'];
  return validEnvs.includes(env as Environment)
    ? (env as Environment)
    : 'development';
}

export function getApple NotesConfig() {
  const env = detectEnvironment();
  const envConfig = require(`../../config/apple-notes/${env}.json`);

  return {
    ...baseConfig,
    ...envConfig,
    environment: env,
  };
}

Secret Management by Environment

Local Development


# .env.local (git-ignored)
APPLE-NOTES_API_KEY=sk_test_dev_***

CI/CD (GitHub Actions)


env:
  APPLE-NOTES_API_KEY: ${{ secrets.APPLE-NOTES_API_KEY_${{ matrix.environment }} }}

Production (Vault/Secrets Manager)


# AWS Secrets Manager
aws secretsmanager get-secret-value --secret-id apple-notes/production/api-key

# GCP Secret Manager
gcloud secrets versions access latest --secret=apple-notes-api-key

# HashiCorp Vault
vault kv get -field=api_key secret/apple-notes/production

Environment Isolation


// Prevent production operations in non-prod
function guardProductionOperation(operation: string): void {
  const config = getApple NotesConfig();

  if (config.environment !== 'production') {
    console.warn(`[apple-notes] ${operation} blocked in ${config.environment}`);
    throw new Error(`${operation} only allowed in production`);
  }
}

// Usage
async function deleteAllData() {
  guardProductionOperation('deleteAllData');
  // Dangerous operation here
}

Feature Flags by Environment


const featureFlags: Record<Environment, Record<string, boolean>> = {
  development: {
    newFeature: true,
    betaApi: true,
  },
  staging: {
    newFeature: true,
    betaApi: false,
  },
  production: {
    newFeature: false,
    betaApi: false,
  },
};

Instructions

Step 1: Create Config Structure

Set up the base and per-environment configuration files.

Step 2: Implement Environment Detection

Add logic to detect and load environment-specific config.

Step 3: Configure Secrets

Store API keys securely using your secret management solution.

Step 4: Add Environment Guards

Implement safeguards for production-only operations.

Output

  • Multi-environment config structure
  • Environment detection logic
  • Secure secret management
  • Production safeguards enabled

Error Handling

Issue Cause Solution
Wrong environment Missing NODE_ENV Set environment variable
Secret not found Wrong secret path Verify secret manager config
Config merge fails Invalid JSON Validate config files
Production guard triggered Wrong environment Check NODE_ENV value

Examples

Quick Environment Check


const env = getApple NotesConfig();
console.log(`Running in ${env.environment} with ${env.baseUrl}`);

Resources

Next Steps

For observability setup, see apple-notes-observability.

Ready to use apple-notes-pack?