From e8e3b84276741db6bb20ca0116cc429bf6276350 Mon Sep 17 00:00:00 2001 From: Jennie Robinson Faber Date: Wed, 8 Oct 2025 19:02:24 +0100 Subject: [PATCH] Lots of UI fixes --- app/components/ImageUpload.vue | 2 +- app/config/contributions.js | 80 +- app/layouts/admin.vue | 300 +++-- app/pages/about.vue | 245 ++-- app/pages/admin/dashboard.vue | 261 +++-- app/pages/admin/events-working.vue | 532 ++++++--- app/pages/admin/events/create.vue | 1043 ++++++++++------- app/pages/admin/events/index.vue | 409 ++++--- app/pages/admin/index.vue | 261 +++-- app/pages/admin/members-working.vue | 316 +++-- app/pages/admin/members.vue | 316 +++-- app/pages/admin/series-management.vue | 650 ++++++---- app/pages/events/[id].vue | 103 +- app/pages/events/index.vue | 171 ++- app/pages/join.vue | 82 +- app/pages/member/dashboard.vue | 97 +- app/pages/member/profile.vue | 19 +- app/pages/members.vue | 10 +- server/api/admin/series.put.js | 62 + .../events/[id]/cancel-registration.post.js | 43 +- server/api/events/[id]/register.post.js | 16 +- server/api/members/my-calendar.get.js | 114 ++ server/config/contributions.js | 27 +- server/utils/resend.js | 263 +++++ 24 files changed, 3652 insertions(+), 1770 deletions(-) create mode 100644 server/api/admin/series.put.js create mode 100644 server/api/members/my-calendar.get.js create mode 100644 server/utils/resend.js diff --git a/app/components/ImageUpload.vue b/app/components/ImageUpload.vue index d797f12..04236f3 100644 --- a/app/components/ImageUpload.vue +++ b/app/components/ImageUpload.vue @@ -42,7 +42,7 @@ diff --git a/app/config/contributions.js b/app/config/contributions.js index 7ce6a38..ceee0a8 100644 --- a/app/config/contributions.js +++ b/app/config/contributions.js @@ -1,68 +1,40 @@ // Central configuration for Ghost Guild Contribution Levels and Helcim Plans export const CONTRIBUTION_TIERS = { FREE: { - value: '0', + value: "0", amount: 0, - label: '$0 - I need support right now', - tier: 'free', + label: "$0 - I need support right now", + tier: "free", helcimPlanId: null, // No Helcim plan needed for free tier - features: [ - 'Access to basic resources', - 'Community forum access' - ] }, SUPPORTER: { - value: '5', + value: "5", amount: 5, - label: '$5 - I can contribute a little', - tier: 'supporter', - helcimPlanId: 'supporter-monthly-5', - features: [ - 'All Free Membership benefits', - 'Priority community support', - 'Early access to events' - ] + label: "$5 - I can contribute", + tier: "supporter", + helcimPlanId: "supporter-monthly-5", }, MEMBER: { - value: '15', + value: "15", amount: 15, - label: '$15 - I can sustain the community', - tier: 'member', - helcimPlanId: 'member-monthly-15', - features: [ - 'All Supporter benefits', - 'Access to premium workshops', - 'Monthly 1-on-1 sessions', - 'Advanced resource library' - ] + label: "$15 - I can sustain the community", + tier: "member", + helcimPlanId: "member-monthly-15", }, ADVOCATE: { - value: '30', + value: "30", amount: 30, - label: '$30 - I can support others too', - tier: 'advocate', - helcimPlanId: 'advocate-monthly-30', - features: [ - 'All Member benefits', - 'Weekly group mentoring', - 'Access to exclusive events', - 'Direct messaging with experts' - ] + label: "$30 - I can support others too", + tier: "advocate", + helcimPlanId: "advocate-monthly-30", }, CHAMPION: { - value: '50', + value: "50", amount: 50, - label: '$50 - I want to sponsor multiple members', - tier: 'champion', - helcimPlanId: 'champion-monthly-50', - features: [ - 'All Advocate benefits', - 'Personal mentoring sessions', - 'VIP event access', - 'Custom project support', - 'Annual strategy session' - ] - } + label: "$50 - I want to sponsor multiple members", + tier: "champion", + helcimPlanId: "champion-monthly-50", + }, }; // Get all contribution options as an array (useful for forms) @@ -72,12 +44,12 @@ export const getContributionOptions = () => { // Get valid contribution values for validation export const getValidContributionValues = () => { - return Object.values(CONTRIBUTION_TIERS).map(tier => tier.value); + return Object.values(CONTRIBUTION_TIERS).map((tier) => tier.value); }; // Get contribution tier by value export const getContributionTierByValue = (value) => { - return Object.values(CONTRIBUTION_TIERS).find(tier => tier.value === value); + return Object.values(CONTRIBUTION_TIERS).find((tier) => tier.value === value); }; // Get Helcim plan ID for a contribution tier @@ -99,10 +71,12 @@ export const isValidContributionValue = (value) => { // Get contribution tier by Helcim plan ID export const getContributionTierByHelcimPlan = (helcimPlanId) => { - return Object.values(CONTRIBUTION_TIERS).find(tier => tier.helcimPlanId === helcimPlanId); + return Object.values(CONTRIBUTION_TIERS).find( + (tier) => tier.helcimPlanId === helcimPlanId, + ); }; // Get paid tiers only (excluding free tier) export const getPaidContributionTiers = () => { - return Object.values(CONTRIBUTION_TIERS).filter(tier => tier.amount > 0); -}; \ No newline at end of file + return Object.values(CONTRIBUTION_TIERS).filter((tier) => tier.amount > 0); +}; diff --git a/app/layouts/admin.vue b/app/layouts/admin.vue index fda4eef..d1a96fb 100644 --- a/app/layouts/admin.vue +++ b/app/layouts/admin.vue @@ -5,109 +5,239 @@
- + Ghost Guild - +
- -
+ +
-
- - + -
- - - - +
+ + + + View Site - - - - + + + + Settings -
- @@ -122,49 +252,49 @@
- Dashboard - - Members - - Events - Series @@ -172,12 +302,12 @@
- +
- +
@@ -192,29 +322,29 @@ \ No newline at end of file +}; + diff --git a/app/pages/about.vue b/app/pages/about.vue index af38426..7dbb0b9 100644 --- a/app/pages/about.vue +++ b/app/pages/about.vue @@ -24,24 +24,15 @@

  • - Equal access: The entire knowledge commons, all - events, and full community participation -
  • -
  • - Equal voice: One member, one vote in all - decisions -
  • -
  • - Solidarity economics: Pay what you can - ($0-50+/month), take what you need -
  • -
  • - Value Flow integration: Contribute your skills, - time, and knowledge - not just money + The entire knowledge commons, all events, and full community + participation on our private Slack
  • +
  • One member, one vote in all decisions
  • +
  • Pay what you can ($0-50+/month)
  • +
  • Contribute your skills, time, and knowledge
