FunnelWeb is Awesome

FunnelWeb is really an awesome blog engine for a few reasons.

  1. Its powered by ASP.net MVC3 which is one of the best web development environments available IMO.
  2. It was created for developers to be able to create technical posts without the hassles inherent with posting code samples on other blog engines. FunnelWeb includes things like markdown support (StackOverflow style) and prettify'd source code snippets.
  3. Its not bloated with a dozen JS files and a dozen CSS files like some popular blog engines today. Being based on the razor rendering engine for asp.net MVC3 we have very fine control of the markup returned to clients (in contrast to the older asp.net webforms based blog engines which have poor control over the rendered markup).

Major Features I'd Like to See

There are a few shortcomings though. Because funnelweb is in its infancy, it lacks a few features I would consider core to blogging.

  • Support for Post Categories - fairly self explanatory. This helps when users are only interested in one area of your site/posts. For example I might post about programming and electric bikes, while you may only be interested in following one or the other.
  • Archive capabilities. We should be able to list older posts by year/month for easy searching by time period.
  • Tag Cloud Widget. While the engine already supports tagging, it doesn't actually list the tags anywhere for someone to search.
  • Recent Posts Widget. The ability to list recent posts without it being the primary and only purpose of the page. For example many blogs list the 5 most recent posts in their page footer or a right hand column.
  • Blogroll Widget. Really this is just an easy way to administrate a bunch of links to stuff you like on the web, often other blogs. Yes you can do this by modifying your theme and manually adding/removing links, but a simple admin interface would be helpful, particularly when changing the links remotely without access to the file system (maybe from your iPad while travelling?).
  • Menu System. The ability to create/edit multiple page menu from the admin area. These should be rendered as UL/LI menus in your theme. You should be able to include a menu anywhere in your theme with one line of razor.
  • Contact Page extension. While a contact page is not critically core to a blog, it is so common that people just expect it to be available. This would be the kind of extension that I think could be included in the blog package download because of the frequency of its use.

Technical Features I'd like to See

There are a few technical things that would help make it easier to achieve the above wishlist.

  • Hierarchical comment support. Sometimes its nice to be able to respond to a specific comment that someone left on your blog. By adding a 'ParentID' to the Comment model we could leave a reply to a specific comment. Root comments could have ParentID of 0 (zero).
  • Extensions should be able to register an administrative controller with FunnelWeb. This would cause a link to be added in the administrative area to the administrative controller for your extension. For example if I built the menu extension, it should be able to provide a link in the admin area to '/admin/menu' which is routed to the administration page for the menu extension.
  • Extensions should be able to inject JS/CSS into either the page theme or the admin theme. For example lets say my menu extension used a 3rd party jQuery widget to make editing menus easier (think wordpress style). I might need to include some JavaScript and Styles to make that all work. Wordpress has an api to write out extension header and footer that is including by default in all themes (this is easy to add)
  • Extensions should be able to provide some parsing of blog content. For example stackoverflow allows you write something like '[tag:funnelweb]' and it will render a tag with link inline inside your post. Some wordpress themes allow you to use similar square bracket shortcodes to achieve other cool theme specific bits of formatting. For example '[box type='info']This is an inline information box.[/box]' could be rendered into a specific div with style classes by a theme extension. There could be other shortcodes to easily construct things like collapsible content, tooltips, columns, etc.. Currently this required that the extension reference your web project, I'd prefer to move generic interface definitions like IContentEnricher to the core FunnelWeb project or to create a new intermediate assembly that references the core project but not the web project.

If you have ideas or thoughts about my wishlist leave a comment!

What's can I Contibute?

Well I figure I can help with writing most of the major features I want to see above. But I'd love to hear some feedback from the community. Leave a comment and tell me which features you'd like to see first. And if you have an implementation for one of these things leave a link.

I'll contribute the ArchivesController first, simply because its "low hanging fruit". It doesn't require any database changes and can easily drop into the existing release without interfering with anything else.

Likewise you'll see I've implemented a tag cloud widget on my blog in the footer. This is just an additional "Widget" action on the TaggedController. I want to clean it up a little, but this should be released shortly as well.

After that I think the remaining features I've thought up will require changes to the existing database and model, so we'll see what the FunnelWeb community wants to put into core vs. make as an extension.