Legal
The terms, in language you should not need a lawyer to read.
Six sections on one page: what this website is and what a licence covers, what we collect about you, the cookies involved, how personal data inside an IRIS install is handled, where it runs, and how to reach a person about any of it.
Two answers up front, because they are what most people open this page for. This website sets no cookies at all — no analytics, no tracking, nothing to consent to. An IRIS install sets one, and it is the one that keeps you logged in.
In effect from · describes IRIS 36.6.0. The technical statements here were read from the source code rather than recalled, and are re-checked at each release.
Contents
Six sections.
Section one
Terms of service.
Two different things are covered here, and it is worth keeping them apart: this website, which anyone may read, and an IRIS subscription, which exists because an institution and we signed something. The first has almost no terms to speak of. The second has real ones — and the ones about money and duration live in that signed agreement rather than on this page.
Who you are dealing with
IRIS is published by Dr. William H. STEWART, business registration 484-07-03771. It is a single-practitioner product, which is stated plainly on the landing page for the same reason it is stated here: an institution should know who answers when it writes. The same person writes the software, runs the servers and answers a question about this page — there is no support tier to escalate through and no legal department to be referred to.
The website is informational. Screenshots, figures and feature descriptions on this site describe a particular release and are kept current on a best-effort basis; they are not a specification and nothing on them forms part of an agreement on their own. What is agreed with an institution is agreed in writing with that institution.
What a subscription covers
IRIS is supplied as a subscription: we run the installation and keep it current, and the institution has a non-exclusive right to use it for its own international-office operations for as long as the subscription runs. It is not licensed per seat — the institution decides who inside it holds an account.
Fees, term, renewal and notice are in your agreement, not here. This page describes how the system works and what each side does; it does not set or vary a commercial term. Where the two ever appear to disagree, the signed agreement governs.
The software is ours; the data is yours. The code, its design and its documentation remain the publisher’s. Everything you put into an install — records, uploaded documents, configuration — is the institution’s, and stays the institution’s whatever happens to the relationship between us. See data processing for what that means in practice.
What each side is responsible for
| Subject | The institution | Us |
|---|---|---|
| The data in the install | Deciding what goes in, that there is a lawful basis for it, and that it is accurate. IRIS records what it is given. | Keeping it intact, keeping it exportable, and not using it for anything of our own. |
| Accounts | Who holds one, at what role, and closing them when people leave. Roles are enforced on the server, so the setting is the control. | Providing the three roles, the permission gate, and a trail that records refusals as well as actions. |
| Keeping it running and patched | Nothing. This is what the subscription buys. | The server, the operating system, the database and the application — kept current, with releases applied and published notes saying what changed. |
| Backups | Taking your own off-site copy, if you want one — and you should. IRIS produces a complete backup in a single action, but it cannot press the button for you. | Operating the install, and the tooling that makes that one-press copy possible. What is included by way of scheduled backup and restore is set out in your agreement. |
| Getting out | Nothing. Export needs no request, no notice period and no assistance from us. | Ensuring every dataset and every document remains exportable for as long as the install runs. |
Acceptable use
IRIS is a system of record for an international office. It is not a marketing platform and will not be turned into one: there is no bulk-mail facility, no contact-list rental, and no feature that writes to a partner without somebody deciding to. That is a design position rather than a missing feature, and it is why the list of messages an install can send is short enough to print.
What we ask in return is unremarkable. Do not put data in an install that your institution has no basis to hold. Do not share one account between several people — the trail is only worth what the names in it are worth. And do not use this website, or a public request form, to try to reach an install you have not been given access to.
Ending it
Cancellation, notice and what happens at the end of a term are governed by the agreement between us, and this page does not restate them. What it does state is the part that is a property of the software rather than a negotiation: leaving is never blocked by us.
A departing institution takes a full export — the database, every dataset as a spreadsheet, and both file stores — and can take it at any time, before or after any discussion about ending the subscription. It needs no request and no cooperation from us. Once you confirm you have what you need, the copy we hold is deleted.
Warranty, liability and governing law. IRIS is supplied without a warranty that it will be uninterrupted or error-free; what is warranted is that it does what the documentation says it does, and that faults are fixed. Liability is limited to the fees paid for the period in which the problem arose, and neither side is liable for indirect or consequential loss. These terms are governed by the law of the Republic of Korea.
Section two
Privacy.
This section is about this website. Personal data held inside an IRIS installation belongs to the institution running it, and is covered separately under data processing — different data, different responsibilities, different people to ask.
There are none
You cannot register, sign in or create a profile here. There is nothing to hold about you because there is no mechanism that would hold it.
There are none
No analytics package, no tag manager, no advertising pixel, no session recorder, no A/B tooling. Not configured off — not present in the page at all.
There are none
Nothing on this site posts anywhere. The only way to reach us is the email address in the footer, which opens your own mail client.
When you write to us
An email is the one thing that gives us your personal data, and it gives us whatever you chose to put in it — typically a name, an address to reply to, and an institution. We use it to answer you and to carry on the conversation that follows, and for nothing else: it is not added to a mailing list, and there is no mailing list to add it to.
Correspondence is kept while it is live and for as long afterwards as an enquiry might reasonably be picked back up — the working assumption is two years from the last message. Ask and it goes sooner.
Who else sees anything
Loading a page means your browser fetching files, and three parties are asked for some of them. They receive what any web request discloses — an IP address, a browser string, the file wanted — and nothing we send them, because we send them nothing.
| jsDelivr | Front-end libraries, version-pinned and integrity-hashed |
| cdnjs (Cloudflare) | The same, for the libraries it serves |
| Google Fonts | Nunito, the typeface this site is set in |
All three are avoidable and none is load-bearing. The libraries are open-source files that can be served from the same host as the page, and Nunito is open-licensed and can be self-hosted. An institution whose policy is that the browser should call nowhere else can have exactly that.
Your rights over what we hold. Since what we hold is correspondence you sent us, the rights that matter in practice are simple ones: ask what we have, ask for a copy, ask for it corrected, or ask for it deleted. Write to the address under changes and contact and it will be answered by a person, not a workflow. If you are unhappy with the answer you can complain to your national data-protection authority.
Section three
Cookies.
This website sets none. There is no banner because there is nothing to ask you about — consent is for cookies that are not strictly necessary, and a site with no cookies at all has none of either kind.
What an IRIS install sets
An installation is a different matter: it has to know you are logged in. The complete list is below, and complete is meant literally — it was read from the source rather than remembered.
| Name | What it is for | Lasts |
|---|---|---|
PHPSESSID |
The session — it is what keeps you logged in from one page to the next. It holds an identifier and nothing else: everything about the session is on the server, in a directory outside the web root. Strictly necessary; the application cannot work without it. | Until you close the browser |
sb|sidebar-toggle |
Not a cookie but local storage, one of three keys in it: whether you last left the sidebar open or collapsed. It never leaves your browser — nothing sends it anywhere — and clearing it costs you the sidebar state and nothing else. | Until you clear site data |
iris|pane-widths |
A second local-storage key: how wide you dragged the columns on the agreements, visits, contacts, mobility, degree programmes, factsheets, campus tour and files pages, and on the engagement page. A handful of numbers describing your own layout — no record, name or figure from the database is in it. Like the one above it never leaves your browser, and clearing it returns those pages to their default proportions. | Until you clear site data |
iris|pane-collapsed |
The third: which panes you folded away on a phone, on those same pages. It is a list of panel names — “Regions”, “Details” — and the page each was on, nothing from any record. It never leaves your browser, and clearing it simply reopens those panels. | Until you clear site data |
| reCAPTCHA (conditional) | Google’s anti-abuse widget sets its own cookies, and only on the public visit-request page, and only where the institution has configured keys for it — and even there, not until somebody starts on the form: clicks or tabs into one of its fields. Scrolling through the page, jumping between its sections with the bar above it, or paging its availability calendar with a mouse or a finger, does not load it. Without those keys the row does not apply and the server never calls Google at all. Separately, and on every page, the browser fetches the interface typeface from Google Fonts — that sets no cookie, and it can be self-hosted instead. | Set by Google |
| Google Maps (conditional) | The public visitor map frames a Google map, and Google may set its own cookies inside that frame — only on that page and in an info pack that carries it, and only where the institution has given a meeting point a map position. Without one the page frames nothing and the row does not apply. Where the point also has the office’s own campus map, the two sit on tabs and the Google frame is not fetched until the visitor opens its tab, so a reader who stays on the campus map never loads Google’s map (the page’s typeface still comes from Google Fonts, as on every page). An info pack frames the same map on its Visitor Map tab, on the same terms, and fetches it only once that tab is on the reader’s screen — though it is the pack’s first tab, so a pack opens on it unless its link names another. The install sends Google nothing either way: the position is a pair of numbers in the page, and it is the visitor’s browser that asks Google for the map. | Set by Google |
| The video’s host (conditional) | Where the office has switched on its factsheet’s link to its promotional video, an info pack can play that video on a Video tab of its own, in a frame from wherever the office keeps it — YouTube, for example — and the host may set its own cookies inside that frame. The frame is not fetched until the Video tab is on the reader’s screen, and it is let go again when they leave the tab, so a reader who never opens it never contacts the host from that page — though where a pack shows nothing but the video and the presentation, the Video tab is its first, and a pack opens on its first tab unless its link names another. Once fetched, the host sees the browser’s request and is told the install’s address, but not which pack’s link was opened; the install sends it nothing. The factsheet page itself frames nothing and links the video instead, and a link reaches the host only when it is followed. Inside the application, the Promotion page frames the same video for signed-in staff, as soon as the page opens. | Set by the video’s host |
The session cookie is locked down as far as the platform allows. It
is marked HttpOnly, so no script can read it — which is
what stops a cross-site scripting flaw from becoming a stolen session;
SameSite=Lax, so another site cannot cause your browser to
send it; and Secure wherever the install is served over HTTPS,
so it never crosses an unencrypted connection. It also holds nothing but an
identifier: everything the session knows about you sits on the server, in a
directory outside the web root, and goes when you close the browser.
Why there is no cookie banner on most of the application. A banner asks permission for cookies you could refuse and still use the page. Signed in, there are none to ask about — one strictly-necessary session cookie, three preference keys that never leave your machine — save where the Promotion page plays a configured video in its host’s frame. The public pages have three more: the request form, where captcha keys are set; the visitor map and an info pack carrying it, where a meeting point has a map position; and an info pack’s Video tab. Each brings in a third party that may set its own cookies; an institution whose policy requires consent for those should say so before any is switched on.
Section four
Data processing.
An IRIS install holds personal data about real people — students, staff and the counterparts an office deals with. The institution is the controller of all of it, and we are its processor. We host the install, so we hold the data; we act on the institution’s instructions and on nothing else.
What being your processor means
We do not read the records, we do not analyse them, we do not train anything on them, and we do not use them to improve the product or to build anything else. There is no aggregate dataset drawn from customer installs, because there is no mechanism that would draw one. The only routine access is what operating a server requires.
Access beyond that happens when the institution asks for it — a fault to look at, a question about a record — and it is bounded by being an act rather than a standing arrangement: invited, and visible in the install’s own audit trail, which records who did what and when regardless of who they are.
One institution, one install
IRIS is not multi-tenant software. Each institution gets its own installation on its own subdomain, reading its own database, with its own configuration and its own uploaded documents. There is no shared table anywhere and no row carrying an institution’s identity to be filtered on.
So cross-tenant exposure is not a risk that is guarded against here — it is one the design does not admit. There is no query that could return another institution’s records, because there is no table holding two institutions’ records. Sub-processors are named under hosting and security.
Whose data is in there
| People | What is held about them | Why it is there |
|---|---|---|
| Students on exchange, inbound and outbound | Five things make a placement a record: an ID number, the partner institution, the programme, the dates and the semester slot count. Everything beyond that — name, gender, citizenship, level of study, a note — is there so the reports can say more about the data, not because the record needs it. The name is among the optional ones and may simply be left out. Beside it are two further optional fields for the same name in other writing — as the student writes it in their own language and script, and as the office’s own language writes it. They are shown with the name wherever the name is read on screen — in the lists of students the Browse views draw, in their search results and in a placement’s details — the searches that find a student by name find them by these too, and they are held back wherever the name is (see the note beneath this table). A Table view is treated as an export rather than as a screen, because its own buttons copy it out whole: the mobility report’s and the Degree Programs page’s Table views list each student by ID number and show none of the three names to anyone, an administrator included. Where the office tracks joint or double-degree students, a placement may also name the student’s degree programme and hold, against each requirement the office has set for that programme, a status, a due date, a completion date and a short note, with a record of when it was last saved and by which account, or that it was imported. Clearing the degree programme from a placement hides that checklist and does not delete what was recorded on it; deleting the placement does. | They are the mobility record. How much of a person ends up in it is the office’s choice about what it wants to be able to report on — not something the software requires. |
| Counterparts at partner institutions | Name, title, role, department, institution, an email address (and, optionally, a second one), telephone, and the visits and groups they are linked to — plus, optionally, gender and a free-text note in which staff record whatever is useful about dealing with the person. The institution’s own people are kept as contacts too — the same fields, and the visits they are assigned to — whether or not they hold an account or have a published biography. The office can name some of them — its leadership, say — under a label of its own, which marks out their upcoming visits for signed-in staff on the calendars and the visit lists; someone named who is later recorded at another institution stays named until the office unticks them. The setting holds only which people and the label, and no public page or message carries it, nor any calendar file (.ics) but the highlighted visits’ calendar links described below, under “What leaves the server”, which an administrator may make, each for one person: the calendar app such a link is added to reads every visit those people are linked to, past and to come, in a calendar named for the label and naming none of them — though whoever holds the link learns which visits they are linked to. A signed-in reader who copies or downloads the calendar’s Table view also takes the label, and the names of the people under it, with them, as they take everything else that view shows. A partnership card — in progress, completed or set aside — also names the partner’s contact point for that agreement: a name and an email address. A visit may also record the gifts the office gave at it, and to whom, so that a later visit does not repeat one — the office’s own record, shown with the visit to signed-in staff and on its printed sheet, and written into the visits export, but never carried by the itinerary the office emails or by the visit reminders. | It is a relationship record: who the office deals with, and about what. |
| Office staff holding accounts | Name, email, role and permission level, and a password stored only as a hash. Their actions appear in the audit trail with their name. | Accountability. “Who changed this, and when” is answerable months later, which is the point of the trail. |
| Visit requesters from outside | What they typed on the public form — name, institution, email, telephone, the visit they are asking for — and the IP the submission came from. Staff can also enter a request themselves — one that arrived by phone or email, or a visit the office means to make to a partner, marked as outbound — and such a record holds what they typed about the visit and the person it concerns, and no IP address. As the office reviews a request, the record also gathers its own working notes: the status, who is handling it, the reason picked when the office declines it, and any comment they write. None of those notes is sent to the requester as such. A reviewer who declines a request may reply with a letter drafted from the office’s own templates and filled in from the request — either copying it into their own email, or sending it from IRIS with the decline, in which case it goes, as they wrote it, only to the address on the request, with a copy to the office; IRIS adds no word of the decline to a reply sent that way — its subject and heading name the request, and the rest is the reviewer’s own letter — and gives, where the reviewer’s account holds a valid email address, that address and their name for the requester to answer to. The record keeps the reason they picked and, when IRIS sent the reply, when it went, to which address and from whom — never the reply itself. | Answering the request, and having a record of where it came from if the form is abused. |
| The contact named on the visitor map, where the office uses it | The office’s contact name and email, and whichever of a direct line, a mobile number, a messenger id and a portrait the office chose to add for arriving delegations. Every one of those four is optional. | So a delegation knows who to call from the gate. The page needs no account — it asks search engines not to index it, which is a courtesy they extend and not a lock — so what appears on it is published, and publishing it is the institution’s decision. |
| Colleagues with a published biography, where the office uses it | For each colleague the office writes a biography for: their name and email address as their contact record holds them, and the title, portrait and biography text the office adds. Each is published only while the office has switched it on. | So a delegation knows who it will meet before it arrives. Like the visitor map the page needs no account and asks search engines not to index it, and opened at its plain address it lists every biography switched on — so what appears on it is published, a person at a time, by the institution’s decision. Switching one off stops it being shown from the next request. |
| People on the office contacts page, where the office uses it | For each desk the office fills in on its Office Contacts tab — usually its own staff — the name and title typed there, and whichever telephone and fax numbers, email and web addresses and portrait the office adds. They are typed, not drawn from an account or a contact record: the tab can copy a colleague’s contact details into empty fields, once, as a typing aid, and keeps no link to where they came from. Each section and desk is published only while the office has it switched on. | So a partner knows whom to write to, and about what. Like the biography page it needs no account and asks search engines not to index it, and opened at its plain address it shows every section switched on, offering each desk that names a person as a contact card to save — so what appears on it is published, a desk at a time, by the institution’s decision. Switching a desk or its section off, or clearing it, stops it being shown from the next request. |
An institution can run IRIS without holding a single student name. The fields a placement actually needs are the five in the row above — an identifier, the partner institution, the programme, the dates and the slot count; the name field beside them, and the two fields for the same name in other scripts, can stay empty and every figure IRIS reports still works. Where names are kept, they are visible in the application to anyone who can open the record or the list of students it sits in — though not in a Table view, which shows an ID number in their place to every role — and they are omitted from an export taken by an editor. Only an administrator’s export carries the three name columns at all, and a mobility file without them imports perfectly well. Data minimisation here is a setting an office can actually reach, not an intention.
What leaves the server
A short, closed list, and this is all of it. Eight kinds of message go out: a visit itinerary a member of staff composes and sends, which may carry a link to the public visitor map’s page for each building the sender chooses, one link to a public page of biographies of the colleagues the sender ticks, one link to the public office contacts page naming the sections and people the sender ticks, and one more link the sender builds on the Info Pack tab of the dialog they send it from, as the Info Pack dialog builds one — to the visitor map, the biography page, the office contacts page, the links and files page or the factsheet, naming what the sender ticks there, to the factsheet’s video or presentation, or to an info pack gathering several of them — rebuilt by IRIS from what was ticked, never taken from the sender’s browser; a notice and a receipt raised when somebody submits the public request form; a weekly digest to the install’s own administrators and to any colleague an administrator has added to that one list — record-quality figures, the headline figures of six of the system’s pages (totals and averages that name nobody), where students on a joint or double degree are tracked, a count of those students, each once however many years they have on file — how many are in progress, how many have a requirement past its due date and how many requirements fall due in the coming fortnight, by direction and degree programme, counts only and never a student’s name or ID number — whether the software libraries the installation uses are up to date, and with them some names: the contacts most recently added (name, title, institution and email address; never a telephone number), for each agreement it names at the approval or signature stage, the member of staff leading it and the partner’s contact point for it (name and email address; never a telephone number), for each scheduled visit it lists in the coming fortnight the names of the institution’s own people assigned to that visit (their names only, and nobody from the other institution), and for a visit request nobody has decided yet the delegation, its country, the purpose given and the date asked for, none of the requester’s own contact details; a copy of that same digest when an administrator presses the test button on the configuration page, which goes to that administrator’s own address and to nobody else; a reminder of a scheduled visit, sent automatically where the office has switched reminders on, on the days it sets before the visit (a week before and the day before, unless it chooses otherwise — one whose morning was missed, or had passed before the visit was entered, may go on a later morning instead, at the latest the morning of the visit itself), to each of the institution’s own people linked to that visit as a contact, at their main email address, and never to anybody at the other institution — the visit’s itinerary, which names the delegation and the partner’s point of contact, under a short note, with nothing kept of it but a record that it went, which names the contact by number and holds a one-way fingerprint of the address rather than the address — and the same reminder sent as a test, which goes only to the office’s contact point or to an administrator’s own address; a reply to a visit request the office declines, only when the reviewer declining it chooses to send it from IRIS — the letter they wrote, drafted from the office’s own templates and filled in from the request, sent as they left it to the email address on that request and to no other, with a copy to the office, and with nothing kept of it on the request but when it went, to which address and from whom; and a password-reset link when a user asks for one — carrying a link and nothing else, sent only to the address already on the account and never to one typed on the form. They travel through the mail relay configured for the install, and nothing is mailed to a partner institution on a schedule. A member of staff may also copy a link to the visitor map, the biography page, the office contacts page, the links and files page or the factsheet, naming the meeting points, the people, the sections, or the groups of links and files they choose — or single links and files from those groups — or one link that gathers several of those pages into an info pack, the factsheet’s video and presentation among what it can carry, and send it from their own email or a messenger; IRIS sends nothing and saves nothing when they do.
Beyond mail there is one call that carries anything about a person, and it is worth naming precisely. Where an institution has configured captcha keys, submitting the public request form sends Google the captcha token and the IP address the submission came from. A stranger pressing Submit triggers it, not a member of staff; an institution that configures no keys never makes the call.
The calendar can also be read from outside, but only where an administrator makes links to the install’s calendar, on the configuration page, one for each person they are given to and each named for that person, who adds theirs to a calendar app — Google Calendar, Outlook or Apple Calendar — so that it can be followed from an account with no sign-in. The server sends nothing: the calendar app fetches the link on its own schedule — from its provider’s servers for Google Calendar, Outlook on the web or a subscription kept in iCloud, or from the subscriber’s own computer or phone for one kept on the device — and keeps what it reads there. A link carries every series of the calendar, or only those ticked when it was made — the visits of either direction, the calendar entries, the agreement expiries and the open visit requests of either direction — from a year back onward: institutions’ names, dates, and what each one is, and no contact name, email address or meeting link, though a title or description carries whatever staff typed in it. Making a link stops no other, and revoking one stops that one alone from its next read: a calendar subscribed to it stops updating, but keeps what it last read until the link is removed from it. Each link is kept with the name the administrator gives it — usually the name of the person it is for — who made it and when, and when a calendar app last read it, which app that was and how many times it has been read; only administrators see these, on the configuration page, and the name is never passed to the calendar app. A revoked link’s name and dates stay as a record of it, and can be erased if the person it was for asks. An administrator may also make links, the same way and one for each person, for the visits of the institution’s own people the office has chosen to highlight: such a link carries every visit one of them is linked to, past and to come and whatever its status, with what a calendar link carries of a visit and no more, in a calendar named for the office’s label for them, and it names none of those people — though whoever holds it learns which visits they are linked to. It is fetched, made and revoked as a calendar link is, and apart from them. A link of either kind made before links had names was made for the install as a whole: it keeps working until it is revoked, unnamed until an administrator names it, and a calendar link of that age carries every series. Where no link has been made, nothing is fetched.
Two more kinds of request leave the server, and neither carries record data. Each time the weekly digest is built — its test copy included — and whenever an administrator runs the same check by hand, the server asks the npm registry for the newest release of each front-end library it pins, and OSV.dev whether any pinned version carries a published security advisory. It reads a published public-holiday calendar only when an administrator imports one. Each of these requests names a library and a version, or a calendar feed, and carries no record data and nothing about any person. Nothing is sent to us.
Keeping it, and getting rid of it
IRIS does not delete on a timer, deliberately: a partnership record whose value is that it survives the staff who made it cannot also expire quietly. Retention is the institution’s policy to set and its administrators’ to apply — the records are theirs to remove, and we do not remove them on our own initiative. The same holds for people: a colleague who leaves has their account switched off rather than deleted, so every line the trail signed with their name still resolves to a person, and a contact who moves on is marked inactive rather than removed from the visits they attended.
Two things worth knowing before you write a retention rule. A delete keeps the record’s final state in the change history, which is the only place it survives — so “deleted” means removed from the working data, not erased from the trail. And replaced or deleted documents are preserved in an archive rather than destroyed. Both are answers to “who removed this and what did it say”; both need a deliberate step to make an erasure absolute.
If personal data is exposed. We tell the institution without undue delay once we are aware of it — what happened, which data was affected, what we are doing about it — so that it can meet its own notification deadline as the controller. Notifying the regulator and the people affected is the controller’s duty and cannot be delegated to us; what we owe is a prompt, honest and useful account, including when the answer is that we are still establishing the facts.
Section five
Hosting and security.
IRIS is PHP and MySQL on a standard Linux host, which is the whole of the stack and is meant to be: an institution’s IT department can audit it without learning anything new, and can take it in-house without renegotiating a platform.
Who else is involved
| Party | What they do | When they are involved |
|---|---|---|
| The managed-hosting provider | Runs the machine an install sits on. Named in the agreement, and the institution is told before it changes. | Always — it is where your install lives. |
| The mail relay | Carries the eight kinds of message IRIS sends. An institution that would rather its mail left from its own domain can have the install use its relay instead. | Whenever a message is sent. |
| Google reCAPTCHA | Checks that a public visit request is not automated. Receives the captcha token and the submitter’s IP address — the one thing about a person this server sends anywhere of its own accord. | On every public request submission, triggered by the submitter. Only where the institution has configured keys. |
| Google Maps | Draws the live map framed on the public visitor map, and on an info pack’s Visitor Map tab. The visitor’s browser asks Google for it, so Google sees that request and may set its own cookies inside the frame; this server sends Google nothing. | When somebody opens the visitor map at a meeting point the institution has given a map position, or has an info pack’s Visitor Map tab showing such a point on their screen — and, where that point also has the office’s own campus map, only once they open the Google tab. Without a position, never. |
| The video’s host — YouTube, for example | Plays the office’s promotional video in a frame, from wherever the office keeps it. The reader’s browser asks the host for it, so the host sees that request, is told the install’s address but not which page or link was opened, and may set its own cookies inside the frame; this server sends it nothing. | When somebody has an info pack’s Video tab on their screen, where the office has switched on the factsheet’s link to its video, and when a signed-in member of staff opens the Promotion page. Without a video configured, never. |
| A calendar app the link is added to — Google Calendar, Outlook or Apple Calendar | Reads a link an administrator made for one person, or, before links had names, for the install — a calendar link, with the series it was made with, from the visits, the calendar entries, the agreement expiries and the open visit requests, from a year back onward, or a highlighted-visits link, with every visit the people the office highlights are linked to, past and to come, naming none of them, in a calendar named for the office’s label for them; neither with a contact name, email address or meeting link, nor the name the link was given — and keeps what it reads in the account it was added to, under that provider’s terms where a provider keeps it. This server sends it nothing; it answers the app’s own requests. | Only where an administrator has made the link and somebody has added it to an app: on that app’s own schedule, from its provider’s servers for Google Calendar, Outlook on the web or a subscription kept in iCloud, and from the subscriber’s own computer or phone otherwise. Revoking that link stops it updating from its next read, and making another link stops nothing; it keeps what it last read until the link is removed from it. Without a link, never. |
| The npm registry and OSV.dev | Answer the library checks: the newest release of each front-end library the install pins, and whether a pinned version carries a published security advisory. Each request names a library and a version, and nothing about any person or any record. | Each time the weekly digest is built, its test copy included, and when an administrator runs the check by hand. A server that blocks them still sends the digest, which then says the libraries were not checked. |
| Public CDNs and Google Fonts | Serve front-end libraries and the typeface to the browser. Version-pinned and integrity-hashed; all can be self-hosted instead. | Whenever a page loads, unless self-hosted. |
Where the sensitive things live
Credentials, session files, uploaded documents and the audit trail all sit outside the web root. Nothing in that list is reachable by URL, and none of it travels inside a database dump — which matters most at the moment a dump is handed to somebody, because that is when a secret stored in the wrong place leaves the building.
An install answers on its own subdomain against its own database. There is no shared table anywhere and no row carrying an institution’s identity to be filtered on, so cross-tenant leakage is not something that is guarded against here — it is something the design does not admit. There is no query that could return another institution’s records, because there is no table holding two institutions’ records.
The same holds for the documents. Each install has its own file store outside its own web root, reachable only through a script that checks the session first, so a URL guessed from another install is not a weaker door — it is a door into a different building. Five exceptions are deliberate, and narrow. The pictures on the public visitor map — a meeting point’s photograph, its campus map and the contact’s portrait — are served without a session by a script that takes the name of one of those three slots and never a file path; the portraits on the public biography page by another, which takes a person and never a path, and answers only while that person’s biography is published; and the portraits on the public office contacts page by a third, which takes a desk and never a path, and answers only while that desk is published. Each hands out the images an administrator configured for its page and nothing else in the store. The other two hand out documents. One is the presentation the office keeps for visitors, a PDF, which the factsheet can link, returned to anyone holding its address while the factsheet is published and that link is switched on — from an address that takes nothing at all, so it can be made to return no other file — and answering not found once either is switched off. The other serves the public links and files page: it takes a link on that page and never a path, and returns only the file an administrator picked for that link, one by one from the store, to anyone holding its address — a PDF to read in the browser, anything else to download — while the page is published and the link and its heading are switched on, answering not found once any of them is switched off or the file is moved or deleted.
One more address answers without a session, and it hands out no file at all: the calendar links an administrator may make for a calendar app to read. It answers only the links that are live for the install, each made for one person — calendar links, and links for the visits of the people the office highlights — and not found for anything else; a link made before links had names was made for the install as a whole, and is unnamed until an administrator names it. Each is a long random code in the address, which the database keeps as a fingerprint and, where the install’s credentials file holds a key for these links, also sealed under that key, so that an administrator can show the link again, every showing recorded; without the key a link is shown once, when it is made, and a link made before links had names, kept only as a fingerprint, is never shown again. The key is never in the database, so a copy of the database cannot on its own be turned back into a link, and a revoked link’s sealed copy is forgotten. Like any web address, a link is written in the web server’s own request log each time it is read; one that leaks is revoked, and stops answering from its next read, without stopping any other.
The measures themselves
Passwords are stored as bcrypt hashes and never appear in any of the three change trails. Sessions regenerate their identifier on sign-in and expire when idle. Every write carries a request token; every value that reaches a query is bound as a parameter rather than pasted into SQL; multi-table writes run inside a transaction. Scripts run under a per-request nonce, and every third-party library is pinned to a version and an integrity hash, so a tampered file fails to execute rather than executing as itself. Two are exempt because they are loaders rather than fixed files — the icon kit and the web-font stylesheet — and both can be self-hosted instead. Uploaded SVGs are sanitised and sandboxed.
Backups are yours to take. The server IRIS runs on is backed up by the hosting provider every other day, with copies kept for roughly one to two weeks — but that is disaster recovery for the machine, not a service to you: it is not a retention period you chose, restoring it restores the whole server rather than your institution’s data alone, and we do not offer it as a commitment. IRIS produces a complete backup in a single action — database, every dataset, both file stores — and an institution should be taking one on a schedule it has decided and testing that it restores.
Where the data physically sits, and moving it. An install runs in the region agreed with the institution and is not replicated elsewhere. If your policy requires the data to stay inside a particular jurisdiction, say so before the install is built — it is a decision about where to put a server, which is easy at the start and disruptive later. And because the stack is entirely ordinary — PHP and MySQL on standard Linux — an install is a database and a directory: portable by construction, whatever is later decided about where it should live. A full export is available at any time, without asking us.
Section six
Changes, and how to reach a person.
A page like this is only worth anything if it is current, and only trustworthy if you can tell when it stopped being.
When this changes
The effective date at the top of the page moves whenever anything here does, and the release it describes is named beside it. Corrections and clarifications take effect when they are published. Anything that materially changes what an institution has agreed to is not done by editing this page — it is raised with that institution directly, in writing, before it applies.
The technical statements are re-checked at each release. The cookie list, the people whose data an install holds, and what leaves the server are all read from the source rather than remembered, because a privacy statement that has quietly drifted from the software is not a stale document — it is a written assurance that is false.
Asking about any of this
Everything here — a question about the terms, a data-protection request, a sub-processor list for a procurement file, a security questionnaire — goes to the same address, and is answered by the person who wrote the software.
One thing we cannot answer. What any particular institution keeps in its own installation, how long it keeps it, and whether a given person is in it, are that institution’s decisions and not ours — we run the software, we do not choose what goes into it. Questions of that kind belong with the office that holds the records, and we will say so rather than answer for them.