# scriptorium
Scriptorium is a simple blog generator for Gleam, using [Lustre](https://hexdocs.pm/lustre) and
[lustre_ssg](https://hexdocs.pm/lustre_ssg).
Scriptorium runs on the JavaScript target and is tested with Node.js.
[![Package Version](https://img.shields.io/hexpm/v/scriptorium)](https://hex.pm/packages/scriptorium)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/scriptorium/)
## Quickstart
To use Scriptorium, you will need to create a new Gleam project and add Scriptorium as a
dependency.
```sh
gleam add scriptorium
```
To generate a default blog, use the following in your main file:
```gleam
import gleam/result
import gleam/option
import gleam/io
import scriptorium/builder
import scriptorium/config.{type Configuration, Configuration}
import scriptorium/defaults
pub fn main() {
let config =
defaults.default_config(
"My Blog",
"https://my.blog.example/",
"en",
config.Author(
"Person McPerson",
option.Some("person@example.com"),
option.Some("https://fedi.instance.example/@person"),
),
"© Person McPerson",
)
io.debug(build(config))
}
pub fn build(config: Configuration) {
// Parse the files
use db <- result.try(builder.parse(config))
// Compile Markdown into HTML
let compiled = builder.compile(db, config)
// Render content into Lustre elements
let rendered = builder.render(db, compiled, config)
// Write rendered content into the filesystem
builder.write(rendered, config)
}
```
Now you will need to add source files. Create the following directory tree in the root of the project
folder:
```
your_project
└── data
├── pages
└── posts
```
In `./data/posts`, create a file `2024-04-21-hello-world.md` with the following contents:
```markdown
Hello, World!
meta
This is the first blog entry.
```
Then run `gleam run --target javascript` to build the blog and see what was generated in `./output`.
For further usage help, see the documentation as described below.
## Documentation
- [User's Guide](https://nicd.gitlab.io/scriptorium_blog/guide.html)
- [Scriptorium API reference](https://hexdocs.pm/scriptorium)
- [Scriptorium Demo Blog](https://nicd.gitlab.io/scriptorium_blog)