Expo Generator

Expo Generator is a SaaS product that allows you to create apps in the browser without any technical knowledge.

Expo Generator Logo

Motivation

The information offered at trade fairs and requirements of trade fair visitors diverge. Flyers are usually used to inform about the trade fair program and to navigate visitors through the infrastructure. In the digital age, however, the requirements of trade fair visitors have changed: flyers have the character of advertising, are seen as additional ballast, and visitors have the expectation of being able to adapt, search, and filter content to their requirements.

When developing a trade fair app, organizers of regional trade fairs, of which there are 160 in Germany alone according to AUMA, and trade fair-type events, such as FHS Contacta, face challenges: App development is not their expertise, there are no directly available standard solutions for trade fair apps, and cooperation with agencies exceeds effort and sustainable costs.

Expo Generator

Expo Generator empowers non-technical trade fair organizers independent of software developers to create their own trade fair app at low cost anytime in the browser (SaaS).

The creation of a trade fair app is as follows:

  1. Trade fair organizers prepare data about the trade fair, exhibitors and other entities in Expo Generator’s administration system.
  2. Expo Generator creates a modern app for trade fair visitors from the given data.
  3. Users can use the app on the web and download it from app stores.

An efficient solution is achieved through a standardized offering from Expo Generator that gives trade fair organizers a direct path to the solution.

Expo Generator Administration System and App

Expo Generator Administration System and App

Key Data of the Project

  • Start: 11/27/2019
  • Ende: 05/21/2021
  • Status: terminated

Technical Description

Metrics

  • Commits: 2891
  • Issues: 264 | Merge Requests: 213
  • Pipelines: 1067
  • Test Coverage
    • App: 100 %
    • Backend: 97.2 %
    • Frontend Administration System: 100 %

Technologies Used

  • Ruby on Rails: Backend business logic
  • GraphQL": backend API
  • PostgreSQL: Database
  • React (TypeScript): Frontend administration system
  • React Native (TypeScript, Expo): App for visitors
  • Docker: Development, Production
  • Gitlab CI/CD: Quality Gates, Deployment Pipelines
  • Cloudinary: Asset Management
  • Terraform: Infrastructure as Code to provision the GCP cloud infrastrucutre
  • Firebase: Hosting CMS Frontend
  • Google Cloud Platform: Hosting Backend
    • Cloud SQL: Serverless Database (PostgreSQL)
    • Cloud Run: Serverless Container Runtime
    • Secret Manager: Storage of secrets
    • IAM: Service accounts for GCP resources and pipelines
    • Cloud Storage: Terraform backend
    • Cloud DNS: performant DNS service

Architecture

Application

Expo Generator Architecture

Expo Generator Architecture

In principle, Expo Generator is a specialized content management system (CMS). In this respect the backend exists as ‘CMS Backend’, which is based on Ruby on Rails and PostgreSQL and provides the business logic via a GraphQL API. Furthermore there is the administration system as ‘CMS Frontend’ and the app for visitors, which is written in React and React Native (Expo) with TypeScript respectively. Both apps use Apollo as GraphQL client, thus both apps access the same GraphQL API of the backend. Assets were included via Cloudinary, with the backend only managing their URLs.

Trade fairs in the CMS have a publishing status. While the backend requires authorization for unpublished fairs, it does not when the publishing status is set. This ensures that only published content is presented in the app.

Data model

Expo Generator Data Model

Expo Generator Data Model

The data structure consists of 10 fundamental entities.

  • Exhibition is the parent entity of the data structure. Ultimately, every other entity is traceable to Exhibition. Besides basic event information, Exhibition also encapsulates configuration parameters such as locales. These contain the languages that the user defines for the event. Conceptually, user-generated content must exist in these same languages in order to publish the application. The convention guarantees a consistent base of languages in an application, which are eventually selectable in the visitor app for translatable content.

  • Map is the terrain map of the exhibition.

  • Facility is an infrastructure element (e.g., information booth) at the exhibition.

  • Exhibitor is an exhibitor at an event. Exhibitor can optionally be assigned to another Exhibitor. This allows to map frequently occurring nested structures, such as parent/subsidiary companies.

  • Exhibit is an exhibit (e.g. automobile) at an event. Exhibit has an association to multiple Exhibitors, which allows to represent the collaboration of multiple Exhibitors on one exhibit.

  • Location is a location at an event. It is used to uniquely locate other entities.

  • Event is an event (e.g., product presentation) at an event. Event has an association to multiple Exhibitors to represent co-located events.

  • Host is a companion at an event.

  • Tag is a keyword (e.g. ski equipment). By using keywords, additional information can be easily propagated to entities and a search/filter function can be made efficient. A tag can optionally be associated with another tag. This makes it possible to map nested structures, such as ski equipment and winter sports, and to design a meaningful grouping of keywords.

  • TagCategory is a category (e.g. products) that organizes tags. The attribute assignables defines which entity or entities from Event and Exhibitor the TagCategory belongs to. Such a category supports the efficient design of a filter function and, for example, also allows tags restricted to certain categories to be displayed on entity detail pages.