It's been some time since I started blogging and I see a lot of room for improvement. I decided to create something open source that will produce real value and act as an example in my posts. Here it comes: Yet another blogging platform!
I want something as simple as possible. Here are a few key ideas:
- Small amount of code with least dependencies (yes, I know that these two seem contradictory; I'll have to find the right balance).
- Blog contents are stored in Git, preferably in a separate repo than the blog server—people can review my posts and suggest improvements via Pull Requests (they can even propose their own posts!).
- Blog posts are written in markdown or something as easy.
- Modifying the looks is super-simple.
- I have an option to run my blog locally with a live preview.
- RSS feed is generated.
- Comments are available via disqus.
I'm currently thinking about using the following tools to create the project:
- Java 8. An obvious choice for a Java related blog, though I might experiment a bit with Java 9 later.
- Gradle as a build tool, probably the newest version. I'm not good at it, but I hate pom.xml's, so it's time to learn something else.
- Spock for all kinds of tests. It will give the project some groove.
- IntelliJ IDEA with default formatting settings. It's my favorite IDE and I don't want to bother contributors with stupid rules.
- GitHub repository.
Anything else that joins the toolkit is yet to be decided.
Small Design Upfront
Before I actually start coding anything, I want to share with you my general design idea, that might (or not) be implemented later. I have two possible sources of contents—filesystem or a git repository, used in local and hosted mode respectively. I scan through the contents and generate HTML for each post. Over the content source, I set a "watch," checking for changes regularly (e.g. every second). If a change occurs, it triggers re-generating the post's HTML. For the views, I currently need just an index with headers and a single post view. HTTP routes can be resolved dynamically by adding "/" to index and everything else as a possible post.
I didn't spend a lot of time preparing it. I just wanted to have a clue what I'll be building, but not necessarily a complete picture.
You are more than welcome to share your thoughts on the project in comments and contribute on GitHub.