Files
hanzo.ai/lib/constants/sms-consent.ts
zeekayandHanzo Dev 03d10297b6 types: zero errors, and the checker is back on
The last 39 errors were not noise — most marked v8 props that silently did
nothing at runtime:

- gui 8 renamed `animation` to `transition`; the old name was inert in JSX
  spreads, so faq's disclosure and page-kit's rise had no easing at all.
- v4 media keys are mobile-first: `$gtSm`/`$gtLg` no longer exist, so the
  wide gutter and grid columns never applied. Now `$sm`/`$lg`.
- ModelStatus comparisons tested `contact-sales`/`coming-soon`, which the
  @zenlm/models union does not contain: dead in both directions — no badge
  ever rendered, and 8 weightless models linked to fabricated
  huggingface.co/zenlm/<id> 404s. `cloud-only` is the real status.
- gui TextArea emits the VALUE, not a DOM event — onChange handlers typed
  for textarea routed nothing; now onChangeText.
- `theme="active"` names a sub-theme this config does not declare; the
  primary Export button looked identical to Filter. Emphasis from tokens.
- Raw CSS (color-mix, var() tracking/leading, display:grid) moves to the
  `style` prop — gui's escape hatch — instead of posing as tokens.
- hooks/use-toast.ts deleted: the last shadcn artefact; its 3 callers now
  use @hanzo/ui's toast.
- sitemap: explicit encoding on both readdirSync calls, or @types/node
  resolves the Buffer overloads.

tsc: 743 -> 0. typescript.ignoreBuildErrors and eslint.ignoreDuringBuilds
are DELETED from next.config.mjs; the build now runs both and exits 0
(709 pages; /models count follows the live catalog — 374 models today).
Homepage 46,904 bytes, zero inline <style>.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-31 11:22:15 -07:00

18 lines
1.0 KiB
TypeScript

/**
* Canonical A2P consent copy. This EXACT disclosure is reused at every point
* where Hanzo collects a phone number for messaging — the public opt-in form at
* /sms-opt-in, and the phone-login / 2FA step in IAM (iam.hanzo.ai) and
* hanzo.id. Keep the three surfaces in sync; carriers/Twilio review the wording.
*
* It lives here rather than in the page because an App Router route module may
* only export the route contract (default, metadata, generateStaticParams, …).
* Anything else fails Next's generated route type — which is the right rule:
* shared copy is not part of a route's interface.
*/
export const SMS_CONSENT_TEXT =
"I agree to receive text messages (SMS) from Hanzo AI at the number provided, " +
"including one-time passcodes and two-factor authentication, account and security " +
"alerts, and transactional notifications. Message frequency varies. Message and data " +
"rates may apply. Reply STOP to opt out at any time, or HELP for help. Consent is not " +
"a condition of any purchase."