ICT:Drupal Blueprint - Version 6.5
Costasano Heritage Project — Drupal 11 Architecture & Workflow Blueprint (v6.5)
Purpose of this Document
This page defines the architectural, conceptual, and workflow foundations of the Costasano Heritage Project.
It serves as:
- a stable reference for human contributors
- a briefing document for AI-assisted work sessions
- a safeguard against context loss over long-term development
All future design, implementation, and automation decisions must be compatible with the principles defined here.
Project Overview
The Costasano Heritage Project is a long-term digital heritage initiative operated by members of the Costa Sano Club (70+ years old, amateur historians, non-ICT specialists, except for Martin, realising the IT-project, also amateur historian).
The project manages:
- hundreds of gigabytes of documents, images, and maps
- collaborative historical research
- multi-channel dissemination (wiki, public website, exhibitions, video)
The system is designed for decades-long durability, not short-term publication.
Core Philosophy
Authoritative Source Principle
There is exactly ONE authoritative system for data and assets:
- Drupal 11.3
All other outputs (MediaWiki, public website, video, exhibitions) are derivatives.
No downstream system is allowed to correct, invent, or override facts. All corrections must return to Drupal.
Asset-Centric Design
The central object of the entire system is:
Asset + File (ONE asset = ONE file)
Everything else (chapter, place, organisation) exists to:
- contextualize assets
- classify assets
- generate stable identifiers
- reuse assets across outputs
- chapters provide a sort of timeline
Ingest First, Enrich Later
The system must allow:
- rapid bulk ingestion of files with minimal metadata
- gradual collaborative enrichment over time
- clear lifecycle states without pressure for completeness
Completeness is a process, not a prerequisite.
Target Users & UX Constraints
User Profile
- Age: 70+
- Background: amateur historians
- ICT skills: minimal
- Tolerance for complexity: low
UX Non-Negotiables
- No technical terminology exposed (no “entity”, “taxonomy”, “foreign key”)
- No cluttered forms
- Dashboard-first and only navigation
- Large click targets
- Predictable layouts
- Dark mode mandatory (accessibility)
Users must never feel they are “using Drupal”.
System Architecture
Infrastructure
- Reverse Proxy: Windows Server 2019 (IIS + ARR, SSL offloading)
- Web Server: AlmaLinux 10.1 (Apache 2.4.63, PHP 8.3.29, PHP-FPM)
- Database Server: AlmaLinux 10.1 (MariaDB 10.11.15)
- Drupal 11.3.5
- SELinux: Enforcing
- PHP-FPM: Per-site pools
- Filesystem: Hardened
Operational Constants
- Site URL: https://research.costasano.club
- Drupal project root: /var/www/drupal
- Drupal web root: /var/www/drupal/web
Output Channels
1. MediaWiki (Research & Writing)
Role:
- illustrated research pages
- collaborative narrative writing
- preparation for Wikipedia publication
MediaWiki does NOT:
- store authoritative metadata
- manage files
- generate identifiers
2. Public Drupal Website
Role:
- curated presentation of selected research
- timelines, maps, galleries
Only “complete” or approved assets are shown publicly.
3. Offline Outputs
- video documentaries
- lectures
- exhibitions
These reuse:
- the same assets
- the same identifiers
- the same metadata
Authority Entity Implementation Strategy
Authority entities are implemented progressively, from simplest to most complex.
Step 1: Chapter (Temporal Authority)
Type:
- Drupal Custom Content Entity (authority)
Meaning:
- historical periods / timeline segmentation
- not editorial or narrative content
Characteristics:
- stable Code (max 6 characters) like CHxx.ab CH01, CH01a, CH01aa, CH01ab
- recursive (parent/child) two levels using small letters after the first four
- stable Code (max 6 characters)
- used as first mandatory component in asset identifiers
- no sequence field
Dashboard pattern:
- table of existing records
- add new record
- click pencil in front of row to edit
Status: Drupal Context Type and Dashboard page operational Changed decision about chapter code layout ToDo (max 6 characters)
- Address field for geocoding
- coordinates auto-derived when possible
- coordinates never required for ingestion
Purpose:
- spatial context
- optionally reused across assets for numbering reasoons
- reused for organisations
Status: Drupal Context Type and Dashboard page operational Recently added: type list, geo link in view towards openstreetmap Added view adapted to type. Address to coordinates implemented using Openstreatmap providers. ToDo:Completing helpfunctions
Step 3: Organisation (Institutional Authority)
Type:
- Drupal Custom Content Entity (authority)
Characteristics:
- stable Code (max 6 characters)
- linked to a Place
- optionally reused across assets for numbering
Purpose:
- institutional context
- archival provenance
Status: Drupal Context Type and Dashboard page operational ToDo: adding map view based on Place coordinnates now that provider is available Completing help functions
Step 4: Asset (CORE ENTITY)
Type:
- Drupal Custom Content Entity
Rules:
- ONE asset = ONE file
- file is immutable once uploaded
- identifier is immutable once generated
- physical filenames are managed by Drupal
- original filename is preserved for user reference
Identifier format:
- Chapter.Code
- Context.Code = Place.Code OR Organisation.Code
- Scoped 5-digit counter (asset sequence only)
Example:
CH03ab-OOSTEN-00007
Asset creation is impossible before Chapter, Place, and Organisation exist.
Status: Drupal Context Type and View complete Use of special configuration of classic Media-Library for media upload. Upload of images, documents, video and audio foreseen Automatic numbering for asset via a custom module Creation in 2 steps: first essential fields to generate autonumbering. After that, use of editing via table to fill un further fields like description and note. Optional change of other fields except autocode. View enhanced with search filter. ToDo: complete help functions Remark: Inital configuration with Code as PK (Drupal Title) has been abandoned. Now Code is a classic field and the Title field is a Caption field. This is a short description of the file.
Next Major step: Person and HeritageObject and the m-m relationship with Asset
Step 5: Person implementation
A Person represents a historical individual with agency.
It answers the question:
“Who was involved historically?”
A person is:
- religious sisters
- directors
- architects
- patients
- shareholders
- board members
A Person may:
- play roles in relation to HeritageObjects
- play roles within Organizations
- act as a holder of HeritageObjects
- be documented by DigitalAssets (portraits, letters, biographies, articles)
Roles belong to relationships, not to the Person entity itself.
Purpose: Persons model historical agency, responsibility, and participation.
Implementation: - automatic numbering of Person entities realized with custom module: PE-00123 - use for plain text for birthday and deathday due to drupal limitation in Date & Time widget - use of custom module to verify the day format DD/MM/YYYY - both modules are implemented in heritage-tweaks - first view operational ToDo: refinement
Step 6: HeritageObject implementation
The implementation of HeritageObject abbreviated Object in Drupal
A HeritageObject (HO) represents a historical, conceptual, or material entity that is the subject of study.
It answers the question:
“What is the thing we are studying?”
A HeritageObject may represent:
- a sanatorium
- a building
- a document or register
- a historically meaningful place
- a room, component, or architectural element
- a conceptual or functional unit (e.g. “medical practice”)
HeritageObjects are recursive.
Each HeritageObject may:
- have zero or one parent HeritageObject
- have zero or more child HeritageObjects
A HeritageObject may:
- be documented by multiple DigitalAssets
- designate one DigitalAsset as preferred representation
- be linked to Persons with roles
- be linked to Organizations with roles
- have Persons or Organizations as holders
- belong to multiple ResearchChapters
- be tagged with Keywords
- be associated with one or more Places
Purpose: HeritageObjects are the primary conceptual anchors of the research.
Implementation: - automatic numbering of object entity: OB-00123 - Onject is recursive
ToDo - implementation of a many to many relationship between Object and Asset - One digital Asset is a prefered Asset only for illustration purposes of the Object in a view - Notion of top" Asset in the asset structure is the Asset without parent to by used in the many-to-many relationship. This top asset gives also access to the full tree of assets linked to that top. That top may change in the lifetime of the asset-tree (decided by the user).
Step 7: Object & Advanced Relationships
Type:
- Custom Content Entities
- Role-based relationships
- other many-to-many relationships
Asset Lifecycle & Collaboration Workflow
Roles (conceptual)
- Ingestor
- uploads files
- assigns minimal context
- Enricher
- adds metadata
- validates data
One person may have multiple roles.
Lifecycle States
- Newly added
- In progress
- Reviewed
- Complete
States describe maturity, not publication.
Dashboard Design Pattern
For Chapter, Place, Organisation:
- single dashboard page
- table of existing records
- add/edit via simple forms
Status: done
For Assets:
- add asset always visible
- recent assets list
- guided asset discovery
- no massive tables
Status: Done, Refining realised dealing with massive amounts of assets: using a combined field filter.
Help & Guidance Strategy
Help must be:
- contextual
- non-intrusive
- always available
Mechanisms:
- field descriptions
- ℹ️ icons (difficult in Drupal - placeholders may help here)
- collapsible help sections
- TBD?: link to MediaWiki Reasearch namespace for extended documentation and system philosophy desccription
Automation & Logic
Automation is handled via:
- Drupal configuration and extra available modules
- Custom modules if really necessary, and simplifying a lot the implementation
- take care: using drupal 11.3 - based on new (OO) concepts - needs special attention in building custom modules
Automation is used to:
- generate identifiers
- manage asset counters
- enforce immutability rules
- reduce cognitive load
Automation must never obscure what happens.
Design Discipline Rules
- No authority entity is implemented as editorial content
- No field is required unless it enables a mechanism
- No output system becomes authoritative
- No UX decision is optimized for power users
- Stability is more important than elegance
Usage in AI Sessions
This document must be:
- pasted or referenced at the start of new AI-assisted sessions
- treated as authoritative context
- updated only when architectural decisions change and progress is made
AI output must conform to this blueprint.
AI Session protocol
- no hurry - simple step by simple step: AI proposes, sysop executes finishing with ACK
- no long explanations and justifications - sysop will ask for if needed.
- making the requirement work is the most important step, sysop will documenent once a milestone is achieved.
- AI will suggest a synthesis in mediawikitext format on sysop request to feed the documentation
Supplement — UI Theming, Accessibility & Visual Discipline
This supplement records explicit requirements related to visual theming, accessibility, and user comfort that were clarified after initial project restart. These requirements are binding and must be respected in all future design and implementation decisions.
Separation of UI Concerns
The system UI is explicitly divided into two independent domains:
- Administrative / Dashboard UI (authenticated users)
- Public Presentation UI (anonymous visitors)
No design, theme, or UX decision in one domain is allowed to negatively affect the other.
Decisions:
- GIN skin is used for administration and user input in mandatory DARK mode.
- SOLO skin is used for public pages.
Administrative & Dashboard UI (Authenticated Users)
Target Users
- System administrator (username: mngr)
- Club members and contributors (e.g. testuser)
- Age profile: 70+
- Long working sessions expected
Mandatory Requirements
- Permanent dark mode is used via the GIN skin/template
- Preferred no custom CSS or hacks
Scope
- Applies to:
- content ingestion
- asset enrichment
- review workflows
- dashboards
- Applies equally to administrators and non-technical contributors
Design Discipline
- Accessibility and eye comfort take precedence over aesthetics
- The administrative UI must remain:
- predictable
- low-contrast-stress
- uncluttered
Public Presentation UI (Anonymous Users)
Audience
- General public
- Researchers
- Visitors with unknown accessibility needs
Mandatory Requirements
- Public-facing theme must be:
- modern
- responsive / adaptive
- suitable for long-term institutional use
DECISION: SOLO skin/template has been choosen for dealing with these requirements
Timing & Implementation Rules =
- Public-facing theming is explicitly deferred until:
- asset logic is validated
- authoritative entities are stable
- Early decisions must not constrain future design exploration, but must enforce:
- accessibility
- adaptability
- long-term maintainability
Stability Principle (UI) =
- UI comfort is a prerequisite for correct decision-making
- Visual strain increases error rates and architectural drift
- Therefore:
- administrative UI comfort is non-negotiable
- public UI adaptability is mandatory
Naming conventions - Design discipline
All attributes in an entity will have the first 2 letters of the entity as prefix in the Drupal machine name. Example: Chapter field "Start Year" - machine name: ch_startyear internal storage name: field_ch_startyear field "Description" - ch_description -- field_ch_description
Due to limitation in Drupal concerning the Data and Time widget, a plain text field is used for "day".. A custom module checks the format DD/MM/YYY and the field is limited to 10 chars, explanation about the format including also a placemarker with the format. The machine field name should end on "_day".
Implementation Status - March 23th 2026)
Entities implemented:
- Chapter
- Place
- Organisation
- Asset (basic structure)
- Person
- Object
All entities include:
- dashboards via Views
- edit workflow via dashboard
- recursive relationships where required
- FK implemented
- entity references verified
End of Blueprint
== Appendix - 1: Data Model -
// =====================================================
// Costasano Heritage Database Model — v5.0
// =====================================================
// ==== HERITAGE OBJECTS ====
Table Object {
Code string [pk]
Parent string [ref: > Object.Code]
Name string
Type string
Subtype string
Place string [ref: > Place.Code]
DateFrom date
DateTo date
Description text
Notes text
}
// ==== DIGITAL ASSETS ====
Table Asset {
Caption string
Code string [pk]
Chapter string [ref: > Chapter.Code]
Place string [ref: > Place.Code]
Organisation string [ref: > Organisation.Code]
Sequence int
MediaFile string [ref: > Files.id]
Parent string [ref: > Asset.Code]
AssetSourceType string [ref: > AssetSourceType.Code]
AssetType string [ref: > AssetType.Code]
SourceReference string
Description text
Notes text
AiProcessed boolean
Citation text
Permalink string
Repository string
Rights string
IsPublishable boolean
}
// ==== EXTERNAL DRUPAL FILES ====
Table Files {
id string [pk]
Label string
Timestamp datetime
User string
Comment text
Size int
Sha1 string
Mime string
Url string
}
// ==== RESEARCH ENTITIES ====
Table Person {
Code string [pk]
FirstName string
LastName string
BirthDate date
DeathDate date
Biography text
Contact text
Notes text
}
Table Organisation {
Code string [pk]
Name string
Place string [ref: > Place.Code]
Description text
Contact text
Notes text
}
Table Place {
Code string [pk]
Parent string [ref: > Place.Code]
Label string
Type string
Latitude float
Longitude float
Description text
Notes text
}
Table Chapter {
Code string [pk]
Description string
Parent string [ref: > Chapter.Code]
StartYear integer
EndYear integer
Notes text
}
// ==== LOOKUP TABLES ====
Table ObjectType {
Code string [pk]
Description text
}
Table AssetSourceType {
Code string [pk]
Label string
Description text
}
Table AssetType {
Code string [pk]
Name string
Description text
}
Table AssetRole {
Code string [pk]
Name string
Description text
}
Table PersonRole {
Code string [pk]
Name string
Description text
}
Table OrganisationRole {
Code string [pk]
Name string
Description text
}
Table Keywords {
Code string [pk]
Name string
Description text
}
// ==== RELATIONSHIP TABLES (Junctions) ====
Table ObjectAsset {
id string [pk]
Object string [ref: > Object.Code]
Asset string [ref: > Asset.Code]
Role string [ref: > AssetRole.Code]
IsPreferred boolean
}
Table PersonAsset {
id string [pk]
Person string [ref: > Person.Code]
Asset string [ref: > Asset.Code]
}
Table OrganisationAsset {
id string [pk]
Organisation string [ref: > Organisation.Code]
Asset string [ref: > Asset.Code]
}
Table OjectChapter {
id string [pk]
Object string [ref: > Object.Code]
Chapter string [ref: > Chapter.Code]
}
Table ObjectPerson {
id string [pk]
Object string [ref: > Object.Code]
Person string [ref: > Person.Code]
Role string [ref: > PersonRole.Code]
}
Table ObjectOrganisation {
id string [pk]
Object string [ref: > Object.Code]
Organisation string [ref: > Organisation.Code]
Role string [ref: > OrganisationRole.Code]
}
Table PersonOrganisationRole {
id string [pk]
Person string [ref: > Person.Code]
Organisation string [ref: > Organisation.Code]
Role string [ref: > OrganisationRole.Code]
}
Table ObjectKeyword {
id string [pk]
Object string [ref: > Object.Code]
Keyword string [ref: > Keywords.Code]
}
Table ObjectHolder {
id string [pk]
Object string [ref: > Object.Code]
Person string [ref: > Person.Code]
Organisation string [ref: > Organisation.Code]
}
Appendix - 2: Modules already enabled in our Drupal 11 configuration - version 20260319 =
mngr@localhost:/var/www/drupal$ drush pm:list --status=enabled
---------------- ----------------------------------------------------------------------- --------- ----------
Package Name Status Version
---------------- ----------------------------------------------------------------------- --------- ----------
Core Announcements (announcements_feed) Enabled 11.3.5
Core Automated Cron (automated_cron) Enabled 11.3.5
Core BigPipe (big_pipe) Enabled 11.3.5
Core Block (block) Enabled 11.3.5
Core Block Content (block_content) Enabled 11.3.5
Core Breakpoint (breakpoint) Enabled 11.3.5
Core CKEditor 5 (ckeditor5) Enabled 11.3.5
Core Comment (comment) Enabled 11.3.5
Core Configuration Manager (config) Enabled 11.3.5
Core Contact (contact) Enabled 11.3.5
Core Contextual Links (contextual) Enabled 11.3.5
Field types Datetime (datetime) Enabled 11.3.5
Field types Datetime Range (datetime_range) Enabled 11.3.5
Core Database Logging (dblog) Enabled 11.3.5
Core Internal Dynamic Page Cache (dynamic_page_cache) Enabled 11.3.5
Core Text Editor (editor) Enabled 11.3.5
Core Field (field) Enabled 11.3.5
Core Field UI (field_ui) Enabled 11.3.5
Field types File (file) Enabled 11.3.5
Core Filter (filter) Enabled 11.3.5
Core Help (help) Enabled 11.3.5
Core History (history) Enabled 11.3.5
Field types Image (image) Enabled 11.3.5
Core Inline Form Errors (inline_form_errors) Enabled 11.3.5
Core Layout Builder (layout_builder) Enabled 11.3.5
Core Layout Discovery (layout_discovery) Enabled 11.3.5
Field types Link (link) Enabled 11.3.5
Core Media (media) Enabled 11.3.5
Core Media Library (media_library) Enabled 11.3.5
Core Custom Menu Links (menu_link_content) Enabled 11.3.5
Core Menu UI (menu_ui) Enabled 11.3.5
Core MySQL (mysql) Enabled 11.3.5
Core Node (node) Enabled 11.3.5
Field types Options (options) Enabled 11.3.5
Core Internal Page Cache (page_cache) Enabled 11.3.5
Core Path (path) Enabled 11.3.5
Core Path alias (path_alias) Enabled 11.3.5
Core Responsive Image (responsive_image) Enabled 11.3.5
Core Search (search) Enabled 11.3.5
Core Shortcut (shortcut) Enabled 11.3.5
Core System (system) Enabled 11.3.5
Core Taxonomy (taxonomy) Enabled 11.3.5
Field types Text (text) Enabled 11.3.5
Core Toolbar (toolbar) Enabled 11.3.5
Core Update Status (update) Enabled 11.3.5
Core User (user) Enabled 11.3.5
Core Views (views) Enabled 11.3.5
Core Views UI (views_ui) Enabled 11.3.5
Core Workspaces (workspaces) Enabled 11.3.5
Core Workspaces UI (workspaces_ui) Enabled 11.3.5
Field types Address (address) Enabled 2.0.4
Development Asset Injector (asset_injector) Enabled 8.x-2.21
Field types Color Field (color_field) Enabled 3.0.2
Other Computed Field (computed_field) Enabled 4.0.0
Other Contact Formatter (contact_formatter) Enabled 2.0.4
Core Dashboard (dashboard) Enabled 2.2.0
Field types Entity Reference Revisions (entity_reference_revisions) Enabled 8.x-1.14
Fields Field Group (field_group) Enabled 4.0.0
File metadata File metadata manager (file_mdm) Enabled 3.2.0
File metadata File metadata - EXIF (file_mdm_exif) Enabled 3.2.0
File metadata File metadata - Font (file_mdm_font) Enabled 3.2.0
Geocoding Geocoder (geocoder) Enabled 8.x-4.31
Geocoding Geocoder Address (geocoder_address) Enabled 8.x-4.31
Geocoding Geocoder Field (geocoder_field) Enabled 8.x-4.31
Geocoding Geocoder Geofield (geocoder_geofield) Enabled 8.x-4.31
Geofield Geofield (geofield) Enabled 10.3.4
Geolocation Geolocation (geolocation) Enabled 8.x-3.14
Geolocation Geolocation - Address (geolocation_address) Enabled 8.x-3.14
Geolocation Geolocation - Baidu Maps (geolocation_baidu) Enabled 8.x-3.14
Geolocation Geolocation - Here Maps (geolocation_here) Enabled 8.x-3.14
Geolocation Geolocation - Leaflet (geolocation_leaflet) Enabled 8.x-3.14
Other Gin Toolbar (gin_toolbar) Enabled 3.0.3
Media Image Effects (image_effects) Enabled 5.0.0
Media ImageMagick (imagemagick) Enabled 5.0.1
jQuery UI jQuery UI (jquery_ui) Enabled 8.x-1.8
jQuery UI jQuery UI Autocomplete (jquery_ui_autocomplete) Enabled 2.1.0
jQuery UI jQuery UI Menu (jquery_ui_menu) Enabled 2.1.0
User interface Klaro Cookie & Consent Manager (klaro) Enabled 3.0.8
Geofield Leaflet (leaflet) Enabled 10.4.4
Geofield Leaflet Markercluster (leaflet_markercluster) Enabled 10.4.4
Geofield Leaflet Views (leaflet_views) Enabled 10.4.4
User interface Linkit (linkit) Enabled 7.0.13
Other Media Library Form Element (media_library_form_element) Enabled 2.1.4
Paragraphs Paragraphs Type Permissions (paragraphs_type_permissions) Enabled 8.x-1.20
Paragraphs Paragraphs (paragraphs) Enabled 8.x-1.20
Paragraphs Paragraph Bundle 3D Carousel (paragraph_bundle_3d_carousel) Enabled 1.0.16
Paragraphs Paragraph Bundle 3D Flip Box (paragraph_bundle_3d_flip_box) Enabled 1.0.16
Paragraphs Paragraph Bundle Accordion (paragraph_bundle_accordion) Enabled 1.0.16
Paragraphs Paragraph Bundle Alert (paragraph_bundle_alert) Enabled 1.0.16
Paragraphs Paragraph Bundle Block (paragraph_bundle_block) Enabled 1.0.16
Paragraphs Paragraph Bundle Block Content (paragraph_bundle_block_content) Enabled 1.0.16
Paragraphs Paragraph Bundle Card (paragraph_bundle_card) Enabled 1.0.16
Paragraphs Paragraph Bundle Carousel (paragraph_bundle_carousel) Enabled 1.0.16
Paragraphs Paragraph Bundle Contact Form (paragraph_bundle_contact_form) Enabled 1.0.16
Paragraphs Paragraph Bundle Content (paragraph_bundle_content) Enabled 1.0.16
Paragraphs Paragraph Bundle Grid (paragraph_bundle_grid) Enabled 1.0.16
Paragraphs Paragraph Bundle Hero (paragraph_bundle_hero) Enabled 1.0.16
Paragraphs Paragraph Bundle Icon (paragraph_bundle_icon) Enabled 1.0.16
Paragraphs Paragraph Bundle Image (paragraph_bundle_image) Enabled 1.0.16
Paragraphs Paragraph Bundle Image Background (paragraph_bundle_image_background) Enabled 1.0.16
Paragraphs Paragraph Bundle Image Grid (Image Gallery - Lightbox) Enabled 1.0.16
(paragraph_bundle_image_grid)
Paragraphs Paragraph Bundle Image Overlay (paragraph_bundle_image_overlay) Enabled 1.0.16
Paragraphs Paragraph Bundle Layout (paragraph_bundle_layout) Enabled 1.0.16
Paragraphs Paragraph Bundle Modal (paragraph_bundle_modal) Enabled 1.0.16
Paragraphs Paragraph Bundle Node Reference (paragraph_bundle_node_reference) Enabled 1.0.16
Paragraphs Paragraph Bundle Parallax (paragraph_bundle_parallax) Enabled 1.0.16
Paragraphs Paragraph Bundle Slideshow (paragraph_bundle_slideshow) Enabled 1.0.16
Paragraphs Paragraph Bundle Tabs (paragraph_bundle_tabs) Enabled 1.0.16
Paragraphs Paragraphs Bundles (paragraphs_bundles) Enabled 1.0.16
Mail SMTP Authentication Support (smtp) Enabled 8.x-1.4
Solo Suite Solo Utilities (solo_utilities) Enabled 1.0.6
Other Sophron (sophron) Enabled 3.1.0
Media SVG Image Responsive (svg_image_responsive) Enabled 3.2.2
Media SVG image (svg_image) Enabled 3.2.2
Costasano Costasano Asset (costasano_asset) Enabled
Heritage Heritage Codes (heritage_codes) Enabled 1.0.0
Heritage Heritage Tweaks (heritage_tweaks) Enabled
Core Claro (claro) Enabled 11.3.5
Core Olivero (olivero) Enabled 11.3.5
Gin (gin) Enabled 5.0.12
Solo Solo (solo) Enabled 1.0.31
---------------- ----------------------------------------------------------------------- --------- ----------