Several years in the making, our unique technology is now at work in our first on-demand products. These products are just an initial part of our broader vision to redefine how powerful software can be in the hands of non-programmers.
There are a lot of important problems that software should be solving but isn't. These are the problems that are unique to niche markets or the special practices of particular workplaces. The software industry isn't solving these problems because there's a gap between what you can do with off-the-shelf products and what is economically feasible with custom development.
Our mission is to fill this gap from both directions. First, by making more flexible products and second, by providing an application toolkit that makes it much easier to create custom solutions. Both of these strategies are made possible by our unique technology platform.
We want to make building web applications as easy as using a spreadsheet, and the technology that makes this possible has been several years in the making. It works to make application building easier by changing it from a process of code-writing to one of component assembly. Unlike most platform technologies, ours builds applications entirely from interconnected parts, whose arrangement is defined in data, and which can be changed on the fly without ever writing any code.
There are a series of concepts that we apply in our technology. None of these are new on their own, but we have combined them into a seamless whole that we think is unique. Some of these concepts include:
Divide the job of running an application into two distinct parts. One part requires processing and logic, and must be expressed in code. The other part is really configuration that can be expressed in data.
Make it possible to connect together component parts in a variety of arrangements. This requires that we understand the approach that makes unix pipes work so well. You can have small parts loosely joined if these parts have a very simple input/output functional interface, and if they are stateless, so that their behaviour is identical now matter how or when you invoke them.
Apply some intelligence to how parts are connected together. Make sure that all the data that passes between components uses a standardized structural model with a schema that can be looked up in a central dictionary. Using this dictionary, you can compare interfaces of components for compatibility, and even do more advanced things like automatically map similar but not identical data structures to one another.
The diagram below shows you the layers in our application engine, and the product and tools applications that run on top of this engine.

Working from the bottom up, here is what these all mean:
Widgets. These are hard-coded components which do two things. They get supplied data which they use when writing HTML or XML to an output stream. They also take the HTTP parameters that are posted back to our servers when a user triggers an event, and translate these into a standard data structure that can be passed to a service.
Services. These are hard-coded components which read or write data. These are where all the data validation and access rules are applied.
Application Modules. These are bundles of data which define screens that a user can interact with, or outward-facing data services like RSS feeds. The data in these modules includes layout information for placing widgets on a screen, the orchestration of services, the data slots that services and widgets read/write to, and the events that are handled.
Websites. Websites are the basic deployment unit, where application modules get installed and configured, where users have accounts, and where their data gets stored. Website configuration includes how application screens are organized within a menu structure, how they are linked together, and what data sources they are bound to.
Tools. The Website Manager is where you configure a website (there is one manager for each individual website). The Console is where you can explore our catalog of data structures, components, and application modules, as well as manage your Notionlab account. The Workbench is where you build and manage application modules. [Note: we use versions of these tools in-house today, but none of them is publicly available yet.]
Applications. The applications on the top-right are our current products, all of which we built using our platform tools, and all of which run on our application engine. The applications on the top-left represent a potential marketplace of custom solutions.
Click on the Edit button above to edit this text.