I started developing a web app as a learning activity back in February 2024. Using Spring Boot for the backend and Vaadin for the frontend, I aimed to create a scalable web application that I could easily update and maintain. This web app project was a step up from simple java command line, single service projects I had made before, my first full stack application with a database.
I used Spring Boot’s integration with Spring JPA to model web page data as Java entities, storing them in a MySQL database. The stored data was then loaded into an article template defined with Vaadin components. At the time, I didn't think about using standard text parsing formats like Markdown, so I created a simple custom markup language to define article content. In retrospect, it's quite cool I went out of my way to make a parser--but today, I’d just use Markdown (as I do for the blogs on this site).
I designed a REST API to allow programmatic addition of articles and other resources. Using Spring Security, I added multiple authentication filters, including form-based and token-based authentication. Upload endpoints required valid JWT tokens for access.
This was my first time working on a project with multiple layers technologies, and working with web technologies. My lack of knowledge of on web tech stacks meant I used unorthodox tools (like Vaadin instead of a JS framework) and went out of my way to develop features that could've been easily streamlined(making a parser instead of markdown). I am proud that I managed to deploy the web app and make it publicly available. The issue with using a full stack web app for your own website though, is that there's always rooms for extra services to make it more efficient. Despite separating out layers - I still stored files and images within my Github Repo - obviously not ideal/realistic for a production app. And while I can update the site using my API - I actually ended up manually deploy the app each time I wanted to update it. There's security issues in the code too - hardcoded my JWT, as well as other sensitive urls, keys and passwords in the code. But I'd say for my first go - I am pleased at what I achieved. Academically - I wasn't taught about any of this, and I sought out the resources myself. I was understanding now that the best way to learn with engineering is to just start building.