About blincr

Website co-browsing platform by Mondial-IT

What is blincr?

blincr is a co-browsing platform that lets you share your browsing experience with others in real time. It captures an intelligent audit trail of every site you visit, every click you make, and every scroll — then lets friends replay, follow along live, or annotate pages together.

The platform is built on Cloudflare's edge infrastructure: Durable Objects hold session state, D1 stores the audit log, and a Chrome extension captures browser events over WebSocket.

Features
Live

Co-Browsing Audit Trail

When you switch on co-browsing, an audit trail is made of sites, pages, and interactions you visit. All clicks, navigations, and scrolls are intelligently recorded for replay.

Planned

Shared Trail Replay

Send and enable friends to your co-browsing audit trail so they can execute it. The trail runs from the past tense — they can fast forward to the now. In the now, they actively see what you see and the mouse does what you do. Views stay in sync.

Planned

Page Notes & Anchors

While browsing you can add notes to pages with specific anchors, like "look what a nice jacket" or "this color hat will suit you" attached to specific items. Notes can be group or individually available in the audit trail. A large number of people can browse together and discuss and mark up pages.

Planned

Live Chat Sidebar

Live notes show up in a sidebar overlay — a group chat that runs alongside the co-browsing session for real-time discussion.

Planned

Video Meet

A meet function where video interaction between enabled friends can take place during a co-browsing session.

Architecture
Frontend
React Router v8 + shadcn/ui on Cloudflare Workers
Real-time State
Durable Objects (SessionCoordinator)
Transport
WebSocket (RFC 6455)
Audit Storage
Cloudflare D1 (SQLite)
Session Snapshots
Cloudflare R2
Browser Capture
Chrome Extension (Manifest V3)
Event Format
navigation, click, scroll, note
Pages
Every route accessible from the sidebar

Dashboard

/

The landing page. Shows three metric cards (total sessions, total events, latest activity) and a table of recent sessions from D1. Data auto-refreshes every 15 seconds. Each session row shows its truncated ID, event count, last action as a colored badge, and relative time since last activity.

Live Feed

/live

Real-time WebSocket event viewer. Enter a session ID and connect to observe the event stream as it happens. Events appear in reverse chronological order with timestamp, type badge, and payload detail. Supports filtering and clearing the feed. The dashboard connects as a passive viewer participant.

Audit Log

/audit

Paginated browser for the D1 audit_log table. Shows every recorded event across all sessions: timestamp, session ID, action type, participant ID, and raw detail JSON. Navigate with prev/next pagination, 50 entries per page.

Extension Test

/extension-test

Interactive API tester for the endpoints the Chrome extension uses. Create a new session via POST, check a session's state via GET, and see all available API endpoints listed with their methods. Useful for debugging the extension-to-worker connection without opening Chrome DevTools.

About

/about

This page. Documents the platform vision, feature roadmap with live/planned status, architecture stack, every dashboard page, and every visible UI component.

UI Components
shadcn/ui components in app/components/ui/

Sidebar

sidebar.tsx

The main navigation shell. A collapsible left panel with header (logo + app name), nav groups with icon-labeled menu items, and a footer with worker identity. Supports keyboard toggle (Ctrl+B), responsive mobile overlay via Sheet, and expanded/collapsed states with cookie persistence.

Card

card.tsx

The primary content container. Composed of CardHeader, CardTitle, CardDescription, CardContent, and CardFooter. Used for metric summaries on the Dashboard, feature entries on the About page, the connection panel on Live Feed, and session creation on Extension Test.

Table

table.tsx

Tabular data display. Built from Table, TableHeader, TableBody, TableRow, TableHead, and TableCell. Used on the Dashboard for the recent sessions list and on the Audit Log for paginated event rows. Wraps in a scrollable container for responsive overflow.

Badge

badge.tsx

Status indicators and labels. Supports variants: default (primary blue), secondary (muted), destructive (red), outline, success (green), and warning (amber). Used to label event types on Live Feed, action types on Dashboard, and feature status (Live/Planned) on About.

Button

button.tsx

Action triggers. Variants: default, destructive, outline, secondary, ghost, link. Sizes: default, sm, lg, icon. Used for Connect/Disconnect on Live Feed, Create/Check on Extension Test, pagination on Audit Log, theme toggle in the header, and the sidebar hamburger trigger.

Input

input.tsx

Form text input. Used on Live Feed for the session ID field and on Extension Test for the owner name and session ID fields. Styled with border, ring focus state, and placeholder text.

Breadcrumb

breadcrumb.tsx

Route navigation context in the dashboard header. Shows the current location as a trail: root label (blincr) followed by the current page name. Built from BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, and BreadcrumbSeparator.

Separator

separator.tsx

Visual divider. Renders as a 1px line, horizontal or vertical. Used between the sidebar trigger and breadcrumb in the header, between feature entries on About, and as sidebar section dividers.

Skeleton

skeleton.tsx

Loading placeholder. Renders a pulsing rounded rectangle. Used on the Dashboard while session data loads and on the Audit Log while entries are being fetched.

Sheet

sheet.tsx

Modal overlay panel. Used internally by the Sidebar component as the mobile navigation drawer. Renders a backdrop overlay and a slide-in panel with close button when the sidebar is triggered on narrow viewports.

Tooltip

tooltip.tsx

Contextual hover hints. Used internally by sidebar menu buttons in collapsed mode to show the full label when only the icon is visible. Appears on hover/focus with configurable placement (top, right, bottom, left).

Slot

slot.tsx

Primitives helper for component composition. Merges props (className, style, event handlers) from a parent onto a single child element. Used by SidebarMenuButton with the asChild pattern so Link elements receive button styling.

Collapsible

collapsible.tsx

Expandable section. Built from Collapsible, CollapsibleTrigger, and CollapsibleContent. Available for sidebar nav group expansion and detail sections. Manages open/closed state internally or via controlled props.

Component Showcase
Live rendering of each component

Badge

Default
Secondary
Destructive
Outline
Success
Warning

Button

Input

Table

EventTypeTime
Page visit
navigation
2s ago
Button press
click
5s ago
Page scroll
scroll
8s ago

Breadcrumb

Skeleton

Card

Metric Example
42

Sample stat card