Skip to content

Commit a2478a6

Browse files
committed
feat: privacy + terms + re-seed the repos
1 parent bb27849 commit a2478a6

13 files changed

Lines changed: 466 additions & 100 deletions

File tree

AGENTS.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ app/
4646
about/page.tsx # who built this and why (footer-linked, E-E-A-T)
4747
roadmap/page.tsx # upcoming versions (from lib/roadmap.ts)
4848
changelog/page.tsx # what's in this build (from lib/changelog.ts)
49+
privacy/page.tsx # privacy policy (footer-linked, AdSense/GDPR/CCPA)
50+
terms/page.tsx # terms of use (footer-linked)
4951
robots.ts # /robots.txt — wildcard + explicit AI-crawler allows
5052
sitemap.ts # /sitemap.xml — static routes + every repo detail page (priority scaled by score)
5153
llms.txt/route.ts # /llms.txt — markdown manifest for LLM crawlers (Perplexity, Claude, ChatGPT search)
@@ -66,7 +68,7 @@ components/ # Tailwind-styled React components
6668
MobileNav.tsx, Pagination.tsx, SearchBar.tsx, SelectMenu.tsx, SortSelect.tsx,
6769
SignalRow.tsx, SuggestionItem.tsx, VersionPill.tsx,
6870
RepoHero.tsx, SignalListCard.tsx, ModelSuggestions.tsx, PerModelScores.tsx,
69-
AlternativesStrip.tsx, BreadcrumbJsonLd.tsx,
71+
AlternativesStrip.tsx, BreadcrumbJsonLd.tsx, ExternalLink.tsx,
7072
BadgeEmbed.tsx, ActionEmbed.tsx, CopySnippet.tsx, PackageLookupForm.tsx,
7173
BackToTop.tsx, GoogleAnalytics.tsx
7274
lib/
@@ -212,7 +214,7 @@ Hooks docs: <https://docs.claude.com/en/docs/claude-code/hooks.html>.
212214

213215
- We `git clone --depth 1 --single-branch` arbitrary URLs — safe by default. We never run post-clone scripts, never `npm install`, never execute code from the clone.
214216
- SQL: all queries parameterised. No interpolation.
215-
- HTML: React auto-escapes. The only `dangerouslySetInnerHTML` is server-built JSON-LD with `<` escaped to `<` (`app/layout.tsx`, `app/page.tsx`, `app/about/page.tsx`, `app/action/page.tsx`, `app/skill/page.tsx`, `app/methodology/page.tsx`, `app/package/[registry]/[name]/page.tsx`, `app/repo/[id]/page.tsx`, plus the `BreadcrumbJsonLd` component used by About / Changelog / Methodology / Packages / Roadmap); never feed user-controlled strings into it.
217+
- HTML: React auto-escapes. The only `dangerouslySetInnerHTML` is server-built JSON-LD with `<` escaped to `<` (`app/layout.tsx`, `app/page.tsx`, `app/about/page.tsx`, `app/action/page.tsx`, `app/skill/page.tsx`, `app/methodology/page.tsx`, `app/package/[registry]/[name]/page.tsx`, `app/repo/[id]/page.tsx`, plus the `BreadcrumbJsonLd` component used by About / Changelog / Methodology / Packages / Privacy / Roadmap / Terms); never feed user-controlled strings into it.
216218
- Local-path mode reads files; never writes outside `data/` and the clone workspace passed to `shallowClone`.
217219
- No auth yet (read-only dashboard). When auth lands (`tasks/0.7.0/01-opt-out-claim-flow.md`), do it via OAuth and gate DB writes per user.
218220

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ app/ Next.js App Router — pages + API + SEO
142142
roadmap/ upcoming versions (from lib/roadmap.ts)
143143
changelog/ what's shipped (from lib/changelog.ts)
144144
about/ independent project, no vendor affiliation (footer-linked, E-E-A-T)
145+
privacy/ privacy policy (footer-linked, AdSense/GDPR/CCPA)
146+
terms/ terms of use (footer-linked)
145147
action/ PR-diff GitHub Action explainer + install snippet
146148
skill/ agent-skill explainer + install command
147149
package/ registry → repo lookup (form + per-package state pages)

app/about/page.tsx

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { ArrowUpRight } from "@phosphor-icons/react/dist/ssr";
21
import type { Metadata } from "next";
32
import Link from "next/link";
3+
44
import { BreadcrumbJsonLd } from "@/components/BreadcrumbJsonLd";
5+
import { ExternalLink } from "@/components/ExternalLink";
56
import { Panel, PanelHeading } from "@/components/Panel";
67
import { APP_NAME, APP_URL, REPO_URL } from "@/lib/version";
78

