From fb25e722150f9f0d45862105872c944a478ea347 Mon Sep 17 00:00:00 2001 From: Jennie Robinson Faber Date: Mon, 6 Apr 2026 16:17:12 +0100 Subject: [PATCH] Huge bunch of UI/UX improvements and tweaks! --- .forgejo/workflows/test.yml | 16 +- app/assets/css/main.css | 10 +- app/components/LoginModal.vue | 9 + app/layouts/admin.vue | 6 +- app/pages/admin/events/create.vue | 31 +- app/pages/admin/events/index.vue | 489 +++++++---- app/pages/admin/index.vue | 13 +- app/pages/admin/members/[id].vue | 590 +++++++++----- .../admin/{members.vue => members/index.vue} | 162 +++- app/pages/admin/pre-registrants/index.vue | 345 ++++---- app/pages/admin/series-management.vue | 17 +- app/pages/admin/series/create.vue | 8 +- app/pages/members/[id].vue | 768 ++++++++++-------- .../admin-members-desktop-chromium-darwin.png | Bin 173259 -> 298952 bytes .../events-desktop-chromium-darwin.png | Bin 87000 -> 242983 bytes .../events-mobile-chromium-darwin.png | Bin 41656 -> 147734 bytes .../home-desktop-chromium-darwin.png | Bin 130063 -> 291710 bytes .../home-mobile-chromium-darwin.png | Bin 55761 -> 151435 bytes .../join-desktop-chromium-darwin.png | Bin 127574 -> 286479 bytes .../join-mobile-chromium-darwin.png | Bin 58990 -> 158185 bytes ...mber-dashboard-desktop-chromium-darwin.png | Bin 105918 -> 259925 bytes ...member-profile-desktop-chromium-darwin.png | Bin 120666 -> 340667 bytes e2e/a11y.spec.js | 14 +- e2e/auth.spec.js | 8 +- e2e/member-dashboard.spec.js | 2 +- nuxt.config.ts | 2 +- playwright.config.js | 2 +- scripts/seed-all.js | 6 + .../api/admin/pre-registrants/invite.post.js | 4 +- server/api/invite/accept.post.js | 3 + server/api/members/[id].get.js | 3 +- server/api/members/create.post.js | 3 + server/models/counter.js | 8 + server/models/member.js | 2 + server/utils/memberNumber.js | 12 + tests/server/api/members-create.test.js | 3 + tests/server/utils/member-number.test.js | 64 ++ 37 files changed, 1651 insertions(+), 949 deletions(-) rename app/pages/admin/{members.vue => members/index.vue} (90%) create mode 100644 server/models/counter.js create mode 100644 server/utils/memberNumber.js create mode 100644 tests/server/utils/member-number.test.js diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index c041dbb..8edaae1 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -45,7 +45,7 @@ jobs: env: PORT: 3000 - name: Wait for server - run: npx wait-on http://localhost:3000 --timeout 30000 + run: timeout 30 sh -c 'until curl -sf http://localhost:3000; do sleep 1; done' - run: npx playwright test --ignore-snapshots - uses: actions/upload-artifact@v4 if: failure() @@ -56,6 +56,18 @@ jobs: e2e/test-results/ retention-days: 7 + notify: + name: Notify on failure + runs-on: ubuntu-latest + needs: [vitest, playwright] + if: failure() + steps: + - name: Post to Slack + run: | + curl -s -X POST "${{ secrets.SLACK_WEBHOOK_URL }}" \ + -H 'Content-type: application/json' \ + --data "{\"text\":\":x: *Ghost Guild CI failed* on \`${{ github.ref_name }}\`\nCommit: ${{ github.sha }}\n${{ github.server_url }}/${{ github.repository }}/actions\"}" + visual: runs-on: ubuntu-latest needs: vitest @@ -84,7 +96,7 @@ jobs: env: PORT: 3000 - name: Wait for server - run: npx wait-on http://localhost:3000 --timeout 30000 + run: timeout 30 sh -c 'until curl -sf http://localhost:3000; do sleep 1; done' - run: npx playwright test e2e/visual/ - uses: actions/upload-artifact@v4 if: failure() diff --git a/app/assets/css/main.css b/app/assets/css/main.css index e7f84cb..4c5b57b 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -50,11 +50,11 @@ --candle: #d4a03a; --candle-dim: #b8922e; --candle-faint: #8a7030; - --ember: #c06030; + --ember: #ca6a3a; --text: #a89880; --text-bright: #d0c8b0; - --text-dim: #8a7e6a; - --text-faint: #5a5040; + --text-dim: #958774; + --text-faint: #8b7b62; --parch: #ede4d0; --parch-hover: #d4c8a8; --parch-text: #2a2015; @@ -62,7 +62,9 @@ --c-community: #a06850; --c-founder: #c06030; --c-practitioner: #4a7080; - --ember-bg: rgba(192, 96, 48, 0.14); + --green: #6e9c52; + --green-bg: rgba(110, 156, 82, 0.12); + --ember-bg: rgba(202, 106, 58, 0.14); } /* ---- TAILWIND @THEME MAPPING ---- */ diff --git a/app/components/LoginModal.vue b/app/components/LoginModal.vue index d313ad7..67bc904 100644 --- a/app/components/LoginModal.vue +++ b/app/components/LoginModal.vue @@ -144,6 +144,15 @@ watch(isOpen, (newValue) => { loginError.value = '' } }) + +const handleKeydown = (e) => { + if (e.key === 'Escape' && isOpen.value) { + resetAndClose() + } +} + +onMounted(() => document.addEventListener('keydown', handleKeydown)) +onUnmounted(() => document.removeEventListener('keydown', handleKeydown)) diff --git a/app/pages/admin/series-management.vue b/app/pages/admin/series-management.vue index 98c482c..f815000 100644 --- a/app/pages/admin/series-management.vue +++ b/app/pages/admin/series-management.vue @@ -64,7 +64,7 @@
{{ formatSeriesType(series.type) }} -

{{ series.title }}

+

{{ series.title }}

{{ series.description }}

@@ -171,15 +171,15 @@