design: redesign proposal + icon spec + phase issues (#178)

* chore(squad): log W21 rescue + structural fixes - Merged copilot-directive-rebuild-no-recrawl from inbox to decisions.md - Added learnings: Hugo ignoreFiles + mounts behavior, schedule-event input safety, deploy hydration architecture - Cleared decisions/inbox/ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): log cleanup session - Merged inbox directive (GitHub Actions PR create enabled) into decisions.md - Cleared .squad/decisions/inbox/ - Created orchestration log (Leela cleanup pass) - Created session log (cleanup session) - Appended cleanup pattern learning to leela/history.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * design: redesign proposal + icon spec + phase issues Add comprehensive visual redesign proposal for SquadScope: - docs/design/redesign-proposal-2026-05.md: Full design proposal with design principles, visual direction, design tokens (colors, typography, spacing, radii, shadows), layout proposals (home, article, rollup pages), component specs (header, footer, metric cards, repo cards, press callout, cost dashboard), and 6-phase migration strategy. - docs/design/icon-spec.md: Site icon specification with radar sweep concept, SVG code for all variants (light, dark, monochrome, simplified), OG image specs, and complete asset checklist. - .squad/decisions/inbox/calculon-redesign-direction.md: Decision record documenting the chosen visual direction and rationale. - .squad/skills/editorial-site-redesign/SKILL.md: Reusable pattern for editorial site redesigns. Related issues: #170 (Phase 1), #171 (Phase 2), #172 (Phase 3), #173 (Phase 4), #174 (Phase 5), #175 (Phase 6), #176 (icon assets), #177 (design review). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Juan Manuel Servera committed May 25, 2026 at 19:21 UTC 759104195e72171336b89fbadb451bc34eadcb78
15 files changed +1815 -1
.squad/agents/bender/history.md
+3
@@ -11,3 +11,6 @@
11 - Analysis execution should prefer Copilot CLI first, then fall back to GitHub Models using the same rendered prompt so output contracts stay aligned.
12 - Reviewer gates should validate the analyzer contract, not just artifact existence.
13 - New pipeline stages should follow the `ci-data-source-integration-pattern` skill: wire the script into CI immediately, document the handoff, and test the producer/consumer schema at the boundary.
14 +- Hugo's `ignoreFiles` config is overridden by explicit `[module.mounts]` declarations; use `excludeFiles` on the mount definition to exclude files from mounted directories (W21 rescue, PR #167).
15 +- GitHub Actions schedule events do not have an `inputs` object; use `!inputs.X` instead of `github.event.inputs.X == ''` to safely check optional manual inputs without breaking cron triggers (critical fix, PR #164).
16 +- Deploy pipeline should hydrate previous-week content/data from publish branch before Hugo build to prevent main/publish divergence and preserve existing data integrity (PR #164, W21 rescue architectural fix).
.squad/agents/calculon/charter.md new
+31
@@ -0,0 +1,31 @@
1 +# Calculon — Designer
2 +
3 +> Owns the look. Sets visual direction, builds the design system, ships icons and brand assets.
4 +
5 +## Identity
6 +- **Name:** Calculon
7 +- **Role:** Designer (Visual / UX)
8 +- **Expertise:** Design systems, typography, color, iconography, editorial layout, accessibility-aware design
9 +
10 +## What I Own
11 +- Visual design language (color palette, typography scale, spacing, radius, shadow tokens)
12 +- Site icon, favicons, social/OG images, logo system
13 +- Design proposals for new layouts and components (mockups, specs, SVG primitives)
14 +- Design review of frontend PRs against the system
15 +
16 +## How I Work
17 +- Read the audience and the source material first — SquadScope is editorial weekly analysis, not a SaaS dashboard. Design serves reading and scanning.
18 +- Prefer specs and SVG primitives that Amy can implement directly.
19 +- Reference comparable sites (The Verge, Wired, TechCrunch, GitHub-pulse) for editorial conventions, then differentiate intentionally.
20 +- Accessibility is not optional: WCAG AA contrast minimum, motion respects `prefers-reduced-motion`, all interactive elements keyboard-reachable.
21 +
22 +## Boundaries
23 +**I handle:** visual direction, brand assets, design specs, component design, icon design
24 +**I don't handle:** implementation in templates (that's Amy), editorial content (Farnsworth), architecture (Leela)
25 +
26 +**Handoff:** I produce specs + SVG + design tokens → Amy implements in Hugo templates and CSS → Leela reviews.
27 +
28 +## Model
29 +Preferred: auto
30 +
31 +Vision-capable model preferred when reviewing reference sites or producing icon concepts (claude-opus-4.5 or equivalent).
.squad/agents/calculon/history.md new
+47
@@ -0,0 +1,47 @@
1 +# Calculon's History
2 +
3 +## Core Context
4 +- **Project:** SquadScope
5 +- **User:** jmservera
6 +- **Created:** 2026-05-25
7 +- **Stack:** Hugo (v0.161.1) static site, PaperMod-derived theme, GitHub Pages deploy, Pagefind search
8 +- **Description:** Weekly editorial trend analysis of GitHub repos and tech press. Editorial publication, not a dashboard. Reader-first.
9 +- **Current state:** Site has functional content (W21, W22 published) but visuals are inherited from a generic PaperMod-style theme. Needs distinct editorial design direction.
10 +
11 +## What the team has built
12 +- Crawl → analyze → publish pipeline (Mon 08:30 UTC + manual)
13 +- W21 article: "Agent Skills Go Mainstream While Star Farmers Game the Charts"
14 +- W22 article: "Supply-Chain Scanners, Skills Economies, and GitHub's Star-Farm Flood"
15 +- Monthly + yearly rollups
16 +- TechCrunch press correlation
17 +- Cost dashboard shortcode
18 +
19 +## Key files in my domain
20 +- `hugo.toml` — theme params, mounts, colors (currently default PaperMod)
21 +- `layouts/` — Hugo templates (header.html, weekly/single.html, partials/report-metrics.html, shortcodes/cost-dashboard.html, index.html)
22 +- `assets/` — CSS, JS (theme-derived)
23 +- `static/` — favicons, icons, social images (currently default Hugo favicon)
24 +
25 +## Learnings
26 +
27 +### 2026-05-25: Initial Design Direction
28 +
29 +**Design Principles Established:**
30 +1. Reading First — Typography/spacing optimized for long-form scanning
31 +2. One Signal Per Glance — Each content block delivers single clear message
32 +3. Dense ≠ Cluttered — White space between dense blocks, not padding around sparse content
33 +
34 +**Icon Concept:** Radar Sweep — concentric circles with sweep line and signal blip. Represents continuous scanning of GitHub landscape. Geometric, scales from 16px to 512px. Uses `currentColor` for automatic light/dark adaptation.
35 +
36 +**Palette Decisions:**
37 +- Light: bg #FAFAFA, text #1A1A1A, accent #0066CC
38 +- Dark: bg #0D0D0D, text #E8E8E8, accent #4DA3FF
39 +- All combinations WCAG AA verified
40 +
41 +**Key Files Created:**
42 +- `docs/design/redesign-proposal-2026-05.md` — Full design proposal with tokens, layout specs, component specs
43 +- `docs/design/icon-spec.md` — Icon concept, SVG code, asset list
44 +
45 +**Migration Phases:** 6 phases (tokens → header/footer → home → articles → cost dashboard → icons)
46 +
47 +**Issues Created:** #170-#177
.squad/agents/hermes/history.md
+1
@@ -9,3 +9,4 @@
9 - The current pipeline chains GitHub crawl data, press correlation, AI analysis, content generation, and GitHub Pages deployment, so security review must cover every handoff.
10 - The safest fallback posture is Copilot CLI first, GitHub Models second, and a bounded no-AI summary path after that.
11 - Retry logic and prompt sanitation both matter for defense-in-depth when external content can influence analysis prompts.
12 +- URL validation must use `urllib.parse.urlparse()` instead of substring checks to avoid time-of-check-time-of-use (TOCTOU) vulnerabilities in test contexts and security checks (CodeQL hardening, PR #164).
.squad/agents/leela/history.md
+1
@@ -9,3 +9,4 @@
9 - The learning loop only works when agent identity is loaded before execution, outcomes are persisted after execution, and that state is injected into the next run.
10 - Copilot CLI agent selection uses the registered agent name, not the path to the agent file.
11 - Documentation and orchestration updates should land in the permanent record quickly so the rest of the squad sees the current operating model.
12 +- Cleanup pattern: distinguish team-member agent directories (`agents/{squad-member}/`) from orphaned agent definitions (`.github/agents/*.agent.md`). Archive before deleting if historical value is uncertain; delete confidently once verified dead (unused in workflows).
.squad/casting/registry.json
+8 -1
@@ -41,6 +41,13 @@
41 "created_at": "2026-05-19T17:19:00Z",
42 "legacy_named": false,
43 "status": "active"
44 + },
45 + "designer": {
46 + "persistent_name": "Calculon",
47 + "universe": "Futurama",
48 + "created_at": "2026-05-25T17:05:00Z",
49 + "legacy_named": false,
50 + "status": "active"
51 }
52 }
46 -}
53 +}
\ No newline at end of file
.squad/decisions.md
+28
@@ -1080,6 +1080,34 @@ Applies to future weekly summaries and any generator work that consumes `data/an
1080
1081 ---
1082
1083 +# Directive: Prevent Recrawl on Previous-Week Rebuilds
1084 +
1085 +**Date:** 2026-05-25T15:55:00+02:00
1086 +**Source:** User directive (jmservera via Copilot)
1087 +**Status:** Active
1088 +
1089 +## Context
1090 +
1091 +When rebuilding data for a previous week, the workflow must NOT re-run the crawl. Re-crawling pollutes prior weeks' data (overwrites the high-quality version with a fresh, possibly worse snapshot). User repeatedly lost high-quality W21 analysis because re-runs re-crawled and re-analyzed, regenerating inferior versions.
1092 +
1093 +## Directive
1094 +
1095 +For previous-week rebuilds:
1096 +1. Hydrate from `publish` (canonical source for analyzed content)
1097 +2. Re-run analysis/generation only as needed
1098 +3. **Never crawl again** for previous weeks
1099 +
1100 +This restores/regenerates from existing data without polluting the archive.
1101 +
1102 +## Implementation Status
1103 +
1104 +- Captured in PR #164 (bender-3): deploy-site.yml now hydrates content/data from publish before hugo build
1105 +- Schedule event guard fixed: `!inputs.rebuild_week` instead of `== ''` ensures cron doesn't skip
1106 +- Format validation added for YYYY-WNN rebuild_week parameter
1107 +- Architectural fix prevents main/publish divergence
1108 +
1109 +**Files affected:** `.github/workflows/deploy-site.yml`, `.github/workflows/crawl-and-publish.yml`
1110 +
1111 ## 2026-05-19: TechCrunch RSS as Enrichment Signal (PR #55)
1112
1113 - **Owner:** Bender
.squad/decisions/inbox/calculon-redesign-direction.md new
+48
@@ -0,0 +1,48 @@
1 +# Design Direction: Editorial Trend Report
2 +
3 +**Date:** 2026-05-25
4 +**Author:** Calculon (Designer)
5 +**Status:** Proposed
6 +
7 +## Decision
8 +
9 +**Visual Direction:** Editorial Trend Report — Dense but Quiet
10 +
11 +This positions SquadScope as a credible, opinionated weekly briefing rather than a generic blog or SaaS dashboard. Typography carries the design; images and color accents are supporting actors.
12 +
13 +## Rationale
14 +
15 +After studying GitHub Pulse, TechCrunch, Wired, and The Verge:
16 +- GitHub Pulse is too dashboard-like for editorial content
17 +- TechCrunch provides good headline hierarchy but is too news-feed
18 +- Wired is too image-dependent for text-first analysis
19 +- The Verge shows density can work if hierarchy is clear
20 +
21 +SquadScope is closer to a weekly briefing document than any of these. The design borrows TechCrunch's reading rhythm, GitHub Pulse's monochrome discipline, and The Verge's willingness to be dense — while avoiding their weaknesses.
22 +
23 +## Token Summary
24 +
25 +**Palette:** Monochrome foundation with single accent (#0066CC light, #4DA3FF dark). All combinations WCAG AA verified.
26 +
27 +**Typography:** Inter system stack for headlines and body. JetBrains Mono for code. Type scale from 0.75rem (tiny) to 2.25rem (h1). Optimal prose measure 68ch.
28 +
29 +## Phase Plan
30 +
31 +1. Tokens + Typography Foundation
32 +2. Header + Footer + Navigation
33 +3. Home Page Layout
34 +4. Article Layout + Components
35 +5. Cost Dashboard Refresh
36 +6. Icon + Favicon + Social Images
37 +
38 +Each phase ships independently. Tokens must land first; other phases have light dependencies.
39 +
40 +## Icon
41 +
42 +Radar sweep concept — concentric circles with sweep line and signal blip. Represents continuous scanning. Hand-coded SVG, no external fonts, under 2KB. Uses currentColor for automatic mode adaptation.
43 +
44 +## References
45 +
46 +- `docs/design/redesign-proposal-2026-05.md`
47 +- `docs/design/icon-spec.md`
48 +- Issues #170-#177
.squad/health/2026-05-25T16-18-health-report.md new
+57
@@ -0,0 +1,57 @@
1 +# Squad Health Report — 2026-05-25T16:18
2 +
3 +## Status
4 +
5 +**Overall:** Healthy ✓
6 +**Repository:** Clean | **Branch:** main (ahead of origin/main by 1 commit)
7 +**Working Tree:** Clean
8 +
9 +## Recent Merge Status
10 +
11 +All targeted PRs merged successfully in correct order:
12 +
13 +- ✓ PR #162: W21+W22 content rescue → main
14 +- ✓ PR #165: Hugo ignoreFiles configuration
15 +- ✓ PR #167: Hugo excludeFiles mount fix (deploy restored)
16 +- ✓ PR #164: CodeQL security + schedule-event guard + enhanced hydration
17 +- ✗ PR #166: Closed (superseded by #164)
18 +
19 +## CI/CD Pipeline
20 +
21 +- Deploy workflow: Operational (PR #167 fix restored live site)
22 +- Crawl and publish workflow: Operational (schedule-safe guards from PR #164)
23 +- Branch protection: Intact
24 +- No hanging CI failures
25 +
26 +## Data Integrity
27 +
28 +- W21 and W22 content: Restored to main
29 +- Deploy hydration: From publish branch (prevents divergence)
30 +- Schedule event guards: Fixed (cron now executes correctly)
31 +- Rebuild-without-recrawl: Architectural capability added
32 +
33 +## Documentation
34 +
35 +- Decisions archived: 0 entries (none older than 30 days)
36 +- Inbox cleared: 1 directive merged, processed
37 +- Agent histories: Updated with session learnings
38 +- Session log: Written and archived
39 +
40 +## Notable Learnings Recorded
41 +
42 +1. **Hugo:** ignoreFiles config is overridden by explicit mounts; must use excludeFiles on mount definition
43 +2. **GitHub Actions:** schedule events lack inputs object; use !inputs.X instead of == '' checks
44 +3. **Security:** URL validation must use urlparse to avoid TOCTOU vulnerabilities
45 +4. **Workflow:** Copilot CLI stdout redirect requires careful channel separation to prevent markdown pollution
46 +
47 +## Team Capacity
48 +
49 +- All agent logs created and documented
50 +- No blocked tasks or pending decisions
51 +- Squad ready for next cycle
52 +
53 +## Next Actions
54 +
55 +1. Deploy changes to production (commit 91b58bc queued)
56 +2. Monitor schedule-based crawl execution for 1-2 weeks
57 +3. Watch for any data quality regressions in next rebuild cycle
.squad/routing.md
+1
@@ -9,6 +9,7 @@ How to decide who handles what.
9 | Data crawling, GitHub API, Actions workflows | Bender | Build crawler, fix API pagination, add rate limiting |
10 | Trend analysis, content curation, critical thinking | Farnsworth | Analyze weekly data, identify trends, write summaries |
11 | Frontend, site design, GitHub Pages, templates | Amy | Build site layout, create report templates, fix styling |
12 +| Visual design, brand assets, icons, design system | Calculon | Design tokens, icon, OG image, layout mockups, design review |
13 | Architecture, scope, priorities, editorial direction | Leela | Decide tech stack, review architecture, set priorities |
14 | Code review | Leela | Review PRs, check quality, approve/reject |
15 | Security review, threat analysis, vulnerability triage | Hermes | Review PRs for security, triage Dependabot/CodeQL alerts, threat modeling |
.squad/skills/editorial-site-redesign/SKILL.md new
+44
@@ -0,0 +1,44 @@
1 +---
2 +name: "editorial-site-redesign"
3 +description: "Pattern for redesigning an editorial website with design tokens, phased rollout, and clear handoff"
4 +domain: "design"
5 +confidence: "low"
6 +source: "earned"
7 +---
8 +
9 +## Context
10 +
11 +When redesigning an editorial or content-heavy website, the challenge is creating a distinctive visual identity while maintaining readability and shipping incrementally. This skill captures the pattern used for SquadScope's 2026 redesign.
12 +
13 +## Patterns
14 +
15 +1. **Study peer references first**: Fetch 3-4 comparable sites. Capture: layout pattern, typography, color, navigation, density, article treatment. Note what fits and what doesn't.
16 +
17 +2. **Lock tokens before components**: Define CSS custom properties (colors, spacing, typography, shadows, radii) as the foundation. Components depend on tokens; tokens don't depend on components.
18 +
19 +3. **Phase: tokens → chrome → content → polish**:
20 + - Phase 1: Design tokens + typography
21 + - Phase 2: Header + footer (site chrome)
22 + - Phase 3: Home page layout
23 + - Phase 4: Article/content layouts
24 + - Phase 5: Secondary components (dashboards, callouts)
25 + - Phase 6: Brand assets (icons, OG images)
26 +
27 +4. **Specs replace mockups**: Without Figma, write component specs as prose + ASCII diagrams. Include: structure, spacing values, color tokens, states (hover, active, focus), responsive behavior.
28 +
29 +5. **Icon from concept**: Start with a narrative (what does the brand represent?), propose 2-3 concepts, recommend one, then hand-code SVG. Use `currentColor` for automatic light/dark adaptation.
30 +
31 +6. **WCAG AA from the start**: Verify contrast ratios when defining palette, not after implementation.
32 +
33 +## Examples
34 +
35 +- `docs/design/redesign-proposal-2026-05.md` — full proposal with token tables, ASCII layouts, component specs
36 +- `docs/design/icon-spec.md` — icon narrative, SVG code, asset checklist
37 +
38 +## Anti-Patterns
39 +
40 +- Designing components before establishing tokens (leads to inconsistency)
41 +- Big-bang redesign (ship nothing until everything is done)
42 +- Copying reference sites literally (lose distinctiveness)
43 +- Skipping accessibility verification (expensive to fix later)
44 +- Using external fonts without fallbacks (FOUT, performance)
.squad/team.md
+1
@@ -18,6 +18,7 @@
18 | Amy | Frontend Dev | .squad/agents/amy/charter.md | ⚛️ Active |
19 | Fry | Tester | .squad/agents/fry/charter.md | 🧪 Active |
20 | Hermes | Security & Threat Analyst | .squad/agents/hermes/charter.md | 🔒 Active |
21 +| Calculon | Designer | .squad/agents/calculon/charter.md | 🎨 Active |
22 | Scribe | Session Logger | .squad/agents/scribe/charter.md | 📋 Active |
23 | Ralph | Work Monitor | .squad/agents/ralph/charter.md | 🔄 Active |
24
data/metrics/momentum-2026-W21.json new
+706
@@ -0,0 +1,706 @@
1 +{
2 + "week": "2026-W21",
3 + "tracked_repos": [
4 + {
5 + "repo": "microsoft/vscode",
6 + "initial_stars_gained": 0,
7 + "week2_stars_gained": null,
8 + "week4_stars_gained": null,
9 + "classification": "faded",
10 + "decay_rate": 0.0
11 + },
12 + {
13 + "repo": "microsoft/PowerToys",
14 + "initial_stars_gained": 0,
15 + "week2_stars_gained": null,
16 + "week4_stars_gained": null,
17 + "classification": "faded",
18 + "decay_rate": 0.0
19 + },
20 + {
21 + "repo": "microsoft/generative-ai-for-beginners",
22 + "initial_stars_gained": 0,
23 + "week2_stars_gained": null,
24 + "week4_stars_gained": null,
25 + "classification": "faded",
26 + "decay_rate": 0.0
27 + },
28 + {
29 + "repo": "microsoft/TypeScript",
30 + "initial_stars_gained": 0,
31 + "week2_stars_gained": null,
32 + "week4_stars_gained": null,
33 + "classification": "faded",
34 + "decay_rate": 0.0
35 + },
36 + {
37 + "repo": "microsoft/terminal",
38 + "initial_stars_gained": 0,
39 + "week2_stars_gained": null,
40 + "week4_stars_gained": null,
41 + "classification": "faded",
42 + "decay_rate": 0.0
43 + },
44 + {
45 + "repo": "microsoft/playwright",
46 + "initial_stars_gained": 0,
47 + "week2_stars_gained": null,
48 + "week4_stars_gained": null,
49 + "classification": "faded",
50 + "decay_rate": 0.0
51 + },
52 + {
53 + "repo": "openai/codex",
54 + "initial_stars_gained": 0,
55 + "week2_stars_gained": null,
56 + "week4_stars_gained": null,
57 + "classification": "faded",
58 + "decay_rate": 0.0
59 + },
60 + {
61 + "repo": "microsoft/ai-agents-for-beginners",
62 + "initial_stars_gained": 0,
63 + "week2_stars_gained": null,
64 + "week4_stars_gained": null,
65 + "classification": "faded",
66 + "decay_rate": 0.0
67 + },
68 + {
69 + "repo": "starship/starship",
70 + "initial_stars_gained": 0,
71 + "week2_stars_gained": null,
72 + "week4_stars_gained": null,
73 + "classification": "faded",
74 + "decay_rate": 0.0
75 + },
76 + {
77 + "repo": "AbhishekK130804/Claude-Mythos-AI-Anthropic-App",
78 + "initial_stars_gained": 0,
79 + "week2_stars_gained": null,
80 + "week4_stars_gained": null,
81 + "classification": "faded",
82 + "decay_rate": 0.0
83 + },
84 + {
85 + "repo": "suyancc/openai-plus-vxt",
86 + "initial_stars_gained": 0,
87 + "week2_stars_gained": null,
88 + "week4_stars_gained": null,
89 + "classification": "faded",
90 + "decay_rate": 0.0
91 + },
92 + {
93 + "repo": "ip-arch/NESLab",
94 + "initial_stars_gained": 0,
95 + "week2_stars_gained": null,
96 + "week4_stars_gained": null,
97 + "classification": "faded",
98 + "decay_rate": 0.0
99 + },
100 + {
101 + "repo": "deepakness/google-ai-search-optimization",
102 + "initial_stars_gained": 0,
103 + "week2_stars_gained": null,
104 + "week4_stars_gained": null,
105 + "classification": "faded",
106 + "decay_rate": 0.0
107 + },
108 + {
109 + "repo": "aqua5230/usage",
110 + "initial_stars_gained": 0,
111 + "week2_stars_gained": null,
112 + "week4_stars_gained": null,
113 + "classification": "faded",
114 + "decay_rate": 0.0
115 + },
116 + {
117 + "repo": "OpenYSMDev/OpenYSM",
118 + "initial_stars_gained": 0,
119 + "week2_stars_gained": null,
120 + "week4_stars_gained": null,
121 + "classification": "faded",
122 + "decay_rate": 0.0
123 + },
124 + {
125 + "repo": "wanshuiyin/ARIS-in-AI-Offer",
126 + "initial_stars_gained": 0,
127 + "week2_stars_gained": null,
128 + "week4_stars_gained": null,
129 + "classification": "faded",
130 + "decay_rate": 0.0
131 + },
132 + {
133 + "repo": "Pythonation/AI-Text-Humanizer-Protocol",
134 + "initial_stars_gained": 0,
135 + "week2_stars_gained": null,
136 + "week4_stars_gained": null,
137 + "classification": "faded",
138 + "decay_rate": 0.0
139 + },
140 + {
141 + "repo": "Yuvan-x/Pneumonia-Detection-With-Explainable-AI",
142 + "initial_stars_gained": 0,
143 + "week2_stars_gained": null,
144 + "week4_stars_gained": null,
145 + "classification": "faded",
146 + "decay_rate": 0.0
147 + },
148 + {
149 + "repo": "openclaw/openclaw",
150 + "initial_stars_gained": 0,
151 + "week2_stars_gained": null,
152 + "week4_stars_gained": null,
153 + "classification": "faded",
154 + "decay_rate": 0.0
155 + },
156 + {
157 + "repo": "open-webui/open-webui",
158 + "initial_stars_gained": 0,
159 + "week2_stars_gained": null,
160 + "week4_stars_gained": null,
161 + "classification": "faded",
162 + "decay_rate": 0.0
163 + },
164 + {
165 + "repo": "x1xhlol/system-prompts-and-models-of-ai-tools",
166 + "initial_stars_gained": 0,
167 + "week2_stars_gained": null,
168 + "week4_stars_gained": null,
169 + "classification": "faded",
170 + "decay_rate": 0.0
171 + },
172 + {
173 + "repo": "electron/electron",
174 + "initial_stars_gained": 0,
175 + "week2_stars_gained": null,
176 + "week4_stars_gained": null,
177 + "classification": "faded",
178 + "decay_rate": 0.0
179 + },
180 + {
181 + "repo": "nodejs/node",
182 + "initial_stars_gained": 0,
183 + "week2_stars_gained": null,
184 + "week4_stars_gained": null,
185 + "classification": "faded",
186 + "decay_rate": 0.0
187 + },
188 + {
189 + "repo": "tauri-apps/tauri",
190 + "initial_stars_gained": 0,
191 + "week2_stars_gained": null,
192 + "week4_stars_gained": null,
193 + "classification": "faded",
194 + "decay_rate": 0.0
195 + },
196 + {
197 + "repo": "gohugoio/hugo",
198 + "initial_stars_gained": 0,
199 + "week2_stars_gained": null,
200 + "week4_stars_gained": null,
201 + "classification": "faded",
202 + "decay_rate": 0.0
203 + },
204 + {
205 + "repo": "opencv/opencv",
206 + "initial_stars_gained": 0,
207 + "week2_stars_gained": null,
208 + "week4_stars_gained": null,
209 + "classification": "faded",
210 + "decay_rate": 0.0
211 + },
212 + {
213 + "repo": "OpenHands/OpenHands",
214 + "initial_stars_gained": 0,
215 + "week2_stars_gained": null,
216 + "week4_stars_gained": null,
217 + "classification": "faded",
218 + "decay_rate": 0.0
219 + },
220 + {
221 + "repo": "base/node",
222 + "initial_stars_gained": 0,
223 + "week2_stars_gained": null,
224 + "week4_stars_gained": null,
225 + "classification": "faded",
226 + "decay_rate": 0.0
227 + },
228 + {
229 + "repo": "OpenBB-finance/OpenBB",
230 + "initial_stars_gained": 0,
231 + "week2_stars_gained": null,
232 + "week4_stars_gained": null,
233 + "classification": "faded",
234 + "decay_rate": 0.0
235 + },
236 + {
237 + "repo": "JuliusBrussee/caveman",
238 + "initial_stars_gained": 0,
239 + "week2_stars_gained": null,
240 + "week4_stars_gained": null,
241 + "classification": "faded",
242 + "decay_rate": 0.0
243 + },
244 + {
245 + "repo": "commaai/openpilot",
246 + "initial_stars_gained": 0,
247 + "week2_stars_gained": null,
248 + "week4_stars_gained": null,
249 + "classification": "faded",
250 + "decay_rate": 0.0
251 + },
252 + {
253 + "repo": "virattt/ai-hedge-fund",
254 + "initial_stars_gained": 0,
255 + "week2_stars_gained": null,
256 + "week4_stars_gained": null,
257 + "classification": "faded",
258 + "decay_rate": 0.0
259 + },
260 + {
261 + "repo": "sharkdp/bat",
262 + "initial_stars_gained": 0,
263 + "week2_stars_gained": null,
264 + "week4_stars_gained": null,
265 + "classification": "faded",
266 + "decay_rate": 0.0
267 + },
268 + {
269 + "repo": "rclone/rclone",
270 + "initial_stars_gained": 0,
271 + "week2_stars_gained": null,
272 + "week4_stars_gained": null,
273 + "classification": "faded",
274 + "decay_rate": 0.0
275 + },
276 + {
277 + "repo": "go-gitea/gitea",
278 + "initial_stars_gained": 0,
279 + "week2_stars_gained": null,
280 + "week4_stars_gained": null,
281 + "classification": "faded",
282 + "decay_rate": 0.0
283 + },
284 + {
285 + "repo": "typst/typst",
286 + "initial_stars_gained": 0,
287 + "week2_stars_gained": null,
288 + "week4_stars_gained": null,
289 + "classification": "faded",
290 + "decay_rate": 0.0
291 + },
292 + {
293 + "repo": "DenisSergeevitch/agents-best-practices",
294 + "initial_stars_gained": 0,
295 + "week2_stars_gained": null,
296 + "week4_stars_gained": null,
297 + "classification": "faded",
298 + "decay_rate": 0.0
299 + },
300 + {
301 + "repo": "LiuMengxuan04/shushu-internship-tool",
302 + "initial_stars_gained": 0,
303 + "week2_stars_gained": null,
304 + "week4_stars_gained": null,
305 + "classification": "faded",
306 + "decay_rate": 0.0
307 + },
308 + {
309 + "repo": "agent-quality-controls/slopless",
310 + "initial_stars_gained": 0,
311 + "week2_stars_gained": null,
312 + "week4_stars_gained": null,
313 + "classification": "faded",
314 + "decay_rate": 0.0
315 + },
316 + {
317 + "repo": "Klotzkette/claude-fuer-deutsches-recht",
318 + "initial_stars_gained": 0,
319 + "week2_stars_gained": null,
320 + "week4_stars_gained": null,
321 + "classification": "faded",
322 + "decay_rate": 0.0
323 + },
324 + {
325 + "repo": "basionwang-bot/HermesPet",
326 + "initial_stars_gained": 0,
327 + "week2_stars_gained": null,
328 + "week4_stars_gained": null,
329 + "classification": "faded",
330 + "decay_rate": 0.0
331 + },
332 + {
333 + "repo": "gazelleandrewrasmussenmouj2/Windows-Activator",
334 + "initial_stars_gained": 0,
335 + "week2_stars_gained": null,
336 + "week4_stars_gained": null,
337 + "classification": "faded",
338 + "decay_rate": 0.0
339 + },
340 + {
341 + "repo": "jigripokri/POHA",
342 + "initial_stars_gained": 0,
343 + "week2_stars_gained": null,
344 + "week4_stars_gained": null,
345 + "classification": "faded",
346 + "decay_rate": 0.0
347 + },
348 + {
349 + "repo": "Helvesec/rmux",
350 + "initial_stars_gained": 0,
351 + "week2_stars_gained": null,
352 + "week4_stars_gained": null,
353 + "classification": "faded",
354 + "decay_rate": 0.0
355 + },
356 + {
357 + "repo": "JSingletonAI/dejavu",
358 + "initial_stars_gained": 0,
359 + "week2_stars_gained": null,
360 + "week4_stars_gained": null,
361 + "classification": "faded",
362 + "decay_rate": 0.0
363 + },
364 + {
365 + "repo": "joeseesun/qiaomu-userscripts",
366 + "initial_stars_gained": 0,
367 + "week2_stars_gained": null,
368 + "week4_stars_gained": null,
369 + "classification": "faded",
370 + "decay_rate": 0.0
371 + },
372 + {
373 + "repo": "not-manu/filemention.nvim",
374 + "initial_stars_gained": 0,
375 + "week2_stars_gained": null,
376 + "week4_stars_gained": null,
377 + "classification": "faded",
378 + "decay_rate": 0.0
379 + },
380 + {
381 + "repo": "n8n-io/n8n",
382 + "initial_stars_gained": 0,
383 + "week2_stars_gained": null,
384 + "week4_stars_gained": null,
385 + "classification": "faded",
386 + "decay_rate": 0.0
387 + },
388 + {
389 + "repo": "affaan-m/ECC",
390 + "initial_stars_gained": 0,
391 + "week2_stars_gained": null,
392 + "week4_stars_gained": null,
393 + "classification": "faded",
394 + "decay_rate": 0.0
395 + },
396 + {
397 + "repo": "Significant-Gravitas/AutoGPT",
398 + "initial_stars_gained": 0,
399 + "week2_stars_gained": null,
400 + "week4_stars_gained": null,
401 + "classification": "faded",
402 + "decay_rate": 0.0
403 + },
404 + {
405 + "repo": "f/prompts.chat",
406 + "initial_stars_gained": 0,
407 + "week2_stars_gained": null,
408 + "week4_stars_gained": null,
409 + "classification": "faded",
410 + "decay_rate": 0.0
411 + },
412 + {
413 + "repo": "NousResearch/hermes-agent",
414 + "initial_stars_gained": 0,
415 + "week2_stars_gained": null,
416 + "week4_stars_gained": null,
417 + "classification": "faded",
418 + "decay_rate": 0.0
419 + },
420 + {
421 + "repo": "langflow-ai/langflow",
422 + "initial_stars_gained": 0,
423 + "week2_stars_gained": null,
424 + "week4_stars_gained": null,
425 + "classification": "faded",
426 + "decay_rate": 0.0
427 + },
428 + {
429 + "repo": "langgenius/dify",
430 + "initial_stars_gained": 0,
431 + "week2_stars_gained": null,
432 + "week4_stars_gained": null,
433 + "classification": "faded",
434 + "decay_rate": 0.0
435 + },
436 + {
437 + "repo": "langchain-ai/langchain",
438 + "initial_stars_gained": 0,
439 + "week2_stars_gained": null,
440 + "week4_stars_gained": null,
441 + "classification": "faded",
442 + "decay_rate": 0.0
443 + },
444 + {
445 + "repo": "firecrawl/firecrawl",
446 + "initial_stars_gained": 0,
447 + "week2_stars_gained": null,
448 + "week4_stars_gained": null,
449 + "classification": "faded",
450 + "decay_rate": 0.0
451 + },
452 + {
453 + "repo": "Comfy-Org/ComfyUI",
454 + "initial_stars_gained": 0,
455 + "week2_stars_gained": null,
456 + "week4_stars_gained": null,
457 + "classification": "faded",
458 + "decay_rate": 0.0
459 + },
460 + {
461 + "repo": "jaywcjlove/awesome-mac",
462 + "initial_stars_gained": 0,
463 + "week2_stars_gained": null,
464 + "week4_stars_gained": null,
465 + "classification": "faded",
466 + "decay_rate": 0.0
467 + },
468 + {
469 + "repo": "google-gemini/gemini-cli",
470 + "initial_stars_gained": 0,
471 + "week2_stars_gained": null,
472 + "week4_stars_gained": null,
473 + "classification": "faded",
474 + "decay_rate": 0.0
475 + },
476 + {
477 + "repo": "github/spec-kit",
478 + "initial_stars_gained": 0,
479 + "week2_stars_gained": null,
480 + "week4_stars_gained": null,
481 + "classification": "faded",
482 + "decay_rate": 0.0
483 + },
484 + {
485 + "repo": "hacksider/Deep-Live-Cam",
486 + "initial_stars_gained": 0,
487 + "week2_stars_gained": null,
488 + "week4_stars_gained": null,
489 + "classification": "faded",
490 + "decay_rate": 0.0
491 + },
492 + {
493 + "repo": "ChatGPTNextWeb/NextChat",
494 + "initial_stars_gained": 0,
495 + "week2_stars_gained": null,
496 + "week4_stars_gained": null,
497 + "classification": "faded",
498 + "decay_rate": 0.0
499 + },
500 + {
501 + "repo": "sherlock-project/sherlock",
502 + "initial_stars_gained": 0,
503 + "week2_stars_gained": null,
504 + "week4_stars_gained": null,
505 + "classification": "faded",
506 + "decay_rate": 0.0
507 + },
508 + {
509 + "repo": "infiniflow/ragflow",
510 + "initial_stars_gained": 0,
511 + "week2_stars_gained": null,
512 + "week4_stars_gained": null,
513 + "classification": "faded",
514 + "decay_rate": 0.0
515 + },
516 + {
517 + "repo": "vllm-project/vllm",
518 + "initial_stars_gained": 0,
519 + "week2_stars_gained": null,
520 + "week4_stars_gained": null,
521 + "classification": "faded",
522 + "decay_rate": 0.0
523 + },
524 + {
525 + "repo": "netdata/netdata",
526 + "initial_stars_gained": 0,
527 + "week2_stars_gained": null,
528 + "week4_stars_gained": null,
529 + "classification": "faded",
530 + "decay_rate": 0.0
531 + },
532 + {
533 + "repo": "lobehub/lobehub",
534 + "initial_stars_gained": 0,
535 + "week2_stars_gained": null,
536 + "week4_stars_gained": null,
537 + "classification": "faded",
538 + "decay_rate": 0.0
539 + },
540 + {
541 + "repo": "thedotmack/claude-mem",
542 + "initial_stars_gained": 0,
543 + "week2_stars_gained": null,
544 + "week4_stars_gained": null,
545 + "classification": "faded",
546 + "decay_rate": 0.0
547 + },
548 + {
549 + "repo": "caddyserver/caddy",
550 + "initial_stars_gained": 0,
551 + "week2_stars_gained": null,
552 + "week4_stars_gained": null,
553 + "classification": "faded",
554 + "decay_rate": 0.0
555 + },
556 + {
557 + "repo": "daytonaio/daytona",
558 + "initial_stars_gained": 0,
559 + "week2_stars_gained": null,
560 + "week4_stars_gained": null,
561 + "classification": "faded",
562 + "decay_rate": 0.0
563 + },
564 + {
565 + "repo": "hiyouga/LlamaFactory",
566 + "initial_stars_gained": 0,
567 + "week2_stars_gained": null,
568 + "week4_stars_gained": null,
569 + "classification": "faded",
570 + "decay_rate": 0.0
571 + },
572 + {
573 + "repo": "bytedance/deer-flow",
574 + "initial_stars_gained": 0,
575 + "week2_stars_gained": null,
576 + "week4_stars_gained": null,
577 + "classification": "faded",
578 + "decay_rate": 0.0
579 + },
580 + {
581 + "repo": "xtekky/gpt4free",
582 + "initial_stars_gained": 0,
583 + "week2_stars_gained": null,
584 + "week4_stars_gained": null,
585 + "classification": "faded",
586 + "decay_rate": 0.0
587 + },
588 + {
589 + "repo": "unslothai/unsloth",
590 + "initial_stars_gained": 0,
591 + "week2_stars_gained": null,
592 + "week4_stars_gained": null,
593 + "classification": "faded",
594 + "decay_rate": 0.0
595 + },
596 + {
597 + "repo": "openinterpreter/open-interpreter",
598 + "initial_stars_gained": 0,
599 + "week2_stars_gained": null,
600 + "week4_stars_gained": null,
601 + "classification": "faded",
602 + "decay_rate": 0.0
603 + },
604 + {
605 + "repo": "ComposioHQ/awesome-claude-skills",
606 + "initial_stars_gained": 0,
607 + "week2_stars_gained": null,
608 + "week4_stars_gained": null,
609 + "classification": "faded",
610 + "decay_rate": 0.0
611 + },
612 + {
613 + "repo": "docling-project/docling",
614 + "initial_stars_gained": 0,
615 + "week2_stars_gained": null,
616 + "week4_stars_gained": null,
617 + "classification": "faded",
618 + "decay_rate": 0.0
619 + },
620 + {
621 + "repo": "code-yeongyu/oh-my-openagent",
622 + "initial_stars_gained": 0,
623 + "week2_stars_gained": null,
624 + "week4_stars_gained": null,
625 + "classification": "faded",
626 + "decay_rate": 0.0
627 + },
628 + {
629 + "repo": "meilisearch/meilisearch",
630 + "initial_stars_gained": 0,
631 + "week2_stars_gained": null,
632 + "week4_stars_gained": null,
633 + "classification": "faded",
634 + "decay_rate": 0.0
635 + },
636 + {
637 + "repo": "harry0703/MoneyPrinterTurbo",
638 + "initial_stars_gained": 0,
639 + "week2_stars_gained": null,
640 + "week4_stars_gained": null,
641 + "classification": "faded",
642 + "decay_rate": 0.0
643 + },
644 + {
645 + "repo": "mem0ai/mem0",
646 + "initial_stars_gained": 0,
647 + "week2_stars_gained": null,
648 + "week4_stars_gained": null,
649 + "classification": "faded",
650 + "decay_rate": 0.0
651 + },
652 + {
653 + "repo": "koala73/worldmonitor",
654 + "initial_stars_gained": 0,
655 + "week2_stars_gained": null,
656 + "week4_stars_gained": null,
657 + "classification": "faded",
658 + "decay_rate": 0.0
659 + },
660 + {
661 + "repo": "WerWolv/ImHex",
662 + "initial_stars_gained": 0,
663 + "week2_stars_gained": null,
664 + "week4_stars_gained": null,
665 + "classification": "faded",
666 + "decay_rate": 0.0
667 + },
668 + {
669 + "repo": "FlowiseAI/Flowise",
670 + "initial_stars_gained": 0,
671 + "week2_stars_gained": null,
672 + "week4_stars_gained": null,
673 + "classification": "faded",
674 + "decay_rate": 0.0
675 + },
676 + {
677 + "repo": "MemPalace/mempalace",
678 + "initial_stars_gained": 0,
679 + "week2_stars_gained": null,
680 + "week4_stars_gained": null,
681 + "classification": "faded",
682 + "decay_rate": 0.0
683 + },
684 + {
685 + "repo": "D4Vinci/Scrapling",
686 + "initial_stars_gained": 0,
687 + "week2_stars_gained": null,
688 + "week4_stars_gained": null,
689 + "classification": "faded",
690 + "decay_rate": 0.0
691 + },
692 + {
693 + "repo": "rtk-ai/rtk",
694 + "initial_stars_gained": 0,
695 + "week2_stars_gained": null,
696 + "week4_stars_gained": null,
697 + "classification": "faded",
698 + "decay_rate": 0.0
699 + }
700 + ],
701 + "summary": {
702 + "total": 87,
703 + "sustained": 0,
704 + "faded": 87
705 + }
706 +}
docs/design/icon-spec.md new
+333
@@ -0,0 +1,333 @@
1 +# SquadScope Icon Specification
2 +
3 +**Date:** 2026-05-25
4 +**Author:** Calculon (Designer)
5 +**Status:** Proposed
6 +
7 +---
8 +
9 +## 1. Concept
10 +
11 +### Brand Essence
12 +
13 +**SquadScope** = Scope/spotlight on squads/trends from GitHub
14 +
15 +The name combines:
16 +- **Squad:** Teams, communities, groups of developers
17 +- **Scope:** Observation, focus, analysis lens
18 +
19 +The icon should convey: **focused observation of developer activity** — not generic surveillance, but intentional signal extraction from noise.
20 +
21 +### Candidate Concepts
22 +
23 +#### A. Radar Sweep (Recommended)
24 +
25 +A stylized radar display with a sweep line, representing continuous scanning of the GitHub landscape. Simple, geometric, works at all sizes.
26 +
27 +**Pros:**
28 +- Unique (not the typical eye/magnifier)
29 +- Implies ongoing monitoring, not one-time search
30 +- Clean geometry scales from 16px to 512px
31 +- No licensing concerns
32 +
33 +**Cons:**
34 +- Could read as "military" if overdone
35 +
36 +#### B. Signal Pulse
37 +
38 +A rising waveform with peaks, representing trend signals emerging from data. Modern, data-forward.
39 +
40 +**Pros:**
41 +- Directly maps to "trend analysis"
42 +- Distinctive shape
43 +
44 +**Cons:**
45 +- May look like audio/music at small sizes
46 +- Less immediate brand recognition
47 +
48 +#### C. Bracketed Focus
49 +
50 +Square brackets `[ ]` with a dot/star inside, representing focused extraction of a single signal.
51 +
52 +**Pros:**
53 +- Typographic, works with wordmark
54 +- Developer-friendly aesthetic
55 +
56 +**Cons:**
57 +- May be too abstract
58 +- Brackets are overused in developer tooling
59 +
60 +### Recommendation: **Radar Sweep (A)**
61 +
62 +The radar concept best captures continuous observation without being a cliché eye or magnifier. It's geometric, works at all sizes, and differentiates SquadScope from generic developer tools.
63 +
64 +---
65 +
66 +## 2. Icon Design
67 +
68 +### Primary Icon SVG
69 +
70 +The following SVG is optimized for clarity at 16×16px while looking refined at 512×512px. It uses `viewBox` for scalability and no external fonts.
71 +
72 +```svg
73 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
74 + <!-- Background circle (radar field) -->
75 + <circle cx="32" cy="32" r="28" stroke="currentColor" stroke-width="3" fill="none"/>
76 +
77 + <!-- Inner ring -->
78 + <circle cx="32" cy="32" r="18" stroke="currentColor" stroke-width="2" fill="none" opacity="0.5"/>
79 +
80 + <!-- Center ring -->
81 + <circle cx="32" cy="32" r="8" stroke="currentColor" stroke-width="2" fill="none" opacity="0.3"/>
82 +
83 + <!-- Center dot -->
84 + <circle cx="32" cy="32" r="3" fill="currentColor"/>
85 +
86 + <!-- Sweep line (the key differentiator) -->
87 + <path d="M32 32 L32 4" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
88 +
89 + <!-- Signal blip on the sweep -->
90 + <circle cx="32" cy="12" r="4" fill="currentColor"/>
91 +</svg>
92 +```
93 +
94 +**Characteristics:**
95 +- Uses `currentColor` for automatic light/dark mode adaptation
96 +- Stroke-based design for clarity at small sizes
97 +- Concentric circles create depth without fills
98 +- Sweep line at 12 o'clock position for visual balance
99 +- Signal blip represents "detected trend"
100 +
101 +### Light Mode Version
102 +
103 +For contexts requiring explicit colors:
104 +
105 +```svg
106 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
107 + <circle cx="32" cy="32" r="28" stroke="#1A1A1A" stroke-width="3" fill="none"/>
108 + <circle cx="32" cy="32" r="18" stroke="#1A1A1A" stroke-width="2" fill="none" opacity="0.5"/>
109 + <circle cx="32" cy="32" r="8" stroke="#1A1A1A" stroke-width="2" fill="none" opacity="0.3"/>
110 + <circle cx="32" cy="32" r="3" fill="#1A1A1A"/>
111 + <path d="M32 32 L32 4" stroke="#0066CC" stroke-width="3" stroke-linecap="round"/>
112 + <circle cx="32" cy="12" r="4" fill="#0066CC"/>
113 +</svg>
114 +```
115 +
116 +### Dark Mode Version
117 +
118 +```svg
119 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
120 + <circle cx="32" cy="32" r="28" stroke="#E8E8E8" stroke-width="3" fill="none"/>
121 + <circle cx="32" cy="32" r="18" stroke="#E8E8E8" stroke-width="2" fill="none" opacity="0.5"/>
122 + <circle cx="32" cy="32" r="8" stroke="#E8E8E8" stroke-width="2" fill="none" opacity="0.3"/>
123 + <circle cx="32" cy="32" r="3" fill="#E8E8E8"/>
124 + <path d="M32 32 L32 4" stroke="#4DA3FF" stroke-width="3" stroke-linecap="round"/>
125 + <circle cx="32" cy="12" r="4" fill="#4DA3FF"/>
126 +</svg>
127 +```
128 +
129 +### Monochrome Version (for Safari pinned tab)
130 +
131 +```svg
132 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
133 + <circle cx="32" cy="32" r="28" stroke="black" stroke-width="3" fill="none"/>
134 + <circle cx="32" cy="32" r="18" stroke="black" stroke-width="2" fill="none" opacity="0.5"/>
135 + <circle cx="32" cy="32" r="8" stroke="black" stroke-width="2" fill="none" opacity="0.3"/>
136 + <circle cx="32" cy="32" r="3" fill="black"/>
137 + <path d="M32 32 L32 4" stroke="black" stroke-width="3" stroke-linecap="round"/>
138 + <circle cx="32" cy="12" r="4" fill="black"/>
139 +</svg>
140 +```
141 +
142 +### Simplified Version (for 16×16 favicon)
143 +
144 +At 16×16, detail is lost. Use this simplified version:
145 +
146 +```svg
147 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none">
148 + <!-- Outer circle -->
149 + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-width="1.5" fill="none"/>
150 +
151 + <!-- Center dot -->
152 + <circle cx="8" cy="8" r="1.5" fill="currentColor"/>
153 +
154 + <!-- Sweep line with blip -->
155 + <path d="M8 8 L8 1.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
156 + <circle cx="8" cy="2.5" r="1.5" fill="currentColor"/>
157 +</svg>
158 +```
159 +
160 +---
161 +
162 +## 3. Color Guidance
163 +
164 +The icon uses design tokens from the redesign proposal:
165 +
166 +| Context | Radar Rings | Sweep Line & Blip |
167 +|---------|-------------|-------------------|
168 +| Light mode | `--text` (#1A1A1A) | `--accent` (#0066CC) |
169 +| Dark mode | `--text` (#E8E8E8) | `--accent` (#4DA3FF) |
170 +| Monochrome | black | black |
171 +
172 +For single-color contexts (favicon.ico, Safari pinned tab), use only the primary text color.
173 +
174 +---
175 +
176 +## 4. Asset List
177 +
178 +Amy should produce the following assets from the SVG specs above:
179 +
180 +### Favicons
181 +
182 +| File | Size | Format | Notes |
183 +|------|------|--------|-------|
184 +| `favicon.ico` | 16×16, 32×32, 48×48 | ICO (multi-size) | Use simplified SVG for 16px |
185 +| `favicon-16x16.png` | 16×16 | PNG | Simplified version |
186 +| `favicon-32x32.png` | 32×32 | PNG | Primary icon |
187 +| `favicon.svg` | Scalable | SVG | currentColor version for modern browsers |
188 +
189 +### Apple Touch Icons
190 +
191 +| File | Size | Format | Notes |
192 +|------|------|--------|-------|
193 +| `apple-touch-icon.png` | 180×180 | PNG | Add 10% padding, solid `--bg` background |
194 +
195 +### Safari Pinned Tab
196 +
197 +| File | Size | Format | Notes |
198 +|------|------|--------|-------|
199 +| `safari-pinned-tab.svg` | Scalable | SVG | Monochrome black only |
200 +
201 +### Header Logo
202 +
203 +| File | Size | Format | Notes |
204 +|------|------|--------|-------|
205 +| `logo.svg` | Height 28-32px | SVG | Icon + "SquadScope" wordmark |
206 +| `logo-icon-only.svg` | 32×32 | SVG | For mobile/compact contexts |
207 +
208 +### Social/OG Images
209 +
210 +| File | Size | Format | Notes |
211 +|------|------|--------|-------|
212 +| `og-image.png` | 1200×630 | PNG | See spec below |
213 +| `og-image-weekly.png` | 1200×630 | PNG | Template for weekly articles |
214 +
215 +---
216 +
217 +## 5. OG Image Specification
218 +
219 +### Default OG Image (`og-image.png`)
220 +
221 +```
222 +┌────────────────────────────────────────────────────────────────┐
223 +│ │
224 +│ │
225 +│ ┌─────┐ │
226 +│ │ ◎ │ SquadScope │
227 +│ └─────┘ │
228 +│ │
229 +│ Weekly tech signal from GitHub │
230 +│ │
231 +│ │
232 +│ jmservera.github.io/SquadScope │
233 +│ │
234 +│ │
235 +└────────────────────────────────────────────────────────────────┘
236 +```
237 +
238 +**Specs:**
239 +- Size: 1200×630px
240 +- Background: `--bg` (#FAFAFA light / #0D0D0D dark — produce both)
241 +- Icon: 120px height, left of wordmark
242 +- Wordmark: Inter Bold, 72px, `--text`
243 +- Tagline: Inter Regular, 32px, `--text-muted`
244 +- URL: Inter Regular, 24px, `--text-muted`
245 +- All content vertically centered, left-aligned with 80px margin
246 +
247 +### Weekly Article OG Template (`og-image-weekly.png`)
248 +
249 +```
250 +┌────────────────────────────────────────────────────────────────┐
251 +│ │
252 +│ WEEK 22 · MAY 2026 [SquadScope ◎] │
253 +│ │
254 +│ Supply-Chain Scanners, Skills │
255 +│ Economies, and GitHub's │
256 +│ Star-Farm Flood │
257 +│ │
258 +│ ┌─────────────────────────────────────────┐ │
259 +│ │ Repos: 420 · Stars: 16.5M · Top: ⭐ │ │
260 +│ └─────────────────────────────────────────┘ │
261 +│ │
262 +└────────────────────────────────────────────────────────────────┘
263 +```
264 +
265 +**Specs:**
266 +- Size: 1200×630px
267 +- Background: Gradient from `--bg` to `--surface`
268 +- Eyebrow: Inter Medium, 24px, `--accent`
269 +- Title: Inter Bold, 56px, `--text`, max 3 lines
270 +- Metrics bar: Rounded rect with `--accent-muted` background
271 +- Logo: Top-right corner, 48px height
272 +
273 +---
274 +
275 +## 6. Generation Prompt (Optional)
276 +
277 +If a richer hero/OG image is desired using an image generation model, here is a prompt:
278 +
279 +```
280 +A minimalist digital illustration of a radar screen showing concentric circles
281 +on a dark background (#0D0D0D). A single bright blue (#4DA3FF) sweep line
282 +extends from the center to the top of the screen. Where the sweep line meets
283 +the outer ring, there is a glowing blue dot representing a detected signal.
284 +The style is clean, geometric, and technical — like a modernized NORAD display
285 +but elegant and editorial. No text, no labels, just the pure radar visualization.
286 +Aspect ratio 1200x630 for social media preview.
287 +```
288 +
289 +**Note:** The hand-coded SVG icon above is the canonical brand mark. Any generated imagery should complement it, not replace it.
290 +
291 +---
292 +
293 +## 7. Implementation Checklist
294 +
295 +- [ ] Export all PNG assets at 2x resolution for Retina displays
296 +- [ ] Test favicon.ico in Chrome, Firefox, Safari, Edge
297 +- [ ] Verify safari-pinned-tab.svg renders correctly in Safari
298 +- [ ] Add icon references to `hugo.toml` under `[params]`
299 +- [ ] Update `layouts/partials/head.html` with favicon links
300 +- [ ] Test OG images with Twitter Card Validator and Facebook Debugger
301 +
302 +---
303 +
304 +## 8. File Locations
305 +
306 +All assets should be placed in:
307 +
308 +```
309 +static/
310 +├── favicon.ico
311 +├── favicon.svg
312 +├── favicon-16x16.png
313 +├── favicon-32x32.png
314 +├── apple-touch-icon.png
315 +├── safari-pinned-tab.svg
316 +├── logo.svg
317 +├── logo-icon-only.svg
318 +├── og-image.png
319 +├── og-image-dark.png
320 +└── og-image-weekly-template.png
321 +```
322 +
323 +Update `hugo.toml`:
324 +
325 +```toml
326 +[params.label]
327 + icon = "logo-icon-only.svg"
328 + iconHeight = 28
329 +```
330 +
331 +---
332 +
333 +*Specification by Calculon · 2026-05-25*
docs/design/redesign-proposal-2026-05.md new
+506
@@ -0,0 +1,506 @@
1 +# SquadScope Visual Redesign Proposal
2 +
3 +**Date:** 2026-05-25
4 +**Author:** Calculon (Designer)
5 +**Status:** Proposed
6 +
7 +---
8 +
9 +## Executive Summary
10 +
11 +SquadScope is an editorial publication delivering weekly GitHub trend analysis. The current PaperMod-derived theme treats it as a generic blog, missing the opportunity to create a distinctive editorial voice. This proposal establishes a visual direction that positions SquadScope as a credible, opinionated trend report — dense but readable, data-rich but not dashboard-like.
12 +
13 +---
14 +
15 +## 1. Design Principles
16 +
17 +1. **Reading First** — Typography, spacing, and contrast optimize for long-form scanning. Every pixel serves comprehension.
18 +
19 +2. **One Signal Per Glance** — Each content block delivers a single clear message. Metrics, headlines, and navigation don't compete for attention.
20 +
21 +3. **Dense ≠ Cluttered** — Information density is a feature, not a bug. White space creates breathing room between dense blocks, not padding around sparse content.
22 +
23 +4. **Light Touch on Decoration** — Let data and prose speak. Borders, shadows, and color accents are structural signals, not embellishments.
24 +
25 +5. **Dark Mode Is Not Inverted Light Mode** — Each mode has intentional palette choices, not mechanical flips.
26 +
27 +---
28 +
29 +## 2. Visual Direction
30 +
31 +### Chosen Lane: **Editorial Trend Report — Dense but Quiet**
32 +
33 +This is not a SaaS dashboard (no heavy data-viz chrome), not a news aggregator (no thumbnail grids), and not a traditional blog (no hero images, author avatars, social proof). It is a **weekly briefing document** that happens to live on the web.
34 +
35 +### Reference Analysis
36 +
37 +| Site | Layout Pattern | Typography | Color | Fits SquadScope? |
38 +|------|----------------|------------|-------|------------------|
39 +| **GitHub Pulse** | Card-heavy, filter-first | System fonts, tight | Monochrome + accent | Partial — too dashboard-y |
40 +| **TechCrunch** | Headline hierarchy, byline-heavy | Serif headlines, sans body | Purple accent | Partial — too news-feed |
41 +| **Wired** | Magazine grid, large imagery | Bold sans headlines | High-contrast black | No — too image-dependent |
42 +| **The Verge** | Dense feed, strong bylines | Chunky sans | Vibrant accents | Partial — too feed-like |
43 +
44 +**Synthesis:** Borrow from TechCrunch's headline hierarchy and reading rhythm, GitHub Pulse's monochrome discipline, and The Verge's willingness to be dense. Avoid Wired's image-dependence (SquadScope is text-first) and generic blog patterns.
45 +
46 +### Resulting Aesthetic
47 +
48 +- **Typographic hierarchy** carries the design, not images or color
49 +- **Monochrome foundation** with a single accent color
50 +- **Compact metric displays** that inform without dominating
51 +- **Clear article structure** with section dividers and consistent spacing
52 +- **No stock imagery** — code blocks, pull quotes, and data callouts provide visual variety
53 +
54 +---
55 +
56 +## 3. Design Tokens
57 +
58 +### 3.1 Color Palette
59 +
60 +#### Light Mode
61 +
62 +| Token | Hex | Use | WCAG AA on bg? |
63 +|-------|-----|-----|----------------|
64 +| `--bg` | `#FAFAFA` | Page background | — |
65 +| `--surface` | `#FFFFFF` | Cards, elevated content | — |
66 +| `--text` | `#1A1A1A` | Primary text | ✓ 15.3:1 on bg |
67 +| `--text-muted` | `#5C5C5C` | Secondary text, metadata | ✓ 6.1:1 on bg |
68 +| `--accent` | `#0066CC` | Links, interactive elements | ✓ 4.9:1 on bg |
69 +| `--accent-hover` | `#004C99` | Link hover states | ✓ 7.2:1 on bg |
70 +| `--accent-muted` | `#E6F0FA` | Accent backgrounds | — |
71 +| `--border` | `#E0E0E0` | Dividers, card borders | — |
72 +| `--danger` | `#CC3300` | Error states, warnings | ✓ 5.4:1 on bg |
73 +| `--success` | `#1A8754` | Positive indicators | ✓ 4.6:1 on bg |
74 +
75 +#### Dark Mode
76 +
77 +| Token | Hex | Use | WCAG AA on bg? |
78 +|-------|-----|-----|----------------|
79 +| `--bg` | `#0D0D0D` | Page background | — |
80 +| `--surface` | `#1A1A1A` | Cards, elevated content | — |
81 +| `--text` | `#E8E8E8` | Primary text | ✓ 14.5:1 on bg |
82 +| `--text-muted` | `#9C9C9C` | Secondary text, metadata | ✓ 7.3:1 on bg |
83 +| `--accent` | `#4DA3FF` | Links, interactive elements | ✓ 7.8:1 on bg |
84 +| `--accent-hover` | `#80BFFF` | Link hover states | ✓ 10.2:1 on bg |
85 +| `--accent-muted` | `#1A2633` | Accent backgrounds | — |
86 +| `--border` | `#2E2E2E` | Dividers, card borders | — |
87 +| `--danger` | `#FF6B4A` | Error states, warnings | ✓ 6.8:1 on bg |
88 +| `--success` | `#4ADE80` | Positive indicators | ✓ 9.2:1 on bg |
89 +
90 +### 3.2 Typography
91 +
92 +#### Font Stack
93 +
94 +- **Headlines:** `"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`
95 +- **Body:** Same as headlines (unified stack for editorial consistency)
96 +- **Monospace:** `"JetBrains Mono", "Fira Code", "SF Mono", "Cascadia Code", monospace`
97 +
98 +#### Type Scale (rem, base 16px)
99 +
100 +| Level | Size | Line Height | Weight | Use |
101 +|-------|------|-------------|--------|-----|
102 +| `h1` | `2.25rem` (36px) | 1.2 | 700 | Page title |
103 +| `h2` | `1.75rem` (28px) | 1.25 | 600 | Section headers |
104 +| `h3` | `1.375rem` (22px) | 1.3 | 600 | Subsection headers |
105 +| `h4` | `1.125rem` (18px) | 1.35 | 600 | Card titles |
106 +| `body` | `1rem` (16px) | 1.65 | 400 | Prose |
107 +| `small` | `0.875rem` (14px) | 1.5 | 400 | Metadata, captions |
108 +| `tiny` | `0.75rem` (12px) | 1.4 | 500 | Labels, badges |
109 +
110 +#### Measure
111 +
112 +- **Prose max-width:** `68ch` (optimal reading measure)
113 +- **Metric cards:** No max-width (fluid within grid)
114 +
115 +### 3.3 Spacing Scale
116 +
117 +8px-based scale for predictable rhythm:
118 +
119 +| Token | Value |
120 +|-------|-------|
121 +| `--space-1` | `0.25rem` (4px) |
122 +| `--space-2` | `0.5rem` (8px) |
123 +| `--space-3` | `1rem` (16px) |
124 +| `--space-4` | `1.5rem` (24px) |
125 +| `--space-5` | `2rem` (32px) |
126 +| `--space-6` | `3rem` (48px) |
127 +| `--space-7` | `4rem` (64px) |
128 +
129 +### 3.4 Border Radius
130 +
131 +| Token | Value | Use |
132 +|-------|-------|-----|
133 +| `--radius-sm` | `4px` | Small buttons, badges |
134 +| `--radius-md` | `8px` | Cards, inputs |
135 +| `--radius-lg` | `12px` | Large containers |
136 +| `--radius-full` | `9999px` | Pills, avatars |
137 +
138 +### 3.5 Shadows
139 +
140 +| Token | Value | Use |
141 +|-------|-------|-----|
142 +| `--shadow-sm` | `0 1px 2px rgba(0,0,0,0.05)` | Subtle elevation |
143 +| `--shadow-md` | `0 4px 6px rgba(0,0,0,0.07)` | Cards |
144 +| `--shadow-lg` | `0 10px 15px rgba(0,0,0,0.1)` | Modals, dropdowns |
145 +
146 +Dark mode shadows use `rgba(0,0,0,0.3)` base for visibility on dark surfaces.
147 +
148 +---
149 +
150 +## 4. Layout Proposals
151 +
152 +### 4.1 Home Page
153 +
154 +```
155 +┌────────────────────────────────────────────────────────────┐
156 +│ HEADER [ Logo ] Weekly | Monthly | Yearly | Search | ⚙ │
157 +├────────────────────────────────────────────────────────────┤
158 +│ │
159 +│ ┌──────────────────────────────────────────────────────┐ │
160 +│ │ EYEBROW: Weekly tech signal from GitHub │ │
161 +│ │ │ │
162 +│ │ H1: SquadScope │ │
163 +│ │ │ │
164 +│ │ Subhead: Turns GitHub activity into readable │ │
165 +│ │ weekly, monthly, and yearly trend reports. │ │
166 +│ └──────────────────────────────────────────────────────┘ │
167 +│ │
168 +│ ┌─────────────────────────────────────────────────────┐ │
169 +│ │ SECTION TOPLINE: Latest report │ │
170 +│ │ │ │
171 +│ │ H2: [Article Title - full width, clickable] │ │
172 +│ │ │ │
173 +│ │ Summary paragraph (1-2 lines) │ │
174 +│ │ │ │
175 +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────────┐ │ │
176 +│ │ │ Week │ │ Repos │ │ Stars │ │ Top Repo │ │ │
177 +│ │ │ 2026-22 │ │ 420 │ │ 16.5M │ │ perp/bee │ │ │
178 +│ │ └─────────┘ └─────────┘ └─────────┘ └───────────┘ │ │
179 +│ │ │ │
180 +│ │ [ Read Report → ] │ │
181 +│ └─────────────────────────────────────────────────────┘ │
182 +│ │
183 +│ ┌───────────────────┐ ┌───────────────────┐ │
184 +│ │ RECENT REPORTS │ │ QUICK LINKS │ │
185 +│ │ • W22 - Supply...│ │ Archive │ │
186 +│ │ • W21 - Agent... │ │ Monthly │ │
187 +│ │ • W20 - ... │ │ Tags │ │
188 +│ │ • W19 - ... │ │ RSS │ │
189 +│ └───────────────────┘ └───────────────────┘ │
190 +│ │
191 +├────────────────────────────────────────────────────────────┤
192 +│ FOOTER [ GitHub ] [ RSS ] © 2026 jmservera │
193 +└────────────────────────────────────────────────────────────┘
194 +```
195 +
196 +**Key changes from current:**
197 +- Remove 7-card navigation grid (overwhelming); replace with focused quick links
198 +- Promote latest report to hero treatment
199 +- Metric cards integrated with latest report, not separate
200 +- Tighter hierarchy: eyebrow → h1 → subhead → content
201 +
202 +### 4.2 Weekly Article Page
203 +
204 +```
205 +┌────────────────────────────────────────────────────────────┐
206 +│ HEADER [ ← Back to archive ] Weekly | Monthly | ... │
207 +├────────────────────────────────────────────────────────────┤
208 +│ │
209 +│ EYEBROW: Weekly summary │
210 +│ │
211 +│ H1: Supply-Chain Scanners, Skills Economies, │
212 +│ and GitHub's Star-Farm Flood │
213 +│ │
214 +│ METADATA: May 25, 2026 · 12 min read · Week 22 │
215 +│ │
216 +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────────────────┐ │
217 +│ │ Repos │ │ Stars │ │ Trends │ │ Top: perp/bumblebee│
218 +│ │ 420 │ │ 16.5M │ │ 4 │ │ 2,328 ⭐ │
219 +│ └─────────┘ └─────────┘ └─────────┘ └───────────────────┘ │
220 +│ │
221 +│ ┌─────────────────────────────────────────────────────┐ │
222 +│ │ JUMP TO: Trends | Industry | Signal | Blind Spots │ │
223 +│ └─────────────────────────────────────────────────────┘ │
224 +│ │
225 +│ ┌──────────────────────────────────────────────────────┐ │
226 +│ │ PRESS CONTEXT [TechCrunch badge] │ │
227 +│ │ 6 articles this week, most relevant: │ │
228 +│ │ "How founders inflate ARR metrics..." │ │
229 +│ └──────────────────────────────────────────────────────┘ │
230 +│ │
231 +│ ─────────────────────────────────────────────────────── │
232 +│ │
233 +│ H2: This Week's Trends │
234 +│ │
235 +│ Prose content with optimal measure (68ch)... │
236 +│ │
237 +│ [REPO CARD: perplexityai/bumblebee] │
238 +│ ├─ Description │
239 +│ ├─ 2,328 ⭐ · 181 forks · Go │
240 +│ └─ [ View on GitHub → ] │
241 +│ │
242 +│ More prose... │
243 +│ │
244 +│ ─────────────────────────────────────────────────────── │
245 +│ │
246 +│ H2: Signal & Noise │
247 +│ ... │
248 +│ │
249 +├────────────────────────────────────────────────────────────┤
250 +│ POST FOOTER │
251 +│ Tags: [ supply-chain ] [ agent-skills ] [ ai-memory ] │
252 +│ ← Previous | Next → │
253 +├────────────────────────────────────────────────────────────┤
254 +│ FOOTER │
255 +└────────────────────────────────────────────────────────────┘
256 +```
257 +
258 +**Key changes from current:**
259 +- Article header with clear hierarchy (eyebrow, h1, metadata)
260 +- Metric cards in compact row, not competing with title
261 +- Jump-to navigation for long articles
262 +- Press context callout styled distinctively
263 +- Repo cards as first-class components (not just inline links)
264 +- Clear section dividers (horizontal rules)
265 +
266 +### 4.3 Monthly/Yearly Rollup Pages
267 +
268 +```
269 +┌────────────────────────────────────────────────────────────┐
270 +│ HEADER │
271 +├────────────────────────────────────────────────────────────┤
272 +│ │
273 +│ EYEBROW: Monthly rollup │
274 +│ H1: May 2026 │
275 +│ SUBHEAD: 4 weeks covered · 1,680 repos featured │
276 +│ │
277 +│ ┌─────────────────────────────────────────────────────┐ │
278 +│ │ INCLUDED WEEKS │ │
279 +│ │ W19 · W20 · W21 · W22 │ │
280 +│ └─────────────────────────────────────────────────────┘ │
281 +│ │
282 +│ ─────────────────────────────────────────────────────── │
283 +│ │
284 +│ H2: Month in Review │
285 +│ Synthesized prose... │
286 +│ │
287 +│ H2: Top Repos This Month │
288 +│ [Repo cards in 2-column grid] │
289 +│ │
290 +│ H2: Emerging Themes │
291 +│ [Theme cards with sparkline-style indicators] │
292 +│ │
293 +├────────────────────────────────────────────────────────────┤
294 +│ FOOTER │
295 +└────────────────────────────────────────────────────────────┘
296 +```
297 +
298 +---
299 +
300 +## 5. Component Specs
301 +
302 +### 5.1 Header
303 +
304 +```
305 +┌─────────────────────────────────────────────────────────────┐
306 +│ [LOGO] SquadScope Weekly Monthly Yearly Search ⚙│
307 +└─────────────────────────────────────────────────────────────┘
308 +```
309 +
310 +**Specs:**
311 +- Height: `64px`
312 +- Logo: Site icon (28px height) + wordmark
313 +- Navigation: Horizontal list, `--text-muted` default, `--text` on hover
314 +- Active state: `--text` with `border-bottom: 2px solid var(--accent)`
315 +- Theme toggle: Icon button, `24px` icon
316 +- GitHub button (per issue #169): Icon-only button, right-aligned, `24px` icon
317 +- Mobile: Hamburger menu at `<768px`
318 +
319 +### 5.2 Article Header
320 +
321 +**Structure:**
322 +1. Eyebrow: Section label (`small`, `--text-muted`, uppercase, letter-spacing `0.05em`)
323 +2. H1: Title (`h1` token, `--text`)
324 +3. Subtitle/description: Optional (`body`, `--text-muted`)
325 +4. Metadata row: Date · Reading time · Week number (`small`, `--text-muted`)
326 +
327 +**Spacing:**
328 +- Eyebrow to H1: `--space-2`
329 +- H1 to subtitle: `--space-3`
330 +- Subtitle to metadata: `--space-3`
331 +- Metadata to metric cards: `--space-5`
332 +
333 +### 5.3 Metric Cards
334 +
335 +```
336 +┌─────────────────┐
337 +│ LABEL │ ← small, --text-muted, uppercase
338 +│ VALUE │ ← h3, --text, font-weight 600
339 +└─────────────────┘
340 +```
341 +
342 +**Specs:**
343 +- Background: `--surface`
344 +- Border: `1px solid var(--border)`
345 +- Border-radius: `--radius-md`
346 +- Padding: `--space-3`
347 +- Min-width: `120px`
348 +- Display: Flex row, gap `--space-3`, wrap on mobile
349 +
350 +**Wide variant** (for "Top repo"):
351 +- Flex-grow: 1
352 +- Value is a link (`--accent` color)
353 +
354 +### 5.4 Repo Card
355 +
356 +```
357 +┌─────────────────────────────────────────────────────────────┐
358 +│ owner/repo-name Go │
359 +│ Description text that can wrap to multiple lines if │
360 +│ needed but is truncated after 2 lines with ellipsis... │
361 +│ ⭐ 2,328 · 🔀 181 forks [ GitHub → ] │
362 +└─────────────────────────────────────────────────────────────┘
363 +```
364 +
365 +**Specs:**
366 +- Background: `--surface`
367 +- Border: `1px solid var(--border)`
368 +- Border-radius: `--radius-md`
369 +- Padding: `--space-4`
370 +- Title: `h4` weight, `--accent` color (link)
371 +- Language badge: `tiny`, `--accent-muted` background, `--radius-sm`
372 +- Stats: `small`, `--text-muted`
373 +- GitHub button: Secondary button style, right-aligned
374 +
375 +### 5.5 Press Context Callout
376 +
377 +```
378 +┌─────────────────────────────────────────────────────────────┐
379 +│ 📰 TechCrunch Context │
380 +│ 6 articles this week. Most relevant correlation: │
381 +│ "How founders and VCs use inflated ARR metrics..." │
382 +└─────────────────────────────────────────────────────────────┘
383 +```
384 +
385 +**Specs:**
386 +- Background: `--accent-muted`
387 +- Border-left: `4px solid var(--accent)`
388 +- Border-radius: `--radius-md` (right corners only)
389 +- Padding: `--space-4`
390 +- Title: `small`, `--text`, font-weight 600
391 +- Body: `body`, `--text-muted`
392 +- Quote: `body`, `--text`, italic
393 +
394 +### 5.6 Cost Dashboard
395 +
396 +**Current:** Shortcode rendering raw metrics.
397 +
398 +**Redesigned:**
399 +- Contained card with border
400 +- Clear section header
401 +- Two-column grid: Token metrics | Cost summary
402 +- Subtle accent treatment for "total cost" value
403 +- Collapsible detail rows (model breakdown)
404 +
405 +### 5.7 Footer
406 +
407 +```
408 +┌─────────────────────────────────────────────────────────────┐
409 +│ SquadScope — Weekly tech signal from GitHub │
410 +│ │
411 +│ GitHub · RSS · Archive │
412 +│ │
413 +│ © 2026 jmservera · Powered by Hugo │
414 +└─────────────────────────────────────────────────────────────┘
415 +```
416 +
417 +**Specs:**
418 +- Background: `--surface`
419 +- Border-top: `1px solid var(--border)`
420 +- Padding: `--space-6` vertical
421 +- Content: Centered, max-width matches content area
422 +- Links: `--text-muted`, `--accent` on hover
423 +- Copyright: `small`, `--text-muted`
424 +
425 +---
426 +
427 +## 6. Migration Strategy
428 +
429 +Phased rollout to ship value incrementally and minimize risk:
430 +
431 +### Phase 1: Tokens + Typography Foundation
432 +**Scope:** CSS custom properties, font stack, type scale
433 +**Files:** New `assets/css/tokens.css`, updates to base styles
434 +**Dependencies:** None
435 +**Outcome:** Typography feels polished; colors unified
436 +**Effort:** Small
437 +
438 +### Phase 2: Header + Footer + Navigation
439 +**Scope:** Redesigned header with GitHub button (#169), new footer
440 +**Files:** `layouts/partials/header.html`, new `footer.html`, CSS
441 +**Dependencies:** Phase 1 tokens
442 +**Outcome:** Site chrome is consistent and distinctive
443 +**Effort:** Medium
444 +
445 +### Phase 3: Home Page Layout
446 +**Scope:** Hero treatment, latest report card, quick links
447 +**Files:** `layouts/index.html`, CSS
448 +**Dependencies:** Phase 2 header/footer
449 +**Outcome:** Entry point signals editorial quality
450 +**Effort:** Medium
451 +
452 +### Phase 4: Article Layout + Components
453 +**Scope:** Article header, metric cards, repo cards, press callout, jump nav
454 +**Files:** `layouts/weekly/single.html`, `layouts/monthly/single.html`, `layouts/yearly/single.html`, partials
455 +**Dependencies:** Phase 1-3
456 +**Outcome:** Core reading experience transformed
457 +**Effort:** Large
458 +
459 +### Phase 5: Cost Dashboard Refresh
460 +**Scope:** Redesigned cost dashboard shortcode
461 +**Files:** `layouts/shortcodes/cost-dashboard.html`, CSS
462 +**Dependencies:** Phase 1 tokens
463 +**Outcome:** Financial transparency looks intentional
464 +**Effort:** Small
465 +
466 +### Phase 6: Icon + Favicon + Social Images
467 +**Scope:** Site icon assets, OG image, apple-touch-icon
468 +**Files:** `static/` assets, `hugo.toml` params
469 +**Dependencies:** Phase 1 palette decisions
470 +**Outcome:** Brand identity complete across all touchpoints
471 +**Effort:** Medium
472 +
473 +---
474 +
475 +## 7. Accessibility Checklist
476 +
477 +- [ ] All color combinations meet WCAG AA contrast (verified in token table)
478 +- [ ] Focus states visible on all interactive elements
479 +- [ ] Skip-to-content link at page start
480 +- [ ] Semantic heading hierarchy (no skipped levels)
481 +- [ ] Reduced motion: Respect `prefers-reduced-motion`
482 +- [ ] Link text is descriptive (no "click here")
483 +- [ ] Keyboard navigation works for all interactive elements
484 +- [ ] Images have alt text (where applicable)
485 +
486 +---
487 +
488 +## 8. Open Questions
489 +
490 +1. **Font loading:** Include Inter from Google Fonts or use system stack only? (System stack recommended for performance.)
491 +2. **Syntax highlighting theme:** Adapt PaperMod's current theme to new palette or switch to a named theme?
492 +3. **Search styling:** Pagefind has its own styling; override or accept?
493 +
494 +---
495 +
496 +## Appendix: Figma-less Handoff Notes
497 +
498 +Since this proposal is specs-only (no Figma), Amy should:
499 +1. Implement tokens as CSS custom properties first
500 +2. Build components in isolation using the specs above
501 +3. Use browser dev tools to verify spacing/sizing against the spec
502 +4. Reference the live sites mentioned for edge cases
503 +
504 +---
505 +
506 +*Proposal by Calculon · 2026-05-25*