Shipping And Launch
dzhalaevd/Donatello
Prepares production launches. An agent skill from dzhalaevd/Donatello.
Execute Lokalise production deployment checklist and rollback procedures.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace lokalise-prod-checklist --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/lokalise-prod-checklist .claude/skills/lokalise-prod-checklist && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "lokalise-prod-checklist" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/lokalise-prod-checklist into .claude/skills/lokalise-prod-checklist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lokalise-prod-checklist", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/lokalise-prod-checklistType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace lokalise-prod-checklist --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/.curated/lokalise-prod-checklist .agents/skills/lokalise-prod-checklist && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "lokalise-prod-checklist" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/lokalise-prod-checklist into .agents/skills/lokalise-prod-checklist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lokalise-prod-checklist", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace lokalise-prod-checklist --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/.curated/lokalise-prod-checklist .cursor/skills/lokalise-prod-checklist && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "lokalise-prod-checklist" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/lokalise-prod-checklist into .cursor/skills/lokalise-prod-checklist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lokalise-prod-checklist", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jeremylongshore/tons-of-skills-marketplace.git --path skills/.curated/lokalise-prod-checklist--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace lokalise-prod-checklist --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/.curated/lokalise-prod-checklist .gemini/skills/lokalise-prod-checklist && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "lokalise-prod-checklist" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/lokalise-prod-checklist into .gemini/skills/lokalise-prod-checklist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lokalise-prod-checklist", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jeremylongshore/tons-of-skills-marketplace lokalise-prod-checklistInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/.curated/lokalise-prod-checklist .github/skills/lokalise-prod-checklist && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "lokalise-prod-checklist" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/lokalise-prod-checklist into .github/skills/lokalise-prod-checklist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lokalise-prod-checklist", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace lokalise-prod-checklist --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/.curated/lokalise-prod-checklist .opencode/skills/lokalise-prod-checklist && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "lokalise-prod-checklist" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/lokalise-prod-checklist into .opencode/skills/lokalise-prod-checklist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lokalise-prod-checklist", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
lokalise-prod-checklistExecute Lokalise production deployment checklist and rollback procedures.
Lokalise Prod Checklist is an agent skill from jeremylongshore/tons-of-skills-marketplace. Execute Lokalise production deployment checklist and rollback procedures. Use when deploying Lokalise integrations to production, preparing for launch, or implementing go-live procedures. Trigger with phrases like "lokalise production", "deploy lokalise", "lokalise go-live", "lokalise launch checklist".
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/implementation-guide.md`). Compatibility notes: Designed for Claude Code
It sits in DevOps & Cloud, covering Deployment and Product launch strategy. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadBash(lokalise2:*)Bash(curl:*)GrepFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curljqgitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.lokalise.comota.lokalise.comAlso links to:
status.lokalise.comdevelopers.lokalise.comcheatsheetseries.owasp.orgFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
LOKALISE_API_TOKENLOKALISE_OTA_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Designed for Claude Code
From compatibility in the SKILL.md frontmatter.
Lokalise Prod Checklist loads about 4.1k tokens when it runs, and up to ~5.7k if it reads all its reference files. Until then it costs about 82 tokens; SKILL.md has 428 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
# Verify .env files are gitignoredecho "WARN: .env not in .gitignore"Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 428 words, ~4,094 tokens.
.claude/skills/lokalise-prod-checklist/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.A structured pre-deployment checklist for Lokalise integrations covering nine verification areas: translation coverage, missing key detection, format validation, API token security, rate limit preparedness, fallback language configuration, download verification, OTA configuration, and contributor access review. Run through each section before any production deployment.
lokalise2 CLI installed and authenticatedcurl and jq available in your environmentVerify that every supported locale meets the coverage threshold before deploying.
#!/bin/bash
# scripts/audit-translation-coverage.sh
set -euo pipefail
: "${LOKALISE_API_TOKEN:?Required}"
: "${LOKALISE_PROJECT_ID:?Required}"
REQUIRED_COVERAGE=100 # Percentage required for production
REQUIRED_LOCALES=("en" "de" "fr" "es" "ja")
echo "=== Translation Coverage Audit ==="
# Get project statistics from Lokalise API
STATS=$(curl -sf "https://api.lokalise.com/api2/projects/${LOKALISE_PROJECT_ID}/statistics" \
-H "X-Api-Token: ${LOKALISE_API_TOKEN}")
TOTAL_KEYS=$(echo "$STATS" | jq '.project_statistics.keys_total')
echo "Total keys in project: $TOTAL_KEYS"
# Get per-language statistics
LANGUAGES=$(curl -sf "https://api.lokalise.com/api2/projects/${LOKALISE_PROJECT_ID}/languages" \
-H "X-Api-Token: ${LOKALISE_API_TOKEN}")
FAILED=0
echo ""
echo "Locale | Progress | Words | Status"
echo "---------|----------|-----------|-------"
for locale in "${REQUIRED_LOCALES[@]}"; do
progress=$(echo "$LANGUAGES" | jq -r ".languages[] | select(.lang_iso == \"${locale}\") | .statistics.progress")
words=$(echo "$LANGUAGES" | jq -r ".languages[] | select(.lang_iso == \"${locale}\") | .statistics.words_to_do")
if [[ -z "$progress" || "$progress" == "null" ]]; then
echo "${locale} | MISSING | - | FAIL"
FAILED=1
continue
fi
if (( $(echo "$progress < $REQUIRED_COVERAGE" | bc -l) )); then
echo "${locale} | ${progress}% | ${words} remaining | FAIL"
FAILED=1
else
echo "${locale} | ${progress}% | 0 | PASS"
fi
done
echo ""
if [[ $FAILED -eq 1 ]]; then
echo "RESULT: FAILED — Resolve incomplete translations before deploying."
exit 1
fi
echo "RESULT: PASSED — All locales meet ${REQUIRED_COVERAGE}% coverage."Detect keys present in source code but absent from Lokalise, and vice versa.
#!/bin/bash
# scripts/detect-missing-keys.sh
set -euo pipefail
: "${LOKALISE_API_TOKEN:?Required}"
: "${LOKALISE_PROJECT_ID:?Required}"
echo "=== Missing Key Detection ==="
# Download current translation keys from Lokalise
TEMP_DIR=$(mktemp -d)
trap 'rm -rf "$TEMP_DIR"' EXIT
lokalise2 file download \
--token "$LOKALISE_API_TOKEN" \
--project-id "$LOKALISE_PROJECT_ID" \
--format json \
--original-filenames=true \
--directory-prefix="" \
--unzip-to "$TEMP_DIR/" 2>/dev/null
# Extract keys from Lokalise download
LOKALISE_KEYS=$(jq -r '[paths(scalars)] | map(join(".")) | .[]' "$TEMP_DIR/en.json" | sort)
# Extract keys referenced in source code (adjust pattern for your framework)
# React/i18next: t('key'), t("key"), <Trans i18nKey="key">
SOURCE_KEYS=$(grep -roh "t(['\"][^'\"]*['\"])" src/ 2>/dev/null \
| sed "s/t(['\"]//;s/['\"])//" \
| sort -u || true)
echo ""
echo "Keys in Lokalise: $(echo "$LOKALISE_KEYS" | wc -l)"
echo "Keys in source code: $(echo "$SOURCE_KEYS" | wc -l)"
# Keys in code but not in Lokalise
MISSING_IN_LOKALISE=$(comm -23 <(echo "$SOURCE_KEYS") <(echo "$LOKALISE_KEYS") || true)
if [[ -n "$MISSING_IN_LOKALISE" ]]; then
echo ""
echo "MISSING IN LOKALISE (used in code but not uploaded):"
echo "$MISSING_IN_LOKALISE" | head -20
COUNT=$(echo "$MISSING_IN_LOKALISE" | wc -l)
[[ $COUNT -gt 20 ]] && echo " ... and $((COUNT - 20)) more"
fi
# Keys in Lokalise but not in code (potential dead keys)
ORPHANED=$(comm -13 <(echo "$SOURCE_KEYS") <(echo "$LOKALISE_KEYS") || true)
if [[ -n "$ORPHANED" ]]; then
echo ""
echo "ORPHANED IN LOKALISE (not referenced in code):"
echo "$ORPHANED" | head -20
COUNT=$(echo "$ORPHANED" | wc -l)
[[ $COUNT -gt 20 ]] && echo " ... and $((COUNT - 20)) more"
fi
if [[ -z "$MISSING_IN_LOKALISE" && -z "$ORPHANED" ]]; then
echo ""
echo "RESULT: PASSED — Keys are in sync."
fiValidate that downloaded translation files are well-formed JSON and contain no placeholder mismatches.
// scripts/validate-translation-format.ts
import fs from 'fs';
import path from 'path';
const LOCALES_DIR = 'src/locales';
const SOURCE_LOCALE = 'en';
const PLACEHOLDER_REGEX = /\{\{?\w+\}?\}|%[sd@]|\$\{[\w.]+\}/g;
interface ValidationResult {
locale: string;
valid: boolean;
errors: string[];
}
function validate(): ValidationResult[] {
const results: ValidationResult[] = [];
const sourceFile = path.join(LOCALES_DIR, `${SOURCE_LOCALE}.json`);
const sourceContent = JSON.parse(fs.readFileSync(sourceFile, 'utf-8'));
const sourcePlaceholders = extractPlaceholders(sourceContent);
for (const file of fs.readdirSync(LOCALES_DIR)) {
if (!file.endsWith('.json')) continue;
const locale = file.replace('.json', '');
const errors: string[] = [];
// Check 1: Valid JSON
let content: Record<string, unknown>;
try {
content = JSON.parse(fs.readFileSync(path.join(LOCALES_DIR, file), 'utf-8'));
} catch (e) {
errors.push(`Invalid JSON: ${(e as Error).message}`);
results.push({ locale, valid: false, errors });
continue;
}
// Check 2: No empty string values (should be null or absent)
const emptyKeys = findEmptyValues(content);
if (emptyKeys.length > 0) {
errors.push(`Empty string values: ${emptyKeys.slice(0, 5).join(', ')}${emptyKeys.length > 5 ? ` (+${emptyKeys.length - 5} more)` : ''}`);
}
// Check 3: Placeholder consistency
const localePlaceholders = extractPlaceholders(content);
for (const [key, expected] of Object.entries(sourcePlaceholders)) {
const actual = localePlaceholders[key];
if (actual && actual.sort().join(',') !== expected.sort().join(',')) {
errors.push(`Placeholder mismatch in "${key}": expected [${expected}], got [${actual}]`);
}
}
results.push({ locale, valid: errors.length === 0, errors });
}
return results;
}
function extractPlaceholders(obj: Record<string, unknown>, prefix = ''): Record<string, string[]> {
const result: Record<string, string[]> = {};
for (const [key, value] of Object.entries(obj)) {
const fullKey = prefix ? `${prefix}.${key}` : key;
if (typeof value === 'string') {
const matches = value.match(PLACEHOLDER_REGEX);
if (matches) result[fullKey] = matches;
} else if (typeof value === 'object' && value !== null) {
Object.assign(result, extractPlaceholders(value as Record<string, unknown>, fullKey));
}
}
return result;
}
function findEmptyValues(obj: Record<string, unknown>, prefix = ''): string[] {
const result: string[] = [];
for (const [key, value] of Object.entries(obj)) {
const fullKey = prefix ? `${prefix}.${key}` : key;
if (value === '') result.push(fullKey);
else if (typeof value === 'object' && value !== null) {
result.push(...findEmptyValues(value as Record<string, unknown>, fullKey));
}
}
return result;
}
// Run validation
const results = validate();
let failed = false;
for (const r of results) {
const status = r.valid ? 'PASS' : 'FAIL';
console.log(`[${status}] ${r.locale}`);
r.errors.forEach(e => console.log(` ${e}`));
if (!r.valid) failed = true;
}
process.exit(failed ? 1 : 0);echo "=== API Token Security Audit ==="
# Verify token is not hardcoded in source
HARDCODED=$(grep -r "X-Api-Token" --include="*.ts" --include="*.js" --include="*.json" \
-l src/ 2>/dev/null | grep -v node_modules || true)
if [[ -n "$HARDCODED" ]]; then
echo "FAIL: API token may be hardcoded in: $HARDCODED"
exit 1
fi
# Verify token is not in version control
GIT_SECRETS=$(git log --all -p --diff-filter=A -- '*.env' '*.env.*' 2>/dev/null \
| grep -i "LOKALISE_API_TOKEN=" | head -5 || true)
if [[ -n "$GIT_SECRETS" ]]; then
echo "FAIL: Token found in git history. Rotate immediately."
exit 1
fi
# Verify .env files are gitignored
if ! grep -q "\.env" .gitignore 2>/dev/null; then
echo "WARN: .env not in .gitignore"
fi
# Verify token permissions are minimal
TOKEN_RESPONSE=$(curl -sf "https://api.lokalise.com/api2/projects/${LOKALISE_PROJECT_ID}" \
-H "X-Api-Token: ${LOKALISE_API_TOKEN}" -o /dev/null -w "%{http_code}")
if [[ "$TOKEN_RESPONSE" == "200" ]]; then
echo "PASS: Token is valid and has project access"
else
echo "FAIL: Token returned HTTP $TOKEN_RESPONSE"
exit 1
fi
echo "PASS: No hardcoded tokens detected"echo "=== Rate Limit Readiness ==="
# Lokalise enforces 6 requests/second per token
# Check if your code handles 429 responses
RATE_LIMIT_HANDLING=$(grep -r "429\|rate.limit\|retry-after\|rateLimitRetry" \
--include="*.ts" --include="*.js" src/ 2>/dev/null | head -5 || true)
if [[ -z "$RATE_LIMIT_HANDLING" ]]; then
echo "WARN: No rate limit handling detected in source code."
echo " Add retry logic with exponential backoff for 429 responses."
echo " Lokalise limit: 6 requests/second per API token."
else
echo "PASS: Rate limit handling detected"
echo "$RATE_LIMIT_HANDLING"
fiVerify the application gracefully falls back when a translation is missing.
// Verify in your i18n configuration:
// i18next example
import i18next from 'i18next';
// Correct fallback configuration
i18next.init({
fallbackLng: 'en', // Always fall back to English
load: 'languageOnly', // 'de' not 'de-DE' unless regional variants exist
returnEmptyString: false, // Treat empty strings as missing
missingKeyHandler: (lngs, ns, key) => {
console.warn(`Missing translation: ${key} for ${lngs.join(', ')}`);
// In production, report to monitoring (Sentry, Datadog, etc.)
},
interpolation: {
escapeValue: false, // React already escapes
},
});Test that the full download-build cycle works end-to-end.
echo "=== Download Verification ==="
TEMP_DIR=$(mktemp -d)
trap 'rm -rf "$TEMP_DIR"' EXIT
# Download with production settings
lokalise2 file download \
--token "$LOKALISE_API_TOKEN" \
--project-id "$LOKALISE_PROJECT_ID" \
--format json \
--original-filenames=true \
--directory-prefix="" \
--export-empty-as=base \
--unzip-to "$TEMP_DIR/" 2>&1
# Verify files exist and are non-empty
FILE_COUNT=$(find "$TEMP_DIR" -name "*.json" | wc -l)
echo "Downloaded $FILE_COUNT locale files"
if [[ $FILE_COUNT -eq 0 ]]; then
echo "FAIL: No files downloaded"
exit 1
fi
# Verify each file is valid JSON
for f in "$TEMP_DIR"/*.json; do
if ! jq empty "$f" 2>/dev/null; then
echo "FAIL: Invalid JSON: $f"
exit 1
fi
keys=$(jq '[paths(scalars)] | length' "$f")
locale=$(basename "$f" .json)
echo " $locale: $keys keys"
done
echo "PASS: All downloaded files are valid"If using Lokalise OTA (over-the-air) translations for mobile or web:
echo "=== OTA Configuration Check ==="
# Verify OTA SDK token (separate from API token)
if [[ -z "${LOKALISE_OTA_TOKEN:-}" ]]; then
echo "INFO: OTA not configured (LOKALISE_OTA_TOKEN not set). Skip if not using OTA."
else
# Test OTA bundle endpoint
OTA_STATUS=$(curl -sf -o /dev/null -w "%{http_code}" \
"https://ota.lokalise.com/v3/public/${LOKALISE_OTA_TOKEN}/")
if [[ "$OTA_STATUS" == "200" ]]; then
echo "PASS: OTA endpoint reachable"
else
echo "FAIL: OTA endpoint returned HTTP $OTA_STATUS"
fi
# Verify OTA freeze window is not active
echo "INFO: Check Lokalise dashboard > OTA > Settings for freeze windows before deploy"
fiecho "=== Contributor Access Review ==="
CONTRIBUTORS=$(curl -sf "https://api.lokalise.com/api2/teams" \
-H "X-Api-Token: ${LOKALISE_API_TOKEN}")
echo "Review the following in the Lokalise dashboard before go-live:"
echo " 1. Remove any test/demo contributors from the production project"
echo " 2. Verify all contributors have the minimum required role"
echo " 3. Ensure no shared/generic accounts exist"
echo " 4. Confirm two-factor authentication is enabled for admins"
echo " 5. Review and remove any unused API tokens"
echo ""
echo "Roles reference:"
echo " - Admin: Full access (limit to 2-3 people)"
echo " - Manager: Can manage contributors and keys"
echo " - Developer: Upload/download, no contributor management"
echo " - Translator: Translate only, no key management"
echo ""
echo "ACTION: Manually verify in Lokalise dashboard > Team > Members"A complete pre-deployment report covering:
| Alert | Condition | Severity | Action |
|---|---|---|---|
| Incomplete translations | Any locale < 100% | P1 — Blocks deploy | Complete translations or add missing keys |
| Hardcoded API token | Token found in source | P1 — Blocks deploy | Remove from code, rotate token immediately |
| Token in git history | Token committed previously | P1 — Blocks deploy | Rotate token, consider git filter-repo |
| Download produces 0 files | API error or empty project | P1 — Blocks deploy | Check project ID, token permissions, Lokalise status |
| Placeholder mismatch | {{name}} missing in translation | P2 — Warning | Fix in Lokalise, re-download |
| No rate limit handling | Missing 429 retry logic | P2 — Warning | Add retry with backoff before high-traffic launch |
| Empty string values | Untranslated keys exported as "" | P3 — Info | Use --export-empty-as=base or skip |
# Fast check for a single locale before hotfix deploy
curl -sf "https://api.lokalise.com/api2/projects/${LOKALISE_PROJECT_ID}/languages" \
-H "X-Api-Token: ${LOKALISE_API_TOKEN}" \
| jq '.languages[] | select(.lang_iso == "de") | {locale: .lang_iso, progress: .statistics.progress, words_remaining: .statistics.words_to_do}'lokalise-incident-runbook for post-launch incident response© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/.curated/lokalise-prod-checklist of jeremylongshore/tons-of-skills-marketplace.
Open the folder on GitHubat commit cfae287
Lokalise Prod Checklist next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Lokalise Prod Checklist this skilljeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~4.1k | Automated safety check: Notes | MIT | |
| Shipping And Launchdzhalaevd/Donatello | 135 | 5 repos | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Launch Runbookrampstackco/claude-skills | 945 | — | ~2k | Automated safety check: Pass | MIT | |
| Kubeshark Installerkubeshark/kubeshark | 12k | — | ~3.6k | Automated safety check: Notes | Apache-2.0 | |
| GreptimeDB Dev Docker ImageGreptimeTeam/greptimedb | 6.7k | — | ~4k | Automated safety check: Notes | Apache-2.0 | |
| Mirrord Operatormetalbear-co/mirrord | 5.4k | 1 repos | ~4.6k | Automated safety check: Pass | MIT |
dzhalaevd/Donatello
Prepares production launches. An agent skill from dzhalaevd/Donatello.
rampstackco/claude-skills
Plan and execute a launch runbook covering pre-launch verification, go-live procedures, DNS cutover, post-launch monitoring, and rollback procedures.
kubeshark/kubeshark
Installs and configures Kubeshark on a Kubernetes cluster, choosing between the quick CLI path and a Helm install with custom values.
GreptimeTeam/greptimedb
Packages a locally built GreptimeDB debug binary into a development-only Docker image for local-cluster testing, with an optional push to a dev registry.
metalbear-co/mirrord
Help users install and configure the mirrord Operator for team/enterprise environments.
kubesphere/kubesphere
Installs, checks and troubleshoots the KubeSphere ServiceMesh extension (Istio, Kiali, Jaeger), including grayscale release, sidecar injection, topology and tracing issues.
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.
jeremylongshore/tons-of-skills-marketplace
Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.
jeremylongshore/tons-of-skills-marketplace
Execute proactive auto-loading: automatically detects and loads agents.md files.
jeremylongshore/tons-of-skills-marketplace
Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.
jeremylongshore/tons-of-skills-marketplace
Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.
Categories
Execute Lokalise production deployment checklist and rollback procedures. Lokalise Prod Checklist is an agent skill from jeremylongshore/tons-of-skills-marketplace. Execute Lokalise production deployment checklist and rollback procedures.
Lokalise Prod Checklist fits situations like: deploying Lokalise integrations to production; preparing for launch; implementing go-live procedures; with phrases like lokalise production.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a claude-code`. Or copy the skill folder (skills/.curated/lokalise-prod-checklist in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/lokalise-prod-checklist in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a codex`. Or copy the skill folder (skills/.curated/lokalise-prod-checklist in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/lokalise-prod-checklist in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill lokalise-prod-checklist -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lokalise-prod-checklist, .gemini/skills/lokalise-prod-checklist, .github/skills/lokalise-prod-checklist and .opencode/skills/lokalise-prod-checklist in your project.
Going by SKILL.md and its folder, Lokalise Prod Checklist needs the command-line tools its instructions call (curl, jq and git) and credentials named LOKALISE_API_TOKEN and LOKALISE_OTA_TOKEN. Our summary lists: A credential in LOKALISE_API_TOKEN. Its frontmatter pre-approves these tools: Read, Bash(lokalise2:*), Bash(curl:*), Grep. Compatibility (from SKILL.md): Designed for Claude Code.
SKILL.md names 5 domains. In commands or code: api.lokalise.com and ota.lokalise.com; the agent is likely to contact these when it follows the instructions. As links in the text: status.lokalise.com, developers.lokalise.com and cheatsheetseries.owasp.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Lokalise Prod Checklist is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Lokalise Prod Checklist: Shipping And Launch (dzhalaevd/Donatello, 135 stars), Launch Runbook (rampstackco/claude-skills, 945 stars), Kubeshark Installer (kubeshark/kubeshark, 12k stars) and GreptimeDB Dev Docker Image (GreptimeTeam/greptimedb, 6.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.
Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.