architecture

The main architectural choices made in the Conzept application are:

  • Value the user experience above all else. Keep things simple, web native, live, accessible, calm, performant and fun to code and maintain.
  • Use embedded iframes (and self-hosted app URLs) as a form of very simple, well-isolated 'micro-services'. However, to the user Conzept should feel as one application. The benefits this simple composition mechanism brings, is very good compatibility with most of the web-tools already written and the ones still to be written! See also: Perlis-Thompson principle, narrow-waist concept.
  • The communication between Conzept and embedded apps is done using URL-parameters (examples: title, entity ID, language code, URL) and postMessage() calls.
    • Note: Some styling of embedded apps is also applied by directly setting common CSS classes on the body-element of the iframe (such as the “dark” class for dark-mode styles, or the “rtl” class for right-to-left language-scripts).
  • Use declarative data definitions where possible (examples: sections, fields, topic headlines, topic tags and indicators). Avoid code duplication where possible, instead use use expressive data structures parsed by minimal code. Editing textual data-structures is also a lot easier than editing code. This approach also allows for text-tools to automate some of these tasks.
  • Use vanilla JS (avoid complex frameworks inverting control), with jQuery (or plain JS) for managing the DOM.
    • jQuery - and the jQuery-dependent plugins - may be removed or replaced in the future, if possible and beneficial.
    • When needed: use WebAssembly for performance-demanding, compute parts in the code.
    • If some (relatively complex) HTML-widget needs to be used in many different places: consider creating a web component. This was done for the organism occurrence map.
  • Main types of data-types to use: plain strings, URLs, entity ID's, JSON and lists of JavaScript objects.
  • Allow the safe use of eval() needed for flexible field definitions. This is safe, as only the admins/devs can update the field definitions. Conzept is also a mainly client-side application, with no user-data being stored on the server.