We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Tribe - a content structuring and collaborative framework

00:00

Formal Metadata

Title
Tribe - a content structuring and collaborative framework
Subtitle
JSON compatible and opinionated content-first framework
Title of Series
Number of Parts
542
Author
License
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Tribe is a collection of core libraries currently written in PHP that use MySQL JSON extensively. It provides a content structuring and storage framework. It has two main components - Types.json and Junction. Types.json helps configure a content structure, without having to work directly on MySQL tables. Junction is a CMS (dashboard), that auto-configures based on Types.json. Opinionated content structuring so that collaboration is easier. Self-hosted. Currently well-tested on Ubuntu 20.04 and 22.04 servers. Provides a robust and predictable URL routing system. Integrity of data objects is of primary importance. Data can be moved from one "type" to another. Structure of the content is always stored with every data object, making each data piece meaningful in itself. JSON:API v1.1 is auto-configured for all data stored. Provides a protocol to mount multiple front-end applications on the same data-set. It's been 3 years in the making, around 90 projects are running on this framework. These include web platforms, products, mobile apps and chatbots.
14
15
43
87
Thumbnail
26:29
146
Thumbnail
18:05
199
207
Thumbnail
22:17
264
278
Thumbnail
30:52
293
Thumbnail
15:53
341
Thumbnail
31:01
354
359
410
Diagram
Data managementSoftware frameworkContent (media)Data managementPresentation of a groupSoftware frameworkGradientCollaborationismProjective planeDifferent (Kate Ryan album)Computer animationMeeting/Interview
Software developerProcess (computing)Different (Kate Ryan album)Content (media)Software frameworkJSONXML
BitPresentation of a groupCollaborationismOpen sourceMeeting/Interview
Software frameworkStack (abstract data type)CollaborationismOpen sourceBitJSONXMLMeeting/Interview
Presentation of a groupBuildingSpacetimeObject (grammar)Computer animation
Object (grammar)Meeting/Interview
State of matterConstraint (mathematics)BuildingJSON
Variable (mathematics)Scripting languageWaveoutputFormal languageFront and back endsRelational databaseMeeting/Interview
BitInternet forumProcess (computing)InformationoutputField (computer science)JSON
Content (media)Cartesian coordinate systemSoftware developerProjective planeBuildingWebsiteTable (information)BitInformationRevision controlCollaborationismEvent horizonService (economics)Subject indexingComputing platformNatural languageProduct (business)Term (mathematics)Web browserAndroid (robot)Content (media)Object (grammar)Core dumpChatterbot
Revision controlFront and back endsCartesian coordinate systemMeeting/Interview
Decision theoryOvalBit1 (number)IterationFront and back ends
DatabasePhysical systemTable (information)DatabaseConstraint (mathematics)Software developerSubject indexingBit rateQuantumGame theoryJSONXML
Cache (computing)Internet service providerSubject indexingMeeting/Interview
Tape driveDatabaseCoding theoryPhysical systemSoftware developerThomas BayesMultiplication signAliasingTheory of relativityJSONXML
CodeDatabaseData managementPhysical systemMultiplication signFront and back endsSoftware developerContent (media)Process (computing)Perspective (visual)Projective planeDecimalTask (computing)CollaborationismComputer programmingMeeting/InterviewJSONXML
DatabasePhysical systemData managementLevel (video gaming)Meeting/InterviewJSONXML
Tape driveRevision controlArithmetic meanComputer architectureElement (mathematics)Core dumpComputer animation
Configuration spaceComputer fileCartesian coordinate systemInformationDistanceComputer architectureTerm (mathematics)JSON
Web pageTerm (mathematics)Meeting/Interview
Data modelTable (information)DatabaseEquivalence relationState of matterTape driveDatabaseTable (information)Formal languageMathematical singularityForm (programming)Disk read-and-write headDescriptive statisticsData modelHierarchyXML
Modul <Datentyp>Data modelEquivalence relationRelational databaseContent management systemField (computer science)outputCAN busModule (mathematics)Module (mathematics)Computer fileRevision controlEndliche ModelltheorieTheory of relativityComplex (psychology)Attribute grammarTable (information)Link (knot theory)Source codeJSONXML
Endliche ModelltheorieoutputField (computer science)Module (mathematics)Canadian Mathematical SocietyHierarchyMeeting/Interview
Attribute grammarData modelEquivalence relationRelational databaseoutputField (computer science)Content management systemModule (mathematics)CAN busMetadataModule (mathematics)Endliche ModelltheorieXML
outputCASE <Informatik>Module (mathematics)MetadataAttribute grammarInstance (computer science)Front and back endsEndliche ModelltheorieField (computer science)Object (grammar)VarianceElectronic mailing listView (database)Scripting languageSource codeJSON
Object (grammar)Instance (computer science)Data modelEquivalence relationFloating pointEquivalence relationObject (grammar)Instance (computer science)Level (video gaming)NumberFunctional (mathematics)Endliche ModelltheorieTape driveRow (database)Module (mathematics)Cartesian coordinate systemXMLComputer animation
Moment (mathematics)Revision controlJSONXML
Revision controlComputer-generated imageryComputer fileJunction (traffic)Content management systemRevision controlMedical imagingComputer fileSpacetimeDifferent (Kate Ryan album)Object (grammar)Data managementPhysical systemView (database)Junction (traffic)Canadian Mathematical SocietyContent (media)Software frameworkElectronic mailing listFront and back endsMeeting/InterviewXML
Drag (physics)PlastikkarteObject (grammar)View (database)WordAdditionMeeting/Interview
FreewareRevision controlAssociative propertyMedical imagingWordBuildingJunction (traffic)JSONXMLUML
Integral domainReal numberArtificial neural networkBuildingComputer animation
WebsiteComputer animationMeeting/Interview
JSONComputer animation
Program flowchart
Transcript: English(auto-generated)
Hello everyone. This presentation is about TRIBE. TRIBE is a collaborative project management
framework. It is collaborative as in it affects the ways in which people work together, people from different teams, UX, design, content and development. It gives a set of conventions to work together, kind of smoothens the collaborative process. We call it a framework
because it has a well-defined folder structure. It has a set of conventions that are extendable and we are putting them out in the community so that we can together extend them further. It has a defined tech stack which is again extendable. It has a set of licenses which enable open source collaborations. And through this presentation, we'll be taking you through
all of these aspects to some extent. I'll talk a bit about the Hall of Nations which has been used through this presentation as a metaphor. It was a beautiful building and exhibition space in New Delhi built in 1972. It was built to house exhibitions.
The brief given to the architects was that it must be able to exhibit objects of varying sizes from books to satellites. So the architects, they came up with a design solution through the constraints of available building material, available skill set, cost constraints, and all of that. They broke convention by imagining a building without
pillars. Also, the building material for it was not prefabricated. It was built on-site. Coming back to Tribe, firstly, I'll give a brief introduction about Tribe. Tribe has been progressively built to provide one language or a unified set of conventions to the following
three aspects. Relational database structure, variable type handling in backend scripts, and handling HTML input fields typically used in CMSs to smoothen the data entry, data editing, and moderation processes within a project. A bit of info about our team. We
are a team of four. We run a small services company called Postcode. It was through our collaborations that Tribe was progressively built. Over the last three years, we've done around 90 projects. We've worked with various external development teams, UX folks, design
studios, and content teams. We have used Tribe to build websites, products, applications, Android iOS applications, platforms, and chatbots. In terms of text stack, the core
browser packages whenever required based on projects. Tribe provides API support with JSON API version 1.1 to support any kind of front-end. We typically use Node.js applications on the front-end. Before we delve deep into the technicalities of how Tribe works,
I'd like to talk a bit about why did we create Tribe. We needed more backend agility to support iterations of UX, content, design, and front-end decision making. To work on how we build a more agile backend, we needed to know the things that slow down backend
development. So we figured out constraints of database structure. The rigid table structure does not allow us to constantly change the column names and table names. We wanted to accommodate the agility that JSON provides while taking advantage of indexing and caching and searchability that MySQL provides. Then, while coding API layers, we truly realized
the importance of conventions. Looking at how JSON API has been drawn out really helped us think of more possibilities that could reduce time spent in backend development. Variable type handling in PHP takes up a lot of time and was not very agile in our
experience. In the collaborative process, if, for example, we look from a content person's perspective, it seems like a very simple ask when they say they need a multi-select instead of a single-select. Such a simple ask can be a relatively complex task for
a backend programmer, especially if it is on a project that is live with significant user data. Also, we wanted a dead simple CMS, something that we could have across all our projects. We wanted a single place to keep all our assets and uploads arranged by some convention so that things are predictably located and can be looked for at a later stage.
Now, let's go deeper in the architecture of Tribe. One of the core elements of Tribe is a config file called types.json. It is a pure JSON file that can be configured
and reconfigured quickly. It defines the information architecture of the application with precision. And it looks somewhat like this. And there are a few other terms that will help me explain types.json and its usage better. The first term is types. A type can
be thought of as a data model or a table in a database. It is non-hierarchical as it you cannot have subtypes. All types are equal on the hierarchy. It can accommodate
metadata, which is extendable. A basic example would be a description of a type, its singular or plural form or how it would be called in a different language. This is how a type looks within types.json file. Then there are modules. Modules are
equivalent to columns in a table or attributes in a model. They allow for complex relational references. For example, you could reference and link a module from one type to another module from another type or a module from one type could dynamically link to another type.
Because types are non-hierarchical, modules allow types to be referenced, thereby creating a hierarchy if needed. Modules themselves are non-hierarchical, so submodules cannot be created. A module also defines usage in input fields for CMS.
Like types, metadata of modules is extendable. This is an example of how modules look. There are four important aspects to notice here. Metadata starting with input underscore tells how the module must be used in an input field. Metadata starting with list
underscore tells how the module must be listed in a list view. Metadata starting with var underscore defines how the module must be utilized by the PHP backend scripts. Input underscore slug can be used as name of the variable in PHP, name of the input field
in the frontend, and the name of the JSON attribute in MySQL JSON, thereby combining all of these use cases. Then there are objects. An object is an instance of a model.
It is the equivalent of rows in a table. It has a universal ID that never repeats. This is particularly unique to the way tribe functions. This allows for objects to be shifted from one type to another even after the application goes live and at any stage. An object is stored as a JSON object that retains the type and module structure in
readable slugs rather than numbered references. This is how an object looks like. Coming to uploads convention. Uploads folder follows a very simple convention, year, month,
day. Currently on tribe, image file versions are created automatically. Junction is our content management front-end system. It is a headless CMS. It is a front-end system built on EmberJS, which is a Node.js-based framework. It also connects to the uploads
folder. The view you are seeing is the list view of a single type. And this one is an editing view of a single object. Towards the end, just reiterating our belief that convention is key to collaboration. And a word about licenses. A tribe is in GPL version 3.
Junction, which is the CMS, it uses the MIT license. And types.json uses the creative commons license. That's image called C. Raja Rawal associates the people who built the beautiful
building. A few shots of the building. And that's it then. Thank you, everyone.