Stefan Hansen ← All work

The Offering Archive Real-estate development — capital raising 2026

Copy it in, and it files itself — or says plainly that it can't.

Offering documents change constantly, and each new version lands in some inboxes and not others. Which one is current, what changed, and who has been sent what were all answered by searching email. This archive answers all three without anybody uploading anything.

Opening a project and scrolling its version history: figures, timeline, changes.
Intake
Email. Nobody uploads anything.
Versions kept
Every one, permanently
Change recorded between versions
Field by field
Documents filed into the wrong project
0

Role

Product direction · Strategy · Interface design · Information architecture · Build direction

Client

A real-estate development firm

Origin

Self-initiated. The alternative was continuing to answer "which version is current?" by searching email, and continuing to have no answer at all to "what changed?" or "who was sent which one?"

The problem

An offering document is never finished. A raise fills up. A close date moves. A rate is renegotiated. Each change produces a new document, and each new document lands in some inboxes and not others.

So the current version becomes whichever copy you happen to have, and three questions get very hard to answer: Which version is current? What changed between this one and the last? Who has been sent which? All three were answered by searching email.

The obvious solution is a document management system, and it fails for the obvious reason: it asks busy people to upload things, and anything that depends on somebody remembering to file a document gets used for three weeks.

The tool explaining itself: email a PDF and it is read, filed and archived to Dropbox.
The tool explaining itself: email a PDF and it is read, filed and archived to Dropbox.

The interface is an email you were already sending

Email a document to the archive, or copy it in when you send one to an investor. That is the entire input — the tool sits on the copy line of an email somebody was sending anyway.

It reads the document, works out which project it belongs to, files it as that project's next version, records what changed since the previous one, archives the file where the team already keeps files, and notes who sent it and who received it. Nobody uploads anything. Nobody logs in to file. There is nothing to adopt.

Every project with its offerings and how many versions each has.
Every project with its offerings and how many versions each has.

It declines to guess, and says so

The project name inside a document rarely matches the project name as filed, so matching is a judgement, and judgements are sometimes wrong.

A confident match files straight in. An unconfident one does not. It goes to a review queue with the tool's best guess attached, flagged on the index and alerted to a person, and it waits. A wrong auto-file is worse than no auto-file: it puts a document somewhere nobody will look, and does so silently. Clearing the queue takes seconds, because the reading is already done.

The full stack for one offering: every version filed, newest first, with what changed.
The full stack for one offering: every version filed, newest first, with what changed.

Every version is kept, and what changed is written down

Each new version is compared field by field against the one before it, and the differences are written onto it in plain language. Remaining raise changed from $2.4MM to $850K. Projected close date moved from December 2029 to March 2030.

Ask what the terms were before the last revision, and the project opens to its newest version with the older ones stacked underneath, each carrying what changed.

The queue: two PDFs the matcher was not confident about, held for a human.
The queue: two PDFs the matcher was not confident about, held for a human.

The rest of it

  • It reads the document rather than asking anyone to type it out. Each arrival is classified as a project offering or a company-level document, then read for the raise, what remains, the rate, the term, the projected close date and the construction timeline — structured fields, not text inside a file. You cannot compare two PDFs; you can compare two sets of numbers.
  • Two raises on one building stay two offerings. A project running both a note and an equity raise keeps two independent version stacks.
  • It notices when an offering has gone quiet. Projects with no new version in too long are tracked, and the people sent the last one are reminded they hold something old — with a cooldown, so a just-updated project is left alone.
  • A correction goes to the person who can make it. Flag the figures or timeline rows that are wrong on a version, and it reaches whoever produces that document, attached to the version it concerns, rather than as another email thread.
  • It did not stop mattering when the format changed. The firm now sends live offering pages instead of documents — a companion project on this site — and this kept running: every document ever sent is still filed, still versioned, still showing what changed. That is the record of what every investor was told and when.

What changed

  • "Which version is current?" became a page instead of a search. Every offering has a stack, newest first, and the newest one is the answer.
  • "What changed?" became answerable at all. Field-by-field differences are recorded between versions in plain language. Before this, the only way to know was to open two documents and compare them by eye.
  • "Who was sent which?" is on the record. Sender and recipients are noted against every version at the moment it passes through.
  • Filing stopped costing anybody anything. The input is an email that was being sent regardless. There is no upload step to forget.
  • Nothing has been filed into the wrong project. Because when the tool is unsure it says so and waits, rather than guessing quietly.