About Haven

Haven started with a question that sounds simple, but becomes difficult very quickly:

What if asking for help had to look completely normal?

In an abusive situation, the obvious ways of asking for help are not always safe. A phone can be checked. Messages can be opened. Social media activity can be watched. A call can attract attention. Even typing "help me" into a chat can create a problem if someone else is looking at the screen.

That changed how we thought about the product.

Instead of starting with another emergency button, another hotline directory, or another chatbot, we started with the communication problem itself:

How can someone send a real request for help without making it obvious that they are doing so?

That became the core idea behind Haven.

The discreet SOS

The main flow starts with something very small.

A user might type:

"Help, I'm locked in a room."

Haven takes that short input and turns it into a clearer distress report. It then generates an ordinary-looking image and hides the actual message inside the image data.

The image can look like a completely normal social media post.

There is no large SOS label, no visible warning, and no obvious indication that the image contains anything unusual.

For the person sending it, the goal is simple: communicate without creating a visible signal that they are communicating.

On the other side, an authorised responder can decode the image, recover the hidden message, break it into useful information, and send the case into a dashboard where reports can be reviewed and prioritised.

This also gave us a second problem to solve.

A single report is useful, but a collection of reports can be much more useful.

When reports contain descriptions of the person involved, Haven can turn those details into embeddings and use MongoDB Atlas Vector Search to find earlier reports with similar descriptions. This means two reports do not have to use the exact same words to potentially be recognised as related.

Help after the message gets out

We did not want Haven to stop once the SOS message was sent.

Someone dealing with abuse may also need a place to talk when reaching another person is difficult. That is where the AI companion comes in.

The companion is designed as a private conversation space rather than a typical question-and-answer bot. With the user's permission, Haven can keep conversation context so the person does not have to explain everything again every time they return.

The response can also be spoken through voice, with the avatar reacting to the tone of the conversation.

The point here is not to pretend that an AI can replace a trained professional.

It is to give someone a private place to say something when there may not be anyone else they can safely talk to at that moment.

Making legal information easier to reach

The next problem we looked at was legal information.

Knowing that something is wrong and knowing what options exist are two very different things. Legal documents can be long, difficult to search, and written in language that is not easy to understand.

For Haven's legal assistant, we built a retrieval-based system instead of simply asking a language model to answer from memory.

We collected relevant Indian legal documents, split them into smaller sections, created embeddings for those sections, and stored them in MongoDB Atlas Vector Search.

When someone asks a question, their question is converted into an embedding and compared against the stored legal material. The most relevant sections are retrieved first, and those sections are then given to the language model to produce a simpler explanation.

So the model is not just being asked:

"What do you think the answer is?"

It is first given relevant legal material to work from.

That distinction matters when the subject is something as important as a person's rights.

One system, several moving parts

Underneath the product, Haven is a combination of several services that have to work together cleanly.

The web application is built with Next.js, TypeScript, Tailwind CSS, and GLTF for the interface and 3D companion.

The backend is built with Python, FastAPI, and Pydantic.

MongoDB Atlas stores case data and conversation data, while MongoDB Atlas Vector Search handles semantic search for legal documents and similarity matching between reports.

Amazon S3 is used for image storage.

For the AI layer, we use Amazon Bedrock for text and image generation, Groq with Gemma for fast language inference, and ElevenLabs for voice generation.

Clerk handles authentication.

The system is deployed using Vercel for the frontend and Render for the backend.

The individual technologies are useful, but connecting them into one reliable flow was the harder part.

What was difficult to get right

The SOS feature sounds straightforward when described in one sentence:

"Hide a message inside an image."

In practice, there are several things that can go wrong.

The encoded information has to survive the image pipeline and still be recoverable later. The generated image has to look natural enough that it does not immediately stand out as something unusual. The sender and responder flows have to stay separate. The backend has to move the data through generation, encoding, storage, decoding, decomposition, and persistence without losing information along the way.

The same was true for the AI companion and legal assistant.

We had to decide what information should be stored, what should only exist temporarily, how conversation context should work with consent, how retrieval should happen before generation, and how all of these services could communicate without making the application unnecessarily complicated.

A large part of building Haven was therefore not adding more AI.

It was deciding where AI should actually be used and where a normal piece of software was the better solution.

Privacy is part of the product

Because Haven deals with extremely sensitive situations, privacy is not something we wanted to leave for the end.

Conversation history is kept only when the user has given permission for that context to be stored.

The legal assistant works with legal source material rather than personal case information.

SOS images are designed to look like ordinary images.

Case information is organised so authorised responders can review reports based on severity and other extracted information.

These choices shaped the architecture as much as the visible interface did.

Why we built it this way

There are already many places where someone can find a hotline number, read about domestic violence, or talk to an AI chatbot.

What we felt was missing was the connection between the different moments:

the moment someone needs help, the moment they finally manage to say something, and the moments that come after.

Haven tries to connect those moments in one product.

A discreet way to send a signal.

A private place to talk.

A way to understand legal options.

And a way for authorised responders to make sense of the reports they receive.

We did not build Haven around the idea that technology can solve abuse.

We built it around a much smaller question:

When someone cannot safely say "I need help", can we give them another way to say it?

That question shaped the product, the architecture, and almost every technical decision we made.

Built With

Share this project:

Updates