go-cms-forms

Implements the Forms module architecture for the Go CMS backend.

Updated Jun 15, 2026
One-click install
npx skills add https://github.com/vernal96/go-cms --skill go-cms-forms-vernal96
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: go-cms-forms
Source: https://github.com/vernal96/go-cms/tree/main/.codex/skills/go-cms-forms
Command: npx skills add https://github.com/vernal96/go-cms --skill go-cms-forms-vernal96

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Building a form-builder feature inside the Go CMS requires coordinating many moving parts: site-scoped form ownership, field/element/layout modeling, public submission with CAPTCHA and uploads, result persistence, statuses, and asynchronous trigger/action execution. This Skill encodes the complete architectural contract so the Forms module is implemented consistently without leaking Forms-specific logic into the generic kernel. ## Core Features & Use Cases - Domain Modeling: Defines separate entities for Form, Field, Element, LayoutNode, Status, Result, ResultValue, Action, and ActionExecution with relational integrity and site scoping. - Public Submission Pipeline: Specifies validation, conditional visibility, CAPTCHA verification, transient upload spooling, and atomic Result plus Outbox persistence. - Extensible Actions: Describes a site-runtime-scoped action type registry with a built-in Mail action, async jobs, retries, and runtime transition draining. - Use Case: When adding a contact form with file upload and email notification to a CMS site, follow this Skill to model the form, wire the Mail action by template code, and keep uploads in the Forms-owned spool until executions finish. ## Quick Start Ask the AI to implement the Forms module for the Go CMS backend following the go-cms-forms architecture, starting with the Form aggregate and its required initial consent, CAPTCHA, and submit-button structure.

Frequently Asked Questions about go-cms-forms

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I implement a form builder module in a Go CMS backend?▼

Model Form, Field, Element, LayoutNode, Status, Result, ResultValue, Action, and ActionExecution as separate relational entities scoped to a Site. Keep Forms-specific logic out of the generic kernel and reuse the existing core field registry for validation.

How should public form submissions handle file uploads asynchronously?▼

Stage uploads in a Forms-owned private transient spool, store only safe metadata on the Result, and let async action jobs open fresh streams. Delete spool bytes only after all dependent ActionExecutions reach a terminal state.

Can the Forms module reuse the generic field validation system?▼

Yes, ordinary fields compile through the existing core field registry and field.Schema semantics. Forms only adds submission-specific behavior such as CAPTCHA verification, consent handling, and effective requiredness for conditionally hidden fields.

How do form actions integrate with the Mail module?▼

The built-in Mail action references a MailTemplate by stable template_code and calls the same SiteRuntime's site-scoped Mail.QueueByCode with mapped values and transient attachments. Forms never touches SMTP, Mail spool keys, or transport credentials.

What happens to Forms data when a site profile changes?▼

Removing Forms from a Site profile preserves all Forms business data, and re-adding it exposes the same forms and results. Actual Site deletion may cascade-delete data only after pending action executions finish and the Forms spool is cleaned up.

Why must CAPTCHA tokens never be stored as result values?▼

CAPTCHA is a transient validation field whose token is verified by a Forms-owned provider contract and then discarded. Persisting it would leak challenge data and serve no historical purpose, unlike consent values which are stored as ordinary result values.