Toucan is a markdown-based Static Site Generator (SSG) written in Swift.
- recursive context?
- pagination improvements
- prev / next links for pages
- proper content query api $prev, $next, $same, etc...
- merge site user variables with page user defined
- test, test, test
? do not wipe output :think:
-
noindex tag support (site + page level): noindex: true
-
draft content: draft: true -> not being rendered.
-
publication date, expiration date support for posts: publication: 2023-04-22 12:00:00 expiration: 2024-04-22 12:00:00
filter posts based on actual date.
-
canonical url support: self-referencing by default: override: canonical: https://foo.com/bar/baz
pagination canonicals:
-
hreflang attributes support gb site:
us site:
site / material config: hreflang: - lang: en url: https://www.example.com/ - lang: en-gb url: https://www.example.com/gb/ - lang: x-default url: https://www.example.com/
- demo template design
- toucan user guides
- Swift 5.10 docker
- toucan installer
- toucan website
- file watcher
- web server & preview
- schema.org + json-ld support
- date x y ago feature ? add current path check (to mark menu as current)
- image resize & optimize support
- content transformers -> call script using markdown input -> output
- plugins/a "markdwon" >> plugins/b >> etc... (last one built-in stuff)
- sitemap index support
- content importer
- jekyll
- hugo
- ghost
- wordpress
- medium
- notion
- publish subcommand
- github pages
- aws bucket?
https://docs.hummingbird.codes/2.0/documentation/hummingbird/transforms/
src
contents
posts
post1
post1.md
post1-cover.jpg
pages
page1
contents.md
404.md
index.md
home.md
templates
index.html
home.html
home-posts.html
404.html
page.html
post.html
public
* (everyting copied as it is)
Required:
- slug
- title
- description
- date
Optional:
- template
site.config.md
-
site.baseUrl:
-
site.language:
-
site.title:
-
site.description:
-
site.imageUrl:
-
posts.slug = posts
-
posts.limit = 10
reserved slugs: /css /images /js
/index.html index page
/page1/index.html page entries /page2/index.html
/post1/index.html post entries /post2/index.html
/posts/index.html list of all blog posts, paginated /posts/page/1/index.html canonical = /posts/index.html /posts/page/2/index.html /posts/page/3/index.html
/tags/index.html list of all tags (not paginated) /tags/foo/index.html /tags/bar/index.html
/authors/index.html list of all authors (not paginated) /authors/tibor-bodecs/index.html
index->home->post index->404 index->page index->post
site->index->post
site.html @@@ site.title site.slug site.description
index.html @@@ site.index.title site.index.description
global variables {site.index}
local variables: {$.title} {$.description} {$.tags|$}
search: index.json [ { "keywords": [ "foo", "bar", "baz" ] "item": { "title": "", "description": "", "permalink": "" "image": "" } } ]
javascript api call