Skip to content

feat(admin): integrate form builder for events, surveys, and custom forms #1974

@cdcore09

Description

@cdcore09

Summary

Add a drag-and-drop form-builder surface to the admin UI so staff/super_admins can compose forms (event registrations, surveys, applications, custom intake) without code, then publish them to the public site for members to fill out.

Requirements

  • Evaluate candidate libraries and pick one. Initial shortlist:
  • Define the form-schema persistence model (likely `forms` + `form_submissions` tables, schema stored as jsonb)
  • Admin route at `/forms` (or similar) gated by an appropriate policy (likely `canEditForms`, staff+)
  • Builder UI styled consistently with the existing admin design system (white background, rounded purple primaries, cool-toned palette — not a vendor's default theme)
  • Server-side schema validation when submissions land (don't trust client-built schemas blindly)
  • Public renderer on the member-facing site that consumes the same schema
  • Submission storage + a basic admin view of submissions per form
  • Audit-log entries for form publish / unpublish / edit actions

Context

This is groundwork for several near-term workflows: annual event registration, post-event surveys, leadership-position applications, ad-hoc community polls. Each one would otherwise be a one-off Google Form or a custom-coded page.

The four candidate libraries have very different shapes — picking one is the load-bearing decision. Library evaluation should weigh: license, bundle size, theming flexibility, schema portability (can we read the schema server-side without the builder runtime?), and how well the renderer integrates with our existing Tailwind/design-system surface on the public site.

Implementation Notes

  • The form schema should be portable: serialized JSON that we own, not a library-specific binary blob.
  • Renderer on the public site needs to work without authoring dependencies (admins build, members render — different bundles).
  • Permissions: who can build forms? who can publish? who can read submissions? Tie into the existing `canEditMembers` / role tier model.
  • Consider whether form approval (next issue) is a v1 feature or a follow-up gate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions