3fe3516b9e
nook helper
2026-09-22 22:22:13 -04:00
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