Case study

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.

TheorieGO

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.

Users need to access TheorieGO on their phone, tablet, and computer.
Users need to access TheorieGO on their phone, tablet, and computer.

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.

Various (abstract) components within the TheorieGO system & external systems that are integrated.
Various (abstract) components within the TheorieGO system & external systems that are integrated.
An overview of the techniques I applied during this project.
An overview of the techniques I applied during this project.

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.

Plan
Analyze
Design
Implement
Test
Maintain
Plan
Analyze
Design
Implement
Test
Maintain

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.

Various programming languages and techniques were used during development.
Various programming languages and techniques were used during development.
TheorieGO has guest, customer, and admin environments.
TheorieGO has guest, customer, and admin environments.
Both front-end and back-end tests are automated.
Both front-end and back-end tests are automated.

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.

All use cases are tested with Playwright.
All use cases are tested with 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.

Since 2019, virtually all components have been updated.

Screenshots

The homepage was implemented with Next.js. The design was provided by the client.
Blog and FAQ data come from the admin CMS. Administrators can manage all content themselves.
For package ordering, an integration with Mollie was implemented. Invoicing is handled via a Factuursturen.nl integration.
Transactional, dynamic emails are sent via the Brevo email platform.
There is an integration between the Next.js site and the React app, allowing functionalities like authentication to be shared.
The customer environment is a private React application.
On the results page, customers can see if they passed the practice exam they just took.
All answered questions include an explanation. Customers can filter based on this.
The exam is a standalone React component. Both the Next.js site and the private customer environment use this component. The Next.js site uses it for the free demo.
Through integration with Google Cloud's text-to-speech service, audio fragments are generated.
All pages are responsive so the application can be used on mobile devices, including the admin environment.
The admin environment is a private React application. All dynamic content can be managed from here.
... and dark theme, of course!

The homepage was implemented with Next.js. The design was provided by the client.

Need an experienced software engineer?

I help companies with software solutions (SaaS, automation and more) — from backend to frontend. Feel free to contact me to see how I can contribute to your project.

  • Robust backend: Java/Kotlin, SQL, Spring Framework
  • User-friendly front-end: Next.js, React, Typescript, ES6
  • Rapid development: Continuous integration & deployment, Jenkins
  • Efficient collaboration: Agile, Scrum, Jira, Git, Bitbucket, GitHub
  • Freelance software developer from Arnhem, The Netherlands