We do a lot of work building portals and intranets that provide collaborative online spaces for professional communities. Some of these projects are completely private sites, and some are open to larger user groups. In each case we need to provide a toolset that could be configured differently for each site and frequently tweaked in particular groups. To do this we've built Spaces. It's a module that leverages Organic Groups to relate users and content to groups, and it extends context_ui to define 'features' that can be control individually in each group. Spaces also makes assumptions about how you want groups to work and so is able to reduce the options available when creating groups and posts in groups, making the group creation and content posting processes more intuitive.
To get a sense of how this module works I have taken two screen shots from our own intranet package that we call 8trees. Here you are looking at our own team space on the 8trees install that we run for ourselves to communicate with our clients. It provided us with a terrific way to test code and ideas on a captive and critical (but forgiving) audience. Clients never know there is anything but their own little space, but we move quickly and easily between them and have different tools (blog/book/casetrack/calander) turned on for different clients depending what stage the project is in. This is what spaces lets us do.
Included in the spaces suite is a core set of feature definitions that provide features for things like the blog and book modules. Additionally there are feature definitions for a calendar, a shout-box, and a case-tracker. When you create a group with Spaces enabled it changes the creation a bit, limiting the kind or group you can create to simply 'public' or 'private' and allows you to select what features should be available inside that group. If it's only appropriate for your group to have a blog, you can limit it to that. If your group needs a more substantial feature set, say a blog, book, and calendar, you can configure that for the group. Spaces also lets you change labels in a group, so if a set of users doesn't want a 'blog', but needs a 'discussion' they can have it without need to to change any code or use the locale module. Here is how the setup looks:
Because the context_ui module lets you define contexts in code or in the database you can define spaces features the same way. This means the feature definitions that ship with spaces can quickly and easily be overridden by savvy site administrators. Doing this allows them to add blocks, add or use alternative views, and even define entirely new features for their groups. These new UI defined features work and behave just like coded features allowing admins to grow and adapt their sites along with their users, without doing any coding.
The Spaces module is currently under heavy development and should be considered a developers' preview. We've deployed spaces a number of times, so 'it works' but the code on Drupal.org is the bleeding edge of our work. If you are developer, please check it out. We're doing a lot of work and always love more feedback from the community. Also, check out the Spaces/Context session proposal for DrupalCon 2008 Szeged