@@ -60,17 +61,9 @@ export default function AboutPage() {
6061
<Panel>
6162
<PanelHeading>Who</PanelHeading>
6263
<p className="m-0 text-[14.5px] leading-relaxed text-ink-dim">
63-
Built and maintained by{" "}
64-
<a
65-
target="_blank"
66-
rel="noopener noreferrer"
67-
href="https://github.com/hsnice16"
68-
className="inline-flex items-center gap-0.5 border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
69-
>
70-
Himanshu Singh <ArrowUpRight size={11} weight="bold" aria-hidden="true" />
71-
</a>
72-
. Independent project — no affiliation with Anthropic, OpenAI, Google, Cognition, Anysphere, or any of the
73-
agent vendors ranked here.
64+
Built and maintained by <ExternalLink href="https://github.com/hsnice16">Himanshu Singh</ExternalLink>.
65+
Independent project — no affiliation with Anthropic, OpenAI, Google, Cognition, Anysphere, or any of the agent
66+
vendors ranked here.
7467
</p>
7568
</Panel>
7669

@@ -113,17 +106,8 @@ export default function AboutPage() {
113106
<PanelHeading>Open source</PanelHeading>
114107
<p className="m-0 text-[14.5px] leading-relaxed text-ink-dim">
115108
MIT-licensed. The signal definitions, weight profiles, scoring code, seed list, and every score in the
116-
database are all in the{" "}
117-
<a
118-
href={REPO_URL}
119-
target="_blank"
120-
rel="noopener noreferrer"
121-
className="inline-flex items-center gap-0.5 border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
122-
>
123-
source repository <ArrowUpRight size={11} weight="bold" aria-hidden="true" />
124-
</a>
125-
. If a repo&apos;s score looks wrong, file an issue with a link and the rubric to revisit; if a signal is
126-
missing, propose one.
109+
database are all in the <ExternalLink href={REPO_URL}>source repository</ExternalLink>. If a repo&apos;s
110+
score looks wrong, file an issue with a link and the rubric to revisit; if a signal is missing, propose one.
127111
</p>
128112
</Panel>
129113
</div>
@@ -133,16 +117,7 @@ export default function AboutPage() {
133117
<PanelHeading>Contact</PanelHeading>
134118

135119
<p className="m-0 text-[14.5px] leading-relaxed text-ink-dim">
136-
Best signal: open an issue or discussion on{" "}
137-
<a
138-
target="_blank"
139-
rel="noopener noreferrer"
140-
href={`${REPO_URL}/issues`}
141-
className="inline-flex items-center gap-0.5 border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
142-
>
143-
GitHub <ArrowUpRight size={11} weight="bold" aria-hidden="true" />
144-
</a>
145-
.
120+
Best signal: open an issue or discussion on <ExternalLink href={`${REPO_URL}/issues`}>GitHub</ExternalLink>.
146121
</p>
147122
</Panel>
148123
</div>

app/action/page.tsx

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { ArrowUpRight } from "@phosphor-icons/react/dist/ssr";
21
import type { Metadata } from "next";
2+
33
import { ActionEmbed } from "@/components/ActionEmbed";
4+
import { ExternalLink } from "@/components/ExternalLink";
45
import { Panel, PanelHeading } from "@/components/Panel";
56
import { ACTION_REPO_URL, ACTION_USES, APP_KEYWORDS, APP_NAME, APP_URL } from "@/lib/version";
67

@@ -157,14 +158,9 @@ export default function ActionPage() {
157158

158159
<p className="mt-3 text-[13px] text-muted">
159160
Authoritative reference:{" "}
160-
<a
161-
target="_blank"
162-
rel="noopener noreferrer"
163-
href="https://docs.github.com/en/actions/security-guides/encrypted-secrets"
164-
className="inline-flex items-center gap-0.5 border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
165-
>
166-
docs.github.com — encrypted secrets <ArrowUpRight size={11} weight="bold" aria-hidden="true" />
167-
</a>
161+
<ExternalLink href="https://docs.github.com/en/actions/security-guides/encrypted-secrets">
162+
docs.github.com — encrypted secrets
163+
</ExternalLink>
168164
.
169165
</p>
170166
</Panel>
@@ -240,14 +236,9 @@ export default function ActionPage() {
240236
<PanelHeading>Source</PanelHeading>
241237

242238
<p className="m-0 text-[14.5px] leading-relaxed text-ink-dim">
243-
<a
244-
target="_blank"
245-
href={ACTION_REPO_URL}
246-
rel="noopener noreferrer"
247-
className="inline-flex items-center gap-0.5 border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
248-
>
249-
{ACTION_REPO_URL.replace(/^https:\/\//, "")} <ArrowUpRight size={12} weight="bold" aria-hidden="true" />
250-
</a>{" "}
239+
<ExternalLink href={ACTION_REPO_URL} iconSize={12}>
240+
{ACTION_REPO_URL.replace(/^https:\/\//, "")}
241+
</ExternalLink>{" "}
251242
— MIT-licensed, semver-tagged. Listed on the GitHub Marketplace under Code Quality / Continuous Integration.
252243
</p>
253244
</Panel>

app/layout.tsx

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ const FOOTER_LINKS_TOOLS = [
114114
{ href: "/package", label: "Packages" },
115115
];
116116

117+
const FOOTER_LINKS_LEGAL = [
118+
{ href: "/privacy", label: "Privacy" },
119+
{ href: "/terms", label: "Terms" },
120+
];
121+
117122
export default function RootLayout({ children }: { children: React.ReactNode }) {
118123
return (
119124
<html lang="en">
@@ -165,17 +170,20 @@ export default function RootLayout({ children }: { children: React.ReactNode })
165170
</p>
166171

167172
<div className="mt-12 flex flex-col gap-5 sm:flex-row sm:items-start sm:justify-between sm:gap-8">
168-
<p className="m-0 order-2 text-[12px] sm:order-1">
169-
© {new Date().getFullYear()}{" "}
170-
<a
171-
target="_blank"
172-
rel="noopener noreferrer"
173-
href="https://github.com/hsnice16"
174-
className="border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
175-
>
176-
Himanshu Singh
177-
</a>{" "}
178-
·{" "}
173+
<p className="m-0 order-2 flex flex-wrap items-center gap-x-1.5 gap-y-1 text-[12px] sm:order-1">
174+
<span>
175+
© {new Date().getFullYear()}{" "}
176+
<a
177+
target="_blank"
178+
rel="noopener noreferrer"
179+
href="https://github.com/hsnice16"
180+
className="border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
181+
>
182+
Himanshu Singh
183+
</a>
184+
</span>
185+
186+
<span aria-hidden="true">·</span>
179187
<a
180188
target="_blank"
181189
rel="noopener noreferrer"
@@ -184,6 +192,18 @@ export default function RootLayout({ children }: { children: React.ReactNode })
184192
>
185193
MIT
186194
</a>
195+
196+
{FOOTER_LINKS_LEGAL.map((l) => (
197+
<span key={l.href} className="contents">
198+
<span aria-hidden="true">·</span>
199+
<Link
200+
href={l.href}
201+
className="border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
202+
>
203+
{l.label}
204+
</Link>
205+
</span>
206+
))}
187207
</p>
188208

189209
<nav aria-label="Secondary" className="order-1 grid grid-cols-2 gap-x-12 sm:order-2 sm:gap-x-16">

app/methodology/page.tsx

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { ArrowUpRight } from "@phosphor-icons/react/dist/ssr";
21
import type { Metadata } from "next";
32
import Link from "next/link";
43

54
import { BreadcrumbJsonLd } from "@/components/BreadcrumbJsonLd";
5+
import { ExternalLink } from "@/components/ExternalLink";
66
import { Panel, PanelHeading } from "@/components/Panel";
77
import { SIGNALS } from "@/lib/scoring/signals";
88
import { MODELS } from "@/lib/scoring/weights";
@@ -176,16 +176,9 @@ improvement = closing a gap unlocks (1 - pass) × weight / Σweight × 100
176176
const label = lastSeg ? `${host}/${lastSeg}` : host;
177177

178178
return (
179-
<a
180-
key={url}
181-
href={url}
182-
title={url}
183-
target="_blank"
184-
rel="noopener noreferrer"
185-
className="inline-flex items-center gap-0.5 border-b border-dotted border-ink-dim/60 text-ink-dim hover:border-ink-soft hover:text-ink-soft"
186-
>
187-
{label} <ArrowUpRight size={11} weight="bold" aria-hidden="true" />
188-
</a>
179+
<ExternalLink key={url} href={url} title={url}>
180+
{label}
181+
</ExternalLink>
189182
);
190183
})}
191184
</div>

0 commit comments

Comments
 (0)