@@ -53,185 +44,129 @@

- Find Your Circle + Find your circle

Circles help us provide relevant guidance and connect you with - others at similar stages. Choose based on where you are, not what - you want to access. + others at similar stages. Choose based on where you are now!

-
+

Community Circle

-

- You're exploring what cooperatives could mean for your work -

-
-

- Where you might be: -

-
    -
  • - Curious about alternatives to traditional studio structures -
  • -
  • Researching cooperative principles
  • -
  • Considering if a co-op is right for you
  • -
  • Supporting the movement as an ally
  • -
-
+
+

+ Maybe you've heard rumours about cooperatives in game dev and + you're curious. Or you're frustrated with traditional studio + hierarchies and wondering if there's another way. This circle + is for anyone exploring whether cooperative principles might + fit their work. +

-
-

- We'll help you navigate: -

-
    -
  • Understanding cooperative basics
  • -
  • Connecting with others asking similar questions
  • -
  • Exploring real examples from game studios
  • -
  • Deciding your next steps
  • -
-
+

+ This space is for you if you're: an individual game worker + dreaming of different possibilities • a researcher digging + into the rise of alternative studio models • an industry ally + who wants to support cooperative work • anyone who's + co-op-curious! +

-
-

- You might be: -

-
    -
  • Individual game workers
  • -
  • Researchers and students
  • -
  • Industry allies and supporters
  • -
  • Anyone co-op-curious
  • -
