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.

Fixed margin on formatting page
15 days ago

Merge pull request #12 from davidmerfield/update-katex Updated katex version
15 days ago

Updated katex version
15 days ago

Pull changes from dashboard branch
16 days ago

Removed broken link to site
18 days ago

Updated label in nav
19 days ago

Refactored dashboard routes
19 days ago

Refactored settings page
19 days ago

Tidied up settings page
21 days ago

Updated guide to NGINX in development mode
23 days ago

Updated dashboard styling
23 days ago

Moved message into header
24 days ago

Updated configuration documentation
24 days ago

Fixed template bug which hid links to switch blogs
24 days ago

Updated readme
25 days ago

Updated readme
25 days ago

Updated readme
25 days ago

Updated readme
25 days ago

Updated readme
25 days ago

Updated readmes
25 days ago

Updated readmes
25 days ago

Updated documentation
25 days ago

Updated config
25 days ago

Moved to new config structure
25 days ago

Removed token test
25 days ago

Another fake token
25 days ago

Try to commit fake token
25 days ago

Updated new index
25 days ago

Updated config
25 days ago

Updated config
25 days ago

Updated config
25 days ago

Updated app
25 days ago

Updated tempDir
25 days ago

Merge pull request #9 from davidmerfield/notes Notes
25 days ago

Decentralised notes
25 days ago

Updated search script
a month ago

Added scripts to search for entry
a month ago

Updated config
a month ago

Add stderr to log
a month ago

Updated readme
a month ago

Moved readme
a month ago

Added new definitions to configuration
a month ago

Removed broken travis test
a month ago

Moved blot upstart script
a month ago

Moved check to config
a month ago

Updated config
a month ago

Added new scripts
a month ago

Added new blot upstart
a month ago

Added i flag
a month ago

Added test for blot cache
a month ago

Updated blot monit
a month ago

Added test to see if flag was passed
a month ago

Removed package lock
a month ago

Added package lock
a month ago

Added redis to ci
a month ago

Updated packages
a month ago

Added tests and ci
a month ago

Updated dashboard
a month ago

Fixed more formatting page bugs
a month ago

Improved broken formatting page
a month ago

Compressed notes pages
a month ago

Fixed bugs on dashboard partials
a month ago

Fixed css bugs in dashboard
a month ago

Updated to od
a month ago

Added subpage info to account renderer
a month ago

Updated partials
a month ago

Added price in words to user object
a month ago

Updated redirector middleware for new account routes
a month ago

Fixed delete button styling
a month ago

Updated account routes and views
a month ago

Added helper to map integer to words
a month ago

Fixed /account conflict
a month ago

Updated services label on dashboard
a month ago

Fixed tabs for new folder view
a month ago

Added new folder route
a month ago

Updated site views
a month ago

Updated git client view
a month ago

Updated dropbox client views
a month ago

Added script to generate huge test folder
a month ago

Updated git client index page
a month ago

Updated clients menu
a month ago

Fixed dropbox submenu
a month ago

Added new index to help page for logged in users
a month ago

Updated sync script
a month ago

Fixed bug with too large template files
a month ago

Added script to build templates for a given blog
a month ago

Added dry sync script
a month ago

Added script to remove domain
a month ago

To do

Ensure the nginx service can be controlled properly using Upstart. It seems like Monit's attempts to reboot the service which failed, caused the downtime. Potentially worth reviewing commands in this:

Allow Blot to fallback to if the file does not exist on the blot server. Say the harddrive is wiped, we still would like to serve blog files

Distribute static built blogs on dat

Fix permalink issue with periods and tell Farzain

Fix bug with case-sensitive paths to thumbnails + Dropbox client and tell Jan-Erik on Twitter DMs.

Fix Eivind's git client bugs

  • Issue with images

Fix Dominick's git client bugs

  • Folder saved under dominikgitbug

Fix bug with title and partials in local editing

Fix git client bugs: Weird issue with slash in the file's name sent to metadata Moving a file fails File size bug and tell Dominik

- I think this was caused by nginx request size limit, which I have increased

Tell Taurean when new Dropbox client is live

Fix bug with double escaped embedded ampersands. Tell Gavin

Fix case-sensitive bug with weblocs by passing case-sensitive path to and tell Frank

Fix bug with additional child processes if main process runs out of memory? Something wasn't being killed during the nashp wav bug. There were duplicate node rebuild processes running (20+)

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.

Fix bug generating summary, or maybe even remove the dumb title exclusion from the summary and tell Amit

Fix bug parsing ISO8601 date format and tell Thomas

Fix ghost posts on this site and tell Eivind

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

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

Set up automated testing using Jasmine

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.

Use this redis analysis tool to see if I can squeeze more out of REDIS

Add an EXPIRY to the log entries for a blog's 404 log

Follow up with Christian about DataValet blocking

Client.write does not propogate sync errors... to demonstrate this, revoke dropbox token then try to enable local editing.

Finish Ghost theme import for Kingi

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


  • Dumb quotes are still smartified, even without typeset enabled.
  • Tolerate missing 'www' in personal domain field on dashboard for users with a custom domain when checking validity
  • Generate SSL cert for www subdomain of apex domain pointed to Blot, and redirect it to apex domain. Tell Paul
  • 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
  • Disabling a blog should free up the domain and handle associated
  • Removing a domain from a blog does NOT delete the key from redis. meaning if a user sets a domain once, it's effectively theirs forever. This is a bug!

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

Photo posts

  • Expose exif data to templates
    • See if you can add comments to image metadata and tell Riley
    • Tell Mike

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

Template system

  • Make templates file or folder based
  • Add support for YAML-style custom metadata and tell Shibel
  • 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?

Internationalize i8n

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.


It could be nice to link to [@path/to/file.txt] and resolve the URL automatically?

  • would need a dependency tree, if change were made to file.txt, the linker would need to be updated too.
  • would leave a trail, like regular permalinks, so file.txt could be moved without breaking anything.

Add 'opener=false' to target="_blank" links?

Consider offering a broken link checker service?

Add neat interface to customize blog level variables?

add support for dynamic partials to make collections possible e.g. {{> /{tag}.html}} ?

Move from preview files -> webloc / .url files ?

Consider adding date format localization with Moment

Create webloc to live version for each entry? I LIKE

Move to new api file ids for Dropbox renames?

Move from 'archives' to 'archive'?

Look into how Jekyll does data files and possibly support?

Consider using the fancy new stripe payment form on the public site?

Consider adding markdown support for mermaid?

Create a comment system to replace Disqus

Create an email list system to replace Tiny Letter

Add .lhs support and tell Roy

Add support for github style checkboxes and tell Christian

Add a cool bookmarklet which drafts a post a la

Consider allowing users to buy domains on Blot through