Commit Graph

420 Commits

Author SHA1 Message Date
bef8f8414b utilization reduction 2026-09-22 16:38:43 -04:00
f3e9cdf0bd fix sentry + note email delivery 2026-09-06 13:53:49 -04:00
7ecc0f68d7 increase width cap 2026-09-06 01:08:52 -04:00
00a26a9e49 resized+compressed 2026-09-06 01:06:58 -04:00
163c68fcb8 new with temp demo 2026-09-05 20:02:10 -04:00
3149eba196 fix missing height 2026-09-05 17:20:12 -04:00
bc65789431 fix mobile overlap 2026-09-05 16:59:36 -04:00
21f1f07a99 fix download routing, fix layout shift 2026-09-05 16:45:40 -04:00
23f86681af better feature design 2026-09-05 16:06:27 -04:00
8492821f75 better fan ui 2026-09-05 15:08:36 -04:00
17bb43851e midway 2026-09-05 10:33:26 -04:00
fd68efdb78 nook bug reporting handler 2026-09-01 17:44:20 -04:00
1ee61d8fe4 remove "The Nook" in license key phrasing 2026-08-28 14:15:40 -04:00
6c024342ba fixed privacy routing 2026-08-28 13:16:28 -04:00
9860213760 remove - Michael 2026-08-27 23:29:01 -04:00
cb584f8b68 license resend, license pretified 2026-08-27 23:03:33 -04:00
8c5fe25c2b fix email trigger 2026-08-27 20:42:17 -04:00
22f40b2284 favicons 2026-08-27 14:18:12 -04:00
b10a81068d nook icon 2026-08-27 13:38:19 -04:00
6d3315c71f fix nook subdomain routing 2026-08-27 13:06:41 -04:00
20944bf46e update nook brand color 2026-08-27 11:58:54 -04:00
a161c96b05 nook: surface per-license maxDevices in activate + status responses 2026-08-27 09:26:14 -04:00
082e503d4f nook: per-license device caps + grant CLI for free licenses 2026-08-27 09:16:31 -04:00
0031055315 nook: fix idempotent reactivation SQL bind (row object -> id) 2026-08-27 08:55:51 -04:00
9ae1b8a2e5 nook: commit license keygen script (blind-spot scripts/ ignore) 2026-08-27 08:55:45 -04:00
e4a9be4899 prep for the nook 2026-08-26 17:41:57 -04:00
898c891bd5 chore: remediate pygienium audit findings
Dead code: 77 verified-unused exports, files (BackArrow, MenuBars,
cookies.ts, db/create.ts, schemas/comment.ts, security-headers.ts) and
12 unused dependencies removed
Comments: ~370 RESTATE comments stripped across 53 files; 2 verbose
blocks tightened; dead commented-out config removed
Complexity: bulkUpsert extracted into 11 per-entity helpers (CCN 156->~10);
login formHandler split into 3 submitters (CCN 63->~5); account page render
split into 8 section components (CCN 40); updatePost SQL builder rebuilt;
assert*Owned consolidated behind generic assertOwnedBy
Defensive guards: 4 redundant rethrow/nullish guards removed
2026-08-11 13:36:18 -04:00
33ca9213f2 fix: root /downloads button fix, subdomain footer fix 2026-07-28 14:25:15 -04:00
34db684fe1 subdomain footer 2026-07-27 16:34:32 -04:00
2f1b5f35c6 fix: color and blog fixes, favicon pointers 2026-07-27 15:47:59 -04:00
44b6e7595c fix: subdomain routing fixed, favicon bundles 2026-07-27 14:01:50 -04:00
5ddbfbc429 fix: subdomain capture 2026-07-26 09:53:20 -04:00
ad5221dc35 fix: stop toggle from triggering overflow 2026-07-24 22:32:01 -04:00
5eecb8e7d1 fix: correct DarkModeToggle sig 2026-07-24 22:28:25 -04:00
c66cd6d456 nav color fixes, cache busting 2026-07-24 15:26:36 -04:00
4b663c014a feat: (lineage) quest event json 2026-07-24 08:56:35 -04:00
9e285570e1 feat:lineage compat, nessa made more similar 2026-07-24 07:40:58 -04:00
a876cee6ec fix: drop redis env 2026-07-23 23:06:11 -04:00
84e4c2203e meta: further task ref cleanup 2026-07-23 22:53:40 -04:00
f2fc6a5d1a meta: task ref cleanup 2026-07-23 21:54:52 -04:00
8e33af43a5 fix: product subdomain cleanup 2026-07-23 20:52:49 -04:00
a6ef4d2955 fix: bun startup issue(vite) 2026-07-23 17:51:38 -04:00
e7b32d6566 Merge branch 'per-subdomain-contact-pages' (task 09)
# Conflicts:
#	src/routes/contact.tsx
2026-07-23 17:08:54 -04:00
e55a28d249 Merge branch 'downloads-and-deletion-flows' (task 11)
# Conflicts:
#	src/routes/privacy-policy/life-and-lineage.tsx
2026-07-23 17:08:06 -04:00
7fb38f37a0 Merge branch 'inputhalo-landing-page' 2026-07-23 14:53:36 -04:00
06c39b8813 feat: add InputHalo landing page with DMG download flow
Add a marketing landing page for inputhalo.freno.me with a hero section
(theme-aware app icon, glitch title, tagline), feature highlights, and a
download section offering a macOS DMG via the tRPC signed-S3 URL endpoint
plus an App Store link.