+

+ Our resources and community space will help you understand + cooperative basics, connect with others asking the same + questions, and give you a look at real examples from game + studios. You don't need to have a studio or project of your + own - just join and see what strikes your fancy! +

-
+

Founder Circle

-

- You're actively building or transitioning to a cooperative model -

-
-

- Where you might be: -

-
    -
  • Forming a new cooperative studio
  • -
  • Converting an existing studio to a co-op
  • -
  • Preparing to apply for the Peer Accelerator
  • -
  • Working through governance and structure decisions
  • -
-
+
+

+ You're way past wondering about "what if" and into "how do we + actually do this?" Perhaps you're forming a new cooperative + studio from scratch, or converting an existing team to a co-op + structure, or working through the messy reality of turning + values into sustainable practice. +

-
-

- We'll help you navigate: -

-
    -
  • Practical implementation challenges
  • -
  • Governance document creation
  • -
  • Financial planning for co-ops
  • -
  • Peer connections with other founders
  • -
  • Balancing ideals with sustainability
  • -
-
+

+ This is the space for the practical stuff: governance + documents you can read and adapt, financial models for + cooperative studios, connections with other founders + navigating similar challenges. +

-
-

- Two paths available: -

-
    +

    + We have two paths through this circle that we will be + launching soon: +

    + +
    • - Peer Accelerator Prep Track: Structured - preparation for the PA program + Peer Accelerator Prep Track (coming soon) – + Structured preparation if you're planning to apply for the + PA program
    • - Indie Track: Self-paced development for - alternative pathways + Indie Track (coming soon) – Flexible, self-paced + support for teams building at their own pace
    -
-
-

- You might be: -

-
    -
  • Founding teams
  • -
  • Studios in transition
  • -
  • PA program applicants
  • -
  • Solo founders exploring structures
  • -
+

+ Join us to figure out how you can balance your values with + keeping the lights on - whether you're a full founding team, a + solo founder exploring structures, or an existing studio in + transition. +

-
+

Practitioner Circle

-

- You're operating a cooperative and contributing to the field -

-
-

- Where you might be: -

-
    -
  • Running an established cooperative studio
  • -
  • Graduated from the Peer Accelerator
  • -
  • Mentoring other cooperatives
  • -
  • Advancing cooperative practices in games
  • -
-
+
+

+ You've done it. You're actually running a + cooperative/worker-centric studio or you've been through our + Peer Accelerator. Now you're figuring out how to sustain it, + improve it, and maybe help others learn from what + you've learned. +

-
-

- We'll help you navigate: -

-
    -
  • Advanced operational challenges
  • -
  • Opportunities to mentor and teach
  • -
  • Contributing to best practices
  • -
  • Cross-pollination with other co-ops
  • -
  • Research and publication opportunities
  • -
  • Co-op to co-op collaboration
  • -
-
+

+ This circle is for: Peer Accelerator alumni • members of + established co-ops • mentors who want to support other + cooperatives • researchers studying cooperative models in + practice +

-
-

- You might be: -

-
    -
  • Peer Accelerator alumni
  • -
  • Established co-op members
  • -
  • Industry mentors
  • -
  • Cooperative researchers
  • -
+

+ Here, we create space for practitioners to share what's + actually working (and what isn't), support emerging + cooperatives, collaborate across studios, and contribute to + building a knowledge commons. +

diff --git a/app/pages/admin/dashboard.vue b/app/pages/admin/dashboard.vue index 791261d..2a66f7e 100644 --- a/app/pages/admin/dashboard.vue +++ b/app/pages/admin/dashboard.vue @@ -4,11 +4,13 @@

Admin Dashboard

