05 · Business continuity messenger

MRM

When internet access disappeared, I built the tool my company needed to keep working.

MRM is a self-hosted company messenger I scoped, designed, built, and deployed during the shutdown. Around 40 people used it until normal access returned.

Period
2026
Stage
Internal · Used during shutdown
My role
Product Owner · Full-stack Engineer
Setting
Built for and adopted by an approximately 40-person company
~40 peoplekept coordinating during the shutdown
Built in crisisscoped, implemented, and deployed under pressure
Self-hosteddesigned around restricted infrastructure
Real adoptionused until normal connectivity returned
MRM Business continuity messenger
01

Why this product exists

Context

During the first days of war in Iran, normal internet access disappeared. The company could no longer depend on its cloud communication tools, and work slowed because coordination itself had become unavailable.

Product problem

The team did not need a new social platform. It needed a familiar, deployable communication path that could survive blocked registries, unreachable CDNs, intermittent connectivity, and limited operational support.

Who it serves

Employees and managers who needed direct and group coordination, file exchange, presence, and reliable message recovery during disruption.

What good looked like

Essential coordination continues even when external infrastructure does not.

02

What made it difficult

01

No reliable international network

Package registries, CDN assets, and cloud platforms could not be assumed available.

02

Urgent adoption

People needed to understand the product immediately, with no training program and little tolerance for novelty.

03

Intermittent connectivity

Short outages could not lose the conversation or leave outgoing messages in an unknown state.

04

Low operational overhead

The application and database needed to run on company-managed infrastructure without a cloud platform or globally installed process manager.

03

What I built first, and why

  1. 1
    Shipped

    Reduce to the essential workflow

    I scoped direct and group messaging, files, delivery state, presence, and admin approval before secondary customization.

  2. 2
    Live

    Remove external runtime dependencies

    Browser libraries are served locally; production dependencies are bundled; bootstrap can select reachable domestic Ubuntu mirrors.

  3. 3
    Live

    Make interruption recoverable

    IndexedDB caches conversations, outgoing messages queue locally, and reconnection synchronizes state.

  4. 4
    Shipped

    Deploy and support real use

    The system was installed on internal infrastructure and used by around 40 people until normal connectivity returned.

04

The calls I had to make

Decision 01Live

Use familiar messaging patterns

The interface follows established messenger behavior because pressured users needed confidence, not a new mental model.

Decision 02Live

A conventional self-hosted stack

Node, Express, Socket.IO, MongoDB, Nginx, and systemd kept the runtime understandable and recoverable on company infrastructure.

Decision 03Live

Recover from short network interruptions

Local caching and pending queues handle short interruptions; real-time communication still requires a reachable internal network path.

Decision 04Shipped

Private deployment boundary

MRM is positioned for company-managed infrastructure and explicitly requires security review before any public exposure.

05

How the system works

01

Browser/PWA

Framework-free client, locally served libraries, IndexedDB, service worker, and push.

02

Local network

HTTPS and WebSocket communication through Nginx without a public SaaS dependency.

03

Application

A Node and Express service exposes REST APIs; Socket.IO handles real-time events.

04

Persistence

A self-hosted MongoDB instance stores records; a local file store handles shared media and documents.

05

Operations

Systemd, bundled dependencies, mirror selection, and Nginx keep deployment recoverable.

What I personally owned

  • Emergency problem framing, prioritization, interaction design, and implementation
  • Real-time messaging, presence, delivery/read state, reactions, replies, files, and groups
  • Offline queueing, local cache, reconnection sync, PWA, and push notifications
  • Self-hosted deployment, network-aware bootstrap, admin approval, and adoption support
06

What you can inspect

Real use

Adopted during the disruption

About 40 people used MRM as an operational fallback through the shutdown until normal internet access returned.

Repository

Resilience is implemented

Bundled dependencies, local assets, mirror testing, systemd, offline queues, IndexedDB, and reconnect behavior are present in the working repository.

Boundary

Documented technical limits

The project describes where it is resilient and where it still needs a reachable internal network and independent security review.

07

Where it stands today

MRM kept essential coordination available for an approximately 40-person company during shutdown conditions and remained in use until normal internet access returned.

What I learned

  1. 01

    In a crisis, the best roadmap is the shortest route back to essential work.

  2. 02

    Infrastructure constraints belong in product discovery, not only DevOps.

  3. 03

    Adoption under pressure depends on familiarity and operational simplicity.

Next case studyApex