Commit Graph
28 Commits
Author SHA1 Message Date
NeilClack 2073248576 fix: Superforms SSR import from /server path and Prisma client version mismatch
- Import superValidate from sveltekit-superforms/server instead of default
  path to avoid pulling SuperDebug.svelte into SSR
- Upgrade @prisma/client to match prisma CLI version (7.2.0 -> 7.8.0)
  so generated client's query_compiler_fast_bg files exist at runtime
- Add regression test verifying superValidate works in server context
- Add regression test verifying generated Prisma client compiler imports
  reference real files
2026-07-07 13:39:11 -05:00
NeilClack 38d1752f5b admin: Superforms + Zod validation, three-address-defaults schema, profiles toast fix
- Add Superforms + Zod 4 for all admin form validation
- Replace address isDefault with three separate boolean defaults (Mailing, Billing, Shipping)
- Update profiles page with three-checkbox address form and toast improvements
- Convert all admin page server actions to pass request directly to crud
- Export superFormErrorsToFieldErrors helper for profiles server actions
- Regenerate Prisma client for new schema fields
2026-07-07 13:36:23 -05:00
NeilClack 38347f5f24 profiles: add address management, user edit, fix form redirect
- Add type (Mailing/Billing/Shipping) and isDefault fields to Address
  schema with migration. Unique default enforced server-side.
- Rewrite profiles page with inline address creation form and
  editable user name/email within the profile modal.
- Add upsertAddress and updateUser form actions.
- Fix form redirect by adding use:enhance to AdminForm.
- Disable Update button in AdminForm until a field is changed
  (prevents accidental submissions).
2026-07-07 13:20:35 -05:00
NeilClack b87e2b0936 fix: replace CSS variable inversion with standard Tailwind dark: classes
The :root.dark CSS variable inversion caused contrast problems -
text-gray-900 and bg-gray-950 both became light in dark mode, making
text invisible on backgrounds.

Fix:
- Remove :root.dark { --color-gray-*: ... } block from layout.css
- Change :root.dark selector to .dark for form element styles
- Add standard Tailwind dark: classes throughout every .svelte page
  - dark:bg-gray-950 (page backgrounds)
  - dark:bg-gray-900 (card/surface backgrounds)
  - dark:bg-gray-800 (table headers, elevated surfaces, active nav links)
  - dark:bg-gray-700 (primary buttons)
  - dark:text-gray-100 (primary text)
  - dark:text-gray-300 (secondary text, labels)
  - dark:text-gray-400 (muted text, inactive nav links, links)
  - dark:border-gray-700 (borders)
  - dark:border-gray-600 (input borders)
  - dark:hover:bg-gray-800 (sidebar hover)
  - dark:hover:bg-gray-600 (button hover)
  - dark:prose-invert (rich text content)
- TopBar: full dark mode support (bg, links, toggle button)
- Sidebar: all nav links, active states, admin submenu get dark mode
- Auth pages (login, register, forgot, reset): full dark mode
- Protected pages (dashboard, account, setup, license-keys,
  proclamations, categories): full dark mode
- Home page, error page, admin page: dark:text-gray-100
2026-07-07 10:27:08 -05:00
NeilClack d97ed88031 feat: full dark mode with :root.dark and dark: classes
layout.css
- Change .dark → :root.dark so variable overrides match Tailwind's
  :root, :host specificity and actually take effect
- Add global dark mode styles for input/select/textarea elements

All .svelte files:
- bg-white → bg-white dark:bg-gray-100 (cards, tables, containers)
- text-white → text-white dark:text-gray-950 (button text)
- Add dark:bg-gray-950 to main page containers (dashboard, account,
  license-keys, proclamations, proclamations/[id])
- Add dark:border-gray-300 to bordered elements (cards, tables, forms)
- Add dark:bg-gray-200 to secondary backgrounds (table headers,
  address form, price badges)
- Add dark:hover:bg-gray-300 / dark:hover:bg-gray-700 to hover states
  (sidebar nav links, clear button, admin categories table)
