Home / Help

Site guide — roles, admin tasks & email

Permissions, admin panels, the four-step membership application workflow (Treasurer → Secretary → Verifier), office email routing, Stripe payments, convention queues, and troubleshooting.

Published on the site: https://nsva.org/help/admin-site-guide — use this page in the browser for printing or sharing; no source code access required.

New to the Admin screens? Start with the non-technical walkthrough: Admin dashboard — simple guide.

Contract / SOW traceability (A–I): see SOW / contract traceability.


This document is an overview of what the NSVA website can do, focused on:

  • What each role can access
  • What admin panels exist
  • What workflows generate notifications / email
  • Where to look when something is “stuck”

It is intended to be printed/exported to PDF for officers and administrators.


1) Quick map of the site

Public (not signed in)

  • Homepage: overview and navigation
  • Membership: membership information + application
  • Events: public events + convention registration page
  • Donate: opens the external Zeffy donation page (not processed inside nsva.org today — national office sees those gifts in Zeffy unless the integrated donate flow is enabled later)
  • Locations: island locator
  • Member roll (/member-roll): name + primary island for active members (full roster is members-only)
  • Commander's messages (/commander): National Commander blog posts flagged in the Bulletin editor
  • Forms: public forms and form submissions (where enabled)
  • Bulletin Board: public posts (scoped by island/national rules)
  • Can Do Archives: published issues and archives

Member Dashboard (signed in)

  • Dashboard home: account summary
  • Document library (/members/library): searchable catalog of official PDFs (same catalog as sitewide; protected downloads per document rules)
  • Member Directory (/members/directory): officers/islands from national data + Member roster tab (live DB, contact fields) + Buddy Finder
  • Messages: bulletin board interaction (where permitted)
  • Orders: ships store order history
  • Calendar: registrations and RSVP
  • Notifications: in-app notifications for workflow activity
  • Island Transfer: request transfer to another island
  • Service history: buddy finder/service history features
  • Settings: profile + email preferences

Admin Panel (signed in, permissioned)

Admins access the admin area at:

  • Admin Panel: /admin

The admin panel is composed of “feature panels” (Membership, Content, Operations). Each is shown/hidden by permissions (see below).


2) How access works (roles & permissions)

The platform uses RBAC (Role-Based Access Control):

  • A member can have one or more roles
  • Roles grant permissions
  • Most admin APIs check permissions server-side (security boundary)

Important

  • UI visibility (menu items) is also gated by permissions, so a user can be “admin” but not see every admin panel.
  • The super_admin role has a server-side override for all permissions.

See SOP background:


3) Current roles (baseline)

These role names are the canonical system roles:

  • member
  • island_officer
  • island_admin
  • regional_commander
  • secretary
  • national_admin
  • super_admin

4) Permissions (capability list)

These permission names are what the app checks to allow admin actions.

Membership

  • confirm_membership_payment: Treasurer — click Payment Received (confirm dues/funds before the file moves on)
  • confirm_membership_paperwork: Admin / Secretary — click Paperwork Received (application complete and eligible to queue for verification)
  • verify_membership: Membership Chair / Life — click Verified (finalize membership, create account, send welcome email)
  • approve_members: legacy full access; also allows the Verified step (same as verify_membership for that button)
  • manage_members: edit member profiles, unlock accounts, force resets
  • view_members: view the member list and member details
  • export_members: export member data

Content

  • post_blog: create/publish blog posts
  • manage_blog: edit/delete any blog posts
  • post_message: post to message boards
  • moderate_messages: remove/flag messages
  • manage_site_images: edit public site imagery (hero/quick links/page banners)

Store

  • manage_store: manage store products/inventory
  • view_orders: view order details
  • manage_orders: update order status and shipping

Calendar

  • manage_calendar: create/edit calendar events

Forms / Admin

  • manage_forms: create/edit/publish custom forms
  • view_audit_log: view audit history of sensitive actions
  • manage_island: edit island details/settings
  • review_island_transfers: process island transfer requests
  • send_newsletter: send email news blasts
  • manage_notifications: send system notifications
  • manage_roles: create/modify roles
  • manage_permissions: assign roles/permissions to members

Access / scope

  • access_admin_panel: access the admin landing page and admin panels that only need basic admin access
  • view_all_content: view content across islands (scope expansion)
  • access_national_board: access national board content where used

System

  • system_admin: maintenance endpoints and high-privilege operations

5) Role → permissions (summary)

This is a summary of the baseline mapping currently seeded.

  • member
    • Post messages
  • island_officer
    • Post messages, view members
  • island_admin
    • Admin access + membership management + orders + calendar + island settings
  • regional_commander
    • Broad admin access + blog management + permissions management + audit log
  • secretary
    • Admin access + island transfer review + Paperwork Received on membership applications (when permission is assigned)
  • national_admin
    • Most permissions (everything except newsletter + system_admin by default)
  • super_admin
    • All permissions (developer/system role)

