Behind the project
How Movement Lab works
Movement Lab is deliberately simple: a collection of accessible web pages that run directly in a browser, require no account and keep practice data on the visitor's own device. It is also openly developed with help from ChatGPT. This page explains both the technology and the human approval process so other people can learn from it and build something similar.
The basic architecture
The site is a static website made from HTML, CSS and JavaScript. There is no application server, user database or login system required for the exercises.
- HTML provides the page structure, instructions, controls and accessibility labels.
- CSS provides the shared visual design, responsive layout and large touch-friendly controls.
- JavaScript runs each exercise, responds to keyboard, pointer or touch input and records optional progress.
- Cloudflare Pages publishes the
developmentbranch as the review site. - A VPS managed through Plesk hosts the live site from the approved
mainbranch. - GitHub stores the source code, branches and change history.
- ChatGPT helps inspect the code, suggest ideas, write changes and manage the development workflow.
Why a static website?
A static approach keeps the project inexpensive, quick to load and comparatively easy to understand. Most exercises can work without sending information to a remote service. It also means each activity can be opened on a phone, tablet or computer using an ordinary web browser.
How an exercise works
Each exercise is normally a self-contained HTML page. The page describes the task, displays its controls and contains the JavaScript needed to run it. Shared files provide the navigation, visual style and private progress functions.
- The visitor chooses an exercise.
- The page listens for an appropriate input, such as a key press, tap, click, drag or pointer movement.
- The exercise updates the screen immediately with clear feedback.
- When a session is completed, a small summary can be passed to the shared progress system.
- The visitor can stop at any time; the exercises do not require a fixed session length.
Touch and pointer input
Browser pointer events allow one exercise to support a touchscreen, mouse, trackpad, stylus or compatible assistive pointing device. Controls are made deliberately large, spacing is generous and speed is not treated as the main measure of success.
For example, Target Tap places a large target within a chosen movement area. A successful pointer interaction moves the target, while an inaccurate tap can be counted without ending the session or presenting it as failure.
Private progress storage
Practice history is stored using the browser's localStorage feature under a project-specific key. The saved record can include values such as the exercise name, date, accuracy, attempts, duration or a short summary.
This information stays in that browser on that device. Movement Lab does not require it to be uploaded to a central user database. Clearing browser data, using private browsing or changing device can remove or separate that history.
Privacy by design
- No account is needed to practise.
- No name, email address or medical record is needed.
- Progress is kept locally unless the visitor deliberately chooses to share something.
- Public scoreboards are avoided.
- The source code contains no passwords, private keys or deployment credentials.
- Technical documentation explains the method without publishing account details, access tokens or other sensitive configuration.
Accessibility approach
Accessibility is treated as part of the exercise design rather than a later addition. The project aims to use semantic headings, labelled controls, visible keyboard focus, plain instructions, responsive layouts and feedback that does not rely on colour alone.
Exercises should also avoid assuming which hand a person uses or why they are practising. Where possible, difficulty, target size, movement range or input layout can be adjusted without turning the activity into a competitive test.
Development and release workflow
Changes are made on a separate development branch first. Cloudflare Pages publishes that branch to a review site so the change can be tested on real devices. Once it has been reviewed and approved, the tested change is promoted to the main branch. The live site is then deployed from main to the VPS through Plesk.
- Choose one coherent improvement.
- Review the existing code before editing it.
- Implement and commit the change on
development. - Test the Cloudflare Pages development preview, especially on the intended input device.
- Collect human feedback and make corrections if needed.
- Promote the approved change to
main. - Deploy the live site from
mainon the VPS through Plesk.
How ChatGPT is involved
ChatGPT is not merely used to answer occasional coding questions. It acts as an AI development assistant throughout the project. In a typical change, it can inspect the existing GitHub files, understand the current structure, propose a focused improvement, write or revise the HTML, CSS and JavaScript, commit the work to the development branch and report exactly what should be tested.
The development preview is then reviewed by the project owner, who has lived experience of stroke recovery and can judge whether the exercise is understandable, comfortable and genuinely useful. ChatGPT may make further revisions in response to that feedback, but it does not decide for itself that a feature is ready for the public site.
Only after explicit human approval is the tested change promoted to main. This creates a clear division of responsibility:
- ChatGPT assists with analysis, implementation, consistency checks, documentation and version-control operations.
- The human project owner defines the real need, provides lived-experience feedback, checks safety and tone, tests the result and authorises publication.
The model is best described as AI-assisted engineering with human-governed release. AI reduces the physical and technical effort required to develop the project, while the person remains accountable for its purpose and what reaches users.
A repeatable AI-assisted workflow
- Describe the problem in practical terms, including who the feature should help.
- Ask the AI to inspect the existing project rather than generating an unrelated replacement.
- Keep each change small enough to understand and test.
- Require the AI to work on a development branch.
- Review the preview on the devices and input methods the intended audience will use.
- Give concrete feedback about wording, movement, fatigue, accuracy and accessibility.
- Publish only after a person explicitly approves the tested version.
- Keep GitHub history so changes can be reviewed or reversed.
This process is especially useful where fatigue, dexterity or technical barriers might otherwise make sustained development difficult. It allows a person to direct a real software project through conversation without surrendering ownership or final judgement.
What the AI is not trusted with
AI-generated code can contain mistakes, misunderstand an accessibility need or produce an interaction that looks correct but feels poor in real use. For that reason, no AI output is treated as automatically safe, clinically valid or ready to publish.
- It does not provide medical diagnosis or prescribe rehabilitation.
- It does not publish changes without explicit approval.
- It should not be given passwords, private keys, access tokens or unnecessary personal data.
- Its code and wording must be tested by people, not accepted simply because they appear plausible.
Adding another exercise
A simple new activity can be added by creating another page in the exercises folder, linking it from the exercise index and optionally recording a session through the shared progress script.
- Start with the movement or cognitive skill being practised.
- Keep the instructions short and literal.
- Provide an untimed or low-pressure mode.
- Use controls large enough for reduced dexterity.
- Test keyboard, touch and screen-reader behaviour where relevant.
- Store only the minimum information needed.
- Explain that the exercise is not medical advice.
Limitations
A browser exercise cannot assess a person's condition, prescribe therapy or know whether a movement is clinically appropriate. Local browser storage is convenient but is not a medical record or a synchronised account. Different browsers and assistive technologies can also behave differently, so practical testing remains essential.
A reusable starting point
The most important lesson is not a particular framework, hosting provider or AI model. It is that a useful rehabilitation project can begin with ordinary web standards, small experiments, AI-assisted implementation and direct human feedback from the people who will use it.