feat: pre-registrant management and invitation system

Admin interface to review, filter, and batch-invite the 95 pre-registrants
from Baby Ghosts. Accept-invitation page pre-fills their data and collects
circle, pronouns, motivation, contribution tier, and agreement before
creating their member record.
This commit is contained in:
Jennie Robinson Faber 2026-04-06 14:46:11 +01:00
parent bab53cec9e
commit 501be10bfe
15 changed files with 1896 additions and 1 deletions

View file

@ -0,0 +1,32 @@
import mongoose from "mongoose";
const preRegistrationSchema = new mongoose.Schema(
{
email: {
type: String,
required: true,
unique: true,
lowercase: true,
trim: true,
},
name: String,
city: String,
role: String, // professional role (e.g. "3D artist") — admin-only reference
newsletterOptIn: Boolean,
status: {
type: String,
enum: ["pending", "selected", "invited", "accepted", "expired"],
default: "pending",
},
inviteEmailSentAt: Date,
acceptedAt: Date,
memberId: { type: mongoose.Schema.Types.ObjectId, ref: "Member" },
magicLinkJti: String,
magicLinkJtiUsed: { type: Boolean, default: false },
adminNotes: String,
},
{ timestamps: true }
);
export default mongoose.models.PreRegistration ||
mongoose.model("PreRegistration", preRegistrationSchema);