Tables and Data

Tables are the foundation of GOD CRM. Every piece of information -- contacts, deals, tasks, document

Tables are the foundation of GOD CRM. Every piece of information -- contacts, deals, tasks, documents, wellness records, lab nodes -- is stored in a table. This chapter explains how tables work, what types of columns you can use, and how views let you see the same data in different ways.

The Notebook Analogy

Think of a notebook you use at school.

  • A Raw Table is like a notebook stored in a drawer. The notebook exists and has information written in it, but you are not looking at it right now. It just sits in storage.
  • A Universal Table is that same notebook taken out of the drawer and opened on your desk. Now you can read the pages, write new entries, cross things out, and flip between sections.

In GOD CRM, the raw table is the data sitting in the database. The universal table is the spreadsheet-like interface you see on screen. They are the same data -- one is the storage form, and the other is the visible form.

What Is a Raw Table?

Behind the scenes, GOD CRM stores table data in two database tables:

  • universal_tables -- holds the definition of each table: its name, which project it belongs to, and what columns it has.
  • table_rows -- holds the actual rows of data. Each row is linked to its parent table.

You never interact with raw tables directly. They are the engine under the hood. When you open a table in the browser, GOD CRM reads from these database tables and shows you a friendly spreadsheet.

Why does this matter?

Because everything in GOD CRM is stored this way. When you create a Document, the system stores it as a row in a table. When you log a Wellness entry, that is a row in a table. When you build a Workflow, the nodes are rows in a table. This is the "everything is a table" principle, and it means you can filter, sort, and connect any kind of data using the same tools.

What Is a Universal Table?

A Universal Table is what you see and use. It looks like a spreadsheet:

+----+----------------+------------------+--------+------------+
| #  | Name           | Email            | Status | Created    |
+----+----------------+------------------+--------+------------+
|  1 | Alice Johnson  | alice@example.com| Active | 2026-01-15 |
|  2 | Bob Smith      | bob@example.com  | Active | 2026-01-16 |
|  3 | Carol Davis    | carol@example.com| Paused | 2026-01-17 |
|  4 | Dan Wilson     | dan@example.com  | Active | 2026-01-18 |
|  5 | Eve Martinez   | eve@example.com  | New    | 2026-01-20 |
+----+----------------+------------------+--------+------------+

Each row is one record (a contact, a deal, a task -- whatever the table tracks). Each column defines a type of information. You can add rows, edit cells, delete records, and rearrange columns just like in a regular spreadsheet.

Columns: The 23 Types

Every column in a table has a type that controls what kind of data it holds and how it behaves. GOD CRM supports 23 column types (defined in COLUMN_TYPE_METADATA in the source code). Here they are, grouped by category.

Basic types -- the everyday building blocks.

Type Emoji What it stores Example
Text 📝 Plain text "Alice Johnson"
Number 🔢 Numeric values (also currency/percent via format option) 42, $1,250, 75%
Email ✉️ Email address with validation alice@example.com
URL 🔗 Web link https://example.com
Phone 📞 Phone number with formatting +1 (555) 123-4567
Date 📅 Date only (YYYY-MM-DD) 2026-01-20
Date & Time 📅 Date with time 2026-01-20 14:30
Time (cron) Schedule (HH:MM, day of month) 09:00, day 15
Checkbox ☑️ True/false toggle checked / unchecked

Selection types -- picking from a list.

Type Emoji What it stores Example
Select 🎯 One option from a list "Active"
Multi-select 🧩 Multiple options from a list "Design", "Frontend"

Advanced types -- linking, computing, and special fields.

