2018-07-22 18:03:06 +01:00
# NASG - not another static generator...
2017-05-23 11:14:47 +01:00
2018-11-19 14:36:06 +00:00
Nearly 20 years ago I did my very first website with a thing called Microsoft FrontPage. I loved it. Times changed, and I wrote a CMS in PHP, first with flat files, then with MySQL, then moved on to WordPress.
2017-05-23 11:14:47 +01:00
2018-11-19 14:36:06 +00:00
Now I'm back on a static generator. I love it.
2018-07-22 18:03:06 +01:00
2018-11-19 14:36:06 +00:00
**WARNING: this is a personal project, scratching my itches. No warranties. If you want to deploy it on your own, feel free to, but not all the things are documented.**
2018-07-22 18:03:06 +01:00
2018-11-19 14:36:06 +00:00
## ## What does it do
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
- content is structured in folders
- content files are YAML frontmatter + Multimarkdown
- EXIF from images are read via [exiftool ](https://www.sno.phy.queensu.ca/~phil/exiftool/ ) _this is an external dependency_
- Markdown is converted with [pandoc ](https://pandoc.org/ ) _this is an external dependency_
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
How it works
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
- pulls in webmentions from https://webmention.io and stores them in .md files next to the index.md of a post (see later) as: `[unix epoch]-[slugified source url].md`
- pulls in micropub from the queue received by the micropub receiver PHP (see later)
- finds 'redirect' files:
- anything with a `.url` extension
- content is the URL to redirect to
- filename without extension is the slug to redirect from
- for `HTTP 302`
- finds 'gone' files:
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
- anything with a `.del` extension
- filename without extension is the slug deleted
- for `HTTP 410`
- finds content:
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
- all `index.md` files
- corresponding comment `.md` file next to it
- the parent directory name is the post slug
- finds all images in the same directory (`.jpg`, `.png` , `.gif` )
- reads EXIF data into a hidden, `.[filename].json` file next to the original file
- generates downsized and watermarked images into the `build/post slug` directory
- if a `.jpg` if found with the same slug as the parent dir, the post will be a special photo post
- anything else in the same directory will be copies to `build/post slug`
- send webmentions via https://telegraph.p3k.io/
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
```
/
├── about.html -> will be copied
├── category-1
│ ├── article-1 -> slug
│ │ └── index.md -> content file
│ │ └── extra-file.mp4 -> will be copied
│ │ └── 1509233601-domaincomentrytitle.md -> comment
│ ├── fancy-photo -> slug of photo post
│ │ └── index.md -> content
│ │ └── fancy-photo.jpg -> to downsize, watermark, get EXIF
```
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
Special features:
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
- complete `microformats2` and schema.org markup in templates
- has light/dark theme, dark by default, but supports experimental prefers-color-scheme media query
- generates 3 special PHP files:
- search - uses and SQLite DB which is populated by Python on build
- fallback - 404 handler to do redirects/gones, gets populated with an array of both
- micropub - a micropub endpoint that accepts micropub content and puts the incoming payload into a json file, nothing else
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
## Why GPL
2018-07-23 11:04:13 +01:00
2018-11-19 14:36:06 +00:00
Because I want believe.