Orion is a bespoke CMS development kit, offering developers packages and capabilities that accelerate the process in developing content-driven solutions.
Bundlers and Package Managers
- Webpack (https://webpack.js.org/)
- Lerna (https://github.com/lerna/lerna)
- Yarn (https://yarnpkg.com/lang/en/)
Languages and Frameworks
- JavaScript (https://developer.mozilla.org/en-US/docs/Web/JavaScript)
- React (https://reactjs.org/)
- Gatsby (https://www.gatsbyjs.org/)
- Material-UI (https://material-ui.com/)
- Styled Components (https://www.styled-components.com/)
Datastore and Languages
- Hasura (https://hasura.io/)
- GraphQL (https://graphql.org/)
- PostgreSQL (https://www.postgresql.org/)
Linting
- XO (https://github.com/xojs/xo)
- Prettier (https://prettier.io/)
Testing
- Jest (https://jestjs.io/)
- React Testing Library
- Cypress
CI and Deployment
- CircleCI (https://circleci.com)
- Github Actions (https://help.github.com/en/actions)
Logging and Debugging
- LogLevel (https://github.com/pimterry/loglevel)
- Default Node.js Debugging for Chrome (https://medium.com/the-node-js-collection/debugging-node-js-with-google-chrome-4965b5f910f4)
The project is structured as a monorepo and uses Yarn and Yarn workspaces for dependency management.
For initial setup use yarn install
.
To install the project's package dependencies use yarn run bootstrap
.
To clean the project's package dependencies use yarn run clean
.
This project uses .env files for environment variables.
To get the environment variable setup for local development you will need
- .env.development files need to added to gatsby-plugin-orion-view and gatsby-plugin-orion-edit.
- A .env file needs to added to the hasura package.
The content of the files can be found on clipperz.is
To get started quickly, check out these useful links:
The application is stored in a lerna monorepo.
When making a new package we want to make sure that gatsby doesn’t do its own linting with eslint but rather uses the root level config from XO. Do do this you need an empty eslintrc.js file.
// We use xo configured in the root of the monorepo. Disable eslint for gatsby.
module.exports = {}
Some packages are marked as Legacy Package
. This marking indicates that they have been brought over from a previous
client-based project as part of transitioning that project into the Orion Accelerator and that those packages are potentially
subject to significant change, rename, and/or deletion as the Orion project further develops.
CircleCI project continuous integration configuration.
Storybook project configuration
Legacy Directory
Documentation related to the client-project from which Orion originated. Does contain some useful docs related to technologies used.
Legacy Package
End-to-end tests using TestCafe. Requires environment variables to run, see the Quick Start Guide. For more details see the Tests docs.
Legacy Package
- lambda serverless functions used to interact with AWS Cognito and Hasura
Contains all styling (CSS) and unique-client assets (such as logo images) for the Orion demo project Acme
.
Core components shared by all Orion packages, such as user login and registration.
All components and functionality related to the creation and management of page, article, and other content for Orion projects.
All components and functionality related to the viewing of page, article, and other content for Orion projects.
Legacy Package
The application follows a serverless application model, where the only API used by the frontend is exposed through GraphQL via Hasura.
This folder contains the migrations and scripts necessary to run them.
A single script designed to overcome a GatsbyJS bug that can sometimes cause CircleCi builds to fail due to out-of-memory errors
Terraform AWS configuration
This project is setup to responde to changes to data by rebuilding the static content. This process has 3 moving parts.
Hasura events are setup to listen to changes in all orion_page
tables. These events call the content-generator-hook
lambda. The lambda starts a generate-view-content
workflow on circleCI which ultimately runs gatsby build
and uploads it to the s3 bucket to be served.