/ #fossasia

The Open Event Ecosystem

This post contains data collected and compiled from various sources that include (but not limited to) project readme files, my presentation from FOSSASIA 17, wikipedia, my head.

This aims to be a place for any new contributor to know the basics about the entire Open Event Project.

This could also help newcomers choose an Open Event sub-project of their liking and start contributing .

The Open Event Project offers event managers a platform to organise all kinds of events including concerts, conferences, summits and regular meet-ups. The components support organisers in all stages from event planning to publishing, marketing and ticket sales. Automated web and mobile apps help attendees to get information easily.

There are seven components of the project:

  • Open Event Universal Format - A standard JSON Schema specification for data sharing/transfer/import/export between various components of Open Event.
  • Open Event API Server - The core of the project. The API Server and database.
  • Open Event Frontend - The primary frontend for the Open Event API Server where organisers, speakers and attendees can sign-up and perform various functions.
  • Open Event Organiser App - A cross-platform mobile application for Organisers with ticketing, checking and quick management capabilities.
  • Open Event Android application generator - An android application generator that allows event organisers to generate customised android applications for their events.
  • Open Event Web application generator - A web application generator that allows event organisers to generate customised static easily-hostable web pages for their events.
  • Open Event Data scrappers - A scrapper that allows users to scrape events from popular websites such as eventbrite into the Open Event Universal Format for it to be imported into Open Event.

Open Event Universal Format

A standard JSON Schema specification for data sharing/transfer/import/export between various components of Open Event.

Repository: fossasia/open-event.

An Event Object ```js { "id": 1, "name": "FOSSASIA 2016", "latitude": 1.346, "longitude": 103.686, "location_name": "15 Science Centre Rd, Singapore 609081", "start_time": "2016-03-18T09:30:00", "end_time": "2016-03-20T17:30:00", "timezone": "Asia/Singapore", "description": "FOSSASIA is the premier Free and Open Source technology ...", "background_image": "/images/fossasia16.jpg", "logo": "/images/fossasia-dark.png", "organizer_name": "FOSSASIA", "organizer_description": "The Internet of Things for Me at Asia's Premier Open Technology Event", "social_links": [ { "id": 1, "link": "https://twitter.com/fossasia", "name": "Twitter" } ], "ticket_url": "http://www.eventnook.com/event/fossasia", "privacy": "public", "type": "Conference", "topic": "Science & Technology", "sub_topic": null, "code_of_conduct": "", "copyright": { "holder": "FOSSASIA", "holder_url": "http://fossasia.org/contact/", "licence": "Creative Commons Attribution License", "licence_url": "http://creativecommons.org/licenses/by/4.0/", "logo": "https://i.creativecommons.org/l/by/4.0/80x15.png", "year": 2016 }, "call_for_papers": { "announcement": "

Wanna speak at our prestigious event. Send us a proposal

", "end_date": "2016-03-16T20:30:00", "privacy": "public", "start_date": "2016-03-10T19:30:00", "timezone": "UTC" }, "email": "contact@fossasia.org", "has_session_speakers": true, "schedule_published_on": "2016-03-18T00:00:00", "searchable_location_name": null, "state": "Completed", "version": { "event_ver": 1, "microlocations_ver": 2, "sessions_ver": 3, "speakers_ver": 2, "sponsors_ver": 3, "tracks_ver": 4 } } ```
A Speaker Object ```js { "id": 2, "name": "Mario Behling", "email": "mario_behling@fossasia.org", "mobile": null, "photo": "/images/speakers/MarioBehling_2.jpg", "organisation": "OpenTech Society", "position": null, "country": "Germany", "short_biography": "", "long_biography": "Mario Behling is a German born technologist ...", "website": "http://mbm.ninja", "twitter": "http://twitter.com/mariobehling", "facebook": null, "github": "http://github.com/mariobehling", "linkedin": "https://www.linkedin.com/in/mariobehling", "featured": false, "sessions": [ { "id": 2, "title": "The story of FOSSASIA 2016, The Internet of Things and Me" } ] } ```
A Session Object ```js { "id": 1, "title": "Grand Opening", "subtitle": null, "short_abstract": "Short Abstract for the event", "long_abstract": "Welcome to the 8th year of FOSSASIA ...", "start_time": "2016-03-18T09:30:00", "end_time": "2016-03-18T10:00:00", "session_type": { "id": 1, "length": 0.3, "name": "Welcome" }, "track": { "id": 1, "name": "OpenTech and IoT" }, "comments": "", "language": null, "slides": null, "audio": null, "video": null, "microlocation": { "id": 1, "name": "Dalton Hall" }, "signup_url": null, "speakers": [ { "id": 1, "name": "Hong Phuc Dang", "organisation": "FOSSASIA" } ], "state": "accepted", "timezone": "UTC" } ```
A Sponsor Object ```js { "id": 1, "name": "Google", "logo": "/images/sponsors/Google_1.png", "level": "1", "sponsor_type": "Diamond", "url": "https://developers.google.com/open-source/", "description": "" } ```
A Track Object ```js { "id": 1, "name": "OpenTech and IoT", "color": "#3DC8C3", "description": "OpenTech and IoT", "location": "Level 3, Level 3, Dalton Hall", "sessions": [ { "id": 1, "title": "Grand Opening" } ], "track_image_url": null } ```
A Session Type Object ```js { "id": 1, "name": "Welcome", "length": "00:30" } ```
A Microlocation Object ```js { "id": 1, "name": "Dalton Hall", "floor": 1, "latitude": 1.333169, "longitude": 103.735516, "room": null } ```

