Expo Generator

Expo Generator ist ein Software as a Service, mit dem Messe-Apps im Browser und ohne technisches Wissen erstellt werden können.

Expo Generator Logo

Motivation

Das Informationsangebot auf Messen und Anforderungen der Messebesucher divergieren. Flyer werden üblicherweise verwendet, um über das Messeprogramm zu informieren und Besucher durch die Infrastruktur zu navigieren. Im digitalen Zeitalter veränderten sich allerdings die Anforderungen der Messebesucher: Flyer haben den Charakter von Werbung, werden als zusätzlicher Ballast gesehen und Besucher haben die Erwartungshaltung, Inhalte auf ihre Anforderungen anpassen, durchsuchen und filtern können.

Bei der Entwicklung einer Messe-App sehen sich Veranstalter von Regionalmessen, wovon gemäß AUMA allein 160 in Deutschland existieren, und messeartige Veranstaltungen, wie z. B. FHS Contacta, mit Herausforderungen konfrontiert: App-Entwicklung ist nicht deren Expertise, es gibt keine direkt verfügbaren Standardlösungen für Messe-Apps und die Kooperation mit Agenturen überschreitet Aufwand und tragbare Kosten.

Expo Generator

Expo Generator befähigt nicht-technische Messeveranstalter unabhängig von Softwareentwicklern, die eigene Messe-App zu geringen Kosten jederzeit im Browser (SaaS) zu erstellen.

Die Erstellung einer Messe-Apps gestaltet sich folgendermaßen:

  1. Messeveranstalter bereiten Daten zur Messe, Ausstellern und weiteren Entitäten im Verwaltungssystem von Expo Generator auf.
  2. Expo Generator erstellt aus den gegebenen Daten eine moderne App für die Messebesucher.
  3. Nutzer können die App im Web nutzen und in App Stores downloaden.

Durch ein standardisiertes Angebot seitens Expo Generator, das Messeveranstaltern einen direkten Weg zur Lösung an die Hand gibt, wird eine effiziente Lösung erreicht.

Expo Generator Verwaltungssystem und App
Expo Generator Verwaltungssystem und App

Eckdaten des Projekts

  • Start: 27.11.2019
  • Ende: 21.05.2021
  • Status: beendet

Technische Beschreibung

Metriken

  • Commits: 2891
  • Issues: 264 | Merge Requests: 213
  • Pipelines: 1067
  • Test Coverage
    • App: 100 %
    • Backend: 97,2 %
    • Frontend Verwaltungssystem: 100 %

Verwendete Technologien

  • Ruby on Rails: Backend Geschäftslogik
  • GraphQL: Backend API
  • PostgreSQL: Datenbank
  • React (TypeScript): Frontend Verwaltungssystem
  • React Native (TypeScript, Expo): App für Besucher
  • Docker: Development, Production
  • Gitlab CI/CD: Quality Gates, Deployment Pipelines
  • Cloudinary: Asset Management
  • Terraform: Infrastructure As Code zur Verwaltung der GCP Cloud-Infrastruktur
  • Firebase: Hosting CMS Frontend
  • Google Cloud Platform: Hosting Backend
    • Cloud SQL: Serverless Database (PostgreSQL)
    • Cloud Run: Serverless Container Runtime
    • Secret Manager: Speicherung von Secrets
    • IAM: Dienskonten für GCP Ressourcen und Pipelines
    • Cloud Storage: Terraform Backend
    • Cloud DNS: performanter DNS Service

Architektur

Applikation

Expo Generator Architektur
Expo Generator Architektur

Prinzipiell ist Expo Generator ein spezialisiertes Content Management System (CMS). Insofern existiert das Backend als "CMS Backend", das auf Ruby on Rails und PostgreSQL basiert und die Geschäftslogik über eine GraphQL API anbietet. Weiters existieren das Verwaltungssystem als "CMS Frontend" und die App für Besucher, welche in React bzw. React Native (Expo) mit TypeScript geschrieben wurden. Beide Applikationen verwenden Apollo als GraphQL Client, womit beide Applikationen auf dieselbe GraphQL API des Backends zugreifen. Assets wurden über Cloudinary eingebunden, wobei das Backend lediglich deren URLs verwaltet.

Messen besitzen einen Veröffentlichungsstatus. Während das Backend für unveröffentlichte Messen eine Autorisierung zur Datenausgabe erfodert, ist es bei gesetztem Veröffentlichungsstatus nicht der Fall. Auf diese Weise wird gewährleistet, dass in der App ausschließlich veröffentlichte Inhalte präsentiert werden.

Datenmodell

Expo Generator Datenmodell
Expo Generator Datenmodell

Die Datenstruktur besteht aus 10 fundamentalen Entitäten.

  • Exhibition ist die übergeordnete Entität der Datenstruktur. Letztendlich ist jede andere Entität auf eine Exhibition zurückzuführen. Neben grundlegenden Informationen zu Veranstaltung, kapselt Exhibition auch Konfigurationsparameter wie locales. Diese enthalten die Sprachen, welche der Nutzer für die Veranstaltung definiert. Konzeptionell gilt, dass nutzergenerierte Inhalte in eben diesen Sprachen vorhanden sein müssen, um die Applikation zu veröffentlichen. Die Konvention garantiert eine einheitliche Basis an Sprachen in einer Applikation, welche schließlich in der Besucherapp für übersetzbare Inhalte auswählbar sind.

  • Map ist der Geländeplan der Ausstellung.

  • Facility ist ein Infrastrukturelement (z. B. Informationsstand) auf der Ausstellung.

  • Exhibitor ist ein Aussteller auf einer Veranstaltung. Exhibitor kann optional einem anderen Exhibitor zugeordnet sein. Das erlaubt, häufig vorkommende verschachtelte Strukturen, wie Mutter-/Tochterunternehmen, abzubilden.

  • Exhibit ist ein Ausstellungsstück (z. B. Automobil) auf einer Veranstaltung. Exhibit besitzt eine Assoziation zu multiplen Exhibitors, was es ermöglicht, die Zusammenarbeit mehrerer Aussteller an einem Ausstellungsstück abzubilden.

  • Location ist eine Verortung auf einer Veranstaltung. Sie dient dazu, andere Entitäten eindeutig zu lokalisieren.

  • Event ist ein Ereignis (z. B. Produktpräsentation) auf einer Veranstaltung. Event besitzt eine Assoziation zu multiplen Exhibitors, um gemeinsam veranstaltete Ereignisse abzubilden.

  • Host ist eine Begleitperson bei einem Event.

  • Tag ist ein Schlagwort (z. B. Skiausrüstung). Durch den Einsatz von Schlagworten kann zusätzliche Informationen auf einfach Weise auf Entitäten propagiert und eine Such-/Filterfunktion effizient gestaltet werden. Ein Tag kann optional einem anderen Tag zugeordnet sein. Dadurch ist es möglich, verschachtelte Strukturen, wie Skiausrüstung und Wintersport, abzubilden und eine sinnvolle Gruppierung von Schlagworten zu gestalten.

  • TagCategory ist eine Kategorie (z. B. Produkte), die Tags gliedert. Über das Attribut assignables wird definiert, welcher bzw. welchen Entitäten aus Event und Exhibitor die TagCategory zugehörig ist. Eine solche Kategorie unterstützt die effiziente Gestaltung einer Filterfunktion und erlaubt beispielsweise zudem nur auf bestimmte Kategorien beschränkte Tags auf Entitäts-Detailseiten auszuspielen.