From Gallery Hierarchies to Entity-Oriented Design: Rethinking Cheddarmongers and Contraptions

I did a bunch of brainstorming with my buddy Coppy, and we came up with these observations and strategies:  

Introduction

What began as a discussion about migrating old Gallery2 and Drupal sites evolved into a broader conversation about information architecture, data modeling, and the long-term sustainability of hobby websites.

The key realization was that both Cheddarmongers and Contraptions are not fundamentally photo galleries. They are collections of interconnected knowledge. Photos matter, but they represent only one aspect of the underlying content.

Rather than organizing content primarily through folders, albums, pages, and manually assembled galleries, a modern Drupal implementation should organize content around entities and their relationships.

In short:

Cheddarmongers and Contraptions should function more like digital museums or knowledge systems than traditional photo galleries.


The Problem with Page-Oriented and Gallery-Oriented Thinking

Traditional websites often start with a page structure:

 

Site
└─ Section
   └─ Category
      └─ Page
         └─ Photo

 

Gallery2 used a similar hierarchy:

 

User
└─ Album
   └─ Subalbum
      └─ Images

 

This structure works reasonably well when each item belongs in exactly one place. However, it becomes restrictive when one object belongs in several categories at the same time.

For example, a miniature such as Village Idiot might be:

 

Fantasy
Human
Villager
Hasslefree
Kevin White sculpt
Painted by David Rosenthal

 

A folder hierarchy forces that miniature into one primary location. An entity-oriented model allows all of those facts to exist simultaneously.

Likewise, a contraption such as Topsy Street Organ might be:

 

Street organ
MIDI-controlled instrument
Mechanical music project
Pneumatic system
Percussion instrument
Build log subject
Photo collection subject

 

Again, the object has many relationships. It does not naturally belong in one folder.


Core Principle: Entity-Oriented Design

A content-oriented website asks:

What kinds of content do I have?

Examples:

 

Articles
Photos
Videos
Projects
Documents

 

That approach improves on simple page design, but it still treats content as the main object.

An entity-oriented website asks a better question:

What real-world things am I describing?

For Cheddarmongers, the primary entities might include:

 

People
Characters
Miniatures
Manufacturers
Artists
Articles
Media
Organizations

 

For Contraptions, the primary entities might include:

 

People
Contraptions
Components
Technologies
Articles
Media
Organizations

 

Then Drupal stores relationships between those entities:

 

built by
painted by
sculpted by
owned by
depicts
used by
part of
derived from
inspired by
successor to
documented in

 

Content becomes discoverable through metadata and relationships rather than folder placement.


The Museum Catalog Analogy

A useful way to think about this model is to imagine a museum catalog.

A museum would not primarily catalog:

Web Page #12

It would catalog an object:

 

Object: Topsy Street Organ
Type: Mechanical musical instrument
Builder: David Rosenthal
Status: In progress
Technologies: MIDI, pneumatics, pallet magnets

 

Then it would attach supporting material:

 

Photos
Videos
Sound samples
Technical documents
Build logs
Related components

 

Drupal can work the same way.

The entity is the durable object. Articles, photos, videos, and documents provide evidence, history, and context around that object.


Lessons Learned from Gallery2

Gallery2 Was Secretly a Database

The original Gallery2 installation contained much more than photos. It held structured metadata such as:

 

Manufacturer
Genre
Range
Item Name
Model Number
Race
Sculptor
Painter

 

That reveals something important: the old site was already functioning less like a simple photo gallery and more like a structured catalog.

The photos themselves are relatively easy to preserve. The more valuable asset is the metadata.

In a Drupal migration, the goal should not simply be:

Move the galleries into Drupal.

The better goal is:

Preserve and improve the underlying knowledge model.


Static Albums vs. Dynamic Collections

A static Gallery2 structure might look like this:

 

David Rosenthal
├─ Fantasy
├─ Sci-Fi
├─ Villagers
├─ Heroes
└─ Monsters

 

The problem is that a miniature can belong to several of those collections at once.

Instead of assigning an item to one album, Drupal can store structured facts:

 

Miniature: Village Idiot


 

