diff --git a/html_data_format/webserver.py b/html_data_format/webserver.py
new file mode 100644
index 0000000..69051ef
--- /dev/null
+++ b/html_data_format/webserver.py
@@ -0,0 +1,50 @@
+import json
+import datetime
+import logging
+from pathlib import Path
+
+from bottle import route, run, request, response
+from personal_data.csv_import import load_csv_file
+
+logger = logging.getLogger("webserver")
+logger.setLevel(logging.INFO)
+
+def parse_time(time_str: str) -> datetime.datetime:
+ """
+ Parse a time string assuming ISO-8601 format.
+ Adjust this parser if your CSV timestamps differ.
+ """
+ return datetime.datetime.fromisoformat(time_str)
+
+@route('/newest')
+def newest_entry():
+ """
+ Loads a CSV file (default: data.csv, overridable by query param 'file'),
+ finds the newest entry based on the 'time.current' column, and returns it as JSON.
+ """
+ file_param = request.query.get("file", "data.csv")
+ csv_path = Path(file_param)
+
+ try:
+ data = load_csv_file(csv_path)
+ except Exception as e:
+ logger.error(f"Error loading CSV file at {csv_path}: {e}")
+ response.status = 500
+ return {"error": f"Failed to load CSV: {str(e)}"}
+
+ if not data:
+ response.status = 404
+ return {"error": "CSV file is empty or no data found"}
+
+ try:
+ newest = max(data, key=lambda r: parse_time(r['time.current']))
+ except Exception as e:
+ logger.error(f"Error processing CSV data: {e}")
+ response.status = 500
+ return {"error": f"Failed to process CSV data: {str(e)}"}
+
+ response.content_type = "application/json"
+ return json.dumps(newest)
+
+if __name__ == '__main__':
+ run(host='localhost', port=8080, debug=True)