-

Manage Ghost Guild members, events, and community operations

+

+ Manage Ghost Guild members, events, and community operations +

- +
@@ -20,9 +22,21 @@ {{ stats.totalMembers || 0 }}

-
- - +
+ +
@@ -36,9 +50,21 @@ {{ stats.activeEvents || 0 }}

-
- - +
+ +
@@ -52,9 +78,21 @@ ${{ stats.monthlyRevenue || 0 }}

-
- - +
+ +
@@ -68,9 +106,21 @@ {{ stats.pendingSlackInvites || 0 }}

-
- - +
+ +
@@ -81,16 +131,31 @@
-
- - +
+ +

Add New Member

Add a new member to the Ghost Guild community

-
@@ -98,16 +163,31 @@
-
- - +
+ +

Create Event

Schedule a new community event or workshop

-
@@ -115,16 +195,31 @@
-
- - +
+ +

View Analytics

Review member engagement and growth metrics

-
@@ -137,27 +232,41 @@

Recent Members

-
- +
-
+
-
+

{{ member.name }}

{{ member.email }}

- + {{ member.circle }} -

{{ formatDate(member.createdAt) }}

+

+ {{ formatDate(member.createdAt) }} +

@@ -171,27 +280,43 @@

Upcoming Events

-
- +
-
+
-
+

{{ event.title }}

-

{{ formatDateTime(event.startDate) }}

+

+ {{ formatDateTime(event.startDate) }} +

- + {{ event.eventType }} -

{{ event.location || 'Online' }}

+

+ {{ event.location || "Online" }} +

@@ -207,44 +332,46 @@ \ No newline at end of file + month: "short", + day: "numeric", + hour: "numeric", + minute: "2-digit", + }); +}; + diff --git a/app/pages/admin/events-working.vue b/app/pages/admin/events-working.vue index df6f1ff..c892097 100644 --- a/app/pages/admin/events-working.vue +++ b/app/pages/admin/events-working.vue @@ -4,67 +4,119 @@

Event Management

-

Create, manage, and monitor Ghost Guild events and workshops

+

+ Create, manage, and monitor Ghost Guild events and workshops +

- +
- - + -
-
- +
-
+
Loading events...
- +
Error loading events: {{ error }}
- + - - - - - - + + + + + + - + @@ -72,111 +124,227 @@ {{ formatDateTime(event.startDate) }}
TitleTypeStart DateStatusRegistrationActions + Title + + Type + + Start Date + + Status + + Registration + + Actions +
-
{{ event.title }}
-
{{ event.description.substring(0, 100) }}...
+
+ {{ event.title }} +
+
+ {{ event.description.substring(0, 100) }}... +
- + {{ event.eventType }} - + {{ getEventStatus(event) }} - - {{ event.registrationRequired ? 'Required' : 'Open' }} + + {{ event.registrationRequired ? "Required" : "Open" }}
- - - + + +
- -
+ +
No events found matching your criteria
-
+

- {{ editingEvent ? 'Edit Event' : 'Create New Event' }} + {{ editingEvent ? "Edit Event" : "Create New Event" }}

- +
- - + +
- +
- -
- +
- - + +
- +
- - + +
- +
- - + +
- +
- - + +
- +
- - + +
- +
- - + +
- +
- - + +
- +
- +
- -
@@ -187,175 +355,185 @@ \ No newline at end of file +}; + diff --git a/app/pages/admin/events/create.vue b/app/pages/admin/events/create.vue index 6bab075..4fe8fd9 100644 --- a/app/pages/admin/events/create.vue +++ b/app/pages/admin/events/create.vue @@ -4,25 +4,38 @@
- +

- {{ editingEvent ? 'Edit Event' : 'Create New Event' }} + {{ editingEvent ? "Edit Event" : "Create New Event" }}

-

Fill out the form below to create or update an event

+

+ Fill out the form below to create or update an event +

- +
-
+
- +
-

Please fix the following errors:

+

+ Please fix the following errors: +

  • • {{ error }}
@@ -31,12 +44,22 @@
-
+
- +

