The lists below give you a idea of what I’m working on. I tend to announce significant news on Blot’s Twitter account. Please don’t hesitate to contact me if you have any questions.

Added script to fetch user blog folder
3 minutes ago

Added script to reset sync lock
3 minutes ago

Fixed bug in sync lease
3 minutes ago

Removed mkdirp from script
11 minutes ago

Fixed reset bug in sync locking mechanism
11 minutes ago

Improved logging for sync
12 minutes ago

Add round avatars to index template
20 hours ago

Fixed bug with round avatar setting
20 hours ago

Fixed bug in Dropbox authentication with multiple blogs in a single app folder
20 hours ago

Updated folder loading script
2 days ago

Added ability to select an existing folder on error
4 days ago

Fixed Admin UID
6 days ago

Fixed bug in layout.css
7 days ago

Removed uneccessary part of script
7 days ago

Added log in link to script
7 days ago

Expose module
7 days ago

Removed redirect for logged in users
7 days ago

Updated tumblr importer
7 days ago

Updated tumblr importer
8 days ago

Updated gitignore
8 days ago

Added importer to main repository
8 days ago

Moved status page inside main repository
8 days ago

Respect cache directive for blog app
12 days ago

Added penultimate and index info to lists
13 days ago

Added nodegit module
15 days ago

Updated template ideas
16 days ago

Expose git client in dev mode
16 days ago

Improved git client
16 days ago

Fixed bug in typography for new blog
17 days ago

More notes on templates
17 days ago

Added popular tags list
17 days ago

Strip leading punctuation from summary
18 days ago

Updated scripts for loading and saving blog folders and application state
18 days ago

Fixed CSS bugs in formatting css file
19 days ago

Updated notes
19 days ago

Updated scripts for loading and saving application state in development mode
19 days ago

Added formatting css file
19 days ago

Updated notes
19 days ago

Render KaTeX on the server
19 days ago

Updated notes
20 days ago

Fixed bug with resolve paths plugin
20 days ago

Fixed bug with heading spacing in margin
20 days ago

Fixed template build script
20 days ago

Fixed bug in Rosa template with layout.css
20 days ago

Fix bug with public files
20 days ago

Improved rendering on mobile
20 days ago

Respect caching flag
20 days ago

Updated public site for mobile
20 days ago

Fixed site display on mobile devices
20 days ago

Added new site to homepage rotation
21 days ago

Added flags page
21 days ago

Tweaked homepage copye
21 days ago

Updated tood
23 days ago

Added first and last to tag list
23 days ago

Updated developer homepage
a month ago

Updated about page
a month ago

Added short bios to homepage
a month ago

Updated express disk cache
a month ago

Moved to new disk cache api
a month ago

Added new disk cache
a month ago

Added cache flushing wrapper
a month ago

Updated disk cache module
a month ago

Tweaked homepage
a month ago

Removed static file cache
a month ago

Removed unused caching code
a month ago

Moved to new static directory
a month ago

Updated config
a month ago

Updated gitignore
a month ago

Removed public dir
a month ago

Refactored blog routes
a month ago

Fixed broken disk cache
a month ago

Moved HTML minification under cacher
a month ago

Updated nginx static file directives to new disk caching structure
a month ago

Updated log format
a month ago

Updated disk caching
a month ago

Updated disk caching module
a month ago

Added image for fake address bar
a month ago

Updated site CSS file
a month ago

Removed query string used to cache CSS and JS
a month ago

Updated maxage settings for static files
a month ago

Added semicolons
a month ago

Don't cache preview subdomains
a month ago

Don't cache verification check
a month ago

Updated mime types list
a month ago

To do

Improve the selection of templates

  • Don't modify any code, just design templates
  • Design for sites with specific kinds of posts
  • Let Chris, Nash and John know

Increase price for new customers to $30 a year. This will not affect existing customers.

Fix bug with disqus plugin on preview subdomains

Fix bug with Pandoc markdown which won't process file with broken footnote syntax (e.g. missing note)

Fix bug which occurs when Dropbox needs to reset the cursor of the folder

Fix bug with template editor which prevents you from setting the route of a new view. You need to set it, then reset it for the route to work as expected.

Fix bug parsing ISO8601 date format and tell Thomas

Fix bug in metadata parser which gets tripped by a URL on the first line of the file.

