Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 35 additions & 9 deletions agents/tasks/tanstack-com-task-list.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand All @@ -55,32 +61,37 @@
- 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.
- Links: `src/components/NpmStatsChart.tsx`, `src/components/OpenSourceStats.tsx`, `src/routes/stats/npm/index.tsx`, `src/utils/partners.tsx`.
- 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`.

---

## 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`.
Expand All @@ -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`.
Expand All @@ -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.
Expand All @@ -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`.
Expand All @@ -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`.
Expand All @@ -182,6 +203,7 @@
- Acceptance: Page provides direct downloads and usage rules.

- [ ] In the News page

- Status: Backlog
- Notes:
- Route: `src/routes/news.tsx`.
Expand All @@ -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.
Expand All @@ -208,19 +231,22 @@
- 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`
- Team/Ethos: `src/routes/_libraries/ethos.tsx`, `src/routes/_libraries/maintainers.tsx`, `src/components/MaintainerCard.tsx`
- SEO helper: `src/utils/seo`

### Ownership & tracking

- For each task above, fill in:
- Owner:
- Issue/PR links:
- Status:
- Next step:
- Next step:
4 changes: 2 additions & 2 deletions convex/auth.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ export default {
providers: [
{
domain: process.env.CONVEX_SITE_URL,
applicationID: "convex",
applicationID: 'convex',
},
],
};
}
5 changes: 4 additions & 1 deletion src/components/Navbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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`
)
}
}

Expand Down
51 changes: 51 additions & 0 deletions src/libraries/maintainers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export interface Maintainer {
social?: {
twitter?: string
bluesky?: string
linkedIn?: string
website?: string
}
}
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion src/utils/gh-sponsor-meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Loading