Extract the download orchestration into a pure, side-effect-free helper
(query/performInputHaloDownload) so the asset-name and redirect contract is
unit-tested in isolation, mirroring the existing site-aware page-head /
nav-config split. Include dark and default app-icon exports in the public
folder.
2026-07-23 14:32:06 -04:00
59d129b46b feat: add product-aware deletion emails and subdomain deletion/downloads routes
- Extend DeletionForm with product discriminator and configurable cooldown cookie
- Extract env-free deletion email helpers into deletion-email.ts with Lineage/Nessa branding
- Make misc.sendDeletionRequestEmail mutation product-aware (subject, html content, cookie)
- Replace legacy /deletion/life-and-lineage page with 308 redirect to lineage subdomain
- Add Lineage and Nessa subdomain deletion route modules with shared content components
- Add Lineage downloads route modules with shared content
- Update privacy policy deletion link to lineage subdomain
2026-07-23 12:32:14 -04:00
d5794f6e34 Merge branch 'privacy-policy-consolidation' 2026-07-23 12:25:54 -04:00
a7ad581ed2 feat(contact): extract shared ContactForm and add per-subdomain contact pages
Refactor the monolithic main-site contact page into a reusable
<ContactForm> component that encapsulates the Turnstile widget, cooldown
timer, email-verification flow, and tRPC submission. The main
/contact route becomes a thin wrapper that supplies the site-specific
disclaimer subline and Life-and-Lineage FAQ accordion (now exported as
<LineageContactQuestions> for reuse).

Add per-subdomain contact routes (gaze, inputhalo, lineage, nessa) that
render the shared component, with site-aware subject prefix, recipient,
heading, and PageHead metadata derived via useSite() from CONTACT_CONTEXT.

Introduce src/lib/contact-config.ts (with tests) centralizing the contact
recipient/sender addresses and subject building. The misc.sendContactRequest
mutation accepts an optional subjectPrefix (defaulting to "freno.me") so
inbound call sites continue emitting byte-identical legacy subjects, while
subdomain submissions route distinct subjects (e.g. "[Gaze] Contact Request")
to the same inbox.
2026-07-23 12:25:13 -04:00
6a8c8b7662 feat(privacy): migrate privacy policies to product subdomains
Consolidate privacy policies per-subdomain:
- Migrate Gaze and Life and Lineage privacy policies verbatim from the
  legacy /privacy-policy/* routes to their subdomain paths
  (gaze.freno.me/privacy, lineage.freno.me/privacy), and replace the old
  routes with 308 permanent redirects to preserve SEO equity and stable
  link resolution.
- Add net-new privacy policies for the InputHalo and Nessa subdomains.
- Update the contact page link to point at the Lineage subdomain privacy
  policy.
2026-07-23 12:22:33 -04:00