Fix bug which makes templates whose names contain a single prime (') un-deleteable

Fix bug with KaTeX LaTeX rendering

Fix encoding bug with greek URLs

Fix bug with case sensitivity for tag folders

Fix bug when you try to restart a cancelled Blot subscription

Fix bug with pandoc's video embed feature which automatically adds the autoplay attribute when turning a raw url to a video into a video player

Fix bug with strange windows notepad encoding

Fix bug with accents in image paths

Fix bug with catching dropbox file renames

  • False positives are really annoying. You'll publish a new post and it won't show up on your blog because it'll be buried in the archives. Renames need to be right next to each other in the dropbox delta queue.
  • Use a string-difference algorithm to improve rename recognition? Something with a funny name like Jaro–Winkler distance.
  • Let Nash know

Fix bug with how the date parser. It doesn't handles a space (or lack of space) between the date and the time. For example, '2017-08-27 18:16:59' works but '2017-08-27-18:16:59' doesn't

New code directory structure

  • app
    • blog
      • models
      • controllers
      • render
    • panel
      • components
        • email
    • site
  • clients
  • converters
  • data

    • cache
    • dump
    • blogs
      • $ID
        • folder
        • templates
        • git
    • templates
    • tmp
  • scripts Move to cool user subdomains

    • Pretty to proper blog IDs instead of integers

Public site

  • Log 404s on the public site to identify neccessary redirects
  • Personalize the documentation for logged in users
  • Add a resource page to the documentation with guides like this:
  • Inline all CSS for performance
  • Render the formatting guide navigation on the server

Developer documentation

  • Make reference page searchable
  • Add types and examples to items on reference page
  • Work how to explain the archives property
  • Port the jekyll theme Neocactus to Blot and document the process then tell Robert


  • Tolerate missing 'www' in personal domain field on dashboard for users with a custom domain when checking validity
  • Implement a flags page for toggling all the settings (including hidden ones) for a given blog
  • Route requests to new dashboard if toggle is on to allow thorough testing
  • When a user pastes the whole tracking script into the preferences page on the dashboard, strip out everything except the ID which we need... perhaps create a page explaining what is happening before doing this.
  • Handle noscript on dashboard / signup gracefully (remove all dashboard js?)
  • Allow users who are restarting an account with multiple blogs to disable some before restarting.
  • Take a look at Notion and Cargo for some neat ideas

File codecs

  • Video posts (.mp4)
  • Audio posts (.mp3 for now?)
  • Multi-file posts from inside one folder? 'Folder>'
  • Multi-file posts with the same name but different extension (image.txt and image.jpg)
  • Markdown Write a pandoc compatible markdown converter in javascript to resolve some of the performance issues with pandoc Perhaps just use

Write a unified import tool which scrapes content from any blog/website Jekyll converter

Template system

  • Make templates file or folder based
  • Disable re-rendering for template locals
  • Add better customization options
  • Local template editing does not clear cache
  • Use Hogan for precompiling and rendering templates?
  • Let Aurynn know when it's possible to set routes locally
  • Add way to allow all entry lists to access {{#months}} sorting options just like the archives page.
  • Fix Frank's strange template bug
  • Warn users that underscore will not work for hidden pages
  • Fix _ entries to true public files, tell john & other folks who depend on the menu: yes, page: no side effect
  • Tell Rodrigo don't write previews for _ posts
  • Add support for fetching only some properties of an entry (ideally only those that are used). prevent some properties from being fetched in some lists (html, for example in all_entries). Would be a good candidate for hgetall or hget?


Record a new demo video

  • Show sites I run using Blot
  • Blot's developer blog, a conventional blog, show using different text editors
  • My visual scrapbook: shows tag folders, photo blog
  • My link blog: shows the webloc feature, shows IFFFT, perhaps from favourited tweets?
  • My personal site: simple landing page, edit with a doc file?


  • Re-implement folder verification feature and make use of the local content hash computation script to verify we have the correct version of a given file
  • Make the sync / rebuild proceses run with unpriviledged user permissions to ensure shit isnt fucked with user input... – Re-instate feature to check if a rogue sync took down the server and run sync on a seperate process
  • Add method to pause syncing and prevent future syncs then use this method with the create/remove blog migration too.
  • Ensure sync script is run by less priveledged user (just access to /tmp ? /blogs/{{ID}})?

Full folder access

  • Try to use the same app folder when you upgrade from app folder to full site folder
  • Let Cosmo, Alex, James, Nick, Jostein know

Increase price for new customers to $40 a year. This will not affect existing customers.

Buy the .com


Add support for other payment methods

Start monthly newsletter with improvements, changes

Support embedding an image in a post by copy-pasting the Dropbox share link

Increase price for new customers to $60 a year. This will not affect existing customers.

Add support for entry property with escaped double quotes, tell Jay


  • Improve error pages
  • Recompile nginx with neccessary dependencies for auto-ssl instead of openresty
  • Install nginx fail2ban & http2

Support linking to another blog post by its file path

  • This would help with the importer to fix broken links

Removing Date metadata from a post should reset its date to the file's creation date

  • Currently nothing changes.

Add support for 'time' metadata property

  • Useful for posts with path-based-dates.
  • e.g. 'Time: 4:15pm'
  • Would append to any other date associated with the post.

Download the webpage for bookmark files and try to extract title + summary

Add a file dependency / dependents list to each entry then use this to rebuild dependent entries when, for example, a public image is updated.

Add support for comments via webmentions

Thumbnail generator

  • Improve transformer so it checks a file's MTIME against a stored value before rehashing the file
  • Generate thumbnails for GIFs / SVG thum
  • Prioritize faces
  • Aim to generate distinct thumbnails across the blog
  • Try to crop out ruined borders. E.g. when making a square crop of a rectangular image with a border, crop into the image as well to remove the border-on-three-sides effect
  • Extract color palette too for the image
  • Run quickly first time, then run in the background to pick the best thumbnail
  • Offer imgix style API for embedding thumbnails

Migrate code from require('mime') to require('mime-types') since it doesn't use a global default type. Remove the mime node module.

Move off the CDN

  • Work out why blotcdn is so slow for
  • Backup s3 buckets every day? delete those older than a month?

Migrate code from require('../../../') to shortcuts in node_modules

Remove the dirToModule code and hard link the require references.

Use \ optgroup on timezone select dropdown to subdivide zones by current time, and steal the presentation format used by basecamp.


  • Add hourly local redis rdb dumps
  • Add script to roll back into hourly local db dumps and remote backups
  • Delete backups older than a month from s3 automatically

Add daemon for zero-downtime node restart


  • Set up AWS autorecovery
  • Test with instance reboot on live site
  • Test monit with nginx going down
  • Test monit with blot going down

Move to pretty IDs for everything

Re-do url redirector to use route-parser and properly support regular expressions

Handle queries properly

Giphy url support

Catch rename failed to find a match for scrapboox/patch_bunny_slippers.jpg -> /patch_bunny_slippers.png

Indicate that some posts' permalink will not change (if metadata) on the dashboard when setting the blog's permalink format. Tell Chet.

Can rename tolerate a minor file size change?

Add filtering by date to 404 log

Make the folder in Dropbox rename automatically when the user changes the username for one of their multiple blogs?

Move daily update generator from scripts to app folder

If entries share publish date, sort them by blot creation date

Rewrite footnote links in a teaser from #frag to {{permalink}}#frag

Add plugin for inline popover footnotes

Enable hyphenation again then tell rodericus

Investigate atompub support for Marsedit and tell Chet

Find cause of fontconfig error / warning

Password protection for blogs

Create an API for Blot

  • Add webhooks and tell Aurynn

Add option to enable hard line breaks


  • Install time mover library
  • add proper error handling to email
  • make it easier to pass in variables


  • check each id has an entry and each entry has an id
  • check menu is right (pages exist, non deleted etc...)
  • generate fake entries for id clash
  • must check each blog folder exists...

Move to some SQL for storing each entry's input and output...

Fix image caption plugin to be semantic

Devise nice way to declare unit tests for a file which don't need to be run on server start but can be run programmatically...

Add button to remove avatar from settings page

Incorporate typographic features from textile

queue scheduled entries in redis this makes each server less stateful

Noindex blog search results pages

Re-enable CSP on blot site in a way that works in Safari

Popular entry list

Related entry list

Expose list of rendering errors to callback

Prevent uploads will still pipe large files on the server

Add rewrite feature, e.g. rewrite /randomColor to /public/randomColor

Menu needs concurrency

Push archives feature

Banned permalinks are possible when page:yes

Incorporate disk space monitor to alert for low space

Archive logfiles with backups

Generate list of external api dependencies and follow changes for each

Make drafts preview file identical (construct iframe based on window.location.href) and use copyref

Undo option for form changes

Store metadata for each file (type, size, mtime)

Add an explanation for the folder migrator...

Seperate the settings for blog and user & billing

Implement custom CSS for syntax highlight plugin

Wrap each pre tag in .hljs so other themes work too

Ensure Youtube plugin still functions if apis fails

Prevent image zoom plugin from zooming emojies

Embed plugin

Create script to export Blot sites to common formats and let Roberto know

Add transactional emails notifying user of changes to their email or password.