diff --git a/agents/tasks/tanstack-com-task-list.md b/agents/tasks/tanstack-com-task-list.md index 4709bff31..3a9509a8c 100644 --- a/agents/tasks/tanstack-com-task-list.md +++ b/agents/tasks/tanstack-com-task-list.md @@ -8,22 +8,27 @@ - Links: PRs, issues, routes, components ### How to use this file + - Update status/notes as tasks progress. Keep routes/components and data sources referenced so any agent can continue seamlessly. - Prefer reusing existing components and content models referenced below. --- ## 1. Metrics & Market Leadership Signals + **Goal:** Visible proof of dominance and growth. ### Audit snapshot + - Homepage metrics: `OpenSourceStats` counters present on homepage (`src/routes/_libraries/index.tsx` uses `OpenSourceStats`). Partial. - "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. - NPM stats: Extensive interactive page exists at `src/routes/stats/npm/index.tsx` with charts and comparisons. Done (separate page). - 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. ### Tasks + - [ ] Implement “Trusted By” on homepage + - Status: Backlog - Notes: - Reuse `TrustedByMarquee` but upgrade to support logos + links + tooltip proof. @@ -35,9 +40,10 @@ - Renders without CLS, loops smoothly, accessible (ARIA, alt text). Logos swap dark/light. - All entries have a proof link; no unverified brands. - Links: `src/components/TrustedByMarquee.tsx`, `src/routes/_libraries/index.tsx`. - - Owner: + - Owner: - [ ] Add Real-Time Metrics Counters (per-library + org rollup) + - Status: Partial (org rollup live via `OpenSourceStats`) - Notes: - Extend counters to per-library pages using existing Convex endpoints or add repo-level endpoints via `convex-oss-stats` if needed. @@ -55,9 +61,9 @@ - Notes: - Route: `src/routes/state-of-tanstack.tsx`. - 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`). - - 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). - - Ecosystem counts: partners (derive from `src/utils/partners.tsx`), plugins/tools (manual list or content collection). - - CTA to GitHub org. + - 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). + - Ecosystem counts: partners (derive from `src/utils/partners.tsx`), plugins/tools (manual list or content collection). + - CTA to GitHub org. - Acceptance: - Page loads instantly with cached metrics; charts are responsive and accessible. - Sources and last-updated timestamps shown. @@ -65,6 +71,7 @@ - Owner: ### Tech/context + - 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. - Secrets: Configure any tokens via Netlify/Convex env; never expose client-side. - Accessibility: Ensure counters/animations are readable and respect `prefers-reduced-motion`. @@ -72,15 +79,19 @@ --- ## 2. Founder & Team Story + **Goal:** Frame the team as visionary and credible. ### Audit snapshot + - Ethos page exists: `src/routes/_libraries/ethos.tsx` (narrative and positioning). - Maintainers directory page exists: `src/routes/_libraries/maintainers.tsx` with `MaintainerCard` variants and filters; bios sourced from `src/libraries/maintainers`. - No dedicated "About" route; no speaking engagements index; no curated endorsements/tweets. ### Tasks + - [ ] Redesign/Create “About” page + - Status: Backlog - Notes: - Route: `src/routes/about.tsx`. @@ -90,6 +101,7 @@ - Links: `src/components/MaintainerCard.tsx`, `src/routes/_libraries/maintainers.tsx`. - [ ] Speaking Engagements section + - Status: Backlog - Notes: - Add to About or standalone `src/routes/speaking.tsx`. @@ -106,22 +118,25 @@ - Acceptance: Renders endorsements with attribution and embedded tweets with proper theming. ### Tech/context + - Reuse `MaintainerCard` and existing images in `src/images/`. - Avoid fetching social embeds at build if rate-limited; hydrate on client or cache server-side. --- - - ## 4. Commercial Hooks + **Goal:** Show monetizable pathways. ### Audit snapshot + - Enterprise/Support: `src/routes/_libraries/paid-support.tsx` exists with HubSpot script and CTAs. Partial substitute for "Enterprise" page. - No dedicated Partner Program page. ### Tasks + - [ ] “Enterprise” page + - Status: Partial - Notes: - Option 1: Rename and expand `paid-support` into `enterprise` (route alias + updated copy) while keeping legacy route. @@ -137,18 +152,20 @@ - Link to Partners page. - Acceptance: Published page with clear application CTA. - - --- ## 5. Future Vision Page + **Goal:** Show long-term upside. ### Audit snapshot + - No public roadmap found; ethos narrative exists but not a vision statement page. ### Tasks + - [ ] Public Roadmap page + - Status: Backlog - Notes: - Route: `src/routes/roadmap.tsx`. @@ -167,13 +184,17 @@ --- ## 6. Media & Momentum + **Goal:** Make hype and credibility easy to digest. ### Audit snapshot + - No dedicated media kit, in-the-news, or social proof feeds found. ### Tasks + - [ ] Press/Media Kit page + - Status: Backlog - Notes: - Route: `src/routes/media-kit.tsx`. @@ -182,6 +203,7 @@ - Acceptance: Page provides direct downloads and usage rules. - [ ] In the News page + - Status: Backlog - Notes: - Route: `src/routes/news.tsx`. @@ -199,6 +221,7 @@ --- ### Shared implementation notes + - Routing: New pages should be added under `src/routes/*` using TanStack Start conventions; update nav/footers as needed. - Data placement: Prefer `src/data/*.ts` (typed) or `content/*.(json|yaml)` for editorial lists. Avoid hardcoding in components unless small. - Theming: Provide dark/light logo variants; `public/` is ideal for static assets. @@ -208,10 +231,12 @@ - Analytics: Add outbound link tracking if available (future). ### Potential blockers + - External API limits (GitHub GraphQL, Discord member count, X/Twitter API). Prefer server-side fetch with caching or public embed widgets. - Legal/branding approvals for “Trusted By” logos—require proof links. ### Quick links to relevant code + - Homepage: `src/routes/_libraries/index.tsx` - Metrics: `src/components/OpenSourceStats.tsx`, `convex/stats.ts`, `src/components/NpmStatsChart.tsx`, `src/routes/stats/npm/index.tsx` - Trusted By: `src/components/TrustedByMarquee.tsx` @@ -219,8 +244,9 @@ - SEO helper: `src/utils/seo` ### Ownership & tracking + - For each task above, fill in: - Owner: - Issue/PR links: - Status: - - Next step: \ No newline at end of file + - Next step: diff --git a/convex/auth.config.ts b/convex/auth.config.ts index f4eb56461..afc62641f 100644 --- a/convex/auth.config.ts +++ b/convex/auth.config.ts @@ -2,7 +2,7 @@ export default { providers: [ { domain: process.env.CONVEX_SITE_URL, - applicationID: "convex", + applicationID: 'convex', }, ], -}; +} diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 752fdf5a4..8ea894e91 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -48,7 +48,10 @@ export function Navbar({ children }: { children: React.ReactNode }) { const updateContainerHeight = () => { if (containerRef.current) { const height = containerRef.current.offsetHeight - document.documentElement.style.setProperty('--navbar-height', `${height}px`) + document.documentElement.style.setProperty( + '--navbar-height', + `${height}px` + ) } } diff --git a/src/libraries/maintainers.ts b/src/libraries/maintainers.ts index fcd8ea63b..374ac3de5 100644 --- a/src/libraries/maintainers.ts +++ b/src/libraries/maintainers.ts @@ -14,6 +14,7 @@ export interface Maintainer { social?: { twitter?: string bluesky?: string + linkedIn?: string website?: string } } @@ -158,6 +159,20 @@ export const allMaintainers: Maintainer[] = [ frameworkExpertise: ['react'], specialties: ['Sync Engines'], }, + { + name: 'Alem Tuzlak', + avatar: 'https://github.com/AlemTuzlak.png', + github: 'AlemTuzlak', + creatorOf: ['devtools'], + contributorOf: ['pacer', 'form'], + frameworkExpertise: ['react'], + specialties: ['DevTools', 'Routers', 'Vite Plugins'], + social: { + twitter: 'https://x.com/AlemTuzlak', + bluesky: 'https://bsky.app/profile/alem.forge42.dev', + website: 'https://www.forge42.dev', + }, + }, { name: 'Lachlan Collins', isCoreMaintainer: true, @@ -220,6 +235,17 @@ export const allMaintainers: Maintainer[] = [ twitter: 'https://x.com/swagdoctor19', }, }, + { + name: 'Harry Whorlow', + avatar: 'https://github.com/harry-whorlow.png', + github: 'harry-whorlow', + maintainerOf: ['form', 'devtools'], + frameworkExpertise: ['react'], + social: { + linkedIn: 'https://www.linkedin.com/in/harry-whorlow/', + website: 'harry-whorlow.dev', + }, + }, { name: 'Luca Jakob', avatar: 'https://github.com/LeCarbonator.png', @@ -267,6 +293,19 @@ export const allMaintainers: Maintainer[] = [ bluesky: 'https://bsky.app/profile/bskyum.bsky.social', }, }, + { + name: 'Brooke Holmes', + avatar: 'https://github.com/brhx.png', + github: 'brhx', + maintainerOf: ['start', 'router'], + frameworkExpertise: ['react'], + specialties: ['TypeScript'], + social: { + twitter: 'https://x.com/brooke_lune', + linkedIn: 'https://www.linkedin.com/in/brooke-holmes/', + website: 'https://brooke.me', + }, + }, { name: 'Arnoud de Vries', avatar: 'https://github.com/arnoud-dv.png', @@ -363,6 +402,18 @@ export const allMaintainers: Maintainer[] = [ frameworkExpertise: ['react'], specialties: ['Sync Engines', 'Incremental View Maintenance'], }, + { + name: 'Shruti Kapoor', + avatar: 'https://github.com/shrutikapoor08.png', + github: 'shrutikapoor08', + contributorOf: ['start'], + frameworkExpertise: ['react'], + specialties: ['Education', 'Documentation'], + social: { + twitter: 'https://x.com/shrutikapoor08', + bluesky: 'https://bsky.app/profile/shrutikapoor08.bsky.social', + }, + }, ] export const coreMaintainers = allMaintainers.filter( diff --git a/src/utils/gh-sponsor-meta.json b/src/utils/gh-sponsor-meta.json index 7cf375945..2931ea335 100644 --- a/src/utils/gh-sponsor-meta.json +++ b/src/utils/gh-sponsor-meta.json @@ -271,7 +271,7 @@ "imageUrl": "https://www.toyokumo.co.jp/logo-en.svg", "linkUrl": "https://www.toyokumo.co.jp/en?utm_source=tanstack" }, - { + { "login": "yogesharc", "name": "Promptmonitor", "imageUrl": "https://bvatwanklwlvzlcxrcxn.supabase.co/storage/v1/object/public/assets/promptmonitor-icon-brandfill.png",