Over the past year and a half I’ve had the opportunity to manage an exciting project with a small team of talented and passionate developers. This project was developed at the University of Alberta and given the title Catfish.

What Is Catfish?

Catfish was created on top of a system called Piranha and written in C#. It was designed to provide a Content Management System(CMS) that can also house and manage large amounts of searchable data. The target audience was initially Researchers with large amounts of text based data, but has since expanded to projects with more technical and visual data.


This data is loosely structured to follow the Portland Common Data Model(PCDM). However, the only differences are that the namespaces are not used, and Object has been changed to item(in order to avoid reserved names in C# and Javascript).

All data is stored as XML and is indexed using Solr. This indexing has allowed us to make the data fully searchable in a minimal amount of time.

Data in the system is organized as entities that can either be a collection, item. Collections and items are very similar: they contain metadata sets for holding their data; they can have multiple child and related items; and they are fulling searchable. The only differences are that a collection can contain child collections, and items can have files associated to them.

Each entity is defined by an Entity Type. These entity types contain a list of which metadata sets to use, and the ability to map the values of these metadata sets to other names. For example, you have have a metadata set with a value named “Title” and another with the value “Name”; with this mapping, you can both have them point to a property titled “Name Mapping”. This would allow you to create screens that does not need to know the underlying metadata structure, but only their mappings.

My Role

When Catfish was conceived, I co-designed the initial structure of the system and provided the first implementation of the Solr index. After a while I was brought on to manage the project.

My responsibilities include managing and distributing tasks to other developers; meeting with clients to discuss requirements and timelines; and ensuring an overall quality for the system.


We have several sites that are already using Catfish, and have more planned over the next few months.

Some include:

Git Repository

Catfish was developed as an open source project. The code can be found at https://github.com/arcualberta/Catfish