If you've been following Ushahidi 3.0, you know we've been working on it for a while, and might have noticed that we've been fairly quiet about it lately. That's because the V3 team has been heads down these past few months working on getting it built and out to our community. It's finally time to show off some of what we've done. We're rolling out a developer release of Ushahidi v3(v3.0.0-alpha.1). 3.0c Grab the code on github, or download it here, then head over to the install instructions. Or just head over to the demo site and have a look. (If you want a quick way to spin up your own demo, try out our one-click deploy and install on Pagodabox)

Who this release is for

We've called this a developer release to emphasize that this really isn't production ready yet. This release is a chance for developers to try V3 out, have a look at the code and help us build it. For the rest of us: have a look at the demo, but don't deploy/upgrade just yet ;).

What to expect

With this release you should be able to get V3 installed, create and delete posts, view a list of posts and drill down to individual post pages. There's also a bunch of UI prototypes in the app, so you can see what things will look like, but they're still powered by fake data.
[caption id="attachment_14227" align="aligncenter" width="500"]A mockup of Ushahidi v3 A mockup of Ushahidi v3[/caption]
The base of the API has been done for a while, we blogged about it way back in April. This now includes all the main endpoints needed for V3, and authentication handling via OAuth2. The big achievement in this is that we have the basic UI built and working. There's still a lot to be done, and a lot that's not quite working, but the framework is there.
There are still a lot of rough edges you should know about, here's a breakdown:
What's working:
  • UI
    • Post listings - listings work and load real data. They're page-able and sort-able, but not search-able yet.
    • Individual post pages - these work and load real data. However they don't render custom form data yet, and the images are faked.
    • Post create form - well kind of. It should mostly work, but there are definitely still bugs with this.
    • Deleting a post
  • API
    • Posts endpoint
    • Forms, groups, and attributes endpoints
    • Media endpoint
    • Tags endpoint
    • Users endpoint
    • Posts revisions and translations support
    • GeoJSON support on Posts endpoint
    • Supports OAuth2 for authentication
What's not working:
  • Searching posts
  • Workspace menu - the menu is there, but none of the links do anything
  • Login
  • Register
  • Related posts - always shows the most recent 3 posts
  • Media - We're just using fake images at the moment, there's no way to upload new ones
  • Custom forms - these exist in the API, but there's no UI for managing them.
Looks like it works, but doesn't
There are a bunch of views built into that app that are really just design prototypes. They look real, but they're not powered by real data.
  • Sets listing
  • Set details
  • Editing posts
  • Adding posts to sets
Authorization (aka. why does it keep asking me to 'Authorize This Request'?)
Our authorization is currently a quick hack. The JS app hits the API directly, and this means it has to use a standard OAuth authorization flow. At the moment thats a plain unstyled bit of UI: the ugly 'Authorize This Request' screen. On top of that the default token time out is only an hour - so you'll often hit the authorize screen quite a few times while developing.
This is temporary, we're working on a real solution, but for now please bear with us.

How to get involved

Some technical details


We've talked about this in detail before.. so here's the quick summary
  • RESTful API
  • HATEOAS style links between API calls
  • OAuth2 authentication
  • GeoJSON support directly in the posts API
  • Using our own API to build the frontend

Frontend Architecture

The V3 frontend is a javascript app built on top of the API. We've used a lot of other libraries and tools to get things moving quickly:
  • Backbone and Marionette JS - These provide the main framework for the application, they handling routing, fetching data and rendering HTML
  • SASS and compass - these provide us with a smarter, better CSS
  • RequireJS - this handles async loading of all our JS files and lets us split things up into modules
  • Grunt - helps to automate some of the frontend dev: building SASS files, and building optimized RequireJS files.
  • Kohana Media module - this handles actually serving all the CSS/JS/images/templates to the browser. We're using this to allow media files to live within Kohana's cascading file system.
  • Leaflet - the mapping library we're building on to render GeoJSON from the API
QA and testing
With V3 we're pushing ourselves to use test-driven development. We're using PHPUnit and behat for tests and we have a QA team working on test plans and test cases to find bugs as we work. These plans and test cases have already been published on the wiki.

Nairobi based? Join us on 6th November, 2013!

We're hosting a meetup at the iHub on 6th November, 2013 between 5.30 p.m and 6.45 p.m to showcase some of this stuff to our Nairobi community. We will do our best to make it available for our global community to join via a Google Hangout, but this is pending. We promise to record it ;)