- {{ editingEvent ? 'Event updated successfully!' : 'Event created successfully!' }} + {{ + editingEvent + ? "Event updated successfully!" + : "Event created successfully!" + }}

@@ -45,70 +68,97 @@
-

Basic Information

- +

+ Basic Information +

+
- -

{{ fieldErrors.title }}

+

+ {{ fieldErrors.title }} +

- + -

Upload a high-quality image (1200x630px recommended) to represent your event

+

+ Upload a high-quality image (1200x630px recommended) to + represent your event +

- +
- -

{{ fieldErrors.description }}

-

This will be displayed on the event listing and detail pages

+

+ {{ fieldErrors.description }} +

+

+ This will be displayed on the event listing and detail pages +

- +
- - -

Optional: Provide additional context, agenda items, or detailed requirements

+

+ Optional: Provide additional context, agenda items, or detailed + requirements +

-

Event Details

- +

+ Event Details +

+
- -

Choose the category that best describes your event

+

+ Choose the category that best describes your event +

- +
- -

{{ fieldErrors.location }}

-

Enter a video conference link or Slack channel (starting with #)

+

+ {{ fieldErrors.location }} +

+

+ Enter a video conference link or Slack channel (starting with #) +

- +
- -

{{ fieldErrors.startDate }}

+

+ {{ fieldErrors.startDate }} +

- +
- -

{{ fieldErrors.endDate }}

+

+ {{ fieldErrors.endDate }} +

- +
- - Max Attendees + -

Set a maximum number of attendees (optional)

+

+ Set a maximum number of attendees (optional) +

- +
- - Registration Deadline + -

When should registration close? (optional)

+

+ When should registration close? (optional) +

-

Target Audience

- +

+ Target Audience +

+
- +
-

Select which circles this event is most relevant for (leave blank for all circles)

+

+ Select which circles this event is most relevant for (leave blank + for all circles) +

Ticketing

- +
- -
+ +
- +
- - Ticket Name +
- +
- - Price (CAD) + -

Set to 0 for free public events

+

+ Set to 0 for free public events +

- +
- -
- +
- - Quantity Available +
- +
- - Early Bird Price (Optional) +
- +
- +
-
-

Price increases to regular price after this date

+

+ Price increases to regular price after this date +

- +

- Note: Members always get free access to all events regardless of ticket settings. + Note: Members always get free access to all + events regardless of ticket settings.

@@ -346,39 +467,54 @@
-

Series Management

- +

+ Series Management +

+
- -
+ +
- - New Series @@ -389,44 +525,58 @@

-
- +
- -

{{ selectedSeriesId ? 'From selected series' : 'Descriptive name for the entire series' }}

+

+ {{ + selectedSeriesId + ? "From selected series" + : "Descriptive name for the entire series" + }} +

- +
- -

{{ selectedSeriesId ? 'From selected series' : 'Describe what the series covers and its goals' }}

+

+ {{ + selectedSeriesId + ? "From selected series" + : "Describe what the series covers and its goals" + }} +

-

- Note: This event will be added to the existing "{{ eventForm.series.title }}" series. + Note: This event will be added to the + existing "{{ eventForm.series.title }}" series.

@@ -434,59 +584,118 @@
+ +
+

Event Agenda

+ +
+
+ + +
+ + +
+ +

+ Add agenda items to help attendees know what to expect during the + event +

+
+
-

Event Settings

- +

+ Event Settings +

+
- +
- +
- +
@@ -495,42 +704,54 @@
- - -

This message will be displayed to users viewing the event page

+

+ This message will be displayed to users viewing the event page +

- + -
- + Cancel - +
- - -
@@ -541,246 +762,275 @@ \ No newline at end of file +}; + diff --git a/app/pages/admin/events/index.vue b/app/pages/admin/events/index.vue index 8be0c2a..71ef23a 100644 --- a/app/pages/admin/events/index.vue +++ b/app/pages/admin/events/index.vue @@ -4,102 +4,188 @@

Event Management

-

Create, manage, and monitor Ghost Guild events and workshops

+

+ Create, manage, and monitor Ghost Guild events and workshops +

- +
- - + - -
- + Create Event
- +
-
+
Loading events...
- +
Error loading events: {{ error }}
- + - - - - - - + + + + + + - + - + - + - + - + - +
TitleTypeDateStatusRegistrationActions + Title + + Type + + Date + + Status + + Registration + + Actions +
-
- +
-
- +
+
-
{{ event.title }}
-
{{ event.description.substring(0, 100) }}...
+
+ {{ event.title }} +
+
+ {{ event.description.substring(0, 100) }}... +
-
-
+
+
{{ event.series.position }}
{{ event.series.title }}
-
- +
+ Members Only
-
- - {{ event.targetCircles.join(', ') }} +
+ + {{ + event.targetCircles.join(", ") + }}
-
+
Hidden
@@ -107,41 +193,60 @@
- + {{ event.eventType }}
-
{{ formatDate(event.startDate) }}
-
{{ formatTime(event.startDate) }}
+
+ {{ formatDate(event.startDate) }} +
+
+ {{ formatTime(event.startDate) }} +
- + {{ getEventStatus(event) }} -
+
Cancelled
-
+
Required
-
+
Optional
@@ -149,33 +254,33 @@
- - - -
- -
+ +
No events found matching your criteria
-
\ No newline at end of file + navigateTo(`/admin/events/create?edit=${String(event._id)}`); +}; + diff --git a/app/pages/admin/index.vue b/app/pages/admin/index.vue index 06cd609..fea02ea 100644 --- a/app/pages/admin/index.vue +++ b/app/pages/admin/index.vue @@ -4,11 +4,13 @@

