Gravity Contacts System
Copyright 2026 EIM Global Solutions, LLC Written by: J. Patrick Farrell
This sub-system handles adding and managing contacts. Using this sub-system, we have the ability to collect emails, name and phone number and any other contact information through a form or through the API.
The idea of this subsystem is to collect and organize an email list into named lists (e.g. a general list plus one per campaign/event) that a client can manage from /admin/contacts/manage.
Data Storage
Contacts are stored via app/services/contact_store.py on top of Gravity's
pluggable ContentStore abstraction (see docs/gravity/architecture.md §5)
— local JSON by default, or one of the cloud backends in a real deploy.
Unlike blog posts and events, contacts have no separate Adhara-backed
variant; it's always the ContentStore.
One document (contacts.json) contains an object per list, keyed by a list
tag, each holding {"name": ..., "list": [...]}.
The default list is called "general", but if you specify a list name tag, it will create a new list for that list name.
An optional argument of "name" can be included in the list object that offers a description of the list.