|
3 | 3 | import type { ReactNode } from 'react' |
4 | 4 | import SubpageShell from '@/components/SubpageShell' |
5 | 5 |
|
6 | | -const UI = `var(--font-courier), system-ui, sans-serif` |
7 | 6 | const MONO = `var(--font-courier), system-ui, sans-serif` |
8 | 7 |
|
9 | | -function SectionTitle({ children, id }: { children: string; id: string }) { |
10 | | - return ( |
11 | | - <div id={id} style={{ scrollMarginTop: '90px' }}> |
12 | | - <p |
13 | | - style={{ |
14 | | - fontFamily: MONO, |
15 | | - fontSize: '10px', |
16 | | - fontWeight: 700, |
17 | | - letterSpacing: '0.14em', |
18 | | - textTransform: 'uppercase', |
19 | | - color: '#8a8278', |
20 | | - margin: '0 0 8px 0', |
21 | | - }} |
22 | | - > |
23 | | - {children} |
24 | | - </p> |
25 | | - </div> |
26 | | - ) |
| 8 | +type Section = { |
| 9 | + id: string |
| 10 | + heading: string |
| 11 | + body: ReactNode |
27 | 12 | } |
28 | 13 |
|
29 | | -function Para({ children }: { children: ReactNode }) { |
30 | | - return ( |
31 | | - <p |
32 | | - style={{ |
33 | | - fontFamily: UI, |
34 | | - fontSize: 'clamp(14px, 3.8vw, 15px)', |
35 | | - color: '#4a4440', |
36 | | - lineHeight: 1.75, |
37 | | - margin: '0 0 12px 0', |
38 | | - }} |
39 | | - > |
40 | | - {children} |
41 | | - </p> |
42 | | - ) |
43 | | -} |
| 14 | +const SECTIONS: Section[] = [ |
| 15 | + { |
| 16 | + id: 'terms', |
| 17 | + heading: 'Terms of Use', |
| 18 | + body: 'Commitment Issues is a parody / entertainment tool. Generated "death certificates" are not legally valid documents. "Cause of death" labels are algorithmic and should not be treated as factual statements about a person or organization. By using the service you acknowledge we may display your submitted repo name publicly. Terms may update; continued use means acceptance.', |
| 19 | + }, |
| 20 | + { |
| 21 | + id: 'data-sources', |
| 22 | + heading: 'Data Sources', |
| 23 | + body: "The tool analyzes public data from GitHub's public API — repository metadata, commit activity, archive status, open issues. We do not access private code, credentials, or anything not already publicly available on GitHub.", |
| 24 | + }, |
| 25 | + { |
| 26 | + id: 'privacy', |
| 27 | + heading: 'Privacy', |
| 28 | + body: "No accounts. No logins. No passwords collected. When you submit a public GitHub URL or username we use it to fetch public data from GitHub. We store a small recently-buried list on the homepage (repo name, generated cause, score, analyzed timestamp). Nothing sensitive.", |
| 29 | + }, |
| 30 | + { |
| 31 | + id: 'analytics', |
| 32 | + heading: 'Analytics', |
| 33 | + body: 'Privacy-friendly analytics only — aggregate counts, not personal profiles. You can avoid submitting private or sensitive URLs; this tool is intended for public GitHub data only.', |
| 34 | + }, |
| 35 | + { |
| 36 | + id: 'contact', |
| 37 | + heading: 'Contact', |
| 38 | + body: 'For questions or requests: ', |
| 39 | + email: 'dot.systems@proton.me', |
| 40 | + } as Section & { email: string }, |
| 41 | +] |
44 | 42 |
|
45 | 43 | export default function LegalContent() { |
46 | 44 | return ( |
47 | 45 | <SubpageShell |
48 | 46 | title="Legal" |
49 | 47 | subtitle={ |
50 | | - <span style={{ fontFamily: MONO, fontSize: '12px', color: '#7a7268', letterSpacing: '0.04em' }}> |
| 48 | + <span style={{ fontFamily: MONO, fontSize: '12px', color: 'var(--c-muted)', letterSpacing: '0.04em' }}> |
51 | 49 | Terms of use and privacy policy. |
52 | 50 | </span> |
53 | 51 | } |
54 | 52 | microcopy={null} |
55 | | - headerExtra={null} |
56 | 53 | > |
57 | | - <div |
58 | | - className="ux-live-section" |
59 | | - style={{ |
60 | | - width: '100%', |
61 | | - display: 'flex', |
62 | | - flexDirection: 'column', |
63 | | - gap: '12px', |
64 | | - paddingTop: '6px', |
65 | | - }} |
66 | | - > |
67 | | - <div style={{ padding: '20px 18px', border: '2px solid #1a1a1a', background: '#EDE8E1' }}> |
68 | | - <SectionTitle id="terms">Terms</SectionTitle> |
69 | | - <Para> |
70 | | - Commitment Issues is a parody / entertainment tool. Generated “death certificates” are not legally valid documents. |
71 | | - </Para> |
72 | | - <Para> |
73 | | - The tool analyzes public data from GitHub’s public API (for example repository metadata and activity). “Cause of death” |
74 | | - labels and text are algorithmic and should not be treated as factual statements about a person or organization. |
75 | | - </Para> |
76 | | - <Para> |
77 | | - By using the service, you acknowledge that we may process the public repo URL or username you submit and display recent |
78 | | - public “burials” on the homepage (repo name, generated cause, score, and timestamp). We may update these terms from time to |
79 | | - time; continued use means acceptance. |
80 | | - </Para> |
81 | | - </div> |
82 | | - |
83 | | - <div style={{ padding: '20px 18px', border: '2px solid #1a1a1a', background: '#EDE8E1' }}> |
84 | | - <SectionTitle id="privacy">Privacy</SectionTitle> |
85 | | - <Para> |
86 | | - We don’t run accounts, logins, or collect passwords. When you submit a public GitHub URL or username, we use it to fetch |
87 | | - public repository data from GitHub in order to generate results. |
88 | | - </Para> |
89 | | - <Para> |
90 | | - We store a small “recently buried” list shown on the homepage (public repo name/full name plus generated fields like cause, |
91 | | - score, and analyzed timestamp). This is not intended to contain private information. |
92 | | - </Para> |
93 | | - <Para> |
94 | | - We also use privacy-friendly analytics to understand overall feature usage (aggregate counts, not personal profiles). You can |
95 | | - always avoid submitting private or sensitive URLs—this tool is intended for public GitHub data only. |
96 | | - </Para> |
97 | | - <Para> |
98 | | - Questions or requests: <a className="subpage-inline-mail" href="mailto:dot.systems@proton.me">dot.systems@proton.me</a>. |
99 | | - </Para> |
100 | | - </div> |
101 | | - |
| 54 | + <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}> |
| 55 | + {SECTIONS.map((section) => { |
| 56 | + const email = (section as Section & { email?: string }).email |
| 57 | + return ( |
| 58 | + <div |
| 59 | + key={section.id} |
| 60 | + id={section.id} |
| 61 | + className="record-card" |
| 62 | + style={{ border: '2px solid var(--c-border)' }} |
| 63 | + > |
| 64 | + <p className="record-label">{section.heading}</p> |
| 65 | + <p className="record-value" style={{ fontSize: 'clamp(14px, 3.8vw, 15px)', lineHeight: 1.75, color: 'var(--c-ink-2)' }}> |
| 66 | + {section.body} |
| 67 | + {email && ( |
| 68 | + <a |
| 69 | + href={`mailto:${email}`} |
| 70 | + className="subpage-inline-mail" |
| 71 | + style={{ fontFamily: MONO }} |
| 72 | + > |
| 73 | + {email} |
| 74 | + </a> |
| 75 | + )} |
| 76 | + </p> |
| 77 | + </div> |
| 78 | + ) |
| 79 | + })} |
102 | 80 | </div> |
103 | 81 | </SubpageShell> |
104 | 82 | ) |
105 | 83 | } |
106 | | - |
0 commit comments