Elijah Oliver Larsson Back to portfolio

Independent product / 2026

VENT

A place for thoughts you do not want to keep

I designed and built VENT around a simple interaction: write something, send it into a black hole, and watch it disappear. There is no history, no AI response, and no account. Once something is sent, it is gone.

V E N T
Say whatever you need to say.

Say it. Send it. Gone.

  • Interaction design
  • Motion
  • Privacy
  • React
  • TypeScript
  • Canvas
Status
Live at ventinto.space
Role
Concept, interaction design, UI, frontend, deployment

Why I built it

Sometimes writing something down is enough.

I often feel better after saying something out loud or writing it down, even when nobody responds. Sometimes the useful part is simply getting the thought out of my head. Most digital tools keep whatever you write and turn it into a journal entry, chat history, mood log, or something else you can return to later. I wanted to explore the opposite: a place where writing something could be temporary.

The main constraint

VENT had to feel complete without saving anything. Simply clearing a text field felt too insignificant, so the send interaction needed enough movement and finality to make it feel like the thought had actually gone somewhere.

Input→Release→Gone

The core interaction

Write it, send it, move on.

The interface is deliberately minimal. Most of the experience happens in the few seconds between writing something and watching it disappear.

01

Write whatever you need to

The input does not ask for a mood, category, explanation, or goal. You just write whatever you want to get out of your head.

02

Send it into the void

The text leaves the input and moves toward the black hole. It accelerates as it gets closer, distorts around the edge, and disappears.

03

Reset

The black hole reacts briefly before returning to its idle state. There is no confirmation screen or history. The interface simply becomes ready for the next thought.

Design decisions

What I left out

A lot of obvious product features made VENT less interesting. Whenever I considered adding something, I asked whether it supported the main interaction or turned VENT into a different kind of product.

No history

Sent messages are not added to a feed, timeline, archive, or review screen. Being unable to retrieve them is intentional.

No AI response

VENT does not give advice, reassurance, or interpretation. Adding a response would turn the interaction into a conversation, which is not what I wanted the product to be.

No emotional scoring

There are no streaks, mood ratings, dashboards, or progress systems. VENT is not meant to measure how someone feels.

No interruptions

Information and support links are kept outside the main interaction so the screen can stay focused on the input and the black hole.

Making send feel physical

A simple fade felt too weak.

A fade technically communicated that the text was gone, but it did not feel particularly satisfying. I experimented with the timing and movement so the text starts slowly and accelerates as it approaches the black hole. Close to the centre it stretches and distorts slightly before disappearing.

The black hole itself is drawn using Canvas. It has a dark event horizon, a subtle halo, orbiting particles, and a short reaction when something enters it. When nothing is happening, the animation stays deliberately quiet.

Privacy

If the interface says it disappears, the implementation should follow through.

VENT does not intentionally upload or store the text a user enters. While typing, the draft exists in browser memory. When it is sent, it temporarily becomes part of the animation and is removed once the animation finishes.

VENT content is not written to localStorage, sessionStorage, IndexedDB, cookies, analytics, or a backend. I have also tried to keep the privacy wording specific: VENT can control what the application itself stores, but not external software such as keyboards, browser extensions, or the operating system.

Build and delivery

A small product did not need a big stack.

I kept the technical setup small because the product itself is small. There is no need for accounts, a database, or a backend in the main VENT interaction.

Frontend
React + TypeScript
Framework
TanStack Start / Vite
Motion
requestAnimationFrame + Canvas
Hosting
GitHub Pages
Domain
ventinto.space
Storage
No intentional VENT persistence

Reflection

Keeping it small was the point.

VENT was a useful exercise in seeing how little a product actually needs. Most of the work went into the interaction itself: the timing, movement, feedback, and deciding what not to add.

Normally, adding functionality makes a product feel more complete. With VENT, most additions moved it further away from the original idea. For now, I think keeping it small is the right decision. If people actually use it and recurring needs start to appear, those would be a better reason to expand it than adding features just because I can.