Berliner.de is a social network focused on Berlin. Berliner.de is for all Berliners and all other citizens of the world who are mad for Berlin or are eager to become so. On Berliner.de, users are able to add new content or comment and rate other people's contributions. They can make new friends, upload pictures, send messages, subscribe to interesting topics or just stroll around the vast amount of existing bits and pieces regarding Berlin on the site. The most important things going on in a user's network are presented in a newsfeed.
The users are backed up by an editorial department that is checking, finalizing and publishing all public contributions.
Berliner.de was developed by the long-established company BerlinOnline that runs (among other portals) Berlin.de, the official website of Germany’s capital, Berlin. Involved in the development of Berliner.de were (among others) Drupal community members fl3a and ambo.
Development of the site
Following the extensive planning of the project, development started with detailed ideas in mind regarding desired functionality. Many of those were covered by existing modules. Others had to be realized and implemented using our own development and extensions. Drush is used for module maintenance and administrative stuff.
It might be of interest to some that Scrum was chosen as the project management framework. Using its simple but effective commandments for the first time, it lead to highly excited and contented Product Owners and Team Members.
Different types of content
Besides the standard content types, there are events, locations and articles to be found on the portal. These three types of content are organic groups with the option to post pictures in them. These pictures are a unique type of content and are presented on the site of the organic group using the modules Views and Viewscarousel. Other types are picture albums, related pictures, and content profiles.
There is a lively discussion going on in the Drupal community regarding best practices when dealing with picture galleries. Some best practices has been discussed on http://groups.drupal.org/node/7018. During the development of Berliner.de, some of these practices and their related modules were tested. To be honest, none of them fulfilled all of our expectations. There was a demand to be able to comment and rate each picture as well as the whole gallery for a multiupload and integration with Views. That is why we had to develop a new solution. By doing so, evolution of the Image FUpload module was made through the contributions of the development team. Image FUpload is a module that is able to upload pictures in the background and, at the same time, set up their nodes. The consumption of the pictures into albums is done by Views and a node reference.
To enable users to get in touch with each other the Friendlist and Privatemsg modules were implemented. A tiny additional module generates a field that is used to notify the user in case there is a new message in the Inbox or a new friend request.
Necessary user profile flexibility is assured by using the Content Profile module in combination with CCK-fields. Thanks to Avatar Selection, users are able to choose between different types of default pictures or upload their own.
The heartbeat module assures that users will always be up-to-date about what’s going on in their network. It is possible to leave public messages on a user's profile wall – a feature realized by using the Guestbook module, whereas Forward and Service Links were the modules of choice when it came to sending a page via e-mail and the obligatory outbound posting options to some social networks. Last but not least, Facebook Connect is used to connect Berliner.de accounts with those of Facebook.
Due to the large amount of modules Drupal reads and uses on every request, the lengthy amount of time it took to load the site was not acceptable, even when caching was turned on. For a while, we exprimented with Boost as well as memcache, but performance was not increased to desirable levels. In the end, it wasn't the caching that was the biggest problem, but the time it took Drupal to load the more than 400 files (modules, includes, templates) needed on every request. The server infrastructure at that time was using a shared file system that led to slower reading capabilities. After solving this problem, Drupal was able to handle a request in less than a second. Read more on this issue at http://www.crashcow.de/work/drupal-gpfs-dateizugriffe-und-performance.
A purchased TopNotch Theme customized by changing some of the HTML and CSS to match the desired design and layout served as the foundation for Berliner.de's simple two-column layout.
With the goal of simplifying the process of adding pictures, events or places as much as possible, many efforts were put into the development of user forms. A stand-alone module sorts and readjusts forms, hiding fields that are not necessary for a certain action, and customizes the help text.
The same kind of simplification routine is used when it comes to the editing of the users data and profile. By separating the different kind of forms, the user is able to change diverse settings in a convenient way. For example: A user's avatar is edited on a respective site and this change is applied to all settings, including the guest book and core account data like nickname and password.
This is a list of the most important modules that were used to build Berliner.de:
- Avatar Selection
- Content Field Privacy
- Conditional Fields
- Content Profile
- Content Taxonomy
- Feedback 2.0
- Flag (flag)
- Global Redirect
- Guestbook Rules (provides Rules integration for the Guestbook Module and will soon be attatched as a patch.
- Image FUpload
- Imagecache Profile Pictures
- Organic groups
- Path redirect
- Private messages
- Service links
- Token Custom
- Views Carousel
- Vote Up/Down
Issues and Patches
During the work on Berliner.de, some bugs and mistakes were found. Those that could be solved have been. This is a list of important issues that were filed during the development:
- Adminrole and drush
- Facebook Connect and Content Profile
- Abuse: not working substitution of email variables
- Error in Friendlist API
- Patch to Drupal's core common.inc
- Path problem in Better-Messages
If you like this site, please do not hesitate to give us some feedback.