If someone can’t see a panel, they are missing the permission that gates it (see “Admin panels and what they do” below).


6) Admin panels and what they do

This section describes each major admin panel and the typical officer job function it supports.

Membership → Applications (/admin/applications)

Purpose

  • Process new membership applications through a four-step national workflow
  • Each step has one clearly labeled button, visible only to the officer responsible for that step
  • Full audit history on each application (who clicked what, and when)

Who does what (training)

Step Officer Button on the application What it means
1 (Applicant) Submits the form; site creates a pending record and notifies the Treasurer
2 Treasurer Payment Received Confirms payment is in hand (for paid types, online Stripe payment must be recorded first)
3 Admin / Secretary Paperwork Received Confirms the application is filled out correctly and the applicant is eligible; queues for verification
4 Membership Chair / Life Verified Finalizes membership, creates the member account, sends the welcome email (Life Chair sends the membership card offline)

Status labels on the list (examples): Pending Treasurer, Pending Paperwork, Pending Verification, Approved, Rejected.

Primary permissions (assign in Admin → Roles & Permissions so each department can act):

  • confirm_membership_payment — Treasurer
  • confirm_membership_paperwork — Admin / Secretary
  • verify_membership — Membership Chair / Life
  • approve_members — optional legacy; grants Verified if you still use one national approver role

Anyone with any of the four permissions above can open the applications list; they only see action buttons for steps they are allowed to perform.

Workflow diagram

flowchart LR
  A[Applicant submits] --> B{Payment required?}
  B -->|Yes| C[Awaiting Payment / Stripe]
  C --> D[Submitted — pending Treasurer]
  B -->|No| D
  D --> E[Treasurer: Payment Received]
  E --> F[Admin/Secretary: Paperwork Received]
  F --> G[Awaiting Verification]
  G --> H[Chair: Verified]
  H --> I[Approved + welcome email]

Using the screen (training checklist)

  1. Open Membership → Applications (/admin/applications).
  2. Use Needs action or status filters to find your queue.
  3. Expand an application; read contact info, island request, and DD-214 if present.
  4. Scroll to Audit history — every step is timestamped and attributed to the officer who clicked it.
  5. Click Take action — you should see only the button(s) your role owns (for example Treasurers see Payment Received, not Verified).
  6. For Verified, you may override island assignment before confirming.
  7. To decline at any active stage, use Reject Application (verifier permission).

Paid applications (Annual / Auxiliary)

  • Applicant pays through Stripe on the site; that records online payment only.
  • The application stays with the Treasurer until they click Payment Received (confirms funds are actually received).
  • Membership is not auto-approved when Stripe succeeds.

Free / non-payment types (Life, Honorary, etc.)

  • Application goes to Pending Treasurer immediately after submit.
  • Treasurer still clicks Payment Received to advance the file (no dollar amount on file).

After approval

  • Use Send new password email on approved rows if the member did not receive credentials.

Membership → Member Management (/admin/members)

Purpose

  • Search and view members
  • Unlock accounts
  • Send password reset email (SMTP) or Set temp password (no email) when mail fails
  • Update member info/status

Primary permissions

  • view_members (view/list)
  • manage_members (edit/unlock/reset)

Membership → Island Transfers (/admin/island-transfers)

Purpose

  • Review transfer requests
  • Approve/reject/mark under review (workflow dependent)

Primary permissions

  • review_island_transfers (or broad admin)

Membership → Island Charter Applications (/admin/island-charter-applications)

Purpose

  • Review island charter requests
  • Approve/reject with notes

Primary permissions

  • approve_members

Membership → Duty Station Requests (/admin/duty-station-requests)

Purpose

  • Review and approve/reject duty station submissions (data quality + moderation)

Primary permissions

  • approve_members (current gate)

Membership → Convention Registrations (/admin/convention-registrations)

Purpose

  • Manage convention registrations (for example 2026 national convention)
    • Approve / Reject / Cancel
    • Mark Paid / Pending / Refunded (online Stripe payment for convention may be added later; registrants may pay by check per on-screen instructions)
  • Sends office email and admin bell alerts when someone registers on the site

Primary permissions

  • access_admin_panel (and other membership/admin roles that include it)

Content → Island Locations (/admin/islands)

Purpose

  • Create/edit island listings displayed on /locations

Primary permissions

  • access_admin_panel + manage_island

Content → Site Images (/admin/site-images)

