Solo is a one page website.
Its single HTML file provides a fully functionnal standalone website.
However, a collection of those websites can be gathered inside a unique domain.
Solo websites
Introduction
Discover the delights of a featherlight, smokin fast one page website:
- Easy to maintain: a single Markdown file Following StrictMarkdown formalisation
- Pure HTML5 and CSS Inlined critical CSS and optional stylesheets
- JavaScriptless by default But you can easily bring your own food
- Fully cacheable With optional Service Worker
- Seriously secure CSP and server headers directives are configurable
Description
The basic principle of Solo is to use a simple and efficient website boilerplate to quickly set up a standalone website and deploy it to any CDN Solo is deployed on Netlify .
However, what does standalone mean for a website?
Well, it means that it’s a single page actually a single HTML file, with its associated pair of CSS stylesheet and JavaScript Service Worker reproducing the usual appearence of a multi page website, with sections clearly identified, always keeping the maximum simplicity andd flexibility in mind.
JavaScriptless, CSS classless
HTML5 and CSS alone are so performant in evergreen browsers that an advised developer can fairly rely on these stars to deliver a pretty simple but efficient website for an everyday use: for a blog, a project documentation, a portfolio or an ephemeral event, for instance.
Without JavaScript, no download delay and no debug! Without CSS classes, no messy cascade to hustle and blow up a quiet design. Hours spared to write content, that’s all.
Nonetheless, if needed, JavaScript scripts or CSS stylesheets can be easily added to Solo website.
Sections are all we need
To keep it simple, Solo content is fragmented in sections listed at the top of the website page as in a usual Menu. The sections number and names are not fixed, they are declared in the Front matter of the page.
Sometimes, it can be useful to group related website pages under a unique domain. Then, nothing is easier than grouping their links in a dedicated website page Solo uses an index
website to do that, but any other name is possible .
A typical structure of a website page content could be:
- Introduction Kind of Abstract of the content
- Article Main content of the website page
- Media Content illustrations: pictures, video or possibly audio
Could be more, could be less: everything is driven by an array of names declared in the Front matter of the website page. Note that there is no obligation to separate images from text. Lightbox and slideshow components are there too for a presentation of grouped pictures lazily loaded.
Installation
Solo source code is available on Github.
Just type in the clone command in a project directory:
git clone https://github.com/octoxalis/soloFrame.git
then:
npm install
An environment file is needed to provide specific data. It must have defined the following key/value pairs:
AUTHOR_s = owner_name
EMAIL_s = owner_email
ID_s = website_ID # Github repository name
NAME_s = website_name # name used in website content
# (may be different)
LANGUAGE_s = website_language
URL_s = website_url
LOCAL_s = website_local_url # with the usual port
DESCRIPT_s = a short description for search engines
GLOBAL_s = a longer description for search engines
A _proto.md Markdown file is to be found in the source/matter/_prototype/
directory. Copy that file inside the source/matter/content/
directory, eventualy renaming it to index.md
. From this file, Eleventy SSG will generate the index.html
file of the website.
Edit this file, begining by its front matter part Located at the very top of the file, after the ----js {
modifying the following JavaScript Object properties:
permalink: 'proto.html', //: name of the new file
doc_n: 1, //: unique number
//: to sort files in a websites listing
title_s: 'proto', //: website page title for browsers
section_a: //: website section names
//: for navigation bar and headers
[
'Introduction',
'Article',
'Pictures',
'Video'
],
All other properties are optional and for specific purposes, detailed in the extension section.
Internal linking
It’s always useful to be able to provide links within a website page As at the end of the previous paragraph. Following the StrictMarkdown formalisation, only full reference links are used, in the form:
[Link name][0]
The link label The [0]
parthave to be exactly one symbol long:
- internal links, a number in the the range 0-9
- external links, a letter uppercase or lowercase
As this enumeration is rather short, Unicode symbols may be used.
This is a recommandation: using another convention will not break Solo code.
Extension
Although offering many features in its default configuration, Solo provides a simple and powerful extension mechanism to add either JavaScript scripts or CSS stylesheets to its base code.
JavaScript scripts have to be located in the matrix/assets/scripts/js/
directory. To be loaded, the file name have to be declared in the script_a
Array property of the front matter, for instance:
----js
{
...
script_a: ['extend.min.js'],
...
}
----
The same procedure is to be followed for CSS stylesheets, located in the matrix/assets/styles/css/
directory:
----js
{
...
css_a: ['extend.min.css'],
...
}
----
Solo proceeds this way when video, slideshow or lightbox components are needed. Styles for these components are not loaded by default in the inline style
tag To avoid blocking resources in the page renderingand it is mandatory to declare the related stylesheets for sections that need them.
Colorable
Solo provides a very easy way to modifiy a webside colors, apart of its dual light mode The now usual Light and Dark modes. The source/make/data/C_o.js
file Where some global data for Eleventy SSG are declaredhas a CSS constants section with four properties to defined the website base color and luminosity mode:
HUE_P_n: 228, //: theme PRIMARY color in range [0...359]
LUM_MODE_n: -1, //: luminosity mode: 1 (light) || -1 (dark)
LUM_BASE_n: 50,
LUM_CONTRAST_n: 49, //: luminosity contrast in range [30...49]
//: (30 is a softer contrast than 49)
//: see https://www.w3.org/TR/WCAG20/ §1.4.1
Have a look at the color.css file to understand how this works.