Expo Generator is a SaaS product that allows you to create apps in the browser without any technical knowledge.
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 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:
- Trade fair organizers prepare data about the trade fair, exhibitors and other entities in Expo Generator’s administration system.
- Expo Generator creates a modern app for trade fair visitors from the given data.
- 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.
Key Data of the Project
- Start: 11/27/2019
- Ende: 05/21/2021
- Status: terminated
- Commits: 2891
- Issues: 264 | Merge Requests: 213
- Pipelines: 1067
- Test Coverage
- App: 100 %
- Backend: 97.2 %
- Frontend Administration System: 100 %
- Ruby on Rails: Backend business logic
- GraphQL": backend API
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
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 Native (
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.
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
assignablesdefines 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.