Bridge OS
Bridge OS's frame, widths and habits, how people arrive from other apps, and every screen with its template.
What Bridge OS is for
Everyone with a Bridge account. It's the home of your network: who you know, the intros you make and receive, your meetings, and the outcomes. It's also where every other Bridge app is launched from and connects to.
The frame every screen sits in
The shell draws all of this. A screen only fills the content area, so never redraw any of it on a page.
| Part | What it is |
|---|---|
| Top bar | Sticky. Logo, the three main areas (Activity, Network, Outcomes), the app launcher, your avatar. On phones the areas move to a bar at the bottom. |
| Background | The dot grid with soft glow, drawn once by the shell. Pages stay transparent: never add a page background. |
| Page padding | 16px on phones, 24px on tablets, 32px on desktops, 32px top and bottom. The shell adds it; pages add none. |
| Content width | 1280px by default. A page picks its width tier; Network pages may go to 1600px. |
| Footer | Under every signed-in page. |
Page widths
Every page picks one of these from src/lib/layout/widths.ts. The template says which.
| Name | Width | For |
|---|---|---|
LAYOUT_WIDE | 1600px | Tables and two-column pages: an organization, a person's profile, intro lists, Network's tables. |
LAYOUT_STANDARD | 1280px | Card dashboards and grids: Outcomes, Network overview, Apps. |
LAYOUT_READ | 800px | One column of reading: your own profile. |
LAYOUT_FORM | 720px | Forms: Settings. |
Main areas
- Activity (what's new: intros, meetings, people you recently met)
- Network (people and organizations you know, invites, sharing)
- Outcomes (what your intros led to)
How Bridge OS builds a page
Follow these so a new screen matches the ones already shipped.
- A page is a server
page.tsxthat renders one client_components/<name>-content.tsx. - Pick a width from
src/lib/layout/widths.ts; never write amax-w-*of your own. - Not everything is a card. Tab rows, page titles, Back links and section titles sit on the page itself; cards hold content (a table, a list, a form).
- A record page (a person or an organization) opens with the record's own card, not a page title, then underline tabs on the page line, then one card for the tab's content.
- Two-column pages: the main column is
minmax(0,1fr), the side panel is 340px and stays in view (sticky top-20) with its own scroll. - A section title (icon + title) sits above or inside its card, never as a separate card.
- Sub-pages start with "← Back", which goes back in history.
- Tabs are in the address (
?tab=); the default tab has none. - Each card loads on its own. The page never waits for all its data.
- Main areas appear in both the top bar and the phone bar. Everything else is reached from a page.
Step by step: Build a screen (builds a Bridge OS organization page) and Add a screen (every file, in order).
Arriving from another Bridge app
| From | Lands on |
|---|---|
| Another app's app switcher (the 9-dot menu other Bridge apps share) | os.brdg.app: Activity when signed in, the public home page when not. |
| An app asking to connect | The Connect page (/connect): one centered card naming the app and what it may see, with Allow and Cancel. |
| A shared profile link | The member's public card if signed out, their full profile if signed in. |
Every screen and its template
26 screens follow 8 templates. 3 fit only approximately (marked Closest, with what differs). A new screen starts from the template whose job matches, never a new frame.
Card dashboard
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Outcomes | /outcomes | app/(shell)/outcomes/_components/outcomes-page-content.tsx | Exact |
| Network (Invites tab) | /network | components/ui/connectors-tab.tsx | Exact |
| Network (Overview tab) | /network/overview | components/ui/connectors-tab.tsx | Exact |
| Apps (signed in) | /apps | app/dashboard.tsx | Exact |
Record page
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Contact profile | /contact/[refId] | app/to/[username]/_components/authed-profile-view.tsx | Exact |
| Member profile (signed in) | /to/[username] | app/to/[username]/_components/authed-profile-view.tsx | Exact |
| Your profile | /profile | components/ui/profile-tab.tsx | Exact |
| Organization | /network/[domain] | app/(shell)/network/[domain]/_components/org-network-content.tsx | Exact |
Table page
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Invites | /network/invites | app/(shell)/network/invites/_components/invites-content.tsx | Exact |
| Sharing | /network/sharing | app/(shell)/network/sharing/_components/sharing-content.tsx | Closest: two tables side by side |
| Your intros | /profile/intros | components/ui/person-intros-view.tsx | Exact |
| Intros with a contact | /contact/[refId]/intros | components/ui/person-intros-view.tsx | Exact |
| Intros with a member | /to/[username]/intros | components/ui/person-intros-view.tsx | Exact |
Settings form
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Settings | /settings | app/(shell)/settings/_components/settings-content.tsx | Exact |
| Sync preview (hidden) | /settings/sync-preview | app/(shell)/settings/sync-preview/_components/sync-preview-content.tsx | Exact |
| Network settings | /network/settings | app/(shell)/network/settings/_components/network-settings-content.tsx | Exact |
Feed
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Activity | /activity | app/(shell)/activity/_components/activity-page-content.tsx | Exact |
Public page
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Home (signed out) | / | app/dashboard.tsx | Exact |
| About | /about | app/about/about-content.tsx | Exact |
| Network (signed out) | /network (signed out) | app/(shell)/network/_components/network-logged-out-view.tsx | Exact |
| App detail | /app/[id] | components/ui/app-detail-content.tsx | Closest: one 768px detail card; also opens as an overlay |
Centered card
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Log in | /login | app/(auth)/login/page.tsx | Exact |
| Connect an app | /connect | app/connect/_components/connect-consent.tsx | Exact |
| Member card (public) | /to/[username] (signed out) | app/to/[username]/public-profile-view.tsx | Exact |
Admin table
| Screen | Route | Drawn by | Fit |
|---|---|---|---|
| Admin: apps | /admin/apps | app/(admin)/admin/apps/page.tsx | Exact |
| Admin: embed | /admin/embed | app/(admin)/admin/embed/page.tsx | Closest: a code snippet instead of a table |
Not a template
| Route | Why |
|---|---|
/?view=machine | A plain-text page for AI agents, not a human screen. |
/dealflow, /introductions, /jobs, /perks | Redirects to other Bridge apps; nothing is drawn. |
Known gaps
Where Bridge OS code differs from this page today. Follow the page, not the gap.
- Page headers, Back links and section titles are written by hand on every page (the App kit proposes shared ones).
- Seven public pages copy the top bar, footer and background by hand.
- One generic loading screen for every page change, whatever the page's shape.
- The app launcher and user menu still use Radix menus, not the package's ActionMenu.
- Contact actions menu: plain buttons inside the menu, so arrow keys don't move between them.
Sources
- Bridge OS route survey (commit 5d9b382), 2026-11-02.
- Bridge OS
src/app/(shell)/layout.tsx,src/lib/layout/widths.ts,top-nav.tsx,org-network-content.tsx,src/app/connect/. - Bridge OS
components.md,CLAUDE.md.