From evernote-pack
Configure multi-environment setup for Evernote integrations. Use when setting up dev, staging, and production environments, or managing environment-specific configurations. Trigger with phrases like "evernote environments", "evernote staging", "evernote dev setup", "multiple environments evernote".
npx claudepluginhub flight505/skill-forge --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.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
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.