Purpose

  • Update public-facing imagery:
    • Homepage hero slideshow
    • Quick Links images
    • Hero/banner images across public pages

Primary permissions

  • manage_site_images

Content → Calendar (/admin/calendar)

Purpose

  • Create, update, move, delete events
  • Configure event fees and registration settings

Primary permissions

  • manage_calendar

Content → Can Do Uploads (/admin/can-do-issues)

Purpose

  • Upload PDF issues and publish them to the public archive

Primary permissions

  • post_blog or manage_blog (current gate)

Content → News Blast (/admin/newsletter)

Purpose

  • Send a newsletter blast to members (outbound email must be configured — see Email delivery setup)

Primary permissions

  • send_newsletter

Operations → Ships Store (/admin/store)

Purpose

  • Create/edit products
  • Manage store listings and inventory

Primary permissions

  • manage_store

Operations → Store Orders (/admin/orders)

Purpose

  • Review orders
  • Update shipping/tracking
  • Mark refunds (where supported)

Primary permissions

  • view_orders / manage_orders / manage_store

Operations → Analytics & Reports (/admin/analytics)

Purpose

  • Operational stats: pipeline counts, revenue, orders, membership trends

Primary permissions

  • Broad admin access (one of: view_orders, manage_store, access_admin_panel)

Operations → Sponsorship pipeline (/admin/sponsorship)

Purpose

  • Review sponsorship inquiries and update their status

Primary permissions

  • access_admin_panel

Operations → Operations Center (/admin/operations)

Purpose

  • Verify routing and SOP recipients
  • Operational visibility

Primary permissions

  • access_admin_panel (and some endpoints allow manage_notifications)

Operations → General Requests (/admin/general-requests)

Purpose

  • Handle “contact us” / general request submissions

Primary permissions

  • access_admin_panel

Operations → Audit Log (/admin/audit-log)

Purpose

  • Review sensitive actions and approvals across the site

Primary permissions

  • view_audit_log

Operations → Roles & Permissions (/admin/roles)

Purpose

  • Assign roles to members
  • Manage permission mappings

Primary permissions

  • manage_roles and/or manage_permissions

7) Emails & notifications (how routing works)

Official office mailboxes

Workflow email goes to role addresses (for example MembershipChair@nsva.org, Secretary@nsva.org, Commander@nsva.org) — not to individual officers’ personal email in the application. Mailboxes stay with the office when leadership changes; update Microsoft 365 access and forwarding when officers turn over.

Full mailbox list and Phase 2 island routing (x3commander@nsva.org, etc.): Digital operations SOP.

Who receives email vs. the admin bell

What happened Office email (examples) In-app bell (who sees it in the site)
New membership application submitted Membership Chair, Secretary, Treasurer Members with confirm payment (Treasurer queue)
Online membership payment recorded (Stripe) Treasurer (confirm_membership_payment)
Treasurer: Payment Received Admin/Secretary (confirm_membership_paperwork)
Paperwork Received (queued for verification) Verifier (verify_membership or approve_members)
Application verified / rejected Membership Chair, Secretary, Treasurer
Convention registration submitted Convention Chair, Events Coordinator, Secretary, Treasurer, Commander Users with admin panel access
Island transfer requested Secretary Secretary role holders
Sponsorship inquiry Fundraising, Sponsorship, Public Affairs Admin panel access
Ship’s Store order paid (Stripe) Ships Store, Treasurer, Store Manager Store/order admins
Donation recorded through the site (integrated flow) Treasurer, Commander, Fundraising, Donations On payment confirm
Calendar event / registration intake Events Coordinator, Secretary, Treasurer Admin panel access (varies)

Important: Public Donate on the menu goes to Zeffy outside the site — those gifts do not automatically email national offices through nsva.org today.

Phase 2 (not live yet): email Island Commander and Island Secretary based on the member’s assigned island.

Verify routing (admins)

Open Operations Center while signed in as an admin. It shows which addresses each workflow uses in the current environment.

Technical staff may also use server env vars NSVA_OFFICE_EMAIL_* when an alias differs from the SOP — see Email delivery setup.

Payments (what triggers store/membership email)

  • Ship’s Store: Stripe checkout; store/Treasurer emails run after payment succeeds.
  • Paid membership applications: Stripe records payment on the application; the Treasurer must click Payment Received before the workflow continues (no auto-approval on payment).
  • Zeffy: optional for integrated flows; the live Donate menu link is external Zeffy only.

In-app notifications

The notification bell in the header helps admins who are logged in. It does not replace office mailboxes. If Commanders or Treasurers only read Commander@ / Treasurer@, confirm Microsoft 365 SMTP is working — see Email delivery setup and the troubleshooting section below.


8) Common “where is it?” troubleshooting

