Find the git repo alongside the write up here Link to heading

Background Link to heading

This project was created as part of my computer science A-level. We had to create a product for a selected customer which fills a gap in the market. Originally I simply wanted to make a privacy focused BeReal clone that could be self-hosted, have a friends system and all the other features of BeReal. We could technically create this in any language but were encouraged to use Python as this is the language we had been taught and one of the few the exam board accepted. The problem was we had to have a GUI so sadly had to settle with using a Python GUI framework. Since I wanted the client to work on mobile devices I chose Kivy under the claim that it could be easily ported to android and IOS (I now understand this was pretty much false for any minorly complicated interface). Apparently my customer wasn’t specific enough so I had to pivot the product to fit the use case of a intra-organisational social platform similar to Yammer (Microsoft office). This is why the end result is very niche and basically has no use cases. None the less the project got me an A* mark and was very fun to put together.

Tech Link to heading

The languages used was Python, Kivy-lang and a small amount of C. Python was used to code both the server and client with Kivy-lang defining widgets for the interface. C was used in some time intensive algorithms like the friend recommendation algorithm which took python minutes to run on large graphs (It was a graph traversal problem) but took C just milliseconds. The project also incorporated another small project of mine written in CPP: Shamir-secret-sharing. The Shamir-secret-sharing program was used to encrypt and decrypt the server database when the server was offline. Using this managers or admins could distribute parts of the key if the master key was ever lost. The client supported decryption after the server was started up. The server used SQLite and web-sockets (SocketIO) to transmit info between client and server. The authentication system was all homegrown (as required by the exam board) and supported login tokens that the client could store and that would be valid for a certain amount of time after a proper login.

Outlook Link to heading

The project is basically useless due to its many quirks forced on me by the exam board but was a great exercise in developing my OOP, front and backend understanding as well as getting familiar with SQL and web-sockets. The final product is accompanied by a “write up” document which is what the exam board uses to mark the projects which goes into great detail about many aspects of the system as well as housing a suite of testing that occurred. The final product due to its expansion and things having to be tacked on for marks isn’t the most stable and I doubt very secure and so again should never be used in a practical sense. Overall though coding such a large and complicated project early on taught me a lot and informed me on many pitfalls and ways to shoot myself in the foot.

Mainly when not force use the correct tools for the job. Kivy is fun to have a play with and even very usable for desktop apps but its claim to cross platform support is essentially false. If you want actual cross platform support Dart/Flutter is a much better stack for the client. As for the server Python and SQLite definitely served me well but Python being way to lenient on the developer and their code structure makes it unsuitable for large projects without a lot of planning and discipline. In future Java is my go to for server side forcing proper OOP as well strongly typed programming.