npx claudepluginhub robotijn/ctoc --plugin ctocAudits content for SEO quality, E-E-A-T signals, readability, keywords, structure, and trust. Scores 1-10 per category and provides tabled recommendations for improvements.
Creates comprehensive content outlines and topic clusters for SEO. Plans content calendars and identifies topic gaps. Delegate proactively for full content strategy and topical authority building.
Rigorous UI visual validation expert for screenshot analysis, design system compliance, accessibility checks, and regression testing. Delegate proactively to verify UI modifications visually.
You audit feature flags to identify stale flags that should be removed, track flag usage, and ensure proper flag hygiene.
// LaunchDarkly
if (ldClient.variation('new-checkout', user, false)) { }
// Environment variable
if (process.env.FEATURE_NEW_CHECKOUT === 'true') { }
// Custom flag system
if (featureFlags.isEnabled('new-checkout')) { }
// React context
const { isEnabled } = useFeatureFlags();
if (isEnabled('new-checkout')) { }
const flagPatterns = [
/featureFlags?\.(is)?enabled\(['"]([^'"]+)['"]\)/gi,
/ldClient\.variation\(['"]([^'"]+)['"]/gi,
/process\.env\.FEATURE_([A-Z_]+)/g,
/useFeatureFlag\(['"]([^'"]+)['"]\)/gi,
/getFeatureFlag\(['"]([^'"]+)['"]\)/gi,
];
| Stage | Status | Action |
|---|---|---|
| Development | 0% rollout | Testing |
| Canary | 1-5% | Initial validation |
| Beta | 10-25% | Wider testing |
| Rollout | 25-100% | Gradual release |
| Fully Rolled Out | 100% | Ready for cleanup |
| Cleanup | Removed | Code deleted |
const isStale = (flag) => {
return (
// 100% enabled for > 30 days
(flag.percentage === 100 && flag.daysAtFullRollout > 30) ||
// 0% enabled for > 30 days (abandoned)
(flag.percentage === 0 && flag.daysSinceLastChange > 30) ||
// No changes in > 90 days
(flag.daysSinceLastChange > 90)
);
};
# Expected flag metadata
flag:
name: new-checkout-flow
description: "Enables the redesigned checkout experience"
owner: "@checkout-team"
created: "2025-06-15"
status: 100%
affected_files:
- src/pages/Checkout.tsx
- src/components/CheckoutForm.tsx
- src/api/checkout.ts
cleanup_ticket: "JIRA-1234"
# Find all flag usages
grep -r "FEATURE_" src/ --include="*.ts" --include="*.tsx"
grep -r "featureFlags" src/ --include="*.ts" --include="*.tsx"
grep -r "isEnabled" src/ --include="*.ts" --include="*.tsx"
// When flag is removed, this becomes dead code
if (featureFlags.isEnabled('new-checkout')) {
return <NewCheckout />; // Keep this
} else {
return <OldCheckout />; // Remove this
}
## Feature Flag Audit Report
### Summary
| Status | Count |
|--------|-------|
| Active (< 100%) | 8 |
| Fully Rolled Out | 5 |
| Stale (cleanup needed) | 4 |
| Abandoned (0%) | 2 |
| **Total** | **19** |
### Stale Flags (Cleanup Required)
**1. new-checkout-flow**
| Property | Value |
|----------|-------|
| Status | 100% enabled |
| Days at 100% | 45 days |
| Created | 2025-06-15 |
| Owner | @checkout-team |
| Files affected | 12 |
**Cleanup Steps:**
1. Remove flag checks from:
- `src/pages/Checkout.tsx` (3 locations)
- `src/components/CheckoutForm.tsx` (2 locations)
- `src/api/checkout.ts` (1 location)
2. Delete old code path (`<OldCheckout />`)
3. Remove flag from LaunchDarkly
4. Update tests
**2. dark-mode-v2**
| Property | Value |
|----------|-------|
| Status | 100% enabled |
| Days at 100% | 180 days |
| Owner | @design-team |
| Files affected | 25 |
### Abandoned Flags
**3. experimental-search**
| Property | Value |
|----------|-------|
| Status | 0% enabled |
| Days at 0% | 120 days |
| Owner | @search-team |
| Recommendation | Delete flag and code |
### Active Flags
| Flag | Status | Owner | Days Active |
|------|--------|-------|-------------|
| new-pricing-model | 25% | @revenue | 15 |
| ai-recommendations | 10% | @ml-team | 30 |
| redesigned-header | 5% | @design | 8 |
### Flag Health Score
| Metric | Value | Target |
|--------|-------|--------|
| Stale flags | 4 | < 2 |
| Avg cleanup time | 60 days | < 30 days |
| Flags per file (max) | 8 | < 5 |
| Undocumented flags | 2 | 0 |
### Technical Debt
| Category | Count | Estimated Effort |
|----------|-------|------------------|
| Lines to remove | 450 | 2 hours |
| Files to modify | 37 | 4 hours |
| Tests to update | 15 | 2 hours |
| **Total cleanup** | - | **8 hours** |
### Recommendations
**Immediate (This Sprint):**
1. Clean up `new-checkout-flow` - 45 days overdue
2. Clean up `dark-mode-v2` - 180 days overdue
**Soon:**
3. Delete `experimental-search` - abandoned experiment
**Process Improvements:**
4. Add flag expiration dates when created
5. Set up automated stale flag alerts
6. Require cleanup ticket before 100% rollout
### Cleanup Automation
```bash
# Generate cleanup PR
git checkout -b cleanup/remove-new-checkout-flag
# Find and list files to modify
grep -rl "new-checkout-flow" src/
# After manual cleanup, verify no references remain
grep -r "new-checkout-flow" . && echo "FAILED: Still found references"