A mobile application created for schools and institutions to Automate their attendance systems.
My middle school's attendance system is really outdated and inefficient. Teachers and assistants will go through the Powerschool Attendance Portal, marking us either 'present' or 'absent' depending on our status. RollMate is here to simplify and automate this problem, by sending API requests to schoology's attendance endpoint with the details of the user of the app. Teachers won't have to go through each student manually and check them off as my app will cover this.
(Some basic user data being stored in a .json file)
My app uses Kivy, a comprehensive python library built for developing cross platform apps in pure python. To get started, simply run:
(On Windows) -
pip install kivy
(On Mac) -
pip3 install kivy
Read the documentation here: https://kivy.org/doc/stable/
I have a flask powered API server running in the background, hosted on Anaconda's PythonAnywhere, a great free site for hosting python servers. All data recieved by the server side client and the app is stored in .JSON format. My server is temporary, but it is powered by many different requests. For example:
'''
# Utility function to ensure the file exists
def ensure_classdata_file():
if not os.path.exists(CLASSDATA_FILE):
with open(CLASSDATA_FILE, 'w') as file:
pass # Create an empty file if it doesn't exist
@app.route('/attendencedetails', methods=['GET'])
def get_attendence_details():
ensure_classdata_file()
selected_rows = []
# Read query parameters
attendenceQuery = request.args # Use query parameters (e.g., ?userid=1)
print(f"Query parameters received: {attendenceQuery}")
with open(CLASSDATA_FILE, 'r') as file:
attendencerows = file.readlines()
# Dictionary to track unique rows without considering check-in time
unique_records = {}
for line in attendencerows:
fields = line.strip().split("\t")
if len(fields) != 7: # Ensure the line has all required fields
continue
data = {
"userid": fields[0],
"networkName": fields[1],
"classname": fields[2],
"date": fields[3],
"firstName": fields[4],
"lastName": fields[5],
"checkinTime": fields[6],
}
# Create a key excluding check-in time
unique_key = (data["userid"], data["networkName"], data["classname"], data["date"], data["firstName"], data["lastName"])
# Store only the first occurrence of each unique key
if unique_key not in unique_records:
unique_records[unique_key] = data
# Apply filtering based on query parameters (if provided)
for record in unique_records.values():
match = all(record.get(key) == value for key, value in attendenceQuery.items())
if match:
selected_rows.append(record)
return jsonify(selected_rows)
''' RollMate is designed specifically to meet the needs of Oak Middle School and aims to modernize its attendance system. The app is highly adaptable and can be customized for other institutions as well. Before launching, I plan to discuss its implementation with the districts’s Head of Tech IT to ensure a smooth rollout.
