Commit graph

85 commits

Author SHA1 Message Date
3b7b75ab70 fix: validate ticket type matches entitlement in series purchase 2026-04-04 12:31:58 +01:00
3620dad03a fix: use requireAuth for member pricing to include revocation + status checks 2026-04-04 12:30:54 +01:00
cee67dc005 fix: use auth cookie for member pricing in series available endpoint 2026-04-04 12:28:55 +01:00
db04b270f4 fix: remove redundant connectDB in cancel-subscription 2026-04-04 12:27:34 +01:00
bbe94f0efb fix: replace member.save() with atomic update in cancel-subscription 2026-04-04 12:26:56 +01:00
d4d9629d83 fix: remove redundant connectDB in verify (requireAuth handles it) 2026-04-04 12:25:25 +01:00
79c712a9e9 fix: replace member.save() with atomic update in verify 2026-04-04 12:24:52 +01:00
707ff7b13a fix: remove redundant connectDB in logout (requireAuth handles it) 2026-04-04 12:24:24 +01:00
ab2532dee8 fix: replace member.save() with atomic update in logout 2026-04-04 12:23:01 +01:00
fcd6f4cdf4 feat: reskin admin pages to zine design system
Migrate the entire admin section from the dark guild-* Tailwind theme
to the zine design system (dashed borders, CSS custom properties,
Brygada 1918 + Commit Mono, cream/dark mode palette).

