Skip to content

Commit c40b67c

Browse files
authored
Merge branch 'main' into docs/fix-auth-login-readme
2 parents b311e2d + 21d4f91 commit c40b67c

288 files changed

Lines changed: 24644 additions & 9023 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ TanStack.com marketing site built with TanStack Start.
55
## Essentials
66

77
- Package manager: `pnpm`
8-
- Run `pnpm test` at end of task batches (not after every tiny change)
8+
- Run `pnpm test` before commits or after significant code changes, not after every tiny edit
9+
- Smoke tests live outside the default `pnpm test` path and are reserved for commit-hook validation
910
- Don't run builds after every change. This is a visual site; assume changes work unless reported otherwise.
1011
- **Typesafety is paramount.** Never cast types; fix at source instead. See [typescript.md](.agents/typescript.md).
1112

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ drizzle/migrations
77
.DS_Store
88
.cache
99
.env
10+
.env.*
1011
.vercel
1112
.output
1213
.vinxi

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v20.19.6
1+
v25.9.0

.oxlintrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
".tanstack-start",
2020
".netlify",
2121
"public",
22-
"convex/.temp"
22+
"convex/.temp",
23+
".claude"
2324
],
2425
"rules": {
2526
"no-array-constructor": "error",

README.md

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1-
# Welcome to TanStack.com!
1+
<div align="center">
22

3-
This site is built with TanStack Router!
3+
# TanStack.com
44

5-
- [TanStack Router Docs](https://tanstack.com/router)
5+
The home of the TanStack ecosystem. Built with [TanStack Router](https://tanstack.com/router) and deployed automagically with [Netlify](https://netlify.com/).
66

7-
It's deployed automagically with Netlify!
7+
<a href="https://twitter.com/tan_stack"><img src="https://img.shields.io/twitter/follow/tan_stack.svg?style=social" alt="Follow @TanStack"/></a>
88

9-
- [Netlify](https://netlify.com/)
9+
### [Become a Sponsor!](https://github.com/sponsors/tannerlinsley/)
10+
11+
</div>
1012

1113
## Development
1214

15+
### Quick Start
16+
1317
From your terminal:
1418

1519
```sh
@@ -19,76 +23,72 @@ pnpm dev
1923

2024
This starts your app in development mode, rebuilding assets on file changes.
2125

22-
## Authentication in Development
26+
### Local Setup
2327

24-
The dev server uses the production database and real OAuth, so dev and production behave identically. To authenticate your local session, run:
28+
The documentation for all TanStack projects (except `React Charts`) is hosted on [tanstack.com](https://tanstack.com). In production, doc pages are fetched from GitHub. In development, they're read from your local file system.
2529

26-
```sh
27-
pnpm auth:login
28-
```
30+
Pre-commit hooks run smoke tests against these docs, so you'll need sibling repos cloned for commits to pass.
2931

30-
This opens `tanstack.com` in your browser. Sign in with GitHub or Google, and the resulting session token is saved to `.env.local` as `DEV_SESSION_TOKEN`. Restart the dev server and you will be signed in automatically.
31-
32-
To authenticate against a locally running server instead:
32+
Create a `tanstack` parent directory and clone this repo alongside the projects:
3333

3434
```sh
35-
pnpm auth:login --url http://localhost:3000
35+
mkdir tanstack && cd tanstack
36+
git clone git@github.com:TanStack/tanstack.com.git
37+
git clone git@github.com:TanStack/query.git
38+
git clone git@github.com:TanStack/router.git
39+
git clone git@github.com:TanStack/table.git
3640
```
3741

38-
> [!NOTE]
39-
> The token is a real signed session cookie tied to your production account. It expires in 30 days. Re-run `pnpm auth:login` to refresh it.
40-
41-
> [!NOTE]
42-
> If you are using an AI agent (Claude, Cursor, etc.) to help develop, run `pnpm auth:login` once before starting your session so the agent can interact with authenticated features on your behalf.
43-
44-
## Editing and previewing the docs of TanStack projects locally
45-
46-
The documentations for all TanStack projects except for `React Charts` are hosted on [https://tanstack.com](https://tanstack.com), powered by this TanStack Router app.
47-
In production, the markdown doc pages are fetched from the GitHub repos of the projects, but in development they are read from the local file system.
48-
49-
Follow these steps if you want to edit the doc pages of a project (in these steps we'll assume it's [`TanStack/form`](https://github.com/tanstack/form)) and preview them locally :
50-
51-
1. Create a new directory called `tanstack`.
42+
Your directory structure should look like this:
5243

53-
```sh
54-
mkdir tanstack
44+
```
45+
tanstack/
46+
├── tanstack.com/
47+
├── query/
48+
├── router/
49+
└── table/
5550
```
5651

57-
2. Enter the directory and clone this repo and the repo of the project there.
52+
> [!WARNING]
53+
> Directory names must match repo names exactly (e.g., `query` not `tanstack-query`). The app finds docs by looking for sibling directories by name.
5854
59-
```sh
60-
cd tanstack
61-
git clone git@github.com:TanStack/tanstack.com.git
62-
git clone git@github.com:TanStack/form.git
63-
```
55+
### Editing Docs
56+
57+
To edit docs for a project, make changes in its `docs/` folder (e.g., `../form/docs/`) and visit http://localhost:3000/form/latest/docs/overview to preview.
6458

6559
> [!NOTE]
66-
> Your `tanstack` directory should look like this:
67-
>
68-
> ```
69-
> tanstack/
70-
> |
71-
> +-- form/
72-
> |
73-
> +-- tanstack.com/
74-
> ```
60+
> Updated pages need to be manually reloaded in the browser.
7561
7662
> [!WARNING]
77-
> Make sure the name of the directory in your local file system matches the name of the project's repo. For example, `tanstack/form` must be cloned into `form` (this is the default) instead of `some-other-name`, because that way, the doc pages won't be found.
63+
> Update the project's `docs/config.json` if you add a new doc page!
7864
79-
3. Enter the `tanstack/tanstack.com` directory, install the dependencies and run the app in dev mode:
65+
## Get Involved
8066

8167
```sh
8268
cd tanstack.com
8369
pnpm i
8470
# The app will run on http://localhost:3000 by default
8571
pnpm dev
8672
```
87-
88-
4. Now you can visit http://localhost:3000/form/latest/docs/overview in the browser and see the changes you make in `tanstack/form/docs`.
89-
90-
> [!NOTE]
91-
> The updated pages need to be manually reloaded in the browser.
92-
93-
> [!WARNING]
94-
> You will need to update the `docs/config.json` file (in the project's repo) if you add a new doc page!
73+
- We welcome issues and pull requests!
74+
- Participate in [GitHub Discussions](https://github.com/TanStack/tanstack.com/discussions)
75+
- Chat with the community on [Discord](https://discord.com/invite/WrRKjPJ)
76+
77+
## Explore the TanStack Ecosystem
78+
79+
- <a href="https://github.com/tanstack/config"><b>TanStack Config</b></a> – Tooling for JS/TS packages
80+
- <a href="https://github.com/tanstack/db"><b>TanStack DB</b></a> – Reactive sync client store
81+
- <a href="https://github.com/tanstack/devtools"><b>TanStack DevTools</b></a> – Unified devtools panel
82+
- <a href="https://github.com/tanstack/form"><b>TanStack Form</b></a> – Type‑safe form state
83+
- <a href="https://github.com/tanstack/pacer"><b>TanStack Pacer</b></a> – Debouncing, throttling, batching
84+
- <a href="https://github.com/tanstack/query"><b>TanStack Query</b></a> – Async state & caching
85+
- <a href="https://github.com/tanstack/ranger"><b>TanStack Ranger</b></a> – Range & slider primitives
86+
- <a href="https://github.com/tanstack/router"><b>TanStack Router</b></a> – Type‑safe routing, caching & URL state
87+
- <a href="https://github.com/tanstack/router"><b>TanStack Start</b></a> – Full‑stack SSR & streaming
88+
- <a href="https://github.com/tanstack/store"><b>TanStack Store</b></a> – Reactive data store
89+
- <a href="https://github.com/tanstack/table"><b>TanStack Table</b></a> – Headless datagrids
90+
- <a href="https://github.com/tanstack/virtual"><b>TanStack Virtual</b></a> – Virtualized rendering
91+
92+
… and more at <a href="https://tanstack.com"><b>TanStack.com »</b></a>
93+
94+
<!-- Use the force, Luke -->

docs-info.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ Fenced code blocks are supported with language identifiers for syntax highlighti
5151
export function App() {
5252
return <div>Hello</div>
5353
}
54-
;``
5554
```
5655
````
5756

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
# Ecosystem Implementation Todo
2+
3+
## Goal
4+
5+
Build a database-driven `/ecosystem` marketplace and submission flow without blocking the partner-page SEO work.
6+
7+
## Product Goals
8+
9+
- Create an `/ecosystem` directory page that acts like a marketplace
10+
- Let users sort and filter entries by the fields that actually matter
11+
- Let companies submit new listings through a first-party submission flow
12+
- Seed the marketplace with existing TanStack partners when the DB work starts
13+
- Let TanStack maintainers add an official review and comparisons to each listing
14+
- Keep partner-backed entries aligned with `/partners/[partner]` pages
15+
16+
## Scope To Build Later
17+
18+
### Data model
19+
20+
- Add a new `ecosystemEntries` table
21+
- Add a dedicated moderation capability like `moderate-ecosystem`
22+
- Keep the schema intentionally small and high-value
23+
24+
Suggested v1 fields:
25+
26+
- `id`
27+
- `userId`
28+
- `slug`
29+
- `name`
30+
- `websiteUrl`
31+
- `kind`
32+
- `tags`
33+
- `libraries`
34+
- `pricingModel`
35+
- `isOpenSource`
36+
- `preferenceScore`
37+
- `isPartner`
38+
- `logoUrl`
39+
- `screenshotUrl`
40+
- `summary`
41+
- `officialReviewMd`
42+
- `competitorSlugs`
43+
- `status`
44+
- `moderationNote`
45+
- `moderatedBy`
46+
- `moderatedAt`
47+
- `createdAt`
48+
- `updatedAt`
49+
50+
### Taxonomy
51+
52+
Use a very small taxonomy surface:
53+
54+
- `kind`: `integration | service | tool | template | plugin`
55+
- `pricingModel`: `free | freemium | paid | contact | oss`
56+
- `tags: string[]` absorbs both "type" and "service"
57+
58+
### Comparison model
59+
60+
Use slugs everywhere.
61+
62+
- Partners compare against other partner ids, which are also their slugs
63+
- Ecosystem entries compare against ecosystem slugs
64+
- Partner-backed ecosystem entries should reuse the same slug namespace
65+
66+
Suggested v1 field:
67+
68+
- `competitorSlugs: string[]`
69+
70+
No UUID-based comparison references for v1.
71+
No partner-only comparison system.
72+
No extra comparison tables unless the simple shape breaks down.
73+
74+
### Canonical URL rules
75+
76+
- Partner-backed entries should be canonical at `/partners/[partner]`
77+
- Non-partner entries should be canonical at `/ecosystem/[slug]`
78+
- If a partner-backed entry is reachable from `/ecosystem/[slug]`, redirect or canonicalize to `/partners/[partner]`
79+
80+
### Submission flow
81+
82+
Build a user-facing submission portal similar in spirit to showcase, but for ecosystem listings.
83+
84+
Suggested v1 required fields:
85+
86+
- `name`
87+
- `websiteUrl`
88+
- `kind`
89+
- `tags`
90+
- `libraries`
91+
- `pricingModel`
92+
- `isOpenSource`
93+
- `logoUrl`
94+
- `screenshotUrl`
95+
- `summary`
96+
97+
Maintainer-only fields for v1:
98+
99+
- `preferenceScore`
100+
- `officialReviewMd`
101+
- `competitorSlugs`
102+
- moderation fields
103+
104+
### Admin flow
105+
106+
- Add `/admin/ecosystem`
107+
- Add `/admin/ecosystem/[id]`
108+
- Let maintainers moderate submissions
109+
- Let maintainers edit all listing fields
110+
- Let maintainers set `preferenceScore`
111+
- Let maintainers author `officialReviewMd`
112+
- Let maintainers manage `competitorSlugs`
113+
114+
### Account flow
115+
116+
- Add `/account/ecosystem`
117+
- Let users view, edit, and delete their own submissions
118+
- Keep this separate from `/account/integrations`, which already means something else
119+
120+
## Seeding Plan
121+
122+
- Seed existing partners into the ecosystem table when the DB work starts
123+
- Preserve current partner ids as ecosystem slugs for partner-backed entries
124+
- Seed `preferenceScore` from the existing `partners[].score` values
125+
- Start seeded partner entries as `approved`
126+
- Keep the current score scale and revisit later if needed
127+
128+
## Suggested Implementation Order
129+
130+
1. Add ecosystem capability, enums, and DB schema
131+
2. Add ecosystem server functions and query options
132+
3. Seed partner rows into the new table
133+
4. Build `/ecosystem` index and `/ecosystem/[slug]`
134+
5. Build `/ecosystem/submit` and edit flows
135+
6. Build `/account/ecosystem`
136+
7. Build `/admin/ecosystem`
137+
8. Add SEO metadata and JSON-LD
138+
9. Run `pnpm test`
139+
140+
## Notes
141+
142+
- Reuse showcase architecture patterns, not the showcase schema
143+
- Keep the implementation intentionally small at first
144+
- Avoid over-modeling comparison data until real usage demands it
145+
- Partner pages ship first; ecosystem follows later

0 commit comments

Comments
 (0)