TheorieGO
Web application development
In this case study, I walk you through the development of TheorieGO and the associated challenges, solutions, and positive results.
TheorieGO is a platform that allows customers to practice for the CBR car theory exam.

Type
- Web application
- SaaS
Role
- Software architect
- Software developer
- Maintenance
- CI/CD
Timeline
- 2019 - Present
Client
- Autorijschool Easy Go
- ismotion
Challenges and goals
The project began after I was approached by the client with a pitch for the project. Based on that initial idea, I created a prototype. We then decided to collaborate on the project, with me being hired for all technical tasks.
The client and I compiled and prioritized a list of all requirements. I then converted these requirements into use cases to be implemented.
The client developed all visual aspects, including branding, design, and logos.

In this video you will see a customer log in, take an exam and view the results.
Architecture
I developed the architecture based on various aspects, including:
- The use cases
- Other requirements
- Potential future features
- Design patterns
- Scalability
- Maintainability
Although the architecture changed somewhat during the project, its foundation remained the same. With the chosen architecture, we could easily scale and expand the system, enabling us to achieve our goals consistently.
In the following abstract diagram, you can see various components and how they are interconnected.

Techniques
With the architecture in mind, the appropriate techniques for implementation were chosen.
For the first version (in 2019), the back end was developed using the Play Framework. The front end was built with vanilla JavaScript combined with HTML and CSS.
Later (in 2022), during a major maintenance and rebranding, this was replaced by the Spring Framework for the back end and React.js for the front end.
Additionally, I used Tailwind CSS, Next.js, and TypeScript, among others techniques. All techniques were chosen based on suitability, relevance, maintainability, and future growth.
Development process
During this project, we worked with Scrum. Thanks to this agile project methodology, we were able to work flexibly and effectively.
Each sprint, I work on new features with multiple releases per sprint. Changing requirements can be quickly incorporated, implemented, and released during iterations.
A good example of this was when the CBR changed the exam format — thanks to our flexible approach, we were able to incorporate the change seamlessly into our application.
Implementation
Through the CI/CD pipeline (continuous integration / continuous delivery), the system is constantly being developed. This includes implementing new features, making changes, or performing maintenance.
For writing code, maintainability, testability, and scalability are important. This contributes to delivering a solid, reliable product without major issues.



Testing
As in all software projects I work on, I write automated tests. This allows me to continuously monitor whether the system works as expected and immediately detect any issues. When building or modifying functionalities, the associated tests are created or updated.
The back-end code, built with the Spring Framework, is fully tested with unit and integration tests.
The frontend applications, built with React, Typescript and Next.js, are fully tested with front-end end-to-end tests. Previously, these were built with Cucumber.js, Selenium and Chai.js. I now use Playwright for all front-end testing. In my blog I tell more about my switch to Playwright.

Continuous development & integration
As mentioned earlier, I work with a CI/CD pipeline. This fits well with the Scrum framework. Thanks to this combination, the application has been kept fully up to date over the past years.
Work is continuously done on this project, and I am very proud of my contribution.
Screenshots
The homepage was implemented with Next.js. The design was provided by the client.
The homepage was implemented with Next.js. The design was provided by the client.












