📑 Paper CMS 📝
⏫ Use good ol' admin
/ password
🔑.
🏁 Demo data pre-loaded.
A document-based headless CMS with API + back office.
Made primarly for editorial content management.
Stock definitions are modelled after Schema.org vocabulary.
⚠️ Work in progress: NOT FOR PRODUCTION ⚠️
🤔 Why?
Inspirations
We are seeing the emergence of different patterns in the content management world like:
- Shared entities vocabularies
- Automatic web form generation
- Isomorphic user input runtime validation,
- Entity / Collection oriented information architecture
- Headless non-opinionated CMS APIs for JAMStack consumption
- Hypermedia for non-deterministic data fetching via refs. | links | URIs…
- Plain files data storage for operations convenience (with some trade-offs)
- Conventions over configuration, with extendabilities (models, widgets…)
Goals
All these concepts are explored at different levels of implementations
in Paper CMS.
While it's still an experiment, the end-goal is to provide a lightweight
solution suitable for projects which:
- Has ten-ish max. editors in charge
- Needs moderate authoring concurrency with silo-ed document edits
- Might needs frequent content updates
- Low needs for user-land data input
- Are in an eco-system of focused services where caching / CDNs / whatever are dedicated
To sum up: Paper CMS is good for editors-driven web sites, but is not a good fit for users-driven web apps.
ℹ️ Project insights
Structure
Mono-repo. glued with PNPM recursive modules installation.
Major dependencies
- Node.js
- ESBuild
- React
- MUI
- React Quill
- JSON Schema React
- AJV
- Express
- Sharp
Screenshots ⬇️
![false](/application/paper-cms/screencaps/document-form--w128px.png 128w, /application/paper-cms/screencaps/document-form--w192px.png 192w, /application/paper-cms/screencaps/document-form--w256px.png 256w, /application/paper-cms/screencaps/document-form--w320px.png 320w, /application/paper-cms/screencaps/document-form--w448px.png 448w, /application/paper-cms/screencaps/document-form--w576px.png 576w, /application/paper-cms/screencaps/document-form--w768px.png 768w, /application/paper-cms/screencaps/document-form--w1024px.png 1024w, /application/paper-cms/screencaps/document-form--w1280px.png 1280w, /application/paper-cms/screencaps/document-form--w1440px.png 1440w, /application/paper-cms/screencaps/document-form--w1650px.png 1650w)
![false](/application/paper-cms/screencaps/collection--w128px.png 128w, /application/paper-cms/screencaps/collection--w192px.png 192w, /application/paper-cms/screencaps/collection--w256px.png 256w, /application/paper-cms/screencaps/collection--w320px.png 320w, /application/paper-cms/screencaps/collection--w448px.png 448w, /application/paper-cms/screencaps/collection--w576px.png 576w, /application/paper-cms/screencaps/collection--w768px.png 768w, /application/paper-cms/screencaps/collection--w1024px.png 1024w, /application/paper-cms/screencaps/collection--w1280px.png 1280w, /application/paper-cms/screencaps/collection--w1440px.png 1440w, /application/paper-cms/screencaps/collection--w1650px.png 1650w)
![false](/application/paper-cms/screencaps/nested-ref-form--w128px.png 128w, /application/paper-cms/screencaps/nested-ref-form--w192px.png 192w, /application/paper-cms/screencaps/nested-ref-form--w256px.png 256w, /application/paper-cms/screencaps/nested-ref-form--w320px.png 320w, /application/paper-cms/screencaps/nested-ref-form--w448px.png 448w, /application/paper-cms/screencaps/nested-ref-form--w576px.png 576w, /application/paper-cms/screencaps/nested-ref-form--w768px.png 768w, /application/paper-cms/screencaps/nested-ref-form--w1024px.png 1024w, /application/paper-cms/screencaps/nested-ref-form--w1280px.png 1280w, /application/paper-cms/screencaps/nested-ref-form--w1440px.png 1440w, /application/paper-cms/screencaps/nested-ref-form--w1650px.png 1650w)