← back to Abrams

data/mag-20.json

168 lines

{
  "title": "Mag-20 — Steve's top 20 standing-rule patterns",
  "description": "The 20 best-practice patterns every Abrams / DW-family / agentabrams.com property MUST comply with. Auditor runs nightly and renders the live matrix at /mag-20. Sourced from MEMORY.md feedback entries + CLAUDE.md standing rules.",
  "updated_at": "2026-05-14",
  "patterns": [
    {
      "id": 1,
      "rule": "Logo UL + hamburger UR on every page",
      "source": "feedback_logo_ul_hamburger_ur_all_tabs.md",
      "severity": "high",
      "check": "grep .chrome .logo + .nav-burger in every public/*.html",
      "category": "chrome"
    },
    {
      "id": 2,
      "rule": "Hamburger = Gucci '≡ MENU' style (3 bars + uppercase MENU label, top-right fixed)",
      "source": "feedback_hamburger_gucci_menu_style.md",
      "severity": "high",
      "check": "grep '\\bMENU\\b' in nav-burger of every public/*.html",
      "category": "chrome"
    },
    {
      "id": 3,
      "rule": "Hero CTA = single white pill ENTER button centered at bottom of hero",
      "source": "feedback_hero_cta_enter_centered_bottom.md",
      "severity": "high",
      "check": "grep -E 'class=\"cta\"[^>]*>ENTER' in index.html; CSS bottom: anchor present",
      "category": "hero"
    },
    {
      "id": 4,
      "rule": "Rotating hero OR 4-square grid (≥1500px long edge, ≥200KB) — except TSD",
      "source": "feedback_rotating_hero_universal_except_tsd.md",
      "severity": "medium",
      "check": "n/a for Abrams Panel (wordmark hero is acceptable); applies to DW microsites",
      "category": "hero"
    },
    {
      "id": 5,
      "rule": "Sort + density slider on every product grid",
      "source": "CLAUDE.md sort+density block",
      "severity": "high",
      "check": "grep -E '<select id=\"sort\"|range.*density' in every grid-bearing public/*.html",
      "category": "grid"
    },
    {
      "id": 6,
      "rule": "corner-nav.js wired on every page",
      "source": "feedback_corner_nav_universal.md",
      "severity": "high",
      "check": "grep 'corner-nav.js' in every public/*.html",
      "category": "chrome"
    },
    {
      "id": 7,
      "rule": "ns-modal CSS + nsContactOpen() function when contact modal is present",
      "source": "feedback_ns_modal_css_missing_fanout.md",
      "severity": "low",
      "check": "if nsContactOpen() used, .ns-modal CSS must exist",
      "category": "modal"
    },
    {
      "id": 8,
      "rule": "Customer-facing chat = lower-LEFT, woman avatar, never reveal vendor names",
      "source": "feedback_bigred_customer_chat_universal.md",
      "severity": "medium",
      "check": "chat widget position bottom-left; SVG silhouette fallback; no AI vendor leaks",
      "category": "chat"
    },
    {
      "id": 9,
      "rule": "Chip click → full-details modal (vendor scrubbed, says 'Designer Wallcoverings · SKU')",
      "source": "feedback_dw_chip_click_full_details.md",
      "severity": "medium",
      "check": "n/a for Abrams Panel (no chip tiles); applies to DW catalog grids",
      "category": "grid"
    },
    {
      "id": 10,
      "rule": "Viewport meta tag required for @media queries to fire on mobile",
      "source": "feedback_viewport_meta_required_for_media_queries.md",
      "severity": "high",
      "check": "grep '<meta name=\"viewport\"' in every public/*.html",
      "category": "responsive"
    },
    {
      "id": 11,
      "rule": "All projects under ~/Projects/ must be git repos (gitify rule)",
      "source": "CLAUDE.md gitify block",
      "severity": "high",
      "check": "test -d <project>/.git",
      "category": "git"
    },
    {
      "id": 12,
      "rule": "Commit after every success (one logical change = one commit)",
      "source": "CLAUDE.md gitify block",
      "severity": "medium",
      "check": "git log shows commits per shipped feature (not daily-mega-commit)",
      "category": "git"
    },
    {
      "id": 13,
      "rule": ".gitignore must exclude node_modules/, .env*, tmp/, *.log, .DS_Store, dist/, build/, .next/",
      "source": "CLAUDE.md gitify block",
      "severity": "high",
      "check": "grep -c -E '(node_modules|\\.env|tmp/|\\*\\.log|\\.DS_Store|dist/|build/|\\.next/)' .gitignore == 7+",
      "category": "git"
    },
    {
      "id": 14,
      "rule": "Never expose AI vendor names (Replicate/SDXL/Gemini/Ollama) to users",
      "source": "feedback_never_expose_ai_software.md",
      "severity": "critical",
      "check": "grep -iE '(replicate|sdxl|gemini|claude-3|gpt-4|ollama|moonshot|kimi)' public/ should return 0 user-visible hits",
      "category": "compliance"
    },
    {
      "id": 15,
      "rule": "Email mailers must include physical mailing address + unsubscribe (CAN-SPAM)",
      "source": "comms-compliance",
      "severity": "critical",
      "check": "every email body contains physical address + STOP/unsubscribe before going to any external recipient",
      "category": "compliance"
    },
    {
      "id": 16,
      "rule": "Subjects must NOT contain raw em-dash without RFC 2047 encoding (mojibake guard)",
      "source": "feedback_email_no_mojibake.md",
      "severity": "low",
      "check": "grep '—' in email-hourly.sh subject line should be empty",
      "category": "compliance"
    },
    {
      "id": 17,
      "rule": "Bind to 127.0.0.1 by default (internal panels never 0.0.0.0 unless explicit)",
      "source": "security-auditor best-practices",
      "severity": "high",
      "check": "server.js app.listen uses BIND env-var defaulting to 127.0.0.1",
      "category": "security"
    },
    {
      "id": 18,
      "rule": "Rate-limit any write endpoint (POST /api/*) — express-rate-limit on lead, wall, etc.",
      "source": "security-auditor best-practices",
      "severity": "high",
      "check": "grep 'rateLimit' in server.js; each POST route has a limiter",
      "category": "security"
    },
    {
      "id": 19,
      "rule": "After-hours email gate (Mon-Fri 9-5 PT only; no weekends)",
      "source": "feedback_marketplace_local_only.md (after-hours quiet rule)",
      "severity": "medium",
      "check": "email-hourly.sh checks HOUR/DOW before sending; launchd plist scoped to Weekday 1-5 Hour 9-17",
      "category": "compliance"
    },
    {
      "id": 20,
      "rule": "Every shipped artifact gets a Goal·How·Why explainer video via what-landed-video",
      "source": "feedback_video_per_new_artifact.md + feedback_what_landed_video_every_tick.md",
      "severity": "medium",
      "check": "after each meaningful commit, ~/Videos/what-landed/<ISO>.mp4 generated",
      "category": "publishing"
    }
  ]
}