Email Center Pro allows a team of people to manage email collaboratively. The marketing people haven't really latched on to this but I always describe it as a multiplayer email client. It's for companies that have email addresses like info@ sales@ orders@ help@ - email addresses that map to a team rather than an individual. Our target market is small businesses or teams but we have teams of all sizes using it successfully.

We're using Ext for the frontend. It connects to a backend written in Java. We're using EC2 for hosting which is great because it just takes hardware out of the equation.

Ext has been absolutely priceless for us. I couldn't begin to tabulate the number of man-hours it has saved us. We started with a pre-1.0 version of Ext and a couple months ago we re-wrote the entire frontend with Ext 2.

Ext 2 makes things so easy it feels like cheating sometimes. I've used other libraries but I've never seen a javascript library that has anything even approaching the whole component/layout concept. Running down the list pretty fast I think that the only component we DON'T use is Ext.CycleButton - and now that I've determined that I'll probably have to find a place to use one just for completeness. Very rarely do we break from the component layout pattern- but when we do, everything still works.

I love how everything works together- Components just snap into place inside one another. Everything that needs data can take a store, and stores know how to operate on the database if they need to. I don't have to guess how different classes will behave, which is something I've dealt with in other frameworks.

One of (I think) the coolest things we're doing with Ext is our dashboard:

This is our igoogle style customizable portlet type thing- every webapp needs one, right? We're just storing the configuration as an array of xtype declarations, like {xtype="widget.mailboxlist"}. It took about 20 minutes to write and it's endlessly extensible as we add new widgets. Creating new widgets is also easy: we just subclass our widget component with different items. Since everything is a component, if we wanted to put the contact listing tab into a widget we'd just do something like:

ecp.EmailCenter.ContactsWidget = function (config) {
    Ext.apply(this, config, {
        title: 'Contacts'
        ,items: {xtype: 'contactslisting'}
    });, config);
Ext.extend(ecp.EmailCenter.ContactsWidget, ecp.EmailCenter.Widget, {});
Ext.reg('widget.contactslisting', ecp.EmailCenter.ContactsWidget);
I was going to write pseudocode but it was actually easier to just write the real thing. It took absolutely no time to write and it worked the first time. The contacts grid is fairly complex, but it just snaps in and because it's all self-contained, it works as well as it does when it's in a tab.

Anyway I've seen some really impressive stuff done with Ext in here and I just wanted to show off what we've done with it. You can create a free account and check it out firsthand: