The invisible user problem
Most apps feel like solo experiences. A user logs in, does their thing, and leaves. They never know that 50 other people were using the app at the same time. There's no sense of life, no social proof, no reason to stick around.
Your app works great — but it feels empty. Even with thousands of users, every session feels like a private one. That's a missed opportunity for engagement, retention, and word-of-mouth.
What floors.js does for apps
floors.js adds a real-time presence layer to your product. Every screen becomes a room. Every active user becomes a 3D avatar. When two users are on the same screen, they see each other and can chat — right inside your app.
- Instant social layer — users see other real people using the app right now
- Zero friction — no signup or extra auth needed, works alongside your existing user system
- Works on web and mobile — any app with a browser or WebView can run the script
- One script tag — no SDK, no backend changes, no database migrations
- Feels alive, not intrusive — a small widget in the corner, users open it when they want
Where apps use it
Why presence matters more than chat
You can add a chat widget to any app. But chat alone doesn't change how the app feels. A support chat is transactional — type a question, wait for a reply, close the ticket.
Presence is different. When users see 3D avatars walking around, the app feels inhabited. It's the difference between walking into an empty store and walking into one with people in it. You stay longer. You explore more. You come back.
floors.js gives your app that "people are here" feeling — which is the hardest thing to manufacture and the most powerful thing for retention.
One line to install
Paste it in your app's HTML shell, layout component, or WebView. Each route becomes a room automatically. Works with React, Next.js, Vue, Nuxt, Svelte, Angular, or any framework. For mobile apps using WebViews (React Native, Capacitor, Ionic), load it inside the WebView.