Admin Dashboard

-

Manage Ghost Guild members, events, and community operations

+

+ Manage Ghost Guild members, events, and community operations +

- +
@@ -20,9 +22,21 @@ {{ stats.totalMembers || 0 }}

-
- - +
+ +
@@ -36,9 +50,21 @@ {{ stats.activeEvents || 0 }}

-
- - +
+ +
@@ -52,9 +78,21 @@ ${{ stats.monthlyRevenue || 0 }}

-
- - +
+ +
@@ -68,9 +106,21 @@ {{ stats.pendingSlackInvites || 0 }}

-
- - +
+ +
@@ -81,16 +131,31 @@
-
- - +
+ +

Add New Member

Add a new member to the Ghost Guild community

-
@@ -98,16 +163,31 @@
-
- - +
+ +

Create Event

Schedule a new community event or workshop

-
@@ -115,16 +195,31 @@
-
- - +
+ +

View Analytics

Review member engagement and growth metrics

-
@@ -137,27 +232,41 @@

Recent Members

-
- +
-
+
-
+

{{ member.name }}

{{ member.email }}

- + {{ member.circle }} -

{{ formatDate(member.createdAt) }}

+

+ {{ formatDate(member.createdAt) }} +

@@ -171,27 +280,43 @@

Upcoming Events

-
- +
-
+
-
+

{{ event.title }}

-

{{ formatDateTime(event.startDate) }}

+

+ {{ formatDateTime(event.startDate) }} +

- + {{ event.eventType }} -

{{ event.location || 'Online' }}

+

+ {{ event.location || "Online" }} +

@@ -207,44 +332,46 @@ \ No newline at end of file + month: "short", + day: "numeric", + hour: "numeric", + minute: "2-digit", + }); +}; + diff --git a/app/pages/admin/members-working.vue b/app/pages/admin/members-working.vue index 685cfb4..1ed509c 100644 --- a/app/pages/admin/members-working.vue +++ b/app/pages/admin/members-working.vue @@ -4,74 +4,134 @@

Member Management

-

Manage Ghost Guild members, their contributions, and access levels

+

+ Manage Ghost Guild members, their contributions, and access levels +

