Internship: Babiel GmbH
19-week backend development internship at a digital agency in Düsseldorf, working on a CoreMedia CMS project for the Vienna Tourism Board.

My required university internship (Fachpraktikum) took place at Babiel GmbH in Düsseldorf — a digital agency with 100+ employees specialising in online communication, digital marketing, and e-commerce. I had already been working there as a working student since May 2019, so I was able to hit the ground running from day one.
The internship ran from April to August 2020 — fully remote due to COVID-19 — for a total of 19 weeks. I worked as a backend developer on the agency’s largest active project: migrating the Wiener Tourismusverband (Vienna Tourism Board) website and all of its content into the CoreMedia CMS.
Project Context
CoreMedia’s backend is Spring-based, so Java was the primary language throughout. The CMS Studio — the editorial interface used by content editors and clients — is built on ExtJS and configured using ActionScript/mxml, which was new territory for me at the start. Frontend templates were written in Freemarker and Handlebars. The team worked in 3-week SCRUM sprints with full ceremonies: daily standups, refinements, sprint reviews (with live client demos), planning, and retrospectives.
Contributions
Studio Customisations (CMS Forms & CKEditor)
A large share of my tickets involved extending the CoreMedia Studio — adding new content fields and adapting editorial forms to match the client’s requirements. This meant working in ExtJS, a large and sparsely documented framework I had no prior experience with. I relied heavily on colleagues, trial and error, and browser debugging to get up to speed, and eventually reached a point where smaller Studio tasks had become routine.
The most involved work in this area was customising the CKEditor rich text editor built into the Studio:
- Reverse-engineered the original JavaScript dialog code to recreate link dialogs in ExtJS/ActionScript form
- Added a Button Link variant to both the internal and external link dialogs
- Implemented automatic CSS class assignment (
pdf,extern, etc.) via a Java richtext filter that reads the XML produced by the editor and decorates links before HTML output - Added a Vienna City Card toolbar button that injects a branded link with its icon directly into the editor and the rendered page
Java Backend Logic
Beyond Studio work, I implemented several Java components in the CoreMedia backend:
- Facades — passed calculated or composed data to Freemarker/Handlebars frontend templates
- Validators — checked that required content fields were correctly filled before publishing
- Upload interceptor — extended the image upload process to assign sequential unique image numbers (with thread-safety) and extract copyright metadata from EXIF data, writing both into CoreMedia content fields
- Richtext filters — processed XML-formatted rich text produced by the CKEditor to prepare it for clean HTML output
All Java work was accompanied by Spock/Groovy unit tests.
Infrastructure & Code Quality
Early in the internship, I took ownership of setting up a SonarQube build-breaker for the WTV project. This turned into a broader piece of work: the existing VM was decommissioned, a new Sonar instance had to be provisioned, and the test coverage reporting broke with the newer Java/Maven version. After a long round of research and coordination with colleagues and the sysadmin team, I resolved the coverage issue and migrated the build-breaker configuration across all Babiel projects.
I also set up and tested the GitLab CI pipeline for the external frontend team’s deployment workflow, and managed staging deployments at end of each sprint — coordinating timing with the team and client, since client QA and acceptance testing happened on that environment.
Agile Process
As a full participant in the SCRUM process I presented completed stories directly to the client at nearly every Sprint Review. I also contributed to evolving the refinement format — we identified that not enough stories were being estimated per session and shifted to a model where developers prepared story summaries and implementation proposals in advance.
The full internship report (in German) is available below.
Document
Your browser can't display PDFs inline. Open in new tab ↗