Welcome to
the CWA
The power of a
predictable data structure
With the rise in decoupled websites and the power of front-end frameworks, we began to think about a data structure that would fit for every website; what did every website need?
We didn't want to have to re-make common functionality for each website every time, and if we had a predictable data structure, it would be possible to have a powerful website builder and advanced functionality, while enabling a developer to create any website with complete flexibility.
We didn't want to have to re-make common functionality for each website every time, and if we had a predictable data structure, it would be possible to have a powerful website builder and advanced functionality, while enabling a developer to create any website with complete flexibility.
Decoupled web apps
Decoupled/headless web apps are data driven. This opens up a world of possibilities - data can be shared between other web services, create API abstraction layers, and so much more.
Low-code, great DX
Easily use abstract classes, traits, and PHP annotations for the API. The front-end module builds on top of a UI layer and has ready-to-use components and powerful composables to get you up and running quickly.
Convention over configuration
Using a pre-defined directory and file structure allows the CWA Nuxt module to get you up and running fast. You can also add custom configuration to improve the user experience.
Free & Open-Source
The CWA is free, open-source and MIT licenced. Everyone can access, audit, contribute and explore the code and documentation.
Love writing content
draft, refine, publish
Making updates to a website requires time and thought. With publishable components, drafts are created when you make changes and ready to publish when signed off.
- Easy to configureJust 2 lines of code - an annotation and a trait and your component is enabled for advanced publishable features.
- Add state-specific validationUse pre-defined validation groups to apply validation specific to the component state. In the example, the Title resource cannot have a blank title property when it is in a published state.
Prefer trusting
the web designers
Unlike other website builders, we don't believe website admins should have unlimited creative freedom.
- Components used as intendedAs a developer, you can easily specify which components can be added to which component groups.
- Pre-configure stylesDesigners and developers define the styles that a website admin can select from. This keeps your client on brand, no matter who updates the site.
- Build components your wayWeb designers and developers are provided with helpers. We do not impose any HTML structure of stylistic choices. Build, extend and express as you want.
Feel united with
real-time updates
We integrate with Mercure to push real-time updates from the API to website users.
- Publish changes immediatelyWhen you make a change, affected users get an immediate notification so they can stay up to date.
- Collaborate on changesMultiple website admins can work together on changes without external tools.
- Authenticated updatesWith authentication built in by default, the browser will only receive updates for relevant resources. Website visitors will not be exposed to draft component updates.
Impress & convert
with fast websites
We have optimised the system for the fastest response times and an enhanced user experience.
- Simple, small API responsesEach API request returns a small amount of data and a single resource instead of complex and deeply nested data.
- UX: Speedy first impressionsThe page UI updates as soon as the primary resources are loaded from the API or local cache for the fastest FCP (First Contentful Paint) possible. The CWA only loads resources that are required for each page, and reuses resources from a local cache if they exist on multiple pages.
- Caching and Preload HintsWe leverage a smart static cache layer, which is only cleared when resources change. We also leverage Vulcain with preload hints to improve response times.
Freedom to choose
your own (file) path
We have built in easily configurable file uploads and a file storage abstraction layer with Flysystem.
- Easy to configureSimilar to publishable components, with a little config and annotations, you'll have file uploads setup in no time.
- Pre-configured file-systemsFlysystem has several file storage systems already built in, such as Google Cloud, AWS S3, Azure Blob and Local Storage.
- Build your own file storage adapterDocumentation to configure your own file storage is readily available and there are more third-party file storage providers available.
Easy & flexible to
build & deploy
When it comes to deploying your application, we know designing the tech stack can be difficult. We have done all the heavy lifting.
- DockerizedWe have built the tech stack into Docker containers and Docker Compose configurations so it is vendor agnostic and can be easily deployed.
- Kubernetes & HelmDeploy to your own Kubernetes cluster and take advantage of HPA and VPA with easy to customise templates using our included Helm chart.
- Bash scripts for CIAlthough we have a vendor specific GitLab configuration, it is easy to create your own for other CI providers as we have created a bash script with functions to carry out the common tasks.
- Optimised tech stackWe use a Caddy server with FrankenPHP in our tech stack for optimal performance. We noted a 95% reduced latency vs a previous FPM configuration when under heavy loads. The Caddy modules for Mercure, Vulcain and Souin are also pre-configured.
Technical FAQs
Some common technical questions we have about the CWA