Guild Applications
Configurable application forms that let prospective members apply to a guild. Officers review, accept, or reject applications — acceptance auto-creates a trial membership.
Application Flow
sequenceDiagram
participant A as Applicant
participant API as API
participant O as Guild Officers
A->>API: GET /application-form
API-->>A: form config + questions
A->>API: POST /applications
API-->>O: notification: application_submitted
O->>API: GET /applications (list all)
O->>API: PATCH /:id/review (accept/reject)
API-->>A: notification: application_reviewed
Note over API: On accept: trial membership created
Data Model
GuildApplicationForm
One form per guild, storing the question schema.
| Field | Description |
|---|---|
id | UUID |
organizationId | Guild (unique — one form per guild) |
isEnabled | Whether the form accepts submissions |
questions | JSON array of question definitions |
Question Schema
[
{
"id": "uuid",
"type": "text | textarea | select | boolean | date",
"label": "Why do you want to join?",
"required": true,
"options": ["Option A", "Option B"]
}
]
Supported question types: text, textarea, select, boolean, date.
GuildApplication
| Field | Description |
|---|---|
id | UUID |
organizationId | Guild |
userId | Applicant |
characterId | Character attached to application (optional) |
referredByMemberId | Membership ID of referrer (optional) |
status | pending, accepted, rejected, withdrawn |
answers | JSON array of { questionId, answer } |
reviewedById | Officer who reviewed (nullable) |
reviewNotes | Officer notes (nullable) |
reviewedAt | Review timestamp (nullable) |
Validation Rules
- One pending application per user per guild — submitting a second is rejected
- Form must be enabled — submissions against disabled forms are rejected
- Referral validation — if
referredByMemberIdis provided, the membership must exist and be active in the same guild - Withdrawal — only allowed while status is
pending
Auto-Membership on Accept
When an officer accepts an application for a standalone guild, the service automatically creates a Membership with status trial for the applicant's character.
Events Emitted
| Event | When | Notification recipients |
|---|---|---|
application.submitted | New application created | Officers with canManageMembers |
application.reviewed | Application accepted/rejected | Applicant |
API Endpoints
Application Form (Officers)
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /organizations/:guildId/application-form | Optional | Get form config |
| PUT | /organizations/:guildId/application-form | Update Organization | Update form config |
Applications
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /organizations/:guildId/applications | Authenticated | Submit application |
| GET | /organizations/:guildId/applications/mine | Authenticated | Get my application |
| GET | /organizations/:guildId/applications | Create Membership | List all (officers) |
| PATCH | /organizations/:guildId/applications/:id/review | Create Membership | Accept/reject |
| DELETE | /organizations/:guildId/applications/mine | Authenticated | Withdraw |
Frontend
Pages
- ApplyPage — Renders the application form with dynamic question types, character selection, referral member search, and status banner for existing applications.
- ApplicationsPage — Officer view with status filter tabs, accept/reject actions, and reviewer notes.
- SettingsApplicationsPage — Form editor with enable/disable toggle, drag-to-reorder questions, and question type configuration.