Technology Stack
The application is composed of multiple technologies. The project is young and as such not all technologies have been selected. For the ones that are identified, they have been laid out in the layered diagram below.
Technology Components
User Interface Components
TBD
User Interface Pages
TBD
Core Modules
The core modules are application classes, functions and packages that provide supporting capabilities to the user interface or working with the database.
Engine DSL
A custom domain specific language (DSL) is created for working with the meta model on top of Neo4J.
Neo4J Wrapper
A utility class for encapsulating Neo4J specific capabilities.
Schema Creator
A utility class for creating the meta model database schema.
Secret Store
A utility class for working with the operating system's keystore.
NPM Modules
The NPM Modules are runtime dependencies leveraged by the Core Modules or UI components.
ProseMirror
ProseMirror is a 3rd party text editor framework. It is used by the Element editor.
React & React-DOM
React and React-DOM are NPM modules of the popular React web component framework developed by Facebook.
Redux
Redux is a state container for Javascript applications. It is leveraged as an event based architecture for the user interface, as opposed to using other application architectures such as Flux or MVC.
Router5
Router5 is a Javascript routing engine. It is leverage for navigating between application pages.
Functional Framework
A design goal for the implementation of Insights is to prefer functional composition over object orientated solutions. To assist with this a functional framework or utility library will be used. Several are currently being evaluated for this purpose.
Component Library
A design goal for the implementation of Insights is to leverage off the shelf capabilities where possible. With this in mind a React component library will be selected that leverages a CSS framework. This is to avoid building common components (e.g. toolbars, tables, spinners) from scratch.
Runtime & Native Libraries
The application is not native. As such, it needs a supporting runtime to host the application.
Electron
Electron is a framework for building cross platform desktop applications with web technologies. Insights is built as an Electron app.
JVM
Insights does not depend on the Java Virtual Machine (JVM). However, Neo4J does. If the user is connecting Insights to a local instance of Neo4J, then the JVM is required. See the Neo4J dependencies for more details.
Development Frameworks & Utilities
The following frameworks and tools are leveraged for developing on Insights.
Webpack
Webpack is a bundler for Javascript applications. It is used to take all the application resources and package them together as an app.
Babel
Babel is a Javascript transpiler. It is used for converting ES6 and React components into ES5.
Mocha
Mocha is a unit testing framework.
Chai
Chai is an assertion framework that is used with mocha for creating more readable tests.
Sinon
Sinon is a spy and mocking framework that is used in writing unit tests.
JSDom
JSDom is a headless browser DOM that is used for testing React components.
JSDoc
JSDoc is a source code markup library used for documenting Javascript.
Storybook.js
Storybook.js is an application and framework that is used for the development, documentation and testing of user interface components.
Data Storage
The application is a personal knowledge database. To accomplish this, the following data storage solutions are used.
Neo4J
Neo4J is a graph database. This project does not ship directly with Neo4J. Rather the application connects to an existing Neo4J database provided by the user.
Application Logs
Insights records internal system actions to application logs. TBD
Application Configuration
TBD
Supporting Services
The following 3rd party services are leveraged for the application.
Travis.ci
Travis.ci provides continuous integration.
GitHub.com
GitHub.com hosts the code and related assets.
GitHub Pages
GitHub Pages are leveraged for hosting this design document.