- +
- - +
-
- +
-
+
Loading members...
- +
Error loading members: {{ error }}
- + - - - - - - - + + + + + + + - +
NameEmailCircleContributionSlack StatusJoinedActions + Name + + Email + + Circle + + Contribution + + Slack Status + + Joined + + Actions +
-
{{ member.name }}
+
+ {{ member.name }} +
{{ member.email }}
- + {{ member.circle }} - + ${{ member.contributionTier }}/month - - {{ member.slackInvited ? 'Invited' : 'Pending' }} + + {{ member.slackInvited ? "Invited" : "Pending" }} @@ -79,50 +139,91 @@
- - + +
- -
+ +
No members found matching your criteria
-
+

Add New Member

- +
- - + +
- +
- - + +
- +
- -
- +
- - @@ -130,13 +231,21 @@
- +
- -
@@ -147,83 +256,90 @@ \ No newline at end of file + alert(`Edit functionality would open editor for ${member.name}`); + console.log("Edit member:", member._id); +}; + diff --git a/app/pages/admin/members.vue b/app/pages/admin/members.vue index 685cfb4..1ed509c 100644 --- a/app/pages/admin/members.vue +++ b/app/pages/admin/members.vue @@ -4,74 +4,134 @@

Member Management

-

Manage Ghost Guild members, their contributions, and access levels

+

+ Manage Ghost Guild members, their contributions, and access levels +

- +
- - +
-
- +
-
+
Loading members...
- +
Error loading members: {{ error }}
- + - - - - - - - + + + + + + + - +
NameEmailCircleContributionSlack StatusJoinedActions + Name + + Email + + Circle + + Contribution + + Slack Status + + Joined + + Actions +
-
{{ member.name }}
+
+ {{ member.name }} +
{{ member.email }}
- + {{ member.circle }} - + ${{ member.contributionTier }}/month - - {{ member.slackInvited ? 'Invited' : 'Pending' }} + + {{ member.slackInvited ? "Invited" : "Pending" }} @@ -79,50 +139,91 @@
- - + +
- -
+ +
No members found matching your criteria
-
+

Add New Member

- +
- - + +
- +
- - + +
- +
- -
- +
- - @@ -130,13 +231,21 @@
- +
- -
@@ -147,83 +256,90 @@ \ No newline at end of file + alert(`Edit functionality would open editor for ${member.name}`); + console.log("Edit member:", member._id); +}; + diff --git a/app/pages/admin/series-management.vue b/app/pages/admin/series-management.vue index 4bf8198..0998e93 100644 --- a/app/pages/admin/series-management.vue +++ b/app/pages/admin/series-management.vue @@ -4,11 +4,13 @@

Series Management

-

Manage event series and their relationships

+

+ Manage event series and their relationships +

- +
@@ -16,34 +18,51 @@
- +

Active Series

-

{{ activeSeries.length }}

+

+ {{ activeSeries.length }} +

- +

Total Series Events

-

{{ totalSeriesEvents }}

+

+ {{ totalSeriesEvents }} +

- +

Avg Events/Series

- {{ activeSeries.length > 0 ? Math.round(totalSeriesEvents / activeSeries.length) : 0 }} + {{ + activeSeries.length > 0 + ? Math.round(totalSeriesEvents / activeSeries.length) + : 0 + }}

@@ -54,13 +73,13 @@
- -
- - @@ -89,13 +108,15 @@
-
+

Loading series...

-
@@ -103,24 +124,32 @@
-
+
{{ formatSeriesType(series.type) }}
-

{{ series.title }}

+

+ {{ series.title }} +

{{ series.description }}

- + {{ series.status }} @@ -132,44 +161,52 @@
-
-
- {{ event.series?.position || '?' }} +
+ {{ event.series?.position || "?" }}
-

{{ event.title }}

-

{{ formatEventDate(event.startDate) }}

+

+ {{ event.title }} +

+

+ {{ formatEventDate(event.startDate) }} +

- + {{ getEventStatus(event) }}
- - - + - -
- +

No event series found

-

Create events and group them into series to get started

+

+ Create events and group them into series to get started +

- -
-
+ +
+
-

Bulk Series Operations

-
- +
-

Series Management Tools

+ + +
+ +
+ +