← Documentation

What is a UFO case?

In UFO@home, a case gathers everything that is known about one event: what was seen, by whom, how it can be explained, what the witnesses said when asked. A case is what an investigation is about: a night, a place, a title. It does not describe the event itself. It lists what happened around it, as events, each of which is a document of its own. Nobody has to write them all: a case can be one observation, and grow.

The events of a case#

A case holds three kinds of event.

  • Observations. Usually at least one: the account of a witness, which UFO@home replays. A case may hold others, other witnesses of the same event, each with their own account, which can disagree.
    • Interpretations. An alternative explanation of what was seen: a kite, a planet, an aircraft, a hoax. It is itself an observation, replayed beside the witness's, so that the two can be compared.
  • Interviews. A conversation held with a witness, which fixes what they said when asked. It is not replayed.

The events of a case can be linked#

An event is rarely alone: an interpretation is an interpretation of something, an interview is held with someone. These references are what a reader follows from one to the other.

From → ToHow
An interpretation → an observationAn interpretation names the primary observation it explains: the witness's account it is another interpretation of. The interpretation cannot be understood without it.
An interview → an observationAn interview names the observation of the witness it was held with, or of each witness when there were several.
An observation → an interviewThe other way round: a passage of an interview can say which moment of the observation it tells of. The observation then lists, at that moment, the passages that tell of it, each a link back to the interview.

An event is referred to by an id that is its own within the case and nowhere else. Only an event that is referred to needs one.

In the case editor#

The case editor: the picker of the case's events, and the + that adds one.
The case editor: the picker of the case's events, and the + that adds one.
The File group of the case editor: the case file as text, completed from its own schema.
The File group of the case editor: the case file as text, completed from its own schema.

The editor opens a case as a picker of its events (“Observation of Q. B.”, “Interview of Q. B.”), the chosen one open below. The + adds an event of the kind you choose, and the File group shows the case as text.

  • Opening a case. Load a case.json from a file or an address, or start from one recording and choose “Add to a case”.
  • The picker lists the events (“Observation of Q. B.”, an interpretation, “Interview of Q. B.”). The one you choose opens below, in its own editor: the observation editor for an observation or an interpretation, the interview editor for an interview. What you changed in the others is kept.
  • The identifier beside the picker is the event's id, which the other events refer to it by. Give one to an event you want to refer to; the editor proposes one, and gives it to an observation an interview is held with.
  • + adds an event: an observation (blank, from a file or from an address), an interpretation of an observation, or an interview (whom it was held with, a title, who held it, through what medium). The bin removes the event on show.
  • The two groups of the case: Events, the picker and the event on show, and File, the case.json as text, completed from its own schema, to edit, load and save. The two say the same: what is changed in one is changed in the other.
  • Saving downloads the case with its files (a zip when there are several). Until then the case is changed in the page only, and the editor warns before what would be lost.

Technical part: the case file#

A case is a case.json, case.schema.json being its schema: a title, a date, and its events. Each event has an eventType (sighting, interpretation or interview), and a url when it has a file of its own, relative to the case. The references are interpretationOf and interviewOf, each an id or a list of them.

Every excerpt below is read-only, and each knows the format: put the caret inside an object and press Ctrl+Space (⌥+I on a Mac) to list every key that could go there, with what the model says of each.

An example#

{
  "id": "SaintLo2026",
  "title": "Saint-Lô",
  "time": "2026-08-11 02:30",
  "events": [
    { "type": "event", "eventType": "sighting", "id": "qb", "time": "2026-08-11 02:30", "title": "Q. B.", "url": "observer-saint-lo.json" },
    { "type": "event", "eventType": "sighting", "id": "kite", "interpretationOf": "qb", "title": "A kite", "url": "interpretation-kite.json" },
    { "type": "event", "eventType": "interview", "id": "interview-qb-1", "interviewOf": "qb", "time": "2026-10-13 21:27",
      "medium": "video", "by": [{ "people": "BeauJerome" }], "url": "interview-qb-1.json" }
  ]
}

The case#

FieldMeaning
idThe case's identifier. On rr0.org it is the dossier's directory name
titleWhat the case is called
summaryA sentence or two, in as many languages as you like: what a link to the case says of it where it is shared
imageA picture standing for the case where it is only linked to
timeWhen it happened, as RR0 writes a time ("1948-07-24 02:45", "1954")
eventsWhat happened around it, in order (see below)

The events#

FieldMeaning
type, eventType"event", and the kind: sighting (an observation, or an interpretation of one), interview. A case may have kinds of its own (article, image, book…), which UFO@home leaves alone
idWhat other events refer to it by, unique among the case's events. Only an event that is referred to needs one
urlThe event's own file (an observation's recording, an interview's transcript), relative to the case
time, place, title, summary, byWhen, where, what it is called, what it established, who did it ({ "people": "…" } or { "org": "…" })
interpretationOfAn interpretation's: the id, or ids, of the primary observations it is an interpretation of
interviewOfAn interview's: the id, or ids, of the observations of the witnesses it was held with
mediumAn interview's: in-person, phone, video, chat, email, letter or other

Everything else a case holds (its classification, its place, its sources) is RR0's to define and passes through UFO@home unread. What UFO@home replays of a case is its observations; it shows its interpretations beside them, and keeps its interviews.

<rr0-case-editor>

The editor of a case: the picker of its events, each opened in the editor of its kind, and the case file as text.

<script type="module" src="https://ufoathome.org/lib/rr0-sighting-editor.mjs"></script>
<rr0-case-editor src="/cases/saint-lo/case.json"></rr0-case-editor>

The module of the recording's editor registers it, with the <rr0-sighting-editor> it holds. The editor of an interview is fetched the first time an interview is shown.

MemberKindWhat it does
srcattributeThe address of a case (case.json), or of one recording, which it then offers to add to a case.
trackattributeThe address of the recording to open first, relative to the case; by default the first observer's.
sightingDatapropertyThe recording on show, as a plain object.
sightingEditorpropertyThe <rr0-sighting-editor> that holds it, for whoever needs more of it than this element offers.
caseSessionpropertyThe case being edited, when one is open.
dirtypropertyTrue when the case, or any recording of it, has changes not saved.