Stage 1 of #65: this issue's original two lists. The type-checked gate it also owns follows in later stages. Nine files imported antd from the barrel while the rest of the codebase used deep imports from antd/es. Both resolve to the same modules under antd v5 and Vite, so this is not the tree-shaking problem it would have been under v4 — the cost was that a documented convention had two spellings, and nobody reading a file could tell whether its style was deliberate or just old. Eighty-two imports converted, and every antd/es path was checked to exist before generating any of them rather than trusting a name-mangling rule. The three `client: any` parameters in cartCheckout are now PoolClient. These functions run inside a transaction, and `any` removed exactly the check that would catch a pool-versus-client mix-up — which in this codebase means a query silently running outside the transaction it was meant to be part of, on the path that takes money. publicCustomer took `any` and now takes a CustomerRow describing what it actually reads. Typed as its own shape rather than the whole table so that adding a column later — a password hash, a token, an internal note — cannot quietly start being echoed back to a customer. The three `(window as any).paypal` casts are replaced by a declared interface for the injected SDK. It is deliberately narrow: it describes the three things this app calls, not the whole SDK, because a wider guess would be fiction and a wrong shape typed confidently is worse than an honest cast. The property is optional, since the SDK is absent until its script has loaded — which is the check both call sites already make. Verified: 141 unit, 169 integration and 94 end-to-end passing. The end-to-end run is the one that matters here — an antd import migration can build cleanly and still break at runtime through styles or context, so a green tsc proves less than it appears to. Lint drops from 8 warnings to 4 in the backend and 30 to 27 in the frontend, all of them the no-explicit-any this change removed. As a side effect the no-unsafe count that later stages exist to clear falls from 259 to 216 in the backend and 73 to 67 in the frontend, measured rather than estimated. Refs #65 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
52 lines
2.2 KiB
TypeScript
Executable File
52 lines
2.2 KiB
TypeScript
Executable File
import Typography from 'antd/es/typography';
|
|
import Card from 'antd/es/card';
|
|
|
|
const { Title, Paragraph } = Typography;
|
|
|
|
export default function PrivacyPolicy() {
|
|
return (
|
|
<div style={{ maxWidth: 720, margin: '48px auto', padding: '0 16px' }}>
|
|
<Card>
|
|
<Title level={2}>Privacy Policy</Title>
|
|
<Paragraph type="secondary">
|
|
This is a general-purpose starter policy. Have it reviewed by a lawyer before relying on it —
|
|
it is not legal advice and may not reflect your specific obligations.
|
|
</Paragraph>
|
|
|
|
<Title level={4}>What we collect</Title>
|
|
<Paragraph>
|
|
If you create an account, we collect your email address, name (optional), and a securely
|
|
hashed password. If you make a purchase, we record the item, amount, and payment processor
|
|
transaction reference. We do not store your card or PayPal login details — payment is handled
|
|
entirely by our payment processor.
|
|
</Paragraph>
|
|
|
|
<Title level={4}>Marketing emails</Title>
|
|
<Paragraph>
|
|
We only send you marketing emails if you explicitly opt in during signup or in your account
|
|
settings. You can withdraw consent at any time from your account page, or via the unsubscribe
|
|
link included in every marketing email — no login required.
|
|
</Paragraph>
|
|
|
|
<Title level={4}>Your rights</Title>
|
|
<Paragraph>
|
|
You may request a copy of your data ("Download my data" in your account page), or delete your
|
|
account entirely at any time. Deleting your account removes your personal information; past
|
|
order records are retained in anonymized form for accounting purposes.
|
|
</Paragraph>
|
|
|
|
<Title level={4}>Data retention</Title>
|
|
<Paragraph>
|
|
Account data is retained until you delete your account. Order records are retained as required
|
|
for financial recordkeeping, disconnected from your identity upon account deletion.
|
|
</Paragraph>
|
|
|
|
<Title level={4}>Contact</Title>
|
|
<Paragraph>
|
|
For privacy questions or data requests, contact us at the email address listed on this site.
|
|
</Paragraph>
|
|
</Card>
|
|
</div>
|
|
);
|
|
}
|