Skip to content

Commit d95e5ed

Browse files
committed
chore(release): v1.0.0 with ToS compliance review
- Add Vercel ToS compliance review (docs/VERCEL_TOS_REVIEW.md) - Add README disclaimer: unofficial, not affiliated with Vercel - Default export to metadata-only; add --include-readmes opt-in - Strip readme_text from public catalog.json to reduce copyright risk - Bump Python and npm packages to v1.0.0 - Update CHANGELOG and PROJECT_PLAN
1 parent b9628e4 commit d95e5ed

10 files changed

Lines changed: 128 additions & 299 deletions

File tree

CHANGELOG.md

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,30 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [Unreleased]
8+
## [1.0.0] - 2026-07-07
99

1010
### Added
1111

12+
- `vercel-templates recommend <stack>` command in Python and TypeScript.
13+
- Scoring based on frameworks, use cases, databases, CSS, authentication, CMS, title, and description.
14+
- `--require-all-frameworks` flag for strict framework matching.
15+
- REST endpoint `/templates/recommend?stack=...`.
16+
- MCP tool `recommend_templates` in Python and TypeScript MCP servers.
1217
- `vercel-templates diff` command in Python and TypeScript to compare two templates side by side.
1318
- Support for `--json` and `--fields` in the diff command.
1419
- `vercel-templates recent` and `vercel-templates trending` commands in Python and TypeScript.
1520
- REST endpoints `/templates/recent` and `/templates/trending`.
16-
- MCP tools `list_recent_templates` and `list_trending_templates`.
21+
- MCP tools `list_recent_templates` and `list_trending_templates` in Python and TypeScript.
1722
- `--by-category` grouping for trending output.
18-
- `vercel-templates recommend <stack>` command in Python and TypeScript.
19-
- Scoring based on frameworks, use cases, databases, CSS, authentication, CMS, title, and description.
20-
- `--require-all-frameworks` flag for strict framework matching.
21-
- REST endpoint `/templates/recommend?stack=...`.
22-
- MCP tool `recommend_templates`.
23+
- Vercel ToS compliance review (`docs/VERCEL_TOS_REVIEW.md`).
24+
- README disclaimer: unofficial, not affiliated with Vercel.
25+
- `export` now supports `--include-readmes` to opt into full README text.
26+
27+
### Changed
28+
29+
- `export` defaults to metadata-only; full READMEs require `--include-readmes`.
30+
- `catalog.json` redistributed without full README text to reduce copyright risk.
31+
- Python and TypeScript versions bumped to `1.0.0`.
2332

2433
## [0.2.5] - 2026-07-07
2534

@@ -44,23 +53,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4453
### Fixed
4554

4655
- Release workflow race conditions: added concurrency group and npm version-existence check.
47-
- npm version mismatch that caused `v0.2.4` publish to fail.
48-
49-
## [0.2.4] - 2026-07-07
50-
51-
### Added
52-
53-
- `sqlite-vec` vector table and semantic search in Python.
54-
- `nomic-embed-text-v2-moe:latest` embedding model via Ollama with fake fallback.
55-
- `GET /templates/semantic` REST endpoint.
56-
- Tag-based release workflow for PyPI and npm.
57-
58-
## [0.2.3] - 2026-07-06
59-
60-
### Added
61-
62-
- TypeScript port of the scraper, CLI, database, and MCP server.
63-
- npm package `@imkxnny/vercel-templates-discovery`.
6456

6557
## [0.2.0] - 2026-07-05
6658

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Vercel Templates Discovery
22

