Hi, we are Wouter and Arne, 2 interns at Kunstmaan, and Roderik asked us to write a small blog post about all the hard work that we did here. We are students at KHLeuven, studying Applied Sciences and we chose the software development route.

Our journey begins

Our adventure began early march. We arrived nervously at the brand new Kunstmaan headquarters in Leuven without really knowing what to expect, straight out of school, not knowing alot about how things go about in the real world of programming. Luckely, all of our wildest dreams came true upon entering the Kunstmaan universe. We were shown around the office and discovered all sort of modern accomodations (who doesn't want a dishwasher that opens when you knock on it's door?). They even got a cinema over here! After this little tour, it was time to meet our colleagues and we got to see our desk. Working time!

Exploring the bundles

The first task was to understand why and how the bundles are the way they are. So they gave us the task to create a simple blog with the bundles. This was a great introduction because lots of things went wrong (mostly because the document we used to guide us was outdated). This way, we had to look inside the code and understand WHY it went wrong. In the end, we had a working blog, more insight in how the bundles were constructed and a bit more confidence to tackle the real problems. What we liked most about working on the bundles, is the interaction with other developers, both at Kunstmaan and from the growing community behind it ( yay for open source) and it was also the first time we've had the chance to work on a fairly big project.

Bugs and features

Our main task was to solve the issues with the CMS that the other developers posted. Those issues can roughly be divided into 2 main categories: bugs and features. Bugs are usually pretty small while new features required more thinking. At first, it was very hard for us to solve even the smallest of tasks since we were both new to the world of Symfony. But after many hours of ploughing through documentation, forums and stackoverflow posts things became much clearer. It is pretty exciting to know that your contributions are being used by other developers all over the world. We were free to choose which issues we wanted to solve and we were also involved in the thought process behind new features (we didn't have much input to give, but at least we were there!).

The Kunstmaan atmosphere

The word 'Kunstmaan' actually means satellite in English, and as we all know, a satellite rotates around an object. For Kunstmaan, that object is creativity. That becomes pretty obvious when you start to work here. You hear and see lots of creative concepts that inspire you to come up with even more interesting ideas. Everybody is also very proud of the work they accomplish, that is something you don't see at every company. Every now and then, a cool event would take place inside the Kunstmaan headquarters. While we were there, we had the opportunity to participate in some meetups, talks and we even got to eat insect burgers ( taste better then it sounds).


Code was written, bugs were fixed, bugs were created and pull requests were merged. We both are really gratefull to have been given the opportunity to do our internship at Kunstmaan. We've both learned alot since we practically knew nothing about PHP, Symfony, git and developing software as a team. We would like to thank the nice people at Kunstmaan for putting up with all our questions, no matter how stupid they were.

The list of our contributions:


  • #483 [GeneratorBundle] Fix for nodemenu in generated twig template
  • #482 [GeneratorBundle] Fix for nodemenu in generated twig template
  • #481 [LeadGenerationBundle] remove commented code
  • #474 [NodeBundle] change nodeMenu in renderContext to twig function
  • #465 [NodeSearchBundle] Refactored search to seperate service
  • #414 [GeneratorBundle] corrected Wrong bundlename in pagetemplate
  • #413 [TranslatorBundle] add confirmation box to force import
  • #409 [NodeBundle] Fix for publishing a draft version of page
  • #404 [AdminBundle,GeneratorBundle,NodeBundle,UtilitiesBundle] Change slugifier into service
  • #399 [GeneratorBundle] Replace the generated DefaultLocaleListener by generated DefaultController
  • #397 [GeneratorBundle] Fix a typo in demosite fixture
  • #396 [AdminBundle] IP and user agent check now are disabled by default
  • #392 [NodeBundle] Add button to create a duplicate of a page
  • #391 [NodeBundle] Removed redundant code in SlugListener
  • #384 [NodeBundle] Fixed error when passing null to slugEvent
  • #379 [NodeBundle] Added pre and post event to the slugController
  • #377 [NodeBundle] Don't BC break nodeTranslation introduced when we depreciated the service method
  • #349 [AdminBundle, UserManagmentBundle, AdminListBundle] Added seperate event to add tabs to admin forms and user forms
  • #339 [MediaBundle] Passed the type parameter on creation/deletion subfolder in media-chooser
  • #335 [MediaBundle] Media chooser type parameter now filters results correctly
  • #324 [GeneratorBundle] Removed glob calls in favor of symfony finder
  • #320 [AdminBundle] Show list of available groups when creating a new admin user via the console
  • #316 [ArticleBundle, FormBundle, NodeSearchBundle] Removed service method in favor of controller methods
  • #310 [Documentation] Removed the deprecated service method in favor of controller method
  • #290 [NodeBundle, GeneratorBundle] Deprecated the service method in Pages in favour of controller methods
  • #284 [Documentation] removed the acme bundle question and added the doctrine:database:create command
  • #213 [AdminBundle] Add a ConsoleExceptionListener to log errors in console commands
  • #206 [AdminListBundle] Fixed the exception when you delete the only item of a page #196


  • #472 [AdminBundle] Add command to migrate existing users
  • #408 [MediaBundle] Fix error on pdf preview
  • #406 [GeneratorBundle] Refactor pagepart media validation
  • #394 [MediaBundle] Add priority to media handlers
  • #382 [AdminBundle, GeneratorBundle, UserManagementBundle] Remove default hardcoded admin/admin
  • #373 [MediaBundle] Fix missing type variable when accessing FolderController
  • #356 [GeneratorBundle] Fix error when generating pagepart with images
  • #355 [GeneratorBundle] Updated behat tests for the new backend and demosite
  • #323 [MediaBundle] Fix single slash in media path
  • #318 [GeneratorBundle] Validate entity names and database prefixes in the generators
  • #304 [GeneratorBundle] Replace DialogHelper with QuestionHelper
  • #288 [MediaBundle] Add add/delete new folders while inside the media-chooser popup
  • #238 [PagePartBundle] Fixed error when moving page parts into a different region (#173)
  • #230 [MediaBundle,GeneratorBundle] Added validation options (mimetypes, min/max width/height for images) to media objects in the backend.
  • #198 [AdminBundle] Use an invisible password prompt in the create user command #195