Skip to content

Commit 1e60c71

Browse files
authored
feat: update sponsorship details and add security policy documentation (jbetancur#1329)
1 parent ea34ccb commit 1e60c71

9 files changed

Lines changed: 263 additions & 86 deletions

File tree

.github/FUNDING.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ github: [jbetancur]
44
# patreon: # Replace with a single Patreon username
55
open_collective: react-data-table-component
66
# ko_fi: # Replace with a single Ko-fi username
7-
# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
7+
tidelift: npm/react-data-table-component
88
# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
99
# liberapay: # Replace with a single Liberapay username
1010
# issuehunt: # Replace with a single IssueHunt username

CLAUDE.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,33 @@ Rules:
9595

9696
---
9797

98+
## Sponsors and backers
99+
100+
Tier definitions must stay in sync across three places:
101+
102+
1. `README.md` tier table (canonical wording for perks and pricing).
103+
2. `apps/docs/src/pages/support.astro` tier cards, including the `ocSlug` Open Collective checkout links.
104+
3. The GitHub Sponsors and Open Collective dashboards. These are manual and John-only: never assume they changed, and remind John to update them whenever tiers change.
105+
106+
Open Collective slugs survive tier renames, so they may not match the tier name (Supporter uses `backer-14044`, Backer uses `sponsor-14045`). Verify live tiers by fetching `https://opencollective.com/react-data-table-component`.
107+
108+
**Adding a backer (Backer tier, $20/mo recurring, and above):**
109+
110+
- Add to the `backers` array at the top of `support.astro` and to the `## Backers` list in `README.md`.
111+
- Recurring sponsors only. One-time donors never go in these lists, regardless of amount.
112+
- Link only their Open Collective or GitHub profile, verified against the collective's contributor list. Never guess personal sites or emails.
113+
114+
**Adding a logo sponsor:**
115+
116+
- Bronze ($100): small logo in the docs footer (`apps/docs/src/layouts/Layout.astro`) + small logo in README.
117+
- Silver ($200): medium logo in the docs sidebar (`apps/docs/src/layouts/DocsLayout.astro`) + logo in README.
118+
- Gold ($500): homepage sponsors section (`apps/docs/src/pages/index.astro`, replace the "Be the first to sponsor" placeholder) + top placement in README. Limited to 3.
119+
- Logos are curated by hand: get the asset and target URL from John, never source logos yourself.
120+
121+
The contact email is `sponsors@reactdatatable.com` (Cloudflare Email Routing alias). It must never appear in static HTML; on the site it is assembled client-side from `data-user`/`data-domain` attributes (see the contact block in `support.astro`).
122+
123+
---
124+
98125
## Release process
99126

100127
Releases are triggered manually via the **Release** GitHub Actions workflow (`workflow_dispatch`). Before triggering:

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,22 @@ Sponsoring puts your company logo in front of ~215k developers a week: in the RE
5151
| Tier | Price/month | Perk |
5252
| --- | --- | --- |
5353
| ☕ Supporter | $5 | Your name in the README supporters list |
54-
| 🎗 Backer | $20 | Name + link in README |
54+
| 🎗 Backer | $20 | Name + link in README + listed in the Backers section on reactdatatable.com |
5555
| 🥉 Bronze | $100 | Priority issue triage + small logo in README + docs site footer |
5656
| 🥈 Silver | $200 | Priority issue triage + medium logo in README + docs site sidebar |
57-
| 🥇 Gold | $500 | Priority issue triage + large logo in README + hero spot on reactdatatable.com. Limited to 3. |
57+
| 🥇 Gold | $500 | Priority issue triage + direct maintainer line + large logo in README + hero spot on reactdatatable.com. Limited to 3. |
5858

5959
[![Sponsor on GitHub Sponsors](https://img.shields.io/badge/Sponsor-GitHub%20Sponsors-ea4aaa?logo=github)](https://github.com/sponsors/jbetancur)
6060
[![Sponsor on OpenCollective](https://img.shields.io/badge/Sponsor-OpenCollective-blue?logo=opencollective)](https://opencollective.com/react-data-table-component)
6161

62+
## Enterprise support
63+
64+
Available as part of the Tidelift Subscription.
65+
66+
The maintainer of react-data-table-component and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-react-data-table-component?utm_source=npm-react-data-table-component&utm_medium=referral&utm_campaign=readme)
67+
68+
<!-- TODO: replace the Tidelift link above with the exact referral URL from the dashboard's "Promote the Tidelift Subscription" marketing task. -->
69+
6270
## Need help?
6371

6472
Open a [GitHub issue](https://github.com/jbetancur/react-data-table-component/issues). Priority support is available for teams that [sponsor the project](https://github.com/sponsors/jbetancur).

SECURITY.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Security Policy
2+
3+
## Supported versions
4+
5+
| Version | Supported |
6+
| ------- | --------- |
7+
| 8.x | Yes |
8+
| < 8.0 | No |
9+
10+
## Reporting a vulnerability
11+
12+
Please do not open a public issue for security reports.
13+
14+
Report vulnerabilities privately using one of:
15+
16+
1. **GitHub private vulnerability reporting** (preferred): use the [Report a vulnerability](https://github.com/jbetancur/react-data-table-component/security/advisories/new) form on this repository.
17+
2. **Email**: <security@reactdatatable.com>
18+
19+
You will receive an acknowledgment within 5 business days. Once the report is validated, a fix will be prioritized and released as a patch to the current major version, followed by a coordinated disclosure through a GitHub Security Advisory crediting the reporter.
20+
21+
## Scope
22+
23+
react-data-table-component is a client-side UI library. Reports most likely to qualify: XSS via table data or props, prototype pollution, and supply-chain issues in the published npm package. The library has zero runtime dependencies, which keeps the supply-chain surface small.

apps/docs/src/layouts/DocsLayout.astro

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,7 @@ const nextLink = currentIndex < allLinks.length - 1 ? allLinks[currentIndex + 1]
135135
</select>
136136
</div>
137137
<a
138-
href="https://github.com/sponsors/jbetancur"
139-
target="_blank"
140-
rel="noopener noreferrer"
138+
href="/support"
141139
class="block rounded-lg border border-pink-100 bg-pink-50 px-3 py-2.5 hover:border-pink-200 hover:bg-pink-100 transition-colors"
142140
>
143141
<div class="flex items-center gap-1.5 text-xs font-semibold text-pink-600">

apps/docs/src/layouts/Layout.astro

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ const {
6161
GitHub
6262
</a>
6363
<a
64-
href="https://github.com/sponsors/jbetancur"
65-
target="_blank"
66-
rel="noopener noreferrer"
64+
href="/support"
6765
class="flex items-center gap-1 hover:text-pink-500 transition-colors"
6866
aria-label="Sponsor this project"
6967
>
@@ -124,7 +122,7 @@ const {
124122
<a href="/docs/api" class="block px-2 py-2 rounded-md text-gray-700 hover:bg-gray-50 hover:text-gray-900">API</a>
125123
<a href="/support" class="block px-2 py-2 rounded-md text-gray-700 hover:bg-gray-50 hover:text-gray-900">Support</a>
126124
<a href="https://github.com/jbetancur/react-data-table-component" target="_blank" rel="noopener noreferrer" class="block px-2 py-2 rounded-md text-gray-700 hover:bg-gray-50 hover:text-gray-900">GitHub ↗</a>
127-
<a href="https://github.com/sponsors/jbetancur" target="_blank" rel="noopener noreferrer" class="block px-2 py-2 rounded-md text-pink-500 hover:bg-pink-50">♥ Sponsor</a>
125+
<a href="/support" class="block px-2 py-2 rounded-md text-pink-500 hover:bg-pink-50">♥ Sponsor</a>
128126
<div class="pt-2">
129127
<a href="/docs/getting-started" class="block w-full text-center bg-brand-600 text-white px-4 py-2 rounded-md hover:bg-brand-700 font-medium">Get started →</a>
130128
</div>

apps/docs/src/pages/index.astro

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ function fmt(n: number): string {
4242
</div>
4343

4444
<h1 class="text-5xl font-bold tracking-tight text-gray-900 max-w-3xl mx-auto leading-tight">
45-
A data table that just<br />
46-
<span class="text-brand-600">works out of the box</span>
45+
A working data table<br />
46+
<span class="text-brand-600">in 10 lines of React</span>
4747
</h1>
4848

4949
<p class="mt-5 text-lg text-gray-500 max-w-xl mx-auto">
50-
Sorting, pagination, row selection, theming, expandable rows, all included. No boilerplate. No styling work. No
51-
$999 license.
50+
Sorting, pagination, row selection, theming, and expandable rows, all included. No boilerplate. No CSS
51+
file. No paid tier.
5252
</p>
5353

5454
<div class="mt-8 flex items-center justify-center gap-4">
@@ -215,7 +215,11 @@ export default function App() {
215215
<!-- Comparison table -->
216216
<section class="bg-gray-50 py-20">
217217
<div class="max-w-4xl mx-auto px-6">
218-
<h2 class="text-2xl font-bold text-center text-gray-900 mb-10">How it compares</h2>
218+
<h2 class="text-2xl font-bold text-center text-gray-900 mb-3">How it compares</h2>
219+
<p class="text-center text-sm text-gray-500 max-w-2xl mx-auto mb-10">
220+
All four are solid choices. The difference is how much you assemble yourself. This library optimizes
221+
for a styled, working table with the least code, not for the largest feature surface.
222+
</p>
219223
<div class="overflow-x-auto">
220224
<table
221225
class="w-full text-sm border-collapse bg-white rounded-xl overflow-hidden shadow-sm border border-gray-200"
@@ -225,31 +229,40 @@ export default function App() {
225229
<th class="text-left px-4 py-3 text-gray-600 font-medium"></th>
226230
<th class="text-center px-4 py-3 text-gray-600 font-medium">TanStack Table</th>
227231
<th class="text-center px-4 py-3 text-gray-600 font-medium">AG Grid Community</th>
232+
<th class="text-center px-4 py-3 text-gray-600 font-medium">MUI X Data Grid</th>
228233
<th class="text-center px-4 py-3 text-brand-700 font-semibold bg-brand-50">This library</th>
229234
</tr>
230235
</thead>
231236
<tbody>
232237
{
233238
[
234-
['Setup effort', 'High (headless)', 'Medium', 'Low'],
235-
['Styling required', 'Yes', 'No', 'No'],
236-
['Built-in pagination', 'DIY', '', ''],
237-
['Built-in sorting', 'DIY', '', ''],
238-
['Row selection', 'DIY', '', ''],
239-
['Expandable rows', 'DIY', '', ''],
240-
['Zero peer deps', '', '', ''],
241-
['Price', 'Free', 'Free', 'Free'],
242-
].map(([feature, tanstack, ag, rdt], i) => (
239+
['Approach', 'Headless', 'Full data grid', 'Full data grid', 'Full component'],
240+
['Styled table out of the box', 'You build the UI', '', '', ''],
241+
['Sorting, pagination & selection UI', 'State only', '', '', ''],
242+
['Expandable row panels', 'State only', 'Enterprise tier', 'Pro tier', ''],
243+
['Dark mode & themes', 'Bring your own', ' built-in', 'Via MUI theme', '5 built-in'],
244+
['Requires a UI framework', 'No', 'No', '@mui/material + Emotion', 'No'],
245+
['Size (min+gzip)', '~15 KB', '~338 KB', '~117 KB + MUI', '~35 KB'],
246+
['Paid tiers', 'None', 'Enterprise', 'Pro & Premium', 'None'],
247+
].map(([feature, tanstack, ag, mui, rdt], i) => (
243248
<tr class={i % 2 === 0 ? 'bg-white' : 'bg-gray-50/50'}>
244249
<td class="px-4 py-2.5 text-gray-700 font-medium">{feature}</td>
245250
<td class="px-4 py-2.5 text-center text-gray-500">{tanstack}</td>
246251
<td class="px-4 py-2.5 text-center text-gray-500">{ag}</td>
252+
<td class="px-4 py-2.5 text-center text-gray-500">{mui}</td>
247253
<td class="px-4 py-2.5 text-center text-brand-700 font-medium bg-brand-50/30">{rdt}</td>
248254
</tr>
249255
))
250256
}
251257
</tbody>
252258
</table>
259+
<p class="text-center text-sm text-gray-500 mt-6 max-w-2xl mx-auto">
260+
They're all great at what they do. This one's for when you want a styled, sortable,
261+
paginated table working today, with nothing to configure and no tier to upgrade to.
262+
</p>
263+
<p class="text-center text-xs text-gray-400 mt-1">
264+
Sizes are min+gzip via Bundlephobia, July 2026 (TanStack v8.21, AG Grid v36, MUI X v9.8).
265+
</p>
253266
</div>
254267
</div>
255268
</section>
@@ -258,43 +271,23 @@ export default function App() {
258271
<section class="max-w-4xl mx-auto px-6 py-20 text-center">
259272
<h2 class="text-xl font-semibold text-gray-900 mb-2">Sponsors</h2>
260273
<p class="text-sm text-gray-500 mb-8">
261-
Actively maintained since 2018. If your team ships products with it, consider sponsoring — it funds bug
274+
Actively maintained since 2018. If your team ships products with it, consider sponsoring. It funds bug
262275
fixes and keeps pace with the React ecosystem.
263276
</p>
264277

265-
<!-- Sponsor logo slots — replace with real logos as sponsors sign on -->
266-
<div class="flex flex-wrap items-center justify-center gap-6 mb-8 min-h-[64px]">
278+
<!-- First sponsor slot, add more logos as sponsors sign on -->
279+
<div class="flex flex-wrap items-center justify-center gap-6 mb-8">
267280
<a
268-
href="https://github.com/sponsors/jbetancur"
269-
target="_blank"
270-
rel="noopener noreferrer"
271-
class="flex items-center justify-center w-40 h-16 border-2 border-dashed border-gray-200 rounded-xl text-xs text-gray-400 hover:border-brand-300 hover:text-brand-500 transition-colors"
272-
>
273-
Your logo here
274-
</a>
275-
<a
276-
href="https://github.com/sponsors/jbetancur"
277-
target="_blank"
278-
rel="noopener noreferrer"
279-
class="flex items-center justify-center w-40 h-16 border-2 border-dashed border-gray-200 rounded-xl text-xs text-gray-400 hover:border-brand-300 hover:text-brand-500 transition-colors"
280-
>
281-
Your logo here
282-
</a>
283-
<a
284-
href="https://github.com/sponsors/jbetancur"
285-
target="_blank"
286-
rel="noopener noreferrer"
287-
class="flex items-center justify-center w-40 h-16 border-2 border-dashed border-gray-200 rounded-xl text-xs text-gray-400 hover:border-brand-300 hover:text-brand-500 transition-colors"
281+
href="/support"
282+
class="flex items-center justify-center gap-2 h-16 px-6 border-2 border-dashed border-gray-200 rounded-xl text-sm text-gray-400 hover:border-brand-300 hover:text-brand-500 transition-colors"
288283
>
289-
Your logo here
284+
<span class="text-lg">♡</span> Be the first to sponsor
290285
</a>
291286
</div>
292287

293288
<div class="flex items-center justify-center gap-4">
294289
<a
295-
href="https://github.com/sponsors/jbetancur"
296-
target="_blank"
297-
rel="noopener noreferrer"
290+
href="/support"
298291
class="bg-brand-600 text-white px-5 py-2 rounded-lg font-medium hover:bg-brand-700 shadow-sm text-sm"
299292
>
300293
Become a sponsor

0 commit comments

Comments
 (0)