blog: make BlogPost model swappable and reusable