Open Event API Server

The core of the project. The API Server and database.

Repository: fossasia/open-event-orga-server.

The system exposes a RESTful API to fetch and modify data. It also provides endpoints that allow organisers to import and export event data in a standard compressed file format that includes the event data in JSON (Open Event Universal Format) and binary media files like images and audio.

The Open Event API Server comprises of:

  • Flask web framework - Flask is a microframework for python to create web applications. Flask also provided us with a Jinja2 templating engine.
  • PostgreSQL - Our database. PostgreSQL is an open-sourced Object-relational database management system (ORDBMS). We use SQLAlchemy ORM to communicate with the database and perform database operations.
  • Celery - Celery is a Distributed Task Queue. It allows us to run time consuming and/or resource intensive tasks in the background (or) on a separate worker server. We use celery to process event import/export tasks to process email send requests.
  • Redis - Redis is an in-memory data structure store. It's generally used for caching and for message brokering b/w different services due it's insanely fast read-write speeds (since it's an in-memory data store). We use it for caching results of time-consuming less volatile database calls and also for brokering jobs and their statuses b/w the web server and Celery task queue.

In the near future, we plan to implement more additional components too.

  • Elasticsearch - a distributed, RESTful search and analytics engine. To start with, we'll be using it to index our events and provide much fast search results to the user.
  • Kibana - data visualization and analytics plugin for elasticsearch. It will allow us to better understand search trends, user demographics and help us provide a better user experience.

We're now in the process of slowly phasing out the Open Event Server's existing UI and keep it only as an API Server since we're moving towards an API-Centric approach with a Fresh new Open Event Frontend.

The Open Event server's repository contains multiple branches each serving a specific purpose.

  • development - All development goes on in this branch. If you're making a contribution, please make a pull request to development. PRs to must pass a build check and a unit-test check on Travis (https://open-event-dev.herokuapp.com - Is running off the development branch. It is hosted on Heroku.). This is probably the most unstable branch of all.
  • master - This contains shipped code. After significant features/bug-fixes are accumulated on development, we make a version update, and make a release. (https://eventyay.com - Is running off the master branch. (whichever is the latest release.) Hosted on Google Cloud Platform (Google Container Engine + Kubernetes).
  • staging - This branch is mainly for testing eventyay server configurations on a staging server without affecting the production environment. Push access is restricted to the devops team.
  • gh-pages - This contains the documentation website on http://dev.eventyay.com. The site is build automatically on each commit in the development branch through a script and using travis. It includes the md files of the Readme and /docs folder.

The Open Event Server has Unit tests to ensure each part of the server works as expected. This is also part of our workflow. So, every PR made to the repository, is tested by running the Unit tests and the code coverage is reported on the PR itself. (We use travis and codecov for continuous integration and code coverage reporting respectively).

Open Event Frontend

The primary frontend for the Open Event API Server where organisers, speakers and attendees can sign-up and perform various functions.

Repository: fossasia/open-event-frontend.

Open Event frontend is built on Ember.js - A javascript web application framework. Ember.js uses Ember data - its data persistence module to communicate with the Open Event API Server via the exposed RESTful endpoints.

The frontend is built upon components that are re-usable across various parts of the application. This reduces code duplication and increases maintainability.

The frontend also has various services to share data and functionality b/w components/routes/controllers.

Each merge into the Open Event frontend repository triggers two deployments:

Currently, both the staging and development use the development branch since the frontend is still under active development. Once we reach the release stage, staging & production deployments will start using the master branch just like the Open Event API Server.

As a part of the development workflow, to ensure proper code-styles throughout the project, and to prevent regressions, the project has Acceptance tests, Integration tests, Unit tests and lint checks on both javascript (*.js) and handlebar files (*.hbs). These tests are run for every PR made to the repository. (We use travis and codecov for continuous integration and code coverage reporting respectively).

Open Event Organizer App

A cross-platform mobile application for Organiser with ticketing, checking and quick management capabilities.

Repository: fossasia/open-event-orga-app.

The organiser application is a mobile application that can run on Android, iOS and Windows Phone. It is built using Ionic Framework - cross-platform app development framework. The app uses the RESTful APIs exposed by the Open Event API Server to get data and perform operations.

The core features of this application are

  • Scan a QR code from an attendee's ticket to view information about the attendee and to check him/her in.
  • Check-in attendees (Attendees can be searched for using name and/or email)
  • Continuous data sync with the Open Event Organiser Server

Other planned feature include:

  • Overview of sales - The organisers can see how their event is performing with just a few taps
  • Overview of tracks and sessions - They can see what sessions are next and can use that information to (for example) get everything ready for that session.
  • Quick session re-scheduling - They can re-schedule sessions if required. This should also trigger notification to participant that have registered for that event.
  • Push notifications for certain triggers - (for example) Organisers can get notifications if any session proposal is received.

This project has only one development branch (master). Each commit to that branch triggers an apk deployment to the apk branch via Travis.

Open Event Android Application Generator

An android application generator that allows event organisers to generate customised android applications for their events.

Repository: fossasia/open-event-android.

This project consists of two components.

  • The App Generator - A web application that is hosted on a server and generates an event Android app from a zip with JSON and binary files (examples here) or through an API.
  • A generic Android app - the output of the app generator. The mobile app can be installed on any Android device for browsing information about the event. Updates can be made automatically through API endpoint connections from an online source (e.g. server), which needs to defined in the provided event zip with the JSON files. The Android app has a standard configuration file, that sets the details of the app (e.g. color scheme, logo of event, link to JSON app data).

  • Flask web framework - Flask is a microframework for python to create web applications. Flask also provided us with a Jinja2 templating engine.
  • Celery - Celery is a Distributed Task Queue. It allows us to run time consuming and/or resource intensive tasks in the background (or) on a separate worker server. The android application compile and build process is run as a celery job. This also allows multiple users to simultaneously use the generator.
  • Redis - Redis is an in-memory data structure store. It's generally used for caching and for message brokering b/w different services due it's insanely fast read-write speeds (since it's an in-memory data store). We use it for brokering jobs and their statuses b/w the web server and Celery task queue.
  • Java Development Kit (JDK) - Java Development Kit provides us with a set of tools consisting of (but not limited to) a compiler, runtime environment, loader which enables us to compiler, build and run java based applications.
  • Android SDK Tools - The Android SDK Toolset provides us with Android API libraries, debugging tools, emulation capabilities and other tools that are needed to develop, build and run java based android applications.
  • Gradle Build Tool - Gradle is an open source build automation system. It allows developers to define a build process as a set of tasks that can be easily executed on any machine with predictable outputs as long as the gradle files are available.

As with other projects, this also has multiple branches each serving a different purpose

  • development - All development goes on in this branch. If you're making a contribution, you are supposed to make a pull request to development. PRs to master must pass a build check and a unit-test (app/src/test) check on Travis.
  • master - This contains shipped code. After significant features/bugfixes are accumulated on development, we make a version update, and make a release. All tagged commits on master branch will automatically generate a release on Github with a copy of fDroid-debug and GooglePlay-debug apks.
  • apk - This branch contains two apk's, that are automatically generated on merged pull request a) from the dev branch and b) from the master branch using the Open Event sample of the FOSSASIA Summit. This branch also assists in deploying the generator to http://droidgen.eventyay.com by triggering a travis build every time an apk is pushed to this branch. The reason this type of a round-about way was implemented is that, travis doesn't allow android and docker builds on the same branch. So, we're forced to use the apk branch to do the docker build for us.

Open Event Web application generator

A web application generator that allows event organisers to generate customised static easily-hostable web pages for their events.

Repository: fossasia/open-event-webapp.

The Open Event Web App project has two components :

  • An event website generator - A web application that generates the event website based on event data provided by the user either in the form of an archive as per the Open Event Universal Format or an API Endpoint to an Open Event API Server instance
  • A generic web application - This will be customised and additional pages will be generated from a set of templates by the generator based on the provided event data. The generated website bundle can be hosted on any static hosting provider (Github pages, any simple web hosting service, or any web server that can serve HTML files etc).

The generator also gives you the ability to directly upload the generated files to any server (via FTP) or to the gh-pages branch of any repository on GitHub.

  • Express.js - A web application framework for Node.js. The web application generator's user-facing frontend runs on Express.js framework.
  • Socket.IO - A javascript library for real-time web applications. It allows a client and a server to communicate with each other simultaneously in a real-time manner. (Confusing ? If you wanna build something like a chat-room ... you'd need something like Socket.IO). The web application generator uses Socket.IO to handle multiple clients and also to show the correct progress of the website generation to each of those clients in a real-time manner.
  • The web generator also uses SASS - which adds awesome features (Superpowers as their site says) to good-old CS, and Handlebars - which is a templating engine that let's you easily generate HTML output based on a templates from a given javascript object.

The branches are similar to other projects under Open Event.

  • development - All development goes on in this branch. If you're making a contribution, you are supposed to make a pull request to development. PRs to master must pass a build check and a unit-test (test/serverTest.js) check on Travis. Gets deployed automatically to https://opev-webgen-dev.herokuapp.com .
  • master - This contains shipped code. After significant features/bugfixes are accumulated on development, we make a version update, and make a release.

Open Event Data Scrappers

A scrapper that allows users to scrape events from popular websites such as eventbrite into the Open Event Universal Format for it to be imported into Open Event.

Repository: fossasia/event-collect.

As of now, only eventbrite is supported for data scrapping. This allows new users of Open Event to import their events from other ticketing/event management websites very easily. The scrapper accepts a query from the user, and gets the event page for that query on eventbrite, parses the HTML DOM to get the required data and compiles everything into the Open Event Universal Format so that it could be imported into Open Event.

The scrapper is written in Python and uses Beautiful Soup to parse the DOM.

Future plans include combining fossasia/query-server, Open Event server and event collect to enable automatic import of events from other websites based on user searches on eventyay.


The Open Event Ecosystem is vast and has plenty of contribution opportunities to both beginners and experts alike. Starting with contributions is as easy as picking a project, choosing an issue and submitting a PR. No strings attached. (Oh wait. there is just one string attached. Ensure you read & follow the "Best Practices at FOSSASIA Guide")

Niranjan Rajendran

Niranjan Rajendran

A Programmer - A Designer - An Amateur Photographer - A Student - A Brother - A Son - A Human and much more ;)

Read More