- Replace admin top-nav layout with sidebar matching default layout
- Reskin dashboard, members, events, series management pages
- Reskin events/create and series/create form pages
- Add dev-only test login endpoint (GET /api/dev/test-login)
- Redirect duplicate admin/dashboard.vue to /admin
- Update CLAUDE.md design system docs
2026-04-03 10:56:01 +01:00
f16f9ada64 fix: resolve sidebar nav hydration mismatch and admin events 500 error
Wrap auth-dependent sidebar navigation and meta in ClientOnly with
SSR fallback slots to prevent hydration mismatch that caused all
authenticated nav links to point to wrong pages. Fix admin events
page crash by replacing empty string USelect values with 'all'.
2026-04-03 09:24:29 +01:00
27d8f678ad feat: cleanup deprecated components and background texture 2026-04-02 21:38:50 +01:00
2c5986a32e feat: reskin modals to zine direction 2026-04-02 21:37:31 +01:00
1ac21d6a98 feat: reskin member pages to zine direction 2026-04-02 21:35:32 +01:00
88caca94c7 feat: reskin public pages to zine direction 2026-04-02 21:29:52 +01:00
8b3daadadd feat: add zine-direction shared components 2026-04-02 21:16:00 +01:00
dbb3fbbc1b feat: replace layout with fixed left sidebar and top strip 2026-04-02 21:11:47 +01:00
238d68d063 feat: replace design system tokens with zine direction palette and typography 2026-04-02 21:04:25 +01:00
30ac314a74 Updates! 2026-03-31 18:18:24 +01:00
df2e7e3356 Fix Go to Wiki and Sign out appearing side by side
Make both elements block w-full so they always stack vertically.
2026-03-19 18:13:33 +00:00
7cf6ce1833 Polish coming-soon and login modal styling
Move sign out below wiki button, tweak hover color, remove email
field label, rename 'Join Ghost Guild' to 'Pre-Register', and
remove 'Don't have an account?' text from login modal.
2026-03-19 18:07:20 +00:00
28795146de Slight fix 2026-03-19 16:39:30 +00:00
640e633380 Style tweaks 2026-03-19 16:36:31 +00:00
eda8ac6449 Refine coming-soon page for logged-in members
Hide 'Coming Soon' text when authenticated, change greeting to
'Welcome, Name' with inline underlined sign-out link, and force
Inter (font-sans) on all text.
2026-03-19 16:24:42 +00:00
78c592c13a Fix duplicate /api/auth/member call and add request deduplication
Remove redundant checkMemberStatus() from coming-soon page since the
auth-init plugin already handles it. Add in-flight request deduplication
to prevent concurrent calls from any source. Strip debug console.logs.
2026-03-19 15:04:04 +00:00
52bb17e25d Comment out Quietism font-face declarations to fix slow page loads
The .woff2 files are missing from public/fonts/, causing failed requests
that 302 redirect and stall page load (16+ seconds). Swap display font
to Georgia as a fallback until Quietism files are available.
2026-03-19 13:43:18 +00:00
c785a23910 Redirect regular members to coming-soon page after magic link login
Instead of sending members directly to the wiki (where they hit
Outline's login page and have to click again), land them on the
coming-soon page which shows a welcome message and wiki link.
2026-03-19 13:02:12 +00:00
2705d171bd Add missing schemas, member model fields, and import endpoint
Adds memberInviteSchema and bulkMemberImportSchema needed by the invite
and CSV import endpoints. Adds inviteEmailSent/inviteEmailSentAt fields
to member model. Adds the bulk import API route.
2026-03-19 11:44:49 +00:00
5b4ca1b41d Replace native checkboxes with UCheckbox on admin members page
Native <input type="checkbox"> elements were invisible in production
because @tailwindcss/forms is not installed. UCheckbox renders properly
with the Nuxt UI theme.
2026-03-19 11:10:31 +00:00
1024a80731 Add login form to coming-soon page and allow admin routes through
Coming-soon page now shows a magic link login form for unauthenticated
visitors and a wiki link + sign out for logged-in members. The
coming-soon middleware allows /admin routes through (still protected by
admin middleware). A /login redirect page ensures invite email links work.
2026-03-19 11:01:03 +00:00
772f57c2b2 Route login redirect by role: admins to /admin, everyone else to wiki 2026-03-19 10:48:35 +00:00
c0dcfac173 Redirect invite logins to wiki, regular logins to /members
Invite tokens now include a redirect claim so the verify endpoint
can distinguish them from regular login tokens. Only invite links
redirect to wiki.ghostguild.org; normal logins go to /members.
2026-03-19 10:48:00 +00:00
27c07cd3e9 Send invite emails as HTML with clickable button, redirect login to wiki
Invite emails now include both plain text and HTML versions. The
{loginLink} placeholder renders as a styled button in HTML email
clients. Other URLs in the template are auto-linked. The auth verify
endpoint redirects to wiki.ghostguild.org instead of /members.
2026-03-19 10:41:21 +00:00
ea6c4d8329 Lock down coming-soon mode to block all users including authenticated
Remove auth bypass from coming-soon middleware so no one can access
the in-development site in production. Remove unused login button
from coming-soon page since wiki has its own OIDC login flow.
2026-03-19 10:27:19 +00:00
44805dbecf Remove serif fonts from wiki login and logout pages 2026-03-11 14:22:06 +00:00
2258f9d2ae Switch wiki login email to plain text format 2026-03-11 14:13:59 +00:00
b9961409ad Redesign wiki login page with refined guild aesthetic
Replace generic card layout with editorial-style login gate using
display typography, gradient divider, scoped CSS with design system
tokens, and smooth form-to-confirmation transitions.
2026-03-11 14:04:19 +00:00
ba5cce62fb Fix OIDC logout form posting to http:// behind reverse proxy
The oidc-provider generates form actions using http:// despite proxy
trust settings, causing an insecure form submission warning. Rewrite
the form action URL to https:// before rendering.
2026-03-05 23:11:00 +00:00
fed1cc4bc7 Skip CSP on OIDC routes to fix logout form submission
The oidc-provider generates form actions with http:// URLs that
conflict with the CSP form-action directive. OIDC routes serve
self-contained HTML outside Nuxt, so CSP is not needed there.
2026-03-05 23:05:52 +00:00
ba92075366 Fix OIDC issuer generating http:// URLs in production
The OIDC provider was falling back to config.public.appUrl for its
issuer, which could resolve to an http:// URL. This caused the logout
form action to use http://, violating the CSP form-action directive.
Hardcode the issuer fallback to https://ghostguild.org.
2026-03-05 22:42:12 +00:00
17d29647b4 Allow OIDC logout form submission in CSP form-action directive
The oidc-provider library renders logout forms with absolute URLs,
which gets blocked by the strict form-action 'self' CSP directive.
2026-03-05 22:33:11 +00:00
c3c8b6bcd4 Refactor email templates to use plain text format and update sender addresses
- Simplified the magic link email format to plain text for better compatibility.
- Updated the welcome email to use plain text and changed the sender address to match the domain.
- Enhanced event registration email format to plain text, removing HTML styling for a cleaner approach.
2026-03-05 18:40:37 +00:00
8143631364 Style tweaks 2026-03-04 18:29:32 +00:00
fadf473dde Readying for design 2026-03-04 18:24:20 +00:00
d73256ca2b Tidy template 2026-03-04 17:40:49 +00:00
bf57f4b33d Style wiki auth screens with guild design system
Add guild-styled HTML templates for OIDC logout confirmation, post-logout
success, and error pages. Update wiki login heading to brand convention
(candlelight + warm-text). Restyle magic link email from blue to guild
colour tokens.
2026-03-04 17:26:48 +00:00
79d3ba0f78 Allow authenticated members to bypass coming-soon page
Add JWT-verified session check to coming-soon middleware so logged-in
members can access the full site. Add member login link and modal to
the coming-soon page so members can sign in before launch.
2026-03-01 19:51:50 +00:00
6f297cf137 Exempt OIDC login page from coming-soon redirect
The wiki-login page needs to be accessible even in coming-soon mode
so the OIDC login flow can complete.
2026-03-01 17:26:40 +00:00
4b3fed9689 Move OIDC login page to /auth/wiki-login to avoid catch-all conflict
The /oidc/[...] server catch-all was intercepting /oidc/login before
the Nuxt page router could render it. Moving the page outside /oidc/
avoids the conflict entirely.
2026-03-01 17:19:41 +00:00
3187b5118b Skip /oidc/login in catch-all so Nuxt renders the login page
The server catch-all route was intercepting /oidc/login and passing
it to oidc-provider, which returned 404. Now it falls through to
the Vue page router instead.
2026-03-01 17:12:31 +00:00