Type Emoji What it stores Example
Relation 🔗 Link to a row in another table Link to "Acme Corp"
Person 👤 Reference to a system user Alice (user #5)
File 📎 File attachment report.pdf
Image 🖼️ Image attachment with preview photo.jpg
Password 🔐 Encrypted text (hashed, write-only) ●●●●●●●●
Formula Calculated from other columns =Price * Quantity
Table 📋 Embedded sub-table Order items
Rollup 📊 Aggregation across related rows SUM of linked values
Button 🔘 Action trigger "Send Email" button

Media and AI types -- for creative and AI-powered workflows.

Type Emoji What it stores Example
Audio 🎵 Audio file with playback recording.mp3
Color 🎨 Color value (HEX/CMYK/RAL) or emoji #3B82F6 (blue)
Vector 🧠 AI embedding for semantic search [0.12, -0.34, ...]
Dialog 💬 AI dialog context Conversation history
Chat 🤖 AI chat thread Chat with agent

Important: Currency and percent are NOT separate column types. They are format options on the Number type (config.format = "currency" or "percent").

How to choose: Pick the type that matches the data. Storing a name? Use Text. Storing a price? Use Number with currency format. Linking tables? Use Relation.

The Grid View: Your Data Browser

The table grid (Layer 2) is the default way you interact with your data. It looks and works like a spreadsheet: rows and columns, inline editing, sorting, and filtering. The grid view is the only view that belongs to the Universal Table layer.

Grid View (spreadsheet):
+------+-----------+--------+---------+
| Name | Company   | Status | Value   |
+------+-----------+--------+---------+
| ...  | ...       | ...    | ...     |
+------+-----------+--------+---------+

The grid is best for browsing, editing, and bulk data entry. You can apply filters, sort by any column, hide or show columns, and edit cells inline.

Beyond the Grid: Modules (Layer 3)

If you want to see your data in a different way -- as a Kanban board, a calendar, a timeline, or a gallery -- those are Modules (Layer 3). Modules are full-page applications that provide a specialized interface on top of the same underlying table data.

Here are the data-focused Modules that give you alternative ways to interact with your table data:

Kanban Module

Cards arranged in columns, where each column represents a status or category. Best for tracking items through stages, like a sales pipeline or a task board.

Kanban Module:
  New         In Progress     Done
+--------+   +--------+   +--------+
| Card 1 |   | Card 3 |   | Card 5 |
+--------+   +--------+   +--------+
| Card 2 |   | Card 4 |
+--------+   +--------+

Calendar Module

Records displayed on a calendar based on a date column. Best for scheduling, deadlines, and events.

Calendar Module:
  Mon    Tue    Wed    Thu    Fri
+------+------+------+------+------+
|      |Task A|      |Task B|      |
|      |      |      |      |Event |
+------+------+------+------+------+

Timeline Module

A horizontal bar chart showing records stretched across a time range. Similar to a Gantt chart. Best for project planning where tasks have start and end dates.

Timeline Module:
Jan 1            Jan 15           Jan 31
|----Task A------|
        |--------Task B----------|
                   |---Task C----|

Gallery Module

Records displayed as cards with a featured image. Best for visual content like product catalogs, portfolios, or contact directories.

Gallery Module:
+----------+  +----------+  +----------+
| [image]  |  | [image]  |  | [image]  |
| Product A|  | Product B|  | Product C|
| $29.99   |  | $49.99   |  | $19.99   |
+----------+  +----------+  +----------+

All of these Modules read from the same Raw Table (Layer 1) as the grid view. The data is the same -- only the interface is different. For a full description of all Modules, see 06 -- Modules.

Filters and Sorting

Views become powerful when you add filters and sorting.

Filters

A filter hides rows that do not match a condition. Examples:

  • Show only rows where Status equals "Active"
  • Show only rows where Created At is after January 1, 2026
  • Show only rows where Value is greater than 1000

You can combine multiple filters. For example: Status is "Active" AND Value is greater than 1000. Only rows that match all conditions will appear.

Sorting

Sorting changes the order of rows. Examples:

  • Sort by Name A to Z
  • Sort by Created At newest first
  • Sort by Value highest to lowest

You can sort by multiple columns. For example: first sort by Status, then within each status group sort by Name.

Filters and Sorting Do Not Change Your Data

This is important to understand. When you filter or sort, you are changing what you see, not what is stored. Remove the filter and all your rows come back. Change the sort order and the data itself is unchanged. You are just adjusting your view.

The "Everything Is a Table" Principle

This is one of the most important ideas in GOD CRM. Nearly every kind of data in the system is stored as rows in a table:

Feature What is stored How it is stored
Contacts People and companies Rows in a Contacts table
Deals Sales opportunities Rows in a Deals table
Tasks To-do items Rows in a Tasks table
Documents Notes and pages Rows in a Documents table
Wellness Health and habit logs Rows in a Wellness table
Lab Nodes Workflow building blocks Rows in a Lab table

Because everything is a table, you can use the same tools everywhere:

  • Filter your Documents the same way you filter your Contacts.
  • Sort your Wellness logs the same way you sort your Deals.
  • Create a Relation column to link any table to any other table.

This consistency means you only need to learn one system. Once you know how tables, columns, views, filters, and sorting work, you can handle any data in GOD CRM.

A Complete Example: Contacts Table

Here is a Contacts table with five rows and six columns of different types:

+----+----------------+-------------------+-----------+--------+------------+
| #  | Name           | Email             | Company   | Status | Last Call  |
|    | (text)         | (email)           | (relation)| (select)| (date)    |
+----+----------------+-------------------+-----------+--------+------------+
|  1 | Alice Johnson  | alice@acme.com    | Acme Corp | Active | 2026-01-28 |
|  2 | Bob Smith      | bob@widgets.io    | Widgets Co| Active | 2026-01-25 |
|  3 | Carol Davis    | carol@startup.dev | StartupDev| New    |            |
|  4 | Dan Wilson     | dan@acme.com      | Acme Corp | Paused | 2026-01-10 |
|  5 | Eve Martinez   | eve@freelance.net |           | Active | 2026-01-30 |
+----+----------------+-------------------+-----------+--------+------------+

Notice:

  • The Company column is a Relation type. It links to a separate Companies table. "Acme Corp" is not just text -- it is a link to the Acme Corp row in the Companies table.
  • The Status column is a Select type with three options: Active, New, Paused.
  • Carol has no Last Call date because she is new and has not been contacted yet.
  • Eve has no Company because she is a freelancer.

This is the kind of table you will build and use every day in GOD CRM.

Quick Summary

Concept Analogy Purpose
Raw Table Notebook in a drawer Database storage you do not touch
Universal Table Notebook on your desk The visible spreadsheet you use
Column A labeled section Defines what kind of data goes in
Row One page of notes One record (contact, deal, task)
Grid View The table data browser Spreadsheet with filters and sorting
Module A specialized app Kanban, Calendar, Timeline, Gallery
Filter A bookmark Hides rows that do not match
Sort Alphabetical tabs Changes the order of rows

What's Next?

Your data is stored in tables. But who works with that data? In the next chapter you will meet the AI Agents -- automated helpers that can read your tables, answer questions, run workflows, and save you time.

Next: Agents -- your data is stored in tables, now meet the AI Agents that work with it.