Skip to main content
Q-Code

Engagement · 4 modules

What are the engagement modules?

The engagement modules are the four that handle people getting in touch: contact form, newsletter, social profiles and an AI chat widget.

Each turns something that would otherwise leak into an inbox or somebody else’s app into a row on the site: a threaded enquiry, a subscriber list you own, a posting queue tied to real profiles, and a chat widget that answers from the site’s own content. They are the difference between a brochure and a channel.

Why this group exists

What engagement is for.

An enquiry that arrives as an email is one deleted message from being lost, a mailing list kept in someone else’s tool is not a list you can take with you, and a question typed into a chat box deserves an answer drawn from the site rather than a guess.

These modules keep all three on the site. Enquiries land in a shared inbox with a thread and a status, the newsletter list exports in full on request, and the profiles the social module knows about are the same ones the site declares as sameAs on its organisation, so the posting queue and the structured data cannot drift apart.

The modules

4 in this group.

Contact form and inbox

@ccd/contact-form

Any form on the site, with the replies threaded in a shared inbox.

  • Works with JavaScript unavailable, because a contact form is the last thing that should need it.
  • Filters spam without a CAPTCHA in the visitor’s way.
  • Threads the reply, so a conversation is one place rather than a forwarded chain.

Newsletter

@ccd/newsletter

A list you own, sent from your own domain, with double opt-in as the default.

  • Confirms every subscription by email, so the list stays clean and complaints stay low.
  • Sends from your own address rather than a shared one.
  • Exports in full whenever you ask, because a list you cannot take with you is not yours.

Social profiles

@ccd/social

Your profiles in the footer and in the structured data, plus a posting queue.

  • Declares every profile once, so the footer links and the sameAs markup cannot drift apart.
  • Queues posts with the images already sized for each network.
  • Keeps what was posted and when, so a schedule can be looked at rather than remembered.

AI chat

@ccd/ai-chat

A chat widget on the site itself, answering from the same content the pages already show.

  • Reads the listings, the FAQ, opening hours and blog posts to answer, and says so when it does not know.
  • Hands the conversation to the inbox when a visitor asks for something a reply needs a person for.
  • Logs every conversation for the owner to read back, with a monthly count on the dashboard.

Q&A

Questions about the engagement modules

Do forms work if JavaScript fails?

Yes. Every form posts natively and is enhanced afterwards. A contact form that only works once a script loads is a contact form that quietly loses enquiries.

Is my mailing list locked in?

No. It lives in the project’s own database and exports in full on request, addresses and confirmation timestamps included.

Does the AI chat widget make things up?

It answers from the listings, the FAQ, opening hours and blog posts already on the site, and says so when a question needs a person. It cannot invent a fact that is not published somewhere on the site.

The other groups

Where to look next.

Describe the feature, not the module.

You are not expected to know which of these you need. Say what the site should do and the build reaches for the parts that already exist.