“A user can’t see an admin panel”

  • They’re missing the permission that gates it (for example, Site Images requires manage_site_images).
  • Verify in Admin → Roles & Permissions.

“A workflow didn’t email anyone”

  • Confirm the event actually uses site routing (for example convention registration on nsva.org does; a gift only on the external Zeffy Donate page does not).
  • Check Operations Center for the mailbox list.
  • Verify Microsoft 365 sending (noreply@nsva.org) — Email delivery setup.
  • Remember: the admin bell can show an alert even when email failed — do not rely on the bell alone for officers who only use mailboxes.

“A member didn’t receive password reset email”

  1. In Admin → Members, open the member and confirm an email is on file (imports sometimes have username only).
  2. Try Send Password Reset Email — if it fails, the password is not changed (by design).
  3. Use Set Temp Password (no email) and give the password by phone when mail is down.
  4. Ask the member to sign in with the email on file (not an old personal address) and check spam.

“A registration/order/application is stuck”

  • Membership applications — check the status label on /admin/applications:
    • Pending Treasurer → needs Payment Received (Treasurer; paid apps need Stripe payment recorded first)
    • Pending Paperwork → needs Paperwork Received (Admin/Secretary)
    • Pending Verification → needs Verified (Membership Chair)
    • If the wrong officer sees no button, check Roles & Permissions for the three workflow permissions above
  • Check the relevant admin panel queue:
    • Membership applications: /admin/applications
    • Transfers: /admin/island-transfers
    • Convention: /admin/convention-registrations
    • Store orders: /admin/orders
  • Check audit log for recent actions:
    • /admin/audit-log

9) GCP Cloud Scheduler (cron jobs)

These jobs call authenticated HTTP routes on the Cloud Run service. They are separate from Ship’s Store webhooks.

What runs

Job Route Purpose
Membership renewal reminders POST /api/cron/membership-renewal-reminders Emails at 90 / 30 / 7 days before annual expiry (UTC calendar days)
Commander digest POST /api/cron/commander-digest Weekly email listing new National Commander posts (isCommanderMessage)

Required environment (Cloud Run)

Variable Notes
NSVA_CRON_SECRET Shared secret; send as X-Cron-Secret: <value> or Authorization: Bearer <value>
APP_URL Public site base URL (e.g. https://nsva.org) — used in email links

Optional in-process scheduling (long-lived Node only, e.g. some VMs): set NSVA_CRON_ENABLED=true with the same secret — see instrumentation.ts. Cloud Run scale-to-zero usually prefers Cloud Scheduler → HTTP instead.

Automation: Infrastructure operators may create the jobs in the Google Cloud Console or use a deployment runbook script, if your organization provides one. Jobs must use NSVA_CRON_SECRET (Secret Manager: nsva-cron-secret) and target https://nsva.org unless your service URL differs.

Example: create jobs (replace placeholders)

Set variables once:

export PROJECT_ID=your-gcp-project
export REGION=us-central1
export SERVICE_URL="https://YOUR-CLOUD-RUN-URL.run.app"
export CRON_SECRET="$(gcloud secrets versions access latest --secret=nsva-cron-secret)"

Daily renewal run (after 08:00 UTC the job catches members whose expiry is exactly 90/30/7 days away; adjust cron if needed):

gcloud scheduler jobs create http nsva-membership-renewal \
  --project="$PROJECT_ID" --location="$REGION" \
  --schedule="0 8 * * *" \
  --uri="${SERVICE_URL}/api/cron/membership-renewal-reminders" \
  --http-method=POST \
  --headers="Content-Type=application/json,X-Cron-Secret=${CRON_SECRET}" \
  --attempt-deadline=600s

Weekly Commander digest (Monday 08:00 UTC; aligns with default NSVA_CRON_DIGEST_SCHEDULE):

gcloud scheduler jobs create http nsva-commander-digest \
  --project="$PROJECT_ID" --location="$REGION" \
  --schedule="0 8 * * 1" \
  --uri="${SERVICE_URL}/api/cron/commander-digest" \
  --http-method=POST \
  --headers="Content-Type=application/json,X-Cron-Secret=${CRON_SECRET}" \
  --attempt-deadline=600s

Store NSVA_CRON_SECRET in Secret Manager (e.g. nsva-cron-secret) and reference it from Cloud Run env — do not commit secrets.

PII purge (optional, different secret): POST /api/admin/maintenance/purge-pii with X-Purge-Secret — configure PII_PURGE_* in the hosting environment / Secret Manager per your retention policy.


10) Exporting this document to PDF

  1. Open https://nsva.org/help/admin-site-guide in your browser.
  2. Use PrintSave as PDF (or your browser’s equivalent).