Use-Case Examples
These walkthroughs show how to model common real-world scenarios in Entu using entity types, properties, and references. Each one is a complete recipe — copy it as-is or adapt it to your needs.
CRM — Contacts & Companies
You run a small business and your customer knowledge lives in three places: a phone's contact list, an inbox, and someone's memory. You want one place that knows which people belong to which company, and what was last said to whom.
Goal: Track companies, the contacts within them, and any notes or activities linked to each contact.
Entity types to create
Company
| Property name | Type | Notes |
|---|---|---|
name | string | Company display name |
website | string | Store as plain text or use markdown on a text field for clickable links |
industry | string | |
notes | text |
Contact
| Property name | Type | Notes |
|---|---|---|
name | string | Full name |
email | string | |
phone | string | |
company | reference | Points to a Company entity |
title | string | Job title |
Activity
| Property name | Type | Notes |
|---|---|---|
date | datetime | |
type | string | e.g. call, meeting, email |
summary | text | |
contact | reference | Points to a Contact entity |
Structure
- Create a Companies container entity as the root.
- Add each company as a child of that container.
- Add contacts as children of their respective company — the
companyreference property and the_parentrelationship both link the contact to the company. - Add activities as children of their contact.
Access control
Grant _editor rights on the Companies container to your sales team and enable _inheritrights: true on all children so rights propagate automatically.
Project Tracker
Your team juggles a dozen projects, and "what's the status?" is answered by scrolling chat history. You want every project to carry its own status, owner, deadline, and budget — and get a project number and hour totals without anyone maintaining them by hand.
Goal: Manage projects with properties, counters, and a formula-computed field.
Entity type
| Param | Value |
|---|---|
name | project |
label | Project |
description | A client project or internal initiative |
add_from | (reference to the "Projects" menu) |
Property definitions
name | type | label | Notable settings |
|---|---|---|---|
name | string | Name | mandatory, search |
status | string | Status | set: ["Planning", "Active", "On Hold", "Done"], mandatory |
description | text | Description | markdown |
owner | reference | Owner | reference_query: _type.string=person |
due_date | date | Due Date | |
budget | number | Budget | decimals: 2 |
tags | string | Tag | label_plural: Tags, list |
code | counter | Project Code | readonly |
notes | text | Internal Notes | hidden |
total_hours | number | Total Hours | formula, readonly, decimals: 1 |
What this demonstrates
setturns a string field into a dropdown.countergenerates a unique code per entity (e.g. project numbers).hiddenkeeps a field out of the edit form but visible on the entity page — good for formula-driven values.formulaontotal_hoursrecalculates automatically on every save using child/referrer data.
Media Library
Years of photos, videos, and documents are scattered across drives and cloud folders, and finding "that one picture" means opening thirty. You want albums with real metadata — who made it, what it shows, which tags apply — and the option to make chosen collections public.
Goal: Store and organise images, videos, and documents with metadata and tags.
Entity types to create
Collection
| Property name | Type | Notes |
|---|---|---|
name | string | Folder / album name |
description | text |
Media Item
| Property name | Type | Notes |
|---|---|---|
title | string | |
file | file | The actual uploaded file |
type | string | image, video, document |
tags | string | list: true — multiple values allowed |
description | text | |
author | reference | Points to a Person entity |
published | boolean | |
size | number | Set formula: 'file.size' on the property definition — auto-computed from the attached file |
Structure
- Create Collections as top-level containers.
- Upload media items as children of the appropriate collection.
- Use
_sharing: publicon collections that should be publicly browsable. - Use
tags(withlist: true) so each item can carry multiple tags for filtering.
Querying items by tag via the API
GET /api/{db}/entity?_type.string=media-item&tags.string=natureLibrary — Books, Patrons & Lendings
A school library, a company bookshelf, or a club's equipment room — things go out, and nobody quite remembers to whom. You want a catalogue of what you own, who has borrowed what, and an automatic flag when something is overdue.
Goal: Manage a book and audio-visual collection, track patron records, and record lending history including due dates and returns.
Entity types to create
Book
| Property name | Type | Notes |
|---|---|---|
title | string | mandatory, search |
author | string | list: true — multiple authors allowed |
isbn | string | |
type | string | e.g. book, DVD, audio CD; set turns it into a dropdown |
copies | number | Total copies owned |
description | text | |
cover | file | Cover image |
Person
| Property name | Type | Notes |
|---|---|---|
name | string | mandatory, search |
email | string | |
phone | string | |
card_number | string | Library card / patron ID |
notes | text |
Lending
| Property name | Type | Notes |
|---|---|---|
book | reference | Points to a Book entity |
borrower | reference | Points to a Person entity |
lent_on | date | |
due_date | date | |
returned | boolean | Set to true when the item is back |
overdue | boolean | formula: 'due_date < now() && !returned', readonly — auto-computed |
Structure
- Create a Books container and add each book as a child.
- Create a Patrons container and add each person as a child.
- Add lending records as children of the relevant patron — the
borrowerreference and_parentrelationship both link the lending to the patron.
Access control
Grant library staff _editor rights on both the Books and Patrons containers with _inheritrights: true. Give patrons _viewer rights on their own entity so they can see their lending history through the API or a custom portal.