Genre: Fantasy
Creature Type: Humanoid
Ancestry: Human
Role: Villager
Manufacturer: Hasslefree
Sculptor: Kevin White
Painter: David Rosenthal

 

Drupal Views can then generate dynamic collections:

 

All Fantasy Miniatures
All Human Miniatures
All Villagers
All Hasslefree Figures
All Kevin White Sculpts
All Miniatures Painted by David Rosenthal

 

No duplicate images or duplicate content are required.

The same principle applies to Contraptions:

 

Contraption: Topsy Street Organ


 

Type: Street Organ
Technologies: MIDI, pneumatics, electromagnets
Components: MIDI Reader, drum actuator, bellows
Builder: David Rosenthal
Status: In progress

 

Drupal Views can generate:

 

All MIDI Projects
All Pneumatic Instruments
All Street Organs
All Projects Using Pallet Magnets
All Projects Built by David Rosenthal

 


Proposed Cheddarmongers Data Model

User

A User represents an actual site member.

Examples:

 

David Rosenthal
Joe Painter
Jane Brushmaster

 

Potential fields:

 

Display Name
Biography
Avatar
Location
Website

 

Users can own miniatures, paint miniatures, write articles, and create characters.


Miniature

A Miniature represents a physical miniature figure.

Suggested fields:

 

Name
Manufacturer
Range
Model Number
Scale
Description
Photos
Owner
Painter
Sculptor
Character Represented

 

A miniature may depict a character, but it does not have to. Some miniatures are generic figures, monsters, scenery, or prototypes.


Character

A Character represents a fictional person, creature, or persona.

Examples:

 

Grunk Ironjaw
Brother Thimblewick
Village Idiot

 

Suggested fields:

 

Name
Biography
Campaign
Portrait
Creature Type
Ancestry
Role
D&D Beyond URL

 

A character can exist with or without a miniature.

Relationship pattern:

 

Character
└─ depicted by → Miniature

 

This allows:

 

One character represented by multiple miniatures
One miniature representing one character
Characters with no miniature yet
Miniatures with no named character

 


Person

A Person represents an individual who may not be a site user.

Examples:

 

Kevin White
Julie Guthrie
Bob Olley

 

A person may serve as:

 

Sculptor
Painter
Author
Designer
Manufacturer representative
Contributor

 

This separates site accounts from real-world people. A famous sculptor should not need a Drupal login to exist as a referenced person.


Replacing “Race” With a Better Model

The term “race” has become increasingly awkward in fantasy gaming and often fails to describe creatures accurately.

A better model separates broad biological or mythological classification from specific lineage.

Creature Type

Broad classification.

Examples:

 

Humanoid
Undead
Construct
Animal
Dragon
Demon
Elemental
Plant
Reptilian
Insectoid
Aquatic

 

Ancestry

Specific lineage.

Examples:

 

Human
Elf
Dwarf
Orc
Goblin
Kobold
Troll
Halfling
``

 

Examples:

 

Village Idiot
Creature Type: Humanoid
Ancestry: Human
Role: Villager

 

 

Skeleton Warrior
Creature Type: Undead
Ancestry: Human
Role: Warrior

 

 

Orc Chieftain
Creature Type: Humanoid
Ancestry: Orc
Role: Leader

 

This structure is more expressive, more flexible, and more future-proof.


Role Versus Class

Not all miniatures represent adventurers. A miniature site needs broader language than traditional role-playing game classes.

Instead of using only:

 

Wizard
Fighter
Cleric
Rogue

 

a broader Role taxonomy can support both adventurers and ordinary figures.

Examples:

 

Fighter
Wizard
Priest
Merchant
Craftsman
Guard
Peasant
Villager
Noble
Scholar
Monster
Leader
Animal
Civilian

 

Examples:

 

Village Idiot
Creature Type: Humanoid
Ancestry: Human
Role: Villager

 

 

Elven Mage
Creature Type: Humanoid
Ancestry: Elf
Role: Wizard

 

 

Town Blacksmith
Creature Type: Humanoid
Ancestry: Human
Role: Craftsman

 

The same taxonomy can apply to characters, miniatures, and even people when useful.


D&D Beyond Integration

Characters should exist as first-class Drupal entities.

