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.

Hide tags from autogenerated titles
an hour ago

Merge pull request #5 from Pinjasaur/patch-1 Fix typo
2 days ago

Fix typo
3 days ago

Fixed case-sensitivity bug in git client
4 days ago

Fixed buggy file icon
4 days ago

Show youtube controls
4 days ago

Fixed template bug
5 days ago

Fixed bug with Rosa template on small screens
5 days ago

Fixed bug with hidden entries showing up in tag lists
5 days ago

Added script to remove entry
13 days ago

Added transitions to input border and box-shadow
18 days ago

Fixed another broken link
19 days ago

Fixed broken link
19 days ago

Fixed broken link
19 days ago

Updated dropbox readme
20 days ago

Updated distributed locking module
a month ago

Tweaked secondary buttons
a month ago

Added lock module's dependencies to gitignore
a month ago

Removed node modules
a month ago

Added locking module
a month ago

Refactored Dropbox client
a month ago

Fix bug with timeout preventing image caching plugin from working
a month ago

Added script to reset subscription
a month ago

Moved disconnect to client file
a month ago

Catch requests to an unselected client
a month ago

Fixed bug in date format
a month ago

Updated readmes
a month ago

Updated copy for full folder permissions page
a month ago

Updated clients readme
a month ago

Updated account views
a month ago

Added green folder icon to site css
a month ago

Added green folder icon
a month ago

Updated readmes
a month ago

Updated package
a month ago

Updated Dropbox client to ignore node_modules
a month ago

Updated git client
a month ago

It works
a month ago

Updated git client
a month ago

Resolve metadata paths in dependency module
a month ago

Ignore node_modules in clients directory
a month ago

Updated git client
a month ago

Updated git client
a month ago

Expose git client
a month ago

Updated git client
a month ago

Updated git client
a month ago

a month ago

Updated git client
a month ago

Updated arena importer
a month ago

Fixed bug with metadata API
a month ago

Fix error message
a month ago

Merge pull request #4 from davidmerfield/dependency Dependency
a month ago

Fix order of functions when a file is deleted
a month ago

a month ago

Also rebuild dependents on removal of file
a month ago

a month ago

Fixed typo
a month ago

Refactored dependency functions
a month ago

Fixed bug with Sharp cache which prevented thumbnails from updating
a month ago

Installed debugging module
a month ago

Updated module to extract list of dependent files
a month ago

Rebuild dependent files on sync
a month ago

Store dependencies and dependency graph by entry
a month ago

Added depenency property to entry model
a month ago

Added module to extract dependencies from file
a month ago

Removed old resolve path plugin
a month ago

Updated Arena importer
a month ago

Rebuild dependent files on sync
a month ago

Store dependencies and dependency graph by entry
a month ago

Added depenency property to entry model
a month ago

Added module to extract dependencies from file
a month ago

Removed old resolve path plugin
a month ago

Updated Arena importer
a month ago

Updated Arena importer
a month ago

Updated download images
a month ago

Added list iterator to every list
a month ago

Added importer
a month ago

Added disqus support
a month ago

Fixed bugs in header and css
2 months ago

Hide empty tag list
2 months ago

Fixed width bug on archives page
2 months ago

Fixed bug with broken search form
2 months ago

Fixed bug with sticky year labels
2 months ago

Fixed footnote bug
2 months ago

Fixed bug with wrong avatar
2 months ago

To do

My current strategy is to turn Blot case-sensitive from change.set downward and remove the lowercasing feature from localPath. I need to thoroughly review where that module is used. At the dropbox client level, all files and folders will be stored lowercase. I will add an option to change.set to allow it to accept a display 'name' which will preserve case and store this for each entry. This name property will be used on the dashboard.

Does Dropbox send folders individually with correct name property on initial sync or subsequent calls to file list folder?

Change.set and Change.drop downward

Perhaps store all files and folders lowercase, with option to store case preserving path?

Should I roll back the promise to make URLs case insensitive?

Case-sensitivity issue

  • Since Dropbox is case-insensitive, files should be stored as the lowercase version with the option to preserve the case of the file.
  • Set up case-sensitive file system environment locally
  • Resolve case-sensitivity problems inside the Dropbox client?
  • Tell Alan K on twitter DMs that the case-sensitivity bug is fixed
  • Tell Dominik
  • Tell Markus
  • Tell Alana

Fix git client bugs

  • File size bug and tell Dominik
  • Tell Taurean when new Dropbox client is live

Fix ghost post bug

Fix ignore file becoming post bug

Fix bug with documentation when logged in. Tell tweeter.

Add index to documentation and tell Kyle.

Grid theme

  • Find good source of material
  • Release the theme

Magazine theme

  • Fix bug with Barba.js which is not working
  • Add fade in out transitions
  • Ensure titleless blog posts work
  • Improve the about page
  • Add grey bg to loading thumbnails

Improve the selection of templates

  • Don't modify any code, just design templates
  • Build script to archive a particular theme
  • Draw simple abstract representations of each theme for the themes page to replace thumbnails
  • Let Chris, Nash and John know about new templates

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

Fix issue with protocol-less image URLs. Move thumbnails off blotcdn and into assets folder.

Fix bug with Word Document links and

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

  • Tell Thomas when this is fixed

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 transformer to handle ESOCKETIMEDOUT error...

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

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 with cache not busting for static rendered templates:

  1. put posts in blog
  2. sync, create view e.g. static.js which renders all_entries
  3. remove posts from blog
  4. reload page, static.js still shows the entries, which archives.html does not Fix bug with disqus plugin on preview subdomains

Finish Ghost theme import for Kingi

Remove tag from autogenerated title

Look into mirroring site across multiple domains and follow up with Thomas

Add export to zip and import to zip feature for themes

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

Investigate static site search offerings

  • It would be nice to have one whose index you could build on the server, and deliver statically, perhaps even chunked if it was huge
  • Would be nice to be able to patch updates to this index quickly without rebuilding the whole thing


  • 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 Add support for checkboxes and tell Matt

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
  • Let Brian know when it's possible to set variables locally
  • Let Jason know when you can use tokens in routes
  • 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.

Support 2FA (Two factor authentication)

Consider supporting Open Graph

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

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

Soundcloud embeds and tell Jonas

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.