I’ve been working hard in my free time over the past month to bring awesome updates to BluestNight and my Android zip builder project.

Zip builder

Yesterday, I released version 0.2.0 of the zip-builder program. With it came some major improvements:

Concurrent building

The biggest improvement that I’m proud to announce is concurrent zip building. Previously, a configuration file containing multiple zip files - each with multiple apps and files included in them - would download the files for a zip one by one, compile the zip, then start on the next one. For build configurations with many zips and many files, this took a long time.

Now, leveraging the power of goroutines, each zip is built in parallel, with every file downloading concurrently, greatly decreasing build times.

Command-line flags

zip-builder now has support for some optional command-line flags that make it much easier to use.

The --config flag allows you to specify a path to the configuration file you want to build from, while the --destination flag allows you to specify where to place the built zip(s), both making it easier to script zip-builder. The --verbose and --debug flags allow you to choose how much output the program gives, which helps with debugging.

XDA-Developers thread

Now that zip-builder has these features, I’m content enough to create a thread for it on XDA-Developers and let the enthusiasts there break it for me. You can find the thread here.


BluestNight has also seen a lot of improvement over the past month.


BluestNight now comes with Zilla Slab as a serif font option. With this change comes a number of configuration options that allow you to choose which parts of the page are in sans-serif (Open Sans) or serif (Zilla Slab). See more on how to use these options in the BluestNight documentation.

Website policies

Legally speaking (at least in the US), websites are required to have a privacy policy describing how they use information collected from users. I’m not a lawyer, but my research seemed to suggest that having a comments provider, analytics, and/or forms on the site all count as collecting information. BluestNight now has the ability to detect the existence of these important pages and give them a dedicated link in the footer of every page. Or, at least, it detects the files content/privacy-policy.md and content/terms-of-use.md and makes links to them. Feel free to raise an issue on the issue tracker if you have other legal pages you need support for.

Color processing

BluestNight now has the ability to parse a number of different CSS color formats in order to better detect if a color is light or dark and to programmatically lighten and darken colors to make the user experience better.

Supported color formats:

  • Hex (#c0ffee)
  • RGB(A) (rgb(12, 34, 56) or rgb(12, 34, 56, 0.9) or rgba(12, 34, 56, 0.9))
    • The CSS specification allows for specifying RGB(A) values using the numbers 0-255 for RGB values, 0.0-1.0 for alpha values, and percentages for both, where a 100% corresponds to 255 for RGB and 1.0 for alpha.
    • BluestNight only supports parsing actual numbers for now, so RBG colors must be of the format rgb[a](0-255, 0-255, 0-255, 0.0-1.0).
  • Keywords (i.e. fuchsia, lime, rebeccapurple)

Support for more color formats will be added in the future.

Configurable list pages

List pages in BluestNight now support more configuration options, including the ability to list the landing page for any nested section directly underneath the current section, custom sorting fields and order, and the ability to show only the index pages for non-section subfolders. See more in the BluestNight documentation.

Bug Fixes

There have also been a great number of bugfixes, including the project’s first merge request!

Important bug fixes include:

  • Fixed nil reference error for some sites
  • Fixed tag URL generation when the BaseURL doesn’t have an ending slash (Thanks Christoph Zauner)
  • Added honeypot field to Netlify forms to prevent false spam positives
  • Fixed using the wrong color in certain areas
  • “Subscribe” buttons no longer appear when the related RSS/Calendar file isn’t being generated
  • The Events widget now makes valid ICS files

Full changelog

Below, you can find the full changelog since last time.

  • General/New Features
    • Added Zilla Slab as a serif font plus ability to choose what is in serif or sans-serif fonts
    • Updated font files to use the official release, not the version from Font Squirrel
    • Added lastmod date to post metadata
    • Detects existence of content/privacy-policy.md and content/terms-of-use.md and adds links to the footer as necessary
    • Added email social icon
    • Links in an article are now bolded
    • The color for blockquotes used to be hardcoded, now it uses a “faded” version of the body text color
  • CSS
    • Merged all CSS into the generated file
    • Changed scaling of hX elements
    • Removed site-wide alert from printed page
    • Removed excess vertical padding on <code> elements
    • Added figure CSS (Requested by Christoph Zauner
    • Fixed using the wrong color in certain areas
    • CSS color processing now handles hex, RGB, RGBA, and CSS color keywords
  • Forms
    • Hide “other” text input unless “Other” radio/checkbox is checked
    • Added honeypot field to forms to prevent false spam positives by Netlify
  • List Pages
    • Added ability to list the entry pages for subsections
    • Added ability to apply custom sorting to listed pages
    • Added ability to show only entry pages (index.md) for subfolders (not subsections)
  • Widgets
    • Added subscribe to section button
    • “Subscribe” buttons don’t appear unless the related file is actually being generated
    • Improved rendering of events in sidebar
    • Events widget now makes valid ICS files
    • Authorbox/member shortcodes now parse markdown in a member’s bio section
  • Other bugfixes