revision | title |
---|---|
2020-08-25 (Tue) 16:42:48 |
Hawky README |
We recently came accross Datenstrom Yellow. And I liked it. We have been stumbling on the static site generation topic for some time now. We have tried many, and none are satisfying... Jekyll, Hugo and their likes have satisfied many, not us!
Our (not so special) requirements are:
- use (fully) Pandoc and CommonMark as the Markdown conversion engines
- enable online editing by end users of possibly complex HTML5 pages
- support GitHub pages for the versioning and backend storage of editorial content
- provide wiki-like page handling for easy update and management by end users
One could debate on how this could be done in Jekyll and Hugo — and indeed we have working POCs for both tools. Jekyll is written in Ruby, which is no longer on our technology roadmap; further such customisations would not be supported by GitHub's automated Jekyll conversions. While the Go language is definitively on our technology roadmap, Hugo has grown into a complex beast and the maintenance of our customisations for Hugo would incur a lot of overhead costs.
This is where Datenstrom's Yellow comes in. They say it is for small web sites. We wouldn't say that. From our first peeks this looks like an interesting Open Source project which provides a ready-made and tested framework which could be carved to our needs. Further the design is modular with many extensions of interest.
Why not simply fork the project? Hopefully our developments will be contributed back to Yellow. Old programmers have bad habits! For now and for our programming convenience, we prefer pulling Yellow into our worflow rather than the over way round. There are also some possibly diverging thoughts we want to investigate:
- the generated static site should be mobile-first and PWA-ready
- i18n is not a server side thing and should be handled on the client side
- client side editing should allow editing of content portions
- a more sophisticated administration panel à la Grav CMS
- use our NodeJS-based toolchain for the build process
- integrate CommonMark with custom extensions
- Grav-like debugging and logging
Why Hawky? Historically ISLE's knowledge vault was an Apple HyperCard database named Hawky (circa 1991). The database lived several lives before being converted to a Dokuwiki site (circa 2007). This could be its next housing 😄
Language component, patterns, and extensions | ||
---|---|---|
PHP | ¶ | The popular general purpose scripting language for web development |
ext-curl | → Curl library support | |
ext-dom | ¶ | → DOM API |
PHP-FIG | ¶ | Moving PHP forward through collaboration and standards |
PSR 1 | → Basic coding standard | |
PSR 3 | ¶ | → Logger interface |
PSR 4 | → Autoloading standard | |
PSR 6 | → Caching interface | |
PSR 7 | ¶ | → HTTP message interface |
PSR 11 | → Container interface | |
PSR 12 | → Extended coding style guide | |
PSR 13 | → Hypermedia links | |
PSR 14 | → Event dispatcher | |
PSR 15 | ¶ | → HTTP handlers |
PSR 16 | ¶ | → Simple cache |
PSR 17 | → HTTP factories | |
PSR 18 | → HTTP client | |
Core framework | ||
Symfony | ¶ | Set of reusable PHP components and a PHP framework for web projects |
Console | ¶ | → Console component |
Event dispatch | ¶ | → Event dispatcher component |
Filesystem | ¶ | → Filesystem component |
Finder | ¶ | → Finder component |
Img. Optim. | ¶ | → Easily optimize images using PHP |
PF PHP 7.3+ | ¶ | → Polyfill backporting some PHP 7.3+ features to lower PHP versions |
PF Iconv | ¶ | → Polyfill for the Iconv extension |
Process | ¶ | → Process component |
Property | ¶ | → PropertyAccess component |
Serializer | ¶ | → Serializer Component |
Var-dumper | ¶ | → Mechanism for exploring and dumping PHP variables |
YAML | ¶ | → YAML component |
Essential runtime packages | ||
CA-bundle | Find path to system CA bundle (with fallback to the Mozilla CA bundle) | |
Climate | ¶ | Terminal output colored text, special formatting, and more |
Crontab | Cron syntax handling in PHP | |
DebugBar | ¶ | Display profiling data from any part of your application |
Doctrine | ¶ | Popular cache implementation |
Doctrine collections | ¶ | → Library that contains classes for working with arrays of data. |
DOM string | ¶ | DOMDocument iterators allowing traversal of a DOMNode |
Dot notation | Access deep data structures via a dot notation | |
Gregwar | Image manipulation library. | |
Guzzle | PSR-7 HTTP message library. | |
Humbug | accessing HTTPS resources for PHP 5.3+ (archived) | |
Intervention | ¶ | Image handling and manipulation library (supports GD an Imagick) |
Miljar | Object-oriented EXIF parsing | |
Monolog | ¶ | Log to files, sockets, inboxes, databases and various web services |
MP3 info | The fastest php library to extract mp3 tags & meta information. | |
MyClabs enum | PHP enum support. | |
Negotiation | ¶ | Content Negotiation tools for PHP provided as a standalone library |
Pimple | ¶ | Simple PHP dependency injection container |
Nylhom PSR7 | ¶ | Super lightweight PSR-7 implementation |
PSR7 Server | Use any PSR7 implementation as your main request and response | |
RocketTheme | ¶ | RocketTheme toolbox library |
Slugify | Converts a string to a slug. Integrates with Symfony and Twig. | |
Twig | ¶ | The flexible, fast, and secure template engine for PHP |
Twig defer | → An extension that allows to defer block rendering | |
Twig extension | → Common additional features for Twig that do not directly belong in core | |
User agent | ¶ | Lightning fast, minimalist PHP user agent string parser. |
Watcher | ¶ | Resource watcher using Symfony Finder |
Whoops | ¶ | Deal with errors and exceptions in a less painful way |
Optional runtime packages | ||
Parsedown | ¶ | Self-described as better Markdown parser in PHP |
Parsedown-extra | → Extension that adds Markdown Extra support | |
PHP-implemented build tools | ||
HTML minifier | HTML compressor and minifier | |
Minify | ¶ | CSS & JavaScript minifier, in PHP |
SCSSPHP | ¶ | Compiler for SCSS written in PHP |
"ext-json": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"ext-zip": "*",