Deciding on, docuemnted and implemented an error checking strategy. tl;dr version below.

problem:
    I have no consistent approach to error handling, which is making my code
    messy as shit and difficult to debug.

    I have a feeling that this is also contributing to how buggy it is,
    because if i'm not doing enough error checking, then it's probably mentally
    easier for me to introduce errors.

solution:
    1. define my error checking style for each of backend, frontend and website
    2. write all new code to that standard.
    3. decide how much, if any needs to be backported.

    error checking style/approach:

    * when a method fails, it will:
        * return False, if appropropriate
        * set self.is_valid = False, if appropriate
        * set self.error = "relevant error message"

    * after any method is called, we will always check its return value.

        if front-end calling an internal method:
            call self.error_exit(self.error)

        if front-end calling an external method:
            call self.error_exit(external.error)

        if backend call an internal method:
            do the default,
                * return False, if appropropriate
                * set self.is_valid = False, if appropriate
                * set self.error = "relevant error message (caught exception if possible)"

    define what my error checking style will be for each layer
    of my app, write all new code to that sta