Here are my current plans for eatStatic blog software, in the order I hope to carry them out:-
The option currently exists to cache arrays of all "all posts", "recent posts" and tags, to improve performance when the amount of posts grow. I've noticed some weaknesses in the way the caching is handled - currently json files are written and read directly on the filesystem. I haven't done much testing as to the efficiency of this, but I have noticed a bug on my personal blog
, which has over 600 posts, where sometimes the cache refresh fails. I'm assuming that this is due to some read/write blocking. I never intended to invent my own database system, as this problem has already been solved, but ideally, I do want to keep this software as free from dependencies as possible, but not if that means creating an inferior product. I will be experimenting with switchable alternatives for the caching - memcache, mysql, sqlite, to make sure that it can scale and performance is maximised. This will still make use of json as a data format, but written to memory or into a db rather then the file system.
Improve cache refreshing
This currently involves calling a couple of URLs to run a couple of seperate scripts in the scripts directory, which is a bit clunky. I'd like to make this into a single URL and CLI command, so that it can be run more conveniently on demand and/or via cron. I'll also add some rudimentary security so that a user can specify a "secret" URL if they want to run it manually.
Add a "main image" tag
I want to add a tag to specify a main image to be added to the blog post, rather than adding an HTML tag. This paves the way to add a blog by email feature
Blog by email
In keeping with the emphasis on offline blogging, and travel blogging - by far the most convenient way to create a blog post with a featured image, is by sending an email with an attached image from a smartphone. I intend to create a system for picking up emails from a secret email address, probably via POP. The system will add a text file and image so the post can still be edited in the normal way.
Beginnings of online admin
This will become increasingly important once the blog by email feature is added, in case a blog post needs deleting or editing after mistaken or broken posting, but without access to FTP/SCP/SSH/GIT or however the data files are usually maintained. This will be added in order of necessity :-
- a login system (maybe oauth, to avoid storing encrypted passwords on the server?)
- Post list with delete and basic edit (i.e. to correct typos) options
I could get seriously sidetracked by building a full online admin, so i'm leaving this list here at the moment!
Support of markdown and other formats
I didn't bother with markdown support initially, as being a web developer i'm happy to write plain text with a few HTML tags where needed. Also the format proved handy when porting my personal blog from wordpress, which stored content in this format. However, I think there are a number of benefits for supporting markdown, so this is next on the list.
Better draft/ live handling
I currently handle drafts by composing in the draft folder and them moving into the main folder when ready, but previewing stuff is really clunky, so I want to devise a more convenient way to handle this, which also ties into the blog by email feature.
There's plenty above to keep me going, but other things I have thought about are:-
- Full online admin for posting blog content, and updating text blocks, and basic page creation (without getting distracted by turning this into a CMS
- Improved Photoblogging/ gallery features
- More travel blogging features, maybe containing GPS recording for each post/ photo and optionally-private maps
- Non-techie friendly installation process
- Invite only blogs - so people can keep private travel blogs for friends and family
- Comment system
Some of the above ideas are replicating what you can already do with posterous and tumblr, but I still like to be able to run my own privately hosted sites, and especially to be able to take and modify software to integrate with other sites and systems.