- Create Economist SubmissionTracking package correctly: * mainArticle = full blog post content * coverLetter = 216-word SIR— letter * Links to blog post via blogPostId - Archive 'Letter to The Economist' from blog posts (it's the cover letter) - Fix date display on article cards (use published_at) - Target publication already displaying via blue badge Database changes: - Make blogPostId optional in SubmissionTracking model - Economist package ID: 68fa85ae49d4900e7f2ecd83 - Le Monde package ID: 68fa2abd2e6acd5691932150 Next: Enhanced modal with tabs, validation, export 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
159 lines
3.5 KiB
JSON
159 lines
3.5 KiB
JSON
{
|
|
"env": {
|
|
"browser": true,
|
|
"es2021": true,
|
|
"node": true
|
|
},
|
|
"extends": "eslint:recommended",
|
|
"parserOptions": {
|
|
"ecmaVersion": "latest",
|
|
"sourceType": "module"
|
|
},
|
|
"rules": {
|
|
// ===================================
|
|
// inst_026: Client-Side Code Quality
|
|
// ===================================
|
|
|
|
// No console.log in production code (console.error allowed)
|
|
"no-console": ["error", {
|
|
"allow": ["error", "warn"]
|
|
}],
|
|
|
|
// Consistent code style
|
|
"quotes": ["error", "single", {
|
|
"avoidEscape": true,
|
|
"allowTemplateLiterals": true
|
|
}],
|
|
"semi": ["error", "always"],
|
|
"indent": ["error", 2, {
|
|
"SwitchCase": 1
|
|
}],
|
|
"comma-dangle": ["error", "never"],
|
|
|
|
// No unused variables (prevents dead code)
|
|
"no-unused-vars": ["error", {
|
|
"argsIgnorePattern": "^_",
|
|
"varsIgnorePattern": "^_"
|
|
}],
|
|
|
|
// Require let/const instead of var
|
|
"no-var": "error",
|
|
"prefer-const": "error",
|
|
|
|
// Arrow functions consistency
|
|
"arrow-spacing": ["error", {
|
|
"before": true,
|
|
"after": true
|
|
}],
|
|
"arrow-parens": ["error", "as-needed"],
|
|
|
|
// Best practices
|
|
"eqeqeq": ["error", "always"],
|
|
"no-eval": "error",
|
|
"no-implied-eval": "error",
|
|
"no-with": "error",
|
|
"no-new-func": "error",
|
|
|
|
// Security (XSS prevention)
|
|
"no-script-url": "error",
|
|
"no-alert": "warn",
|
|
|
|
// Code quality
|
|
"no-debugger": "error",
|
|
"no-empty": "error",
|
|
"no-extra-semi": "error",
|
|
"no-unreachable": "error",
|
|
"no-dupe-keys": "error",
|
|
|
|
// Spacing and formatting
|
|
"space-before-function-paren": ["error", {
|
|
"anonymous": "never",
|
|
"named": "never",
|
|
"asyncArrow": "always"
|
|
}],
|
|
"keyword-spacing": ["error", {
|
|
"before": true,
|
|
"after": true
|
|
}],
|
|
"space-infix-ops": "error",
|
|
"comma-spacing": ["error", {
|
|
"before": false,
|
|
"after": true
|
|
}],
|
|
"brace-style": ["error", "1tbs", {
|
|
"allowSingleLine": true
|
|
}],
|
|
|
|
// Modern JavaScript
|
|
"prefer-arrow-callback": "warn",
|
|
"prefer-template": "warn",
|
|
"object-shorthand": ["warn", "always"],
|
|
|
|
// Disable rules that conflict with Prettier (if used later)
|
|
"max-len": ["warn", {
|
|
"code": 120,
|
|
"ignoreUrls": true,
|
|
"ignoreStrings": true,
|
|
"ignoreTemplateLiterals": true
|
|
}]
|
|
},
|
|
|
|
"overrides": [
|
|
{
|
|
// Frontend JavaScript (public/js/**)
|
|
"files": ["public/js/**/*.js"],
|
|
"env": {
|
|
"browser": true,
|
|
"node": false
|
|
},
|
|
"globals": {
|
|
"fetch": "readonly",
|
|
"Headers": "readonly",
|
|
"Request": "readonly",
|
|
"Response": "readonly",
|
|
"URL": "readonly",
|
|
"URLSearchParams": "readonly"
|
|
},
|
|
"rules": {
|
|
// Stricter rules for client-side code
|
|
"no-console": ["error", {
|
|
"allow": ["error"]
|
|
}]
|
|
}
|
|
},
|
|
{
|
|
// Backend JavaScript (src/**)
|
|
"files": ["src/**/*.js"],
|
|
"env": {
|
|
"browser": false,
|
|
"node": true
|
|
},
|
|
"rules": {
|
|
// Allow console in backend code
|
|
"no-console": "off"
|
|
}
|
|
},
|
|
{
|
|
// Test files
|
|
"files": ["tests/**/*.js", "**/*.test.js", "**/*.spec.js"],
|
|
"env": {
|
|
"jest": true,
|
|
"node": true
|
|
},
|
|
"rules": {
|
|
// Relax rules for tests
|
|
"no-console": "off",
|
|
"no-unused-expressions": "off"
|
|
}
|
|
}
|
|
],
|
|
|
|
"ignorePatterns": [
|
|
"node_modules/",
|
|
"dist/",
|
|
"build/",
|
|
"coverage/",
|
|
".claude/",
|
|
"*.min.js"
|
|
]
|
|
}
|