Hi, I'm Maximilian
A Junior |
Experience
Basketball Head Coach
KFUM Blackeberg Basket
Aug 2017 - Present
Coaching basketball is a hobby I really enjoy. It’s great to watch my players grow over time, and we’ve had a lot of fun taking part in several away tournaments over the years.
Long term Goals for ProgressionCoachingVolunteer Experience
Projects
Full-Stack Portfolio App
A stateless, secure, and performant web architecture
This project is a full-stack personal web portfolio built using Next.js with the App Router, Tailwind CSS, and Sanity.io as a headless CMS. The goal was to create a responsive, visually engaging, and technically rich portfolio that also demonstrates secure backend integration with advanced authentication logic.
Frontend
Some sections are rendered on the server for performance benefits, while sections with dynamic elements, like the labels cloud, are client-rendered.
One of the most unique features is the labels cloud. It randomly positions all labels in 2D space and connects nearby labels, making it a graph. To avoid overlap, I implemented a modified Intersection over Union (IoU) algorithm, an adaptation of a method explored in a prior academic project.
I integrated Sanity.io to manage static content on the site. The experience working with this headless CMS was seamless.
This web app features an admin only login page. Although the admin dashboard wasn’t completed due to time constraints from other commitments, the authentication pipeline itself was fully implemented and designed to be secure according to industry standards. Here follows a high-level explanation of authentication: An admin submits credentials via the frontend. The credentials are sent to a Next.js backend route which acts as a proxy. The backend forwards the request to a custom-built Java Spring JWT API (more on this later), hosted on Render. If authentication is successful, the JWT API returns a Set-Cookie header which is forwarded to the client browser. All future requests will now include this cookie for authorization.
Backend
The backend is a stateless Java Spring API that handles authentication using JSON Web Tokens (JWTs), hosted on Render. It connects to a PostgreSQL database hosted on Neon. When a request comes in, it is handled by my custom filter. This filter checks what resource is requested and verifies the JWT if available. The JWT holds information about the user, such as user ID and user role. This eliminates the need for database lookups during authorization, which is a huge save in computational power. I paid special attention to error handling and keeping the architecture modular.
JavaSpring-BootSpring-SecurityJSON Web Token (JWT)PostgreSQLGitCI/CD PipelineNext.jsTailwind CSSSanity.io, GROQJavaScriptHTMLTypeScript
Recruitment Management System for Amusement Park
A Web Based Application Developed with Java and Spring Frameworks
The objective was to develop a web-based recruitment system tailored for an amusement park's hiring process. The application facilitates two primary user roles:
Applicants: Individuals seeking employment can register and submit job applications.
Recruiters: Personnel responsible for managing and reviewing incoming applications.
The system is built using Java and the Spring framework, incorporating Spring Security for authentication and authorization. It features a relational database to store user and application data. The development spanned a seven week period, emphasizing modular design and scalability to allow future enhancements by subsequent project groups.
JavaGroup ProjectSpring-BootSpring-SecurityPostgreSQLMVC ArchitectureGitMavenCourse Code: IV1201
Elixir tasks
MIPS | Mandel | Prime | Tree vs List
These are four of my first hands on experiences with Elixir: MIPS, Mandel, Prime, and Tree vs List. Each task came with a one week deadline, usually announced on a Friday and due the next Friday. These tasks pushed me to think functionally and work with concepts like recursion and pattern matching. For every assignment, I wrote a short report explaining how I approached the problem and how I solved it. Those reports are available, with the code, in my GitHub repo.
ElixirMandelbrotBenchmarkingFunctional ProgrammingTreeMIPS EmulatorFunction Head Pattern MatchingRecursive ProgrammingCourse Code: ID1019
About Me

I studied Computer Engineering at KTH Royal Institute of Technology, where I earned my bachelor’s degree. Since graduating, I’ve been building on what I learned while looking for the right role. I’m genuinely interested in how technology shapes the world, and I like digging into new things just to see how they work. Outside of tech you’ll probably find me out for a run or coaching basketball.
- Location: Stockholm, Sweden
- Email: maxi.petersson@gmail.com
- Social: GitHub | LinkedIn
Education
High School Diploma
Stockholm Science & Innovation School
Aug 2017 - Jun 2020
Highlighted Courses:
- Programming 1
- Computer and Network Technology
- Web Development 1
Bachelor of Science in Computer Engineering
KTH Royal Institute of Technology
Aug 2020 – Jun 2024
Highlighted Courses:
- Projects and Project Methods - II1302
- Computer Hardware Engineering - IS1200
- Operating Systems - ID1206
- Ethical Hacking - EN2720
- Algorithms and Data Structures - ID1021
- Networks and Communication - IK1203
- Object Oriented Design - IV1350
- Design of Global Applications - IV1201
- Interaction Programming and the Dynamic Web - DH2642
Contact Me
The information you submit is not stored by this website. It may be stored by the email provider Resend and in my inbox.