Mobile time recording
A single HTML file that books time: page through the days with the times already booked, pick a project, start and stop the clock.
My projectfacts installation has the server address <server address> (the address at which I open projectfacts in the browser). Build a web application for mobile time recording as a single HTML file without external dependencies, connecting to projectfacts through the REST API. The basis is the OpenAPI description of the server at <server address>/api/openapi.json (from version 26.2) and the description of the interface in the help centre at help.teamspace.com (topic API): read both first and stick to the addresses, fields and the device password login described there. Always use the server address the user enters, not the “servers” entry in the OpenAPI description. Users log in with the server address, device ID and token; the device password is created in the German interface of projectfacts under “Persönliche Einstellungen → Geräte → Neues Gerätepasswort” (personal settings, devices, new device password).
After logging in, the user sees today: at the top the times they have already booked on this day (project, start and end where available, duration and description) with the day’s total, below that their projects. With “previous” and “next” they page through the calendar days one at a time and see the entries of each day; a jump back to today is always possible. For today they select a project, start time recording and stop it again. The time entry is created in projectfacts and appears straight away in the day’s list; the mandatory fields of the entry are visible and selectable, and nothing is preset without the user noticing. Keep the interface usable on a mobile phone and manage with as few steps as possible.
Requirements: only allow https addresses; never put credentials in the code, and only store them permanently if the user chooses “Stay logged in”; always output data from the server as text, never as HTML. Interface texts in English. Ask before you assume anything that is not in the documentation.