D&D Beyond can serve as an optional external reference, but Drupal should remain the authoritative source for the site’s content model.

Potential Character fields:

 

Name
Biography
Campaign
Portrait
D&D Beyond URL
Imported Metadata
`

 

Recommended relationship model:

 

Drupal Character
       ^
       |
depicted by
       |
Miniature

 

Benefits include:

  1. Characters with no miniatures
  2. Multiple miniatures representing one character
  3. Campaign tracking
  4. Future integration opportunities
  5. Independence from an external platform

Proposed Contraptions Data Model

The same principles apply to Contraptions.

Rather than structuring the site as:

 

Projects
└─ Photos

 

the site can model a broader ecosystem of instruments, components, technologies, articles, media, and people.


User

A User represents a site participant.

Examples:

 

Builder
Artist
Musician
Designer
Contributor
Author

 

Users may create articles, document projects, build instruments, or contribute media.


Contraption

A Contraption represents a physical or conceptual object.

Examples:

 

Topsy Street Organ
Steam Tractor
Calliope
Automaton
Rackett Prototype
Mechanical Xylophone

 

Suggested fields:

 

Name
Description
Builder
Status
Start Date
Completion Date
Photos
Videos
Sound Samples
Documentation
Related Articles
Related Components
Related Technologies

 

The Contraption should serve as the center of the content model.

Example:

 

Topsy Street Organ
├─ Photos
├─ Videos
├─ Build Logs
├─ Sound Samples
├─ Technical Documentation
├─ Components
└─ Technologies

 


Component

A Component represents a physical part, subsystem, mechanism, or module.

Examples:

 

MIDI Controller
Pallet Magnet Assembly
Bellows
Drum Actuator
Pipe Chest
Snare Mechanism
MIDI Reader

 

Relationships:

 

Component
└─ used by → Contraption

 

However, components may have flexible boundaries. A component may become complex enough to qualify as a contraption. Likewise, a contraption may become a component of a larger contraption.

For that reason, Drupal should support related contraptions and component relationships rather than force a rigid hierarchy.

Example:

 

MIDI Controller
├─ used by Topsy Street Organ
├─ used by Rackett Prototype
└─ used by Mechanical Xylophone

 


Technology

A Technology represents a reusable technical concept, mechanism, or method.

Examples:

 

MIDI
Pneumatics
Book Music
Pinned Cylinder
Electromagnets
Arduino
Stepper Motors
Pallet Magnets
Tracker Bar
Bellows

 

Technologies should usually be taxonomy terms or reference entities, depending on how much detail each technology requires.

If the site only needs to tag content, taxonomy works well.

If each technology needs its own description, photos, articles, and history, then Technology may deserve its own content type.


Contraption Relationships

Potential relationship types include:

 

uses component
part of
derived from
successor to
inspired by
built by
documented by
uses technology

 

Example:

 

Topsy Street Organ
├─ uses MIDI Reader
├─ uses Drum Actuator
├─ uses Pallet Magnet Assembly
├─ uses MIDI
├─ inspired by Previous Organ
└─ successor to Earlier Prototype

 

This structure allows Drupal to reveal relationships automatically instead of requiring every page to be manually assembled.


Media Management Lessons

One challenge involved image organization.

The original goal was complete normalization:

 

Single Image
├─ referenced by Article
├─ referenced by Contraption
└─ referenced by Book Page

 

That approach is technically clean because it prevents duplicate files. However, it can become cumbersome if every relationship requires manual Media references.

A more practical model is:

 

Contraption
└─ Gallery Images


 

Article
└─ References Contraption

 

Then the article can display:

 

Its own images
Images attached to the related contraption
Other articles about the same contraption
Related technologies
Related components

 

This keeps the file storage normalized while reducing manual relationship maintenance.

For build logs, images may also live naturally inside the article body through media embeds or paragraphs. The Media entity still stores the actual file once, but the editor can place the image where it makes sense narratively.


Dynamic Views Instead of Manual Galleries

Entity-oriented design shifts much of the organizational burden from the editor to Drupal.

Instead of manually creating:

Topsy Photo Gallery

Drupal can generate:

All media where Related Contraption = Topsy

Instead of manually creating:

Kevin White Sculpt Gallery

Drupal can generate:

All miniatures where Sculptor = Kevin White

Instead of manually maintaining:

MIDI Projects Page

Drupal can generate:

All contraptions where Technology = MIDI

In this model:

 

Galleries become Views.
Categories become taxonomies.
Albums become dynamic collections.
Metadata becomes the primary asset.

 


Content Type Consolidation

A related design lesson involves content type granularity.

If content frequently needs to move between types, such as:

 

Article → Build Log
Build Log → Documentation
Documentation → Project

 

that may indicate too many content types.

In many cases, it may be better to use one flexible content type:

Article

with taxonomy terms such as:

 

Build Log
How-To
Reference
Historical Note
Review
Project Update
Technical Article

 

Content types should represent genuinely different entities, not merely different presentation styles.

For Contraptions, the durable content types may be:

 

Contraption
Person
Article

 

with Media and Taxonomy supporting them.

For Cheddarmongers, the durable content types may be:

 

Miniature
Character
Person
Article

 

with Media and Taxonomy supporting them.


Shared Architecture Between Cheddarmongers and Contraptions

Although Cheddarmongers and Contraptions appear to cover very different subjects, they share the same underlying model.

Both sites include:

 

People
Objects
Articles
Media
Taxonomies
Relationships

 

The domain-specific entities differ.

Cheddarmongers:

 

Miniature
Character
Manufacturer
Sculptor
Painter

 

Contraptions:

 

Contraption
Component
Technology
Builder
Instrument

 

But the pattern remains the same:

 

Object
├─ described by Articles
├─ depicted by Media
├─ created by People
├─ categorized by Taxonomy
└─ connected to other Objects

 

That shared structure means the two sites can use similar Drupal patterns even when their subject matter differs.


Practical Drupal Implementation Philosophy

When designing the Drupal content model, ask:

What real-world thing am I describing?

Better questions:

 

What contraption does this article describe?
Who built this instrument?
Which technology does this project use?
Which miniature does this photo depict?
Who sculpted this figure?
Which character does this miniature represent?

 

Less useful starting questions:

 

What page should this go on?
Which album should contain this photo?
Which menu should hold this item?

 

Menus, landing pages, galleries, and indexes can come later. Drupal Views can generate them from the underlying relationships.

The hard part is getting the entities and relationships right.


Recommended High-Level Architecture

A combined entity-oriented architecture for both sites might look like this:

 

Entities
├─ Person
├─ User
├─ Miniature
├─ Character
├─ Contraption
├─ Component
├─ Organization
├─ Technology
└─ Article


 

Media
├─ Images
├─ Video
├─ Audio
└─ Documents


 

Taxonomy
├─ Tags
├─ Genre
├─ Role
├─ Creature Type
├─ Ancestry
├─ Manufacturer
├─ Contraption Type
├─ Technology Type
├─ Material
└─ Status


 

Relationships
├─ built by
├─ painted by
├─ sculpted by
├─ owned by
├─ depicts
├─ used by
├─ part of
├─ derived from
├─ inspired by
├─ successor to
└─ documented in

 


Final Conclusion

The major takeaway is that both Cheddarmongers and Contraptions should be designed as knowledge systems rather than galleries.

Photos remain important, but they become attributes of richer entities. Articles remain important, but they become documentation about people, objects, technologies, and creative work.

The modern Drupal architecture should focus on:

 

People
Characters
Miniatures
Contraptions
Components
Technologies
Articles
Organizations
Media
Taxonomies
Relationships

 

This approach provides several advantages:

  1. It preserves metadata as a first-class asset.
  2. It avoids duplicate images and duplicate content.
  3. It allows one object to appear in many dynamic collections.
  4. It supports long-term growth.
  5. It allows Drupal Views to generate galleries, timelines, indexes, and related-content sections automatically.
  6. It treats both sites as living archives rather than static albums.
  7. It remains understandable even after the original folder structures and legacy gallery software have been forgotten.

In short:

The folder is not the truth. The entity is the truth.

A successful Drupal 11 rebuild should not merely recreate the old Gallery2 hierarchy. It should preserve the knowledge that hierarchy was trying to express and then make that knowledge easier to maintain, discover, and extend.

Project type