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