3-
> Agentic CLI for discovering, indexing, and searching [Vercel Templates](https://vercel.com/templates). No public API exists — this tool fills the gap for agents and developers who want a searchable, local catalog with install commands.
3+
> **Unofficial** agentic CLI for discovering, indexing, and searching [Vercel Templates](https://vercel.com/templates). This project is **not affiliated with, endorsed by, or sponsored by Vercel**. It is an independent community tool that helps users find and install Vercel templates.
4+
>
5+
> No public API for the Vercel Templates gallery exists — this tool fills the gap for agents and developers who want a searchable, local catalog with install commands.
46
57
## Quick start (Python)
68

@@ -29,8 +31,11 @@ vercel-templates semantic "ecommerce" --limit 3
2931
# 5. Show details
3032
vercel-templates show /templates/next.js/chatbot
3133

32-
# 6. Export to JSON
34+
# 6. Export to JSON (metadata only by default; omit full READMEs)
3335
vercel-templates export --output templates.json
36+
37+
# Include full READMEs in the export (not recommended for public redistribution)
38+
vercel-templates export --output templates.json --include-readmes
3439
```
3540

3641
## Quick start (TypeScript / WSL)

catalog.json

Lines changed: 0 additions & 267 deletions
Large diffs are not rendered by default.

docs/PROJECT_PLAN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ Become the standard agentic discovery layer for Vercel Templates — a searchabl
6969
- [x] Diff / compare templates
7070
- [x] Trending / newly added templates
7171
- [x] Template recommendation by stack / features
72-
73-
### M6 — Publish & community (partially done)
72+
- [x] Vercel ToS review before public launch
73+
- [x] Public release v1.0.0
7474
*Goal: make the project public and maintainable.*
7575

7676
- [x] Public GitHub repo

docs/VERCEL_TOS_REVIEW.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# Vercel ToS / Compliance Review
2+
3+
**Scope:** Whether the `vercel-templates-discovery` project can publicly index and redistribute metadata from `https://vercel.com/templates`.
4+
5+
**Review date:** 2026-07-07
6+
**Documents reviewed:**
7+
- Vercel Terms of Service (saved locally as `Terms of Service.html`, source `https://vercel.com/legal/terms`)
8+
- Vercel robots.txt (`https://vercel.com/robots.txt`)
9+
10+
## robots.txt
11+
12+
```text
13+
User-Agent: *
14+
Content-Signal: search=yes, ai-input=yes, ai-train=no
15+
16+
Allow: /api/og/*
17+
Allow: /api/docs-og*
18+
Allow: /api/product-og*
19+
Allow: /api/dynamic-og*
20+
Allow: /api/model-og*
21+
Allow: /api/www/avatar/*
22+
23+
Disallow:
24+
Disallow: /api/
25+
Disallow: /oauth
26+
Disallow: /confirm
27+
Disallow: /notifications
28+
Disallow: /old-browser.html
29+
Disallow: /preauthorize
30+
Disallow: /signup?*
31+
Disallow: /invites/
32+
33+
Sitemap: https://vercel.com/sitemap.xml
34+
```
35+
36+
`/templates` is **not** listed in `Disallow`. The empty `Disallow:` directive (without a path) does not block anything; the explicit disallowed paths do not include the templates gallery.
37+
38+
## Relevant Terms of Service clauses
39+
40+
### Section 2 — Temporary Use License
41+
Grants a personal, non-exclusive, non-transferable, limited license to use the Services for internal business or personal purposes. This is primarily about account holders using Vercel's platform, not about browsing public marketing pages.
42+
43+
### Section 3 — Your Content
44+
Covers content users upload/post to Vercel. Does not apply to publicly visible template listings we read without an account.
45+
46+
### Section 7 — Acceptable Use
47+
Requires compliance with the [Acceptable Use Policy](https://vercel.com/legal/acceptable-use-policy). Notably, it does not prohibit automated access to public pages per se.
48+
49+
### Section 8 — Etiquette
50+
Vercel may monitor use and prohibit activity it believes violates terms. This gives Vercel broad discretion but does not create an explicit scraping ban.
51+
52+
### Section 11 — Usage Restrictions
53+
The most relevant section. Prohibits:
54+
- (iii) unauthorized access to Services or related systems/networks
55+
- (vi) violation of applicable laws or infringement of third-party rights
56+
57+
Key question: Is automated, public, read-only access to the marketing/templates gallery "unauthorized access"? The terms do not explicitly define it, and the pages are published without authentication. robots.txt does not block it. This is a **gray area** rather than a clear violation.
58+
59+
### Section 14 — Representations
60+
Users must not infringe third-party IP, privacy, or publicity rights. Template metadata (title, description, GitHub URL, install command) is generally factual and publicly displayed, but the README text and page copy may contain copyrightable content.
61+
62+
### Section 15 — Indemnification
63+
Users indemnify Vercel for breaches, infringement claims, or misuse of Services.
64+
65+
## Risk assessment
66+
67+
| Risk | Level | Notes |
68+
|------|-------|-------|
69+
| Breach of ToS for scraping public pages | **Low to medium** | No explicit ban; robots.txt allows; pages are public and unauthenticated. |
70+
| Copyright in template descriptions/READMEs | **Medium** | Vercel or template authors may own copyright in descriptions and README text. We should not publish full READMEs verbatim. |
71+
| Trademark use of "Vercel" / template names | **Low** | Nominative use to identify the service is generally acceptable; avoid implying official affiliation. |
72+
| Rate-limiting / abuse | **Low** | Current implementation uses delays, concurrency limits, and a realistic User-Agent. |
73+
| Vercel changing terms or robots.txt | **Medium** | Any future change could require re-evaluation. |
74+
75+
## Mitigations already in place
76+
77+
- Public pages only; no login or API credentials used.
78+
- `robots.txt` is respected (`/templates` is allowed).
79+
- Rate limiting: delays between category requests, limited concurrency.
80+
- Realistic browser User-Agent.
81+
- No mutation of Vercel systems; read-only indexing.
82+
- Metadata is stored locally; the published `catalog.json` is a user-generated export.
83+
84+
## Recommended mitigations before v1.0.0
85+
86+
1. **Disclaim official affiliation.** README and documentation should state clearly: "This is an unofficial community tool and is not affiliated with or endorsed by Vercel."
87+
2. **Limit redistribution of verbatim content.** Do not publish full READMEs or long excerpts from Vercel template detail pages in `catalog.json` or releases. Keep published data to metadata only (title, slug, framework, GitHub URL, install command, short description).
88+
3. **Respect future robots.txt changes.** Add a nightly check that aborts indexing if `/templates` becomes disallowed.
89+
4. **Document fair-use intent.** Explain that the tool helps users discover Vercel templates and always links back to the original Vercel pages and GitHub repositories.
90+
5. **Consider contacting Vercel.** For a definitive green light, ask Vercel via their support or open-source team whether a read-only community index of the templates gallery is acceptable. This is the only way to eliminate legal uncertainty completely.
91+
92+
## Conclusion
93+
94+
A public v1.0.0 release appears **defensible** under current Vercel terms and robots.txt, provided the project remains read-only, respects rate limits, does not claim affiliation with Vercel, and avoids publishing substantial verbatim copyrighted content. The remaining legal risk is moderate and can be further reduced by adding the recommended mitigations and, ideally, obtaining explicit permission from Vercel.
95+
96+
**Decision:** Proceed to v1.0.0 after implementing the mitigations above, with a note that this is an ongoing legal risk to monitor.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "vercel-templates-discovery"
7-
version = "0.2.5"
7+
version = "1.0.0"
88
description = "Agentic CLI for discovering and searching Vercel Templates"
99
readme = "README.md"
1010
requires-python = ">=3.10"

ts/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@imkxnny/vercel-templates-discovery",
3-
"version": "0.2.5",
3+
"version": "1.0.0",
44
"description": "Agentic discovery for Vercel Templates",
55
"type": "module",
66
"main": "dist/index.js",

ts/src/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const program = new Command();
77
program
88
.name("vercel-templates")
99
.description("Agentic discovery for Vercel Templates")
10-
.version("0.2.5");
10+
.version("1.0.0");
1111

1212
function parseConcurrency(raw: string | undefined): number {
1313
const n = raw === undefined ? 8 : Number(raw);

vercel_templates/cli.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,13 @@ def diff(
209209
def export(
210210
output: str = typer.Option("templates.json", "--output", "-o", help="JSON output path"),
211211
limit: int | None = typer.Option(None, "--limit", "-n", help="Limit number of templates"),
212+
include_readmes: bool = typer.Option(False, "--include-readmes", help="Include full README text in export (may raise copyright concerns)"),
212213
) -> None:
213214
"""Export the indexed templates to JSON."""
214215
scraper = VercelTemplateScraper()
215216
templates = scraper.all_templates(limit=limit)
217+
if not include_readmes:
218+
templates = [{k: v for k, v in t.items() if k != "readme_text"} for t in templates]
216219
with open(output, "w", encoding="utf-8") as f:
217220
json.dump(templates, f, indent=2, ensure_ascii=False)
218221
console.print(f"[bold green]Exported {len(templates)} templates to {output}[/bold green]")

0 commit comments

Comments
 (0)