The unofficial app of the BASIS lecture directory of the University of Bonn.
Hey! We, a team of students from the University of Bonn, know the struggle with the unwieldy and old-fashioned BASIS website. That's why we created the BASIS app - a simple, stylish and user-friendly solution to quickly navigate through the course catalog.
- All the information you need, compact and no frills.
- Choose your semester and keep an eye on all courses and events. No mess, no stress.
- We built it ourselves because we know exactly what's annoying. Expect intuitive operation, clearly structured information and a design that doesn't come from the Stone Age.
Our app is built with Flutter, a cross-platform framework for building mobile apps. This repository contains the source code of the app's backend, which is written in Dart. Until now, only the backend is open source, but we are planning to open source the frontend as well.
A typical Flutter project roughly looks like this:
app_name/ (root project folder)
├── ios/ (iOS app configuration)
├── android/ (Android app configuration)
├── assets/ (Static files like images)
├── lib/ (Dart code)
└── pubspec.yaml (Dependency and framework configuration file)
Now let's take a closer look at our lib/
folder:
lib/
└── main.dart (Entry point of the app)
└── core/ (Core logic of the app)
├── data/ (Data and storage models)
│ ├── errors.dart (Error models)
│ └── storage.dart (Storage models)
├── backend.dart (Backend API)
├── basis_backend.dart (BASIS HTML parser logic)
└── basis.dart (BASIS server communication logic)
-
backend.dart
:Because the BASIS website has no open API, we have to parse the HTML response from the BASIS server. In order to extract the data from the HTML response, the App needs to know the HTML selectors of the elements in the pages of the BASIS website of our interest. That's why we decided to host a API server that serves the latest HTML selector data (in JSON format).
The
Backend
class is responsible of the communication between the App client and our API server.
Oh! This README seems to be incomplete! We are still working on this, thanks for your patience :)