Add top-level members list, primary member on account, member move, combined create flows

- GET /v1/members with search across all members (includes account name)
- POST /members/:id/move with optional accountId (creates new account if omitted)
- primary_member_id on account table, auto-set when first member added
- isMinor flag on member create (manual override when no DOB provided)
- Account search now includes member names
- New account form includes primary contact fields, auto-generates name
- Members page in sidebar with global search
This commit is contained in:
Ryan Moon
2026-03-28 09:08:06 -05:00
parent 7c64a928e1
commit 572af05a3f
16 changed files with 796 additions and 77 deletions

View File

@@ -2,31 +2,26 @@
@variant dark (&:is(.dark, .dark *));
@theme {
/* Defaults — overridden at runtime by theme store */
--color-background: hsl(210 20% 97%);
--color-foreground: hsl(222 47% 11%);
--color-card: hsl(0 0% 100%);
--color-card-foreground: hsl(222 47% 11%);
--color-popover: hsl(0 0% 100%);
--color-popover-foreground: hsl(222 47% 11%);
--color-primary: hsl(215 25% 27%);
--color-primary-foreground: hsl(210 40% 98%);
--color-secondary: hsl(210 40% 94%);
--color-secondary-foreground: hsl(222 47% 11%);
--color-muted: hsl(210 40% 94%);
--color-muted-foreground: hsl(215 16% 47%);
--color-accent: hsl(210 40% 94%);
--color-accent-foreground: hsl(222 47% 11%);
--color-destructive: hsl(0 72% 51%);
--color-destructive-foreground: hsl(210 40% 98%);
--color-border: hsl(214 32% 89%);
--color-input: hsl(214 32% 89%);
--color-ring: hsl(215 25% 27%);
--radius: 0.5rem;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-sidebar: var(--sidebar);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar-primary: var(--sidebar-primary);
@@ -35,9 +30,29 @@
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-ring: var(--sidebar-ring);
--radius: 0.5rem;
}
:root {
--background: hsl(210 20% 97%);
--foreground: hsl(222 47% 11%);
--card: hsl(0 0% 100%);
--card-foreground: hsl(222 47% 11%);
--popover: hsl(0 0% 100%);
--popover-foreground: hsl(222 47% 11%);
--primary: hsl(215 25% 27%);
--primary-foreground: hsl(210 40% 98%);
--secondary: hsl(210 40% 94%);
--secondary-foreground: hsl(222 47% 11%);
--muted: hsl(210 40% 94%);
--muted-foreground: hsl(215 16% 47%);
--accent: hsl(210 40% 94%);
--accent-foreground: hsl(222 47% 11%);
--destructive: hsl(0 72% 51%);
--destructive-foreground: hsl(210 40% 98%);
--border: hsl(214 32% 89%);
--input: hsl(214 32% 89%);
--ring: hsl(215 25% 27%);
--sidebar: hsl(210 25% 95%);
--sidebar-foreground: hsl(215 16% 47%);
--sidebar-primary: hsl(215 25% 27%);
@@ -55,6 +70,8 @@ body {
system-ui,
-apple-system,
sans-serif;
background-color: var(--background);
color: var(--foreground);
}
.login-input {