|
8 | 8 | - Links: PRs, issues, routes, components |
9 | 9 |
|
10 | 10 | ### How to use this file |
| 11 | + |
11 | 12 | - Update status/notes as tasks progress. Keep routes/components and data sources referenced so any agent can continue seamlessly. |
12 | 13 | - Prefer reusing existing components and content models referenced below. |
13 | 14 |
|
14 | 15 | --- |
15 | 16 |
|
16 | 17 | ## 1. Metrics & Market Leadership Signals |
| 18 | + |
17 | 19 | **Goal:** Visible proof of dominance and growth. |
18 | 20 |
|
19 | 21 | ### Audit snapshot |
| 22 | + |
20 | 23 | - Homepage metrics: `OpenSourceStats` counters present on homepage (`src/routes/_libraries/index.tsx` uses `OpenSourceStats`). Partial. |
21 | 24 | - "Trusted By": Component exists as text marquee (`src/components/TrustedByMarquee.tsx`). Not on homepage yet; currently used on some library pages (e.g. `src/routes/_libraries/table.$version.index.tsx`). Partial. |
22 | 25 | - NPM stats: Extensive interactive page exists at `src/routes/stats/npm/index.tsx` with charts and comparisons. Done (separate page). |
23 | 26 | - Backend metrics: `convex/stats.ts` + `@erquhart/convex-oss-stats` provides GitHub/NPM org metrics; `OpenSourceStats.tsx` consumes `api.stats.getGithubOwner`, `api.stats.getNpmOrg`. Done for aggregate; per-library not yet surfaced. |
24 | 27 |
|
25 | 28 | ### Tasks |
| 29 | + |
26 | 30 | - [ ] Implement “Trusted By” on homepage |
| 31 | + |
27 | 32 | - Status: Backlog |
28 | 33 | - Notes: |
29 | 34 | - Reuse `TrustedByMarquee` but upgrade to support logos + links + tooltip proof. |
|
35 | 40 | - Renders without CLS, loops smoothly, accessible (ARIA, alt text). Logos swap dark/light. |
36 | 41 | - All entries have a proof link; no unverified brands. |
37 | 42 | - Links: `src/components/TrustedByMarquee.tsx`, `src/routes/_libraries/index.tsx`. |
38 | | - - Owner: |
| 43 | + - Owner: |
39 | 44 |
|
40 | 45 | - [ ] Add Real-Time Metrics Counters (per-library + org rollup) |
| 46 | + |
41 | 47 | - Status: Partial (org rollup live via `OpenSourceStats`) |
42 | 48 | - Notes: |
43 | 49 | - Extend counters to per-library pages using existing Convex endpoints or add repo-level endpoints via `convex-oss-stats` if needed. |
|
55 | 61 | - Notes: |
56 | 62 | - Route: `src/routes/state-of-tanstack.tsx`. |
57 | 63 | - Include growth charts (npm downloads: reuse `NpmStatsChart.tsx` or embed portions of `stats/npm`), GitHub stars, contributors, dependents (available via Convex aggregation already powering `OpenSourceStats`). |
58 | | - - Community stats: Discord members (needs server function), newsletter subscribers (manual or vendor API), X/Twitter followers (manual or API), repository contributors (Convex or GitHub GraphQL on server). |
59 | | - - Ecosystem counts: partners (derive from `src/utils/partners.tsx`), plugins/tools (manual list or content collection). |
60 | | - - CTA to GitHub org. |
| 64 | + - Community stats: Discord members (needs server function), newsletter subscribers (manual or vendor API), X/Twitter followers (manual or API), repository contributors (Convex or GitHub GraphQL on server). |
| 65 | + - Ecosystem counts: partners (derive from `src/utils/partners.tsx`), plugins/tools (manual list or content collection). |
| 66 | + - CTA to GitHub org. |
61 | 67 | - Acceptance: |
62 | 68 | - Page loads instantly with cached metrics; charts are responsive and accessible. |
63 | 69 | - Sources and last-updated timestamps shown. |
64 | 70 | - Links: `src/components/NpmStatsChart.tsx`, `src/components/OpenSourceStats.tsx`, `src/routes/stats/npm/index.tsx`, `src/utils/partners.tsx`. |
65 | 71 | - Owner: |
66 | 72 |
|
67 | 73 | ### Tech/context |
| 74 | + |
68 | 75 | - Data: `@erquhart/convex-oss-stats` via `convex/stats.ts` (org-level GitHub star/contributor/dependent counts, npm downloads). Consider adding per-repo endpoints if needed. |
69 | 76 | - Secrets: Configure any tokens via Netlify/Convex env; never expose client-side. |
70 | 77 | - Accessibility: Ensure counters/animations are readable and respect `prefers-reduced-motion`. |
71 | 78 |
|
72 | 79 | --- |
73 | 80 |
|
74 | 81 | ## 2. Founder & Team Story |
| 82 | + |
75 | 83 | **Goal:** Frame the team as visionary and credible. |
76 | 84 |
|
77 | 85 | ### Audit snapshot |
| 86 | + |
78 | 87 | - Ethos page exists: `src/routes/_libraries/ethos.tsx` (narrative and positioning). |
79 | 88 | - Maintainers directory page exists: `src/routes/_libraries/maintainers.tsx` with `MaintainerCard` variants and filters; bios sourced from `src/libraries/maintainers`. |
80 | 89 | - No dedicated "About" route; no speaking engagements index; no curated endorsements/tweets. |
81 | 90 |
|
82 | 91 | ### Tasks |
| 92 | + |
83 | 93 | - [ ] Redesign/Create “About” page |
| 94 | + |
84 | 95 | - Status: Backlog |
85 | 96 | - Notes: |
86 | 97 | - Route: `src/routes/about.tsx`. |
|
90 | 101 | - Links: `src/components/MaintainerCard.tsx`, `src/routes/_libraries/maintainers.tsx`. |
91 | 102 |
|
92 | 103 | - [ ] Speaking Engagements section |
| 104 | + |
93 | 105 | - Status: Backlog |
94 | 106 | - Notes: |
95 | 107 | - Add to About or standalone `src/routes/speaking.tsx`. |
|
106 | 118 | - Acceptance: Renders endorsements with attribution and embedded tweets with proper theming. |
107 | 119 |
|
108 | 120 | ### Tech/context |
| 121 | + |
109 | 122 | - Reuse `MaintainerCard` and existing images in `src/images/`. |
110 | 123 | - Avoid fetching social embeds at build if rate-limited; hydrate on client or cache server-side. |
111 | 124 |
|
112 | 125 | --- |
113 | 126 |
|
114 | | - |
115 | | - |
116 | 127 | ## 4. Commercial Hooks |
| 128 | + |
117 | 129 | **Goal:** Show monetizable pathways. |
118 | 130 |
|
119 | 131 | ### Audit snapshot |
| 132 | + |
120 | 133 | - Enterprise/Support: `src/routes/_libraries/paid-support.tsx` exists with HubSpot script and CTAs. Partial substitute for "Enterprise" page. |
121 | 134 | - No dedicated Partner Program page. |
122 | 135 |
|
123 | 136 | ### Tasks |
| 137 | + |
124 | 138 | - [ ] “Enterprise” page |
| 139 | + |
125 | 140 | - Status: Partial |
126 | 141 | - Notes: |
127 | 142 | - Option 1: Rename and expand `paid-support` into `enterprise` (route alias + updated copy) while keeping legacy route. |
|
137 | 152 | - Link to Partners page. |
138 | 153 | - Acceptance: Published page with clear application CTA. |
139 | 154 |
|
140 | | - |
141 | | - |
142 | 155 | --- |
143 | 156 |
|
144 | 157 | ## 5. Future Vision Page |
| 158 | + |
145 | 159 | **Goal:** Show long-term upside. |
146 | 160 |
|
147 | 161 | ### Audit snapshot |
| 162 | + |
148 | 163 | - No public roadmap found; ethos narrative exists but not a vision statement page. |
149 | 164 |
|
150 | 165 | ### Tasks |
| 166 | + |
151 | 167 | - [ ] Public Roadmap page |
| 168 | + |
152 | 169 | - Status: Backlog |
153 | 170 | - Notes: |
154 | 171 | - Route: `src/routes/roadmap.tsx`. |
|
167 | 184 | --- |
168 | 185 |
|
169 | 186 | ## 6. Media & Momentum |
| 187 | + |
170 | 188 | **Goal:** Make hype and credibility easy to digest. |
171 | 189 |
|
172 | 190 | ### Audit snapshot |
| 191 | + |
173 | 192 | - No dedicated media kit, in-the-news, or social proof feeds found. |
174 | 193 |
|
175 | 194 | ### Tasks |
| 195 | + |
176 | 196 | - [ ] Press/Media Kit page |
| 197 | + |
177 | 198 | - Status: Backlog |
178 | 199 | - Notes: |
179 | 200 | - Route: `src/routes/media-kit.tsx`. |
|
182 | 203 | - Acceptance: Page provides direct downloads and usage rules. |
183 | 204 |
|
184 | 205 | - [ ] In the News page |
| 206 | + |
185 | 207 | - Status: Backlog |
186 | 208 | - Notes: |
187 | 209 | - Route: `src/routes/news.tsx`. |
|
199 | 221 | --- |
200 | 222 |
|
201 | 223 | ### Shared implementation notes |
| 224 | + |
202 | 225 | - Routing: New pages should be added under `src/routes/*` using TanStack Start conventions; update nav/footers as needed. |
203 | 226 | - Data placement: Prefer `src/data/*.ts` (typed) or `content/*.(json|yaml)` for editorial lists. Avoid hardcoding in components unless small. |
204 | 227 | - Theming: Provide dark/light logo variants; `public/` is ideal for static assets. |
|
208 | 231 | - Analytics: Add outbound link tracking if available (future). |
209 | 232 |
|
210 | 233 | ### Potential blockers |
| 234 | + |
211 | 235 | - External API limits (GitHub GraphQL, Discord member count, X/Twitter API). Prefer server-side fetch with caching or public embed widgets. |
212 | 236 | - Legal/branding approvals for “Trusted By” logos—require proof links. |
213 | 237 |
|
214 | 238 | ### Quick links to relevant code |
| 239 | + |
215 | 240 | - Homepage: `src/routes/_libraries/index.tsx` |
216 | 241 | - Metrics: `src/components/OpenSourceStats.tsx`, `convex/stats.ts`, `src/components/NpmStatsChart.tsx`, `src/routes/stats/npm/index.tsx` |
217 | 242 | - Trusted By: `src/components/TrustedByMarquee.tsx` |
218 | 243 | - Team/Ethos: `src/routes/_libraries/ethos.tsx`, `src/routes/_libraries/maintainers.tsx`, `src/components/MaintainerCard.tsx` |
219 | 244 | - SEO helper: `src/utils/seo` |
220 | 245 |
|
221 | 246 | ### Ownership & tracking |
| 247 | + |
222 | 248 | - For each task above, fill in: |
223 | 249 | - Owner: |
224 | 250 | - Issue/PR links: |
225 | 251 | - Status: |
226 | | - - Next step: |
| 252 | + - Next step: |
0 commit comments