Directus Headless CMS over farmdb โ€” admin/form-shaped UI

Discovered already running and configured Apr 30, 2026. All 34 farm tables registered as collections with icons and display templates.

Summary
URL https://directus.edmd.me
Local http://192.168.8.100:8055
Container directus/directus:latest on CT100
Database farmdb on 192.168.8.100:5432 (Directus stores its own metadata in directus_* tables in the same DB)
Login doctor@edwarddelgrosso.com (changed from delgross@ on Apr 30)
Admin password Stored in container env ADMIN_PASSWORD โ€” rotate and move to Vaultwarden
Volumes /mnt/container-data/directus/{uploads,extensions,database}
Why Directus

Directus connects to your existing PostgreSQL tables and presents them as editable collections in a polished admin UI. Unlike NocoDB, which is more spreadsheet-shaped, Directus is more form/admin-shaped โ€” better for:

  • Editing one record at a time with proper field types
  • Managing relationships between tables (foreign keys auto-detected)
  • File uploads attached to records
  • Role-based access if you want to give helpers read-only or limited-edit access

It does NOT replace your data โ€” it sits on top of farmdb. The Farm MCP server, direct psql, and any other tool see the same tables and the same edits.

Configured Collections

All 34 farm tables registered. Top-level collections have proper icons, colors, display templates, and sort orders configured via the Directus API on Apr 30:

Collection Icon Display Template
species local_florist (green) {{common_name}} ({{scientific_name}})
plantings yard (dark green) {{species_id.common_name}} โ€” {{location_id.name}}
harvests agriculture (yellow) {{planting_id.species_id.common_name}} โ€” {{harvest_date}}
hives hive (amber) {{name}}
hive_inspections inventory (amber) {{hive_id.name}} โ€” {{inspection_date}}
locations place (brown) {{name}}
suppliers store (blue) {{name}}
inventory inventory_2 (blue) (default)
equipment build (gray) (default)
observations visibility (purple) sorted by observation_date
orders shopping_cart (blue) sorted by order_date
order_items list (blue) (default)
collections collections (magenta) {{name}}
species_collections link (magenta) (default)
species_images image (green) (default)

The 19 species_* type-specific subtables (annual, aquatic, berry, biennial, bulb, cover_crop, fern, fruit_tree, grass, groundcover, herb, mushroom, nut_tree, perennial, rose, shrub, tree, vegetable, vine) are grouped under “species” in the navigation sidebar with the category icon, so they collapse together and don’t dominate the nav.

Caveats
  • Two UIs editing the same data: Directus and NocoDB both edit farmdb. Don’t use them long-term simultaneously โ€” pick one after a few days of comparison.
  • directus_* system tables in farmdb: 30 internal tables sit alongside your 14 farm tables. Mostly harmless but visible in any direct psql session.
  • Bootstrap email is in container env: ADMIN_EMAIL=delgross@edwarddelgrosso.com is in the compose env but only matters for first-run user creation. The actual user record was updated to doctor@edwarddelgrosso.com via API and is durable. If the database is ever wiped, the env var would recreate with the old email.
Security
The ADMIN_PASSWORD and DIRECTUS_KEY are exposed in the container’s environment variables. Both are also in chat history. Both should be rotated and moved to Vaultwarden.