GRIDTIPP is a web application developed as part of my studies at FH Salzburg. It transfers the well-established concept of a sports prediction game into the context of the Formula 1 World Championship. Registered users predict the final positions of the top eight drivers before each race and accumulate points throughout the season. The objective was to build a fully functional platform without relying on any frameworks, thereby demonstrating a solid understanding of the underlying web technologies.
Concept and Functional Scope
The scoring system follows a descending scale: eight points are awarded for correctly predicting the pole position, down to one point for an accurate prediction of eighth place. Only exact matches are rewarded, which significantly increases the strategic depth of the prediction process. The functional scope is divided into a user area and an administrative area. Users can register, submit predictions for upcoming races, compare their predictions with the actual results, and track their position in the season-wide leaderboard. A dedicated dashboard provides a concise overview of the next race as well as the current top-five ranking.
Technical Implementation
The application is deliberately built on PHP 8 with PostgreSQL as the persistence layer, complemented by hand-written CSS and vanilla JavaScript. The data model follows a lean, normalised structure based on five core relations (users, drivers, races, predictions, results), kept consistent through foreign-key constraints.
On the frontend, particular attention was paid to a clearly recognisable visual concept inspired by the official Formula 1 design language: a dark colour scheme with a signal-red accent, combined with the typographic clarity of the Montserrat typeface family.
API Integration
The central technical challenge lay in integrating the OpenF1 API, a publicly available REST interface providing official race data. A two-stage workflow was implemented in the administrative area: the administrator first links a race to the corresponding session key from the API. The final classifications can then be retrieved with a single click and, after internal validation, imported into the database. The mapping between API-side driver numbers and internal database IDs is handled through a lookup table built in PHP. A manual input form is retained as a fallback to handle exceptional cases.
Future Scaling
The system has been designed for multi-season use from the outset. New drivers, teams and race calendars can be managed entirely through the admin interface, meaning the platform can continue to be used in future seasons without any modifications to the source code.