A blueprint for a more open, accessible, future-proof world.
π What's EXO about?
EXO is a new type of scaffolding that transforms existing sites to be 5-30X faster and more accessible, with less code. EXOs can be layered on top of, related to, transformed by or embedded by other EXOs. An EXO can be loaded on top of most websites or platforms without code changes.
An example of EXO (top) transforming an existing site (below) using EXO CDN. Shorter is better:
Achieving the above would translate into a 2-3X increase in conversions. EXOs aim to enforce WCAG 2.1 AA, achieve PageSpeed scores on Mobile of >90 and 100 on Desktop consistently in production. Those who use EXO are trusted to create good with it.
It's comprised of a few key pieces:
- A universal data schema, served over a free API
- A lightweight smart loader to enable those with autism to use the web without frustration + improve performance
- A bottomless, high-performance web shell, delivered through Cloudflare, which connects to headless systems and APIs
β‘ Goals
EXO is a collaboration of folks who care about making the world usable for people with autism. It turns out when we do that, the business metrics improve too. We're excited to have Gatsby, Rudderstack, Sanity and others involved in us building a true enterprise-grade, scalable and open-source framework we continually will improve.
Now:
Shell:
- EXO for Gatsby + Gatsby Cloud + Sanity + Tailwind
- Integrations:
- Gatsby Head
- Gatsby Script
- Widget SDK
- Algolia
- Meilisearch
- Soketi
- Auth0
- EXO Cloud - a free CDN and transformation service
EXO API:
- Currently in closed beta.
Next:
- EXO API - Documentation
- EXO Cloud - A management UI
- RFC on the Touchless Schema spec for Person, Accomodation
- RFC for Entity, Relationship, Location, Identity
- EXO for SolidJS
- EXO theme for Remix
- EXO theme for NextJS
- EXO theme for Svelte
Examples
How to Run
This project uses Nx to manage the repo. You'll need a Touchless API key for most operations.
Adding capabilities to the workspace
Nx supports many plugins. Ones we use:
- React
npm install --save-dev @nrwl/react
- NestJS - preferred for services
npm install --save-dev @nrwl/nest
- Web (no framework frontends)
npm install --save-dev @nrwl/web
There are also many community plugins. We intend to contribute to the NX ecosysem over time.
Generate an application
Run nx g @nrwl/react:app my-app-name
to generate an application.
When using Nx, you can create multiple applications and libraries in the same workspace.
Generate a library
Run nx g @nrwl/react:lib my-lib
to generate a library.
You can also use any of the plugins above to generate libraries as well.
Libraries are shareable across libraries and applications. They can be imported from @exo/mylib
.
Default Development server
Run nx serve gatsby
for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.
Code scaffolding
Run nx g @nrwl/react:component my-component --project=gatsby
to generate a new component.
Build
Run nx build gatsby
to build the project. The build artifacts will be stored in the dist/
directory. Use the --prod
flag for a production build.
Running unit tests
Run nx test gatsby
to execute the unit tests via Jest.
Run nx affected:test
to execute the unit tests affected by a change.
Running end-to-end tests
Run nx e2e gatsby
to execute the end-to-end tests via Cypress.
Run nx affected:e2e
to execute the end-to-end tests affected by a change.
Understand your workspace
Run nx graph
to see a diagram of the dependencies of your projects.
To Deploy:
nvm use 16
yarn install
yarn run build
Storybook:
npx nx storybook shared-ui