From evernote-pack
Configures dev, staging, and prod environments for Evernote API integrations using JS configs, env vars, client factories, Docker Compose, and health checks.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin evernote-packThis skill is limited to using the following tools:
Configure separate development, staging, and production environments for Evernote integrations with proper isolation, configuration management, and environment-aware client factories.
Deploys Evernote Node.js integrations to production via Docker, AWS ECS/Lambda, Google Cloud Run, and Kubernetes with secrets management and health checks.
Deploys OneNote integrations to Docker/Kubernetes with MSAL token persistence, Graph API health probes, and graceful shutdown.
Sets up development, staging, and production environments for MaintainX API with TypeScript configs, secret management, and isolated clients.
Share bugs, ideas, or general feedback.
Configure separate development, staging, and production environments for Evernote integrations with proper isolation, configuration management, and environment-aware client factories.
evernote-ci-integration)Create per-environment config files that define the Evernote endpoint, sandbox flag, rate limit settings, and logging level.
// config/environments.js
const configs = {
development: {
sandbox: true,
apiUrl: 'https://sandbox.evernote.com',
rateLimitDelayMs: 0, // No throttle in dev
logLevel: 'debug'
},
staging: {
sandbox: true,
apiUrl: 'https://sandbox.evernote.com',
rateLimitDelayMs: 100,
logLevel: 'info'
},
production: {
sandbox: false,
apiUrl: 'https://www.evernote.com',
rateLimitDelayMs: 200,
logLevel: 'warn'
}
};
module.exports = configs[process.env.NODE_ENV || 'development'];
Define environment-specific .env files. Each environment uses its own API key and token. The EVERNOTE_SANDBOX flag controls which Evernote endpoint the SDK connects to.
# .env.development - sandbox with dev token
EVERNOTE_SANDBOX=true
EVERNOTE_DEV_TOKEN=S=s1:U=...
# .env.production - production with OAuth
EVERNOTE_SANDBOX=false
EVERNOTE_CONSUMER_KEY=prod-key
EVERNOTE_CONSUMER_SECRET=prod-secret
Build a factory that creates properly configured Evernote clients based on the active environment. Include validation that production never uses sandbox tokens.
Define services for the app, Redis (caching), and a webhook receiver (ngrok or localtunnel) in docker-compose.yml. Mount .env.development as environment file.
Create a /health endpoint that verifies Evernote API connectivity, reports the active environment, and checks cache availability.
app.get('/health', async (req, res) => {
const checks = {
environment: process.env.NODE_ENV,
sandbox: config.sandbox,
evernoteApi: 'unknown',
cacheConnected: false
};
try {
await userStore.getUser();
checks.evernoteApi = 'connected';
} catch { checks.evernoteApi = 'error'; }
res.json(checks);
});
For the full configuration loader, client factory, Docker setup, and CI/CD environment matrix, see Implementation Guide.
.env templates for each environment| Error | Cause | Solution |
|---|---|---|
Invalid consumer key | Using sandbox key in production | Verify EVERNOTE_SANDBOX matches key type |
| Wrong environment | NODE_ENV not set | Default to development, warn in logs |
| Sandbox data in production | Environment misconfiguration | Add startup validation that checks key/env match |
| Docker connection refused | Service not started | Run docker compose up before testing |
For observability setup, see evernote-observability.
Three-environment setup: Development uses sandbox Developer Token for instant testing. Staging uses sandbox OAuth for integration testing. Production uses production OAuth with full rate limiting and monitoring.
Docker local dev: Run docker compose up to start the app with Redis caching and ngrok for webhook testing, all preconfigured for the sandbox environment.