assets | ||
content | ||
libs | ||
.gitignore | ||
config.json | ||
index.js | ||
LICENSE | ||
package.json | ||
README.md |
qwik cms
This is a really basic CMS. But it will get the job done. It basically operates really simple. It checks what path a client is trying to access and checks if there is a corresponding file for that. After that it renders the file if it exists (if not it sends a 404 error).
Installation
Requirements:
- node
- npm
Instructions:
git clone https://git.qwik.space/BurnyLlama/qwik-cms
cd qwik-cms
npm i
node index.js
Extra info
Even tho it can be annoying, I would recommend looking through what code this will run on your PC/server. Otherwise you would have to take my word for it, which could be a bad idea. (Although I can promise you that there is no malicious code or dependency in this project AFAIK.)
The project depends on the following packages (installed when you ran npm i
):
- express (a web server framework)
- nunjucks (a templating engine)
- nunjucks-markdown (markdown support in nunjucks)
- marked (markdown parser/compiler)
- highlight.js (syntax highlighting)
- jsdom (an extension that can use the DOM server-side - used to render the ToC)
- chokidar (reload templates if they change on disk)
- fs (used for filesystem operations)
Maintenence
I recommend forking (or just cloning) this repository if you want a long-term solution for stuff like multiple people working on the site.
How do I create pages?
Let's say you want a page on the path /foo
, then you can create the corresponding file in two places:
{contentDir}/pages/foo.njk
{contentDir}/pages/foo/index.njk
/foo/bar
would be in either of:
{contentDir}/pages/foo/bar.njk
{contentDir}/pages/foo/bar/index.njk
If both files exist the first one specified is rendered. {contentDir}
is configured in config.json
and its default is content/
.
The documents are written in the nunjucks templating language which means you can use imports/includes/etc for code reusability.
Configuration
The default configuration looks like this:
{
"contentDir": "content",
"assetsDir": "assets",
"serverPort": "8789",
"serverName": "qwik"
}
The file is called config.json
.
Descriptions
contentDir
Specifies which directory the content is in.
Default: content
assetsDir
Specifies which directory the assets are in. These items will be statically available on (your site's)
/assets/
. I recommend storing CSS, images, etc. here.
Default: assets
serverPort
The port the server should run on.
Default: 8789
serverName
This can be accessed in any page/template by using {{ serverName }}
Default: qwik
Future features
I have some ideas on things that would be good to implement, one of which is plugins/extensions that can provide extra functionality.
As an example, it would be cool to be able to implement sidebars that contains all pages (if you're making a blog or wiki/documentation).
It would also be nice to have a plugin that could auto update (and restart) the server if you make changes to a git repository. (You could do this with cronjobs in theory, but this should be the server's responsibility.)