2026-07-07 10:00:00 -05:00
NeilClack 6ff8e878a4 test: add unit tests for all auth backend logic
- Register: edge cases for non-Error throws, error message assertions,
  and verify signUpEmail was called with correct payload
- Forgot-password: empty/missing email, Error/non-Error throws
- Reset-password: load (missing/expired/valid token) and action (short
  password, mismatch, throw, success redirect)
- Account setup: load (unauthorized, returns user), action (redirect,
  falsy create, throws, isRedirect passthrough)
- Email-verification: correct URL construction, sendMail delegation,
  throw propagation
- Hooks: sets/omits locals, passes building/auth to svelteKitHandler
- Fix Svelte 5  warning on setup page by using  with
  one-time guard instead of top-level prop read
2026-07-07 09:22:56 -05:00
NeilClack 1e391c9252 redirect setup page to /dashboard instead of /account 2026-07-07 09:18:45 -05:00
NeilClack d160186925 feat: pre-fill first/last name on setup page from user's registered name 2026-07-07 09:16:54 -05:00
NeilClack 5f1edc3174 fix: prevent redirect loop on /account/setup for users without profile
- Skip profile redirect when already on /account/setup so users
  who just signed up/logged in land on the page without looping
- Add test for the skip-redirect case
2026-07-07 09:14:14 -05:00
NeilClack fc2790f6fa fix: handle duplicate email sign-up and null user in protected layout
- Register action now returns success instead of redirecting to /account/setup
  so users without a session (duplicate email with requireEmailVerification)
  see a 'check your email' message instead of crashing
- Protected layout guards against null/undefined locals.user before querying
  Prisma (was passing id: undefined)
- Updated register page to show success banner with verification instructions
- Updated test to match new action response
2026-07-07 09:05:29 -05:00
NeilClack a42c32f014 Add email via Resend 2026-07-06 21:01:41 -05:00
NeilClack 218a3a3cb0 add categories admin page 2026-05-04 09:40:34 -05:00
NeilClack 3d1d713308 Restructure route organization 2026-05-03 20:59:43 -05:00
NeilClack 7d211ba6d8 Fix null price value 2026-03-18 12:10:16 -05:00
NeilClack 52c740b986 Customize Proclamations Admin page 2026-03-16 13:23:25 -05:00
NeilClack cc51f40591 Build user pages 2026-02-25 13:19:26 -06:00
NeilClack 12190d01dc Remove unused links in sidebar 2026-02-24 12:15:52 -06:00
NeilClackandClaude Opus 4.6 10fd06887f Add comprehensive tests for profile-redirect and auth features
19 new tests across 5 test files covering the protected layout redirect,
account page load, registration action (documenting the redirect bug),
and login/register component rendering. Includes shared test utilities.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:58:01 -06:00
NeilClack b8d1ba11e7 Update all routes to redirect users to create a profile if one does not exist 2026-02-24 08:17:37 -06:00
NeilClack 3c201f9b66 Add sub-categories to affirmation categories
Add self-referential parent/child relation on AffirmationCategory for
   one-level hierarchy. Update AffirmationForm with two-level category and
   sub-category dropdowns, server actions with find-or-create hierarchy
   logic, AffirmationList with Parent
2026-02-23 10:53:15 -06:00
NeilClack a230a1e36d Build Admin pages 2026-02-23 10:21:42 -06:00
NeilClack bec8f57a93 Fix affirmation list and add frequencies page 2026-02-23 08:47:58 -06:00
NeilClack e390896f44 Add margin below page title 2026-02-23 07:33:55 -06:00
NeilClack aa51b4a452 Remove workflows, for now 2026-02-19 11:25:44 -06:00
NeilClack c34e10159d Add user profiles and account setup page 2026-02-03 10:11:00 -06:00
NeilClack 2df81d20e3 Create the account setup page
This page is not behind (protected) because it must not use the (protected)/layout.
This means that this page also needs to handle it's own authentication, because it should not be open to the public either.
2026-02-02 22:40:11 -06:00
NeilClack 30e7f8e00a CRUD - Affirmations 2026-01-19 14:59:51 -06:00
NeilClack 0991d1916b Fix styling & alignment issues 2026-01-14 11:20:26 -06:00