
Initial Release
OnFORME is a feedback-collection web app for academic settings. The original CSP/ObjectScript UI lives at /feedback/; a modern React SPA backed by a JSON API lives at /app/. Both stacks share the onforme database and ship in a single Docker image.
Full user guide and technical reference: https://github.com/Clinovera/ClinoveraModernizeOnForme/blob/main/https://github.com/Clinovera/ClinoveraModernizeOnForme/blob/main/doc/OnFORME_Documentation.md. Covers every page of the modern UI, the data model, the REST API catalogue, authentication, and the build pipeline.
The original 2004 thesis and installation manual are in https://github.com/Clinovera/ClinoveraModernizeOnForme/blob/main/doc/; the read-only 2005 Caché XML export is at https://github.com/Clinovera/ClinoveraModernizeOnForme/blob/main/pkg/OnFORME_Source_11.28.05.xml.
src/cls — ObjectScript domain classes (surveys, sessions, people, responses, roles) and the %CSP.REST API dispatchersrc/csp — legacy CSP pages (frozen)src/mac — setup and helper routinesweb/ — modern React 19 + TypeScript frontend (Vite, Chakra UI v3, Jotai)https://github.com/Clinovera/ClinoveraModernizeOnForme/blob/main/doc/, pkg/ — original documentation and the 2005 Caché XML export (reference only)compose.yaml builds the image from source and runs IRIS directly on the host port. Use this for local work.
docker compose up --build
This stage-builds the React app, then layers it onto intersystemsdc/iris-community, runs the installer (creates the onforme namespace, registers /feedback, /api, /app CSP applications, imports sources, seeds demo data), and exposes port 52774.
Once the container reports ready:
curl http://localhost:52774/api/healthDemo accounts (seeded by the installer):
| Username | Password | Role |
|---|---|---|
admin |
admin |
SuperUser |
manager |
manager |
Manager |
instructor |
instructor |
Instructor |
student |
student |
Student |
Code changes require a rebuild — the React bundle and ObjectScript classes are baked into the image at build time. Re-run docker compose up --build.
For faster iteration on the React side without rebuilding the container:
cd web
npm install # first time
npm run dev # http://localhost:5173/app/, proxies /api/* to :52774
Production runs the same image behind an nginx reverse proxy that terminates HTTP on port 80, redirects / and /app to /app/ (so refresh and bare-host URLs both work), and forwards everything else to IRIS.
Files involved:
compose.server.yaml — references the onforme image (no build:) and adds the proxy servicenginx.conf — reverse proxy + redirects, mounted into the nginx containerThe server doesn’t need the source tree — only the built image, the compose file, and nginx.conf. Build locally, then push:
# Build docker compose buildPush image over SSH (no registry required)
docker save onforme | ssh user@server 'docker load'
Push the compose file and nginx config
scp compose.server.yaml nginx.conf user@server:~/onforme/
(add the user to the docker group with sudo usermod -aG docker $USER — equivalent to root on the host, only do it where that’s acceptable.)
ssh user@server
cd ~/onforme
sudo docker compose -f compose.server.yaml up -d
restart: unless-stopped on both services brings them back after a reboot (assuming the Docker daemon itself is enabled: sudo systemctl enable docker).
After startup:
/app/Distributed under the MIT License.
OnFORME was originally developed by Benjamin Spead in 2003–2004 as part of his MIT master’s thesis, with support from MIT’s Engineering Systems Division and InterSystems Corporation, and released as open source on SourceForge under the MIT License. The 2026 modernization (React SPA, REST API, modern IRIS Community packaging) was authored by First Line Software and is distributed under the same license.