The Technology Behind Kurogo

Kurogo is a comprehensive mobile application platform that was birthed in the era of the modern smartphone. Unlike competing platforms, it was designed from the ground up for mobile websites and mobile apps – from the back-end data connectors and business logic to the presentation templates and native iOS and Android libraries.

The Kurogo Server: Mobile Optimized Middleware™

The heart of Kurogo is a lightweight PHP mobile middleware platform (the Kurogo Server) that aggregates and organizes raw, decentralized data sources from your enterprise systems and delivers them through an award winning mobile web experience and native companion applications. This combination of connectors, business logic, presentation templates, and REST APIs – all created specifically for mobile – is what we call Mobile Optimized Middleware.

Kurogo platform diagram The Kurogo™ platform. From left to right: Back-end data sources (orange) feed into the Kurogo Server (green), which cleans, aggregates, and interrelates data and optimizes it for different types of mobile presentation and interaction (blue).

Modules

Data flow through one module

Modules are the building block of any Kurogo-powered application. Each module is a logical set of functionality experienced by the user. Each module connects a user's request with a set of data sources and display templates to put together the information the user needs in a refined form.

The typical Kurogo module includes a module home screen showing all the services available in the module. For example, the included Calendar module shows a list of calendars to browse and an option to search for events in these calendars. When the user selects a specific calendar, a list of ongoing and future events is shown.

From the Kurogo server's perspective, the user has made a request to view event information from the Calendar module. The module is configured to fetch data from a calendar feed (Google Calendar for example). The module initializes Data Controllers that parse the feed and return a list of events. If the user is on a browser, the module asks the Template Engine for templates suitable for the user’s device, populates the template with event data, and displays a completed web page to the user. If the user is using a native app built with one of the native Kurogo platforms, the module outputs the event data in JSON format, which the app uses to populate its views.

Inheritable Mobile Web Templates

Mobile web browsers vary widely in speed, display size, and rendering capabilities, but users should have access to the same data regardless of the device they carry.

When a browser views a Kurogo-powered website, Kurogo detects the browser's identity and generates pages tailored to the device. While presenting the same data, the pages may look drastically different:

  • Basic devices, such as small screen feature phones, receive minimal, primarly text-driven pages that are small in file size, parsimonious with images, and simple in markup.
  • Touch devices, such as large screen feature phones and older smartphones with touch panels, receive graphical pages that are simple in markup.
  • Compliant devices, including iPhones, Android phones, and many other Webkit-based phones, reeive pages formatted for small screens but include more advanced JavaScript/HTML5 and graphic capabilities.
  • Tablet devices, including iPads, Android 3.x ("Honeycomb") tablets, and the BlackBerry PlayBook, receive pages formatted for medium-sized screens, with all the capabilities of compliant devices but showing more content at once.

Adapting new content to all the above device categories is made simple -- often requiring zero to just a few lines of code -- due to Kurogo's robust templating system. Based on the Smarty templating engine, each device category has a standard set of inheritable templates for common user interface elements (like lists, tabs, search bars, etc.). Templates may inherit entire pages, or be pieced together to form complete pages, and configured to display data inputs.

Flexible Data Handling System

Central to the data-handling side of Kurogo is the Data Controller. The Data Controller is a machine that fetches data from a configured source (usually a web service), caches data for fast retrieval, parses data, handles errors in the data sources, and produces results that are easily displayed in the templates.

Data Controllers do all this work when a module needs data to present to the user. The module reads its configuration, calls upon the appropriate Data Controllers, and outputs the data through a selection of templates or in JSON format for other code to consume.

Kurogo includes a rich library of Data Controller types for various standard data formats. Directories with an LDAP service, event calendars with an ICS feed, static, static HTML, and many more sources can be used with existing data controllers just by specifying the URL and title of the data source.

Native Applications

Many organizations wish to distribute iOS and Android apps through the App Store and Market, either in addition to or in place of a mobile web site. Kurogo facilitates the creation of companion native apps by providing two things:

  • Native counterparts to the PHP platform: an Xcode project that builds an iOS app with any selection of modules, and a Java project that does the same for Android.
  • A web service that speaks JSON to the native apps, using all the modules and data handling functionality built into the mobile web.

The native application platforms are written to use the native SDK for all user interface elements except the modules that absolutely need to read HTML from another website. Thus the apps will always look and feel native, because they are native.

Admin Console

Admin UI

The admin console is a special module in Kurogo that provides a user-friendly interface to edit site and module configurations. The most common configurations and site management can be be handled entirely within the browser-based admin UI, including selecting, naming, and ordering modules; hooking up data sources and configuring certain business logic rules; basic visual theme configuration; error handling; reporting; and much more. All of this is can be managed in the admin UI by non-developers.

For the most granular level of control, experienced and/or curious developers can manually view and edit all the INI files in the site. Kurogo configurations are stored in plain-text INI files for each module and for the site as a whole.