Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

37,422 changes: 28,167 additions & 9,255 deletions .planning/phases/52-full-page-translation-completeness-audit/52-audit-data.json

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions showcase/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@ Static prerender currently covers:
- `/privacy`
- `/support`

Research product pages also prerender:

- `/lattice`
- `/concierge`
- `/phantom-stream`
- `/prometheus`

The `/stats` route is a deliberately low key stats for nerds page. It shows live GitHub activity plus FSB telemetry charts for active users, tokens, running agents, average agents per user, and popular MCP clients.

Crawler-facing files are generated from `angular/scripts/build-crawler-files.mjs` and source content in `angular/scripts/llms-full.source.md`.
Expand Down
1 change: 1 addition & 0 deletions showcase/angular/prerender-routes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
/agents
/privacy
/support
/concierge
4 changes: 3 additions & 1 deletion showcase/angular/public/llms-full.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- generated 2026-07-14 by build-crawler-files.mjs; edit llms-full.source.md -->
<!-- generated 2026-08-22 by build-crawler-files.mjs; edit llms-full.source.md -->
# FSB (Full Self-Browsing)

## 1. Project Description
Expand Down Expand Up @@ -150,6 +150,7 @@ FSB ships 142+ hand-curated site-specific guides (Notion, Google Sheets, Workday

### Ecosystem pages
- Lattice (`https://full-selfbrowsing.com/lattice`): capability runtime SDK for multimodal AI applications -- typed outputs, inspectable plans, provider routing, artifacts, tools, audit receipts, and replay-friendly records.
- Concierge (`https://full-selfbrowsing.com/concierge`): safe action layer for agent-ready web applications -- typed verbs, live catalogs, consent-bound dispatch, and signed replay-protected batches.
- PhantomStream (`https://full-selfbrowsing.com/phantom-stream`): DOM-native live browser mirroring library -- one style-inlined snapshot, then MutationObserver diffs instead of pixels; powers FSB's remote dashboard live preview.
- Prometheus (`https://full-selfbrowsing.com/prometheus`): the autonomous browser build behind FSB -- native control spine, stdio MCP bridge, multi-agent tab ownership, runtime sidebar, and DOM-native supervision.
- Site Maps (`https://full-selfbrowsing.com/sitemaps`): community hub (under development) for contributing well-tested site schemas that can become built-in browser knowledge.
Expand All @@ -176,6 +177,7 @@ Operator is OpenAI's agentic browser product (2025). Overlap with FSB: end-user-
- Support: https://full-selfbrowsing.com/support
- Privacy: https://full-selfbrowsing.com/privacy
- Lattice: https://full-selfbrowsing.com/lattice
- Concierge: https://full-selfbrowsing.com/concierge
- PhantomStream: https://full-selfbrowsing.com/phantom-stream
- Prometheus: https://full-selfbrowsing.com/prometheus
- Site Maps: https://full-selfbrowsing.com/sitemaps
Expand Down
3 changes: 2 additions & 1 deletion showcase/angular/public/llms.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- generated 2026-07-14 by build-crawler-files.mjs; edit llms.source.md -->
<!-- generated 2026-08-22 by build-crawler-files.mjs; edit llms.source.md -->
# FSB (Full Self-Browsing)

FSB (Full Self-Browsing) is an open-source Chrome extension that automates the browser through natural language. You describe a task; FSB plans the clicks, types, and navigation to complete it. Multi-model AI (xAI, OpenAI, Anthropic, Gemini, OpenRouter, LM Studio, local), 56 browser tools, a 66-tool MCP surface, 142+ site guides, local-first execution, and BYO API keys. Current release: FSB v0.9.90 (extension) with fsb-mcp-server 0.10.0 (npm).
Expand Down Expand Up @@ -30,6 +30,7 @@ Unlike cloud browser agents that run in a headless container without your cookie
- [Support](https://full-selfbrowsing.com/support): Setup guides, MCP configuration, troubleshooting, GitHub issues, and direct contact.
- [Privacy](https://full-selfbrowsing.com/privacy): How FSB handles your data -- API keys encrypted in Chrome local storage, opt-out anonymous usage telemetry for aggregate public stats only, automation runs locally in your browser.
- [Lattice](https://full-selfbrowsing.com/lattice): Capability runtime SDK for multimodal AI applications -- typed outputs, inspectable plans, provider routing, artifacts, tools, audit receipts, and replay-friendly records.
- [Concierge](https://full-selfbrowsing.com/concierge): Safe action layer for agent-ready web applications -- typed verbs, live catalogs, consent-bound dispatch, and signed replay-protected batches.
- [PhantomStream](https://full-selfbrowsing.com/phantom-stream): DOM-native live browser mirroring -- one style-inlined snapshot, then MutationObserver diffs instead of pixels. Powers the FSB remote dashboard live preview.
- [Prometheus](https://full-selfbrowsing.com/prometheus): The autonomous browser build behind FSB -- native control spine, stdio MCP bridge, multi-agent tab ownership, runtime sidebar, and DOM-native supervision.
- [Site Maps](https://full-selfbrowsing.com/sitemaps): Community site maps hub (under development) -- contribute well-tested site schemas that can become built-in browser knowledge.
Expand Down
24 changes: 15 additions & 9 deletions showcase/angular/public/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,61 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://full-selfbrowsing.com</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/about</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/agents</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/support</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/privacy</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/lattice</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/concierge</loc>
<lastmod>2026-08-22</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/phantom-stream</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/prometheus</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://full-selfbrowsing.com/sitemaps</loc>
<lastmod>2026-07-14</lastmod>
<lastmod>2026-08-22</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
Expand Down
5 changes: 3 additions & 2 deletions showcase/angular/scripts/audit-translation-completeness.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ const ROUTE_TABLE = [
{ path: 'support', componentDir: 'pages/support', shellless: false, outOfScope: null },
{ path: 'stats', componentDir: 'pages/stats', shellless: true, outOfScope: null },
{ path: 'lattice', componentDir: 'pages/lattice', shellless: true, outOfScope: null },
{ path: 'concierge', componentDir: 'pages/concierge', shellless: true, outOfScope: null },
{ path: 'phantom-stream', componentDir: 'pages/phantom-stream', shellless: true, outOfScope: null },
{ path: 'prometheus', componentDir: 'pages/prometheus', shellless: true, outOfScope: null },
{ path: 'sitemaps', componentDir: 'pages/sitemaps', shellless: false, outOfScope: null },
Expand Down Expand Up @@ -430,9 +431,9 @@ function buildReport(ctx) {
const totalMarkedUnion = new Set();
for (const ids of routeMarkedIds.values()) for (const id of ids) totalMarkedUnion.add(id);
lines.push(
`- Union of marked ids across all 12 routes (incl. shared shell/picker ids, deduplicated): ` +
`- Union of marked ids across all ${ROUTE_TABLE.length} routes (incl. shared shell/picker ids, deduplicated): ` +
`${totalMarkedUnion.size} (a subset of EN's ${enMap.size} total, since messages.xlf also covers ` +
'any i18n-marked strings outside these 12 routes\' own component dirs / shared shell / picker).'
`any i18n-marked strings outside these ${ROUTE_TABLE.length} routes' own component dirs / shared shell / picker).`
);
lines.push('');

Expand Down
1 change: 1 addition & 0 deletions showcase/angular/scripts/build-crawler-files.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const ROUTES = [
{ path: '/support', changefreq: 'monthly', priority: '0.7' },
{ path: '/privacy', changefreq: 'yearly', priority: '0.5' },
{ path: '/lattice', changefreq: 'weekly', priority: '0.8' },
{ path: '/concierge', changefreq: 'weekly', priority: '0.8' },
{ path: '/phantom-stream', changefreq: 'weekly', priority: '0.8' },
{ path: '/prometheus', changefreq: 'weekly', priority: '0.8' },
{ path: '/sitemaps', changefreq: 'monthly', priority: '0.6' },
Expand Down
2 changes: 2 additions & 0 deletions showcase/angular/scripts/llms-full.source.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ FSB ships 142+ hand-curated site-specific guides (Notion, Google Sheets, Workday

### Ecosystem pages
- Lattice (`https://full-selfbrowsing.com/lattice`): capability runtime SDK for multimodal AI applications -- typed outputs, inspectable plans, provider routing, artifacts, tools, audit receipts, and replay-friendly records.
- Concierge (`https://full-selfbrowsing.com/concierge`): safe action layer for agent-ready web applications -- typed verbs, live catalogs, consent-bound dispatch, and signed replay-protected batches.
- PhantomStream (`https://full-selfbrowsing.com/phantom-stream`): DOM-native live browser mirroring library -- one style-inlined snapshot, then MutationObserver diffs instead of pixels; powers FSB's remote dashboard live preview.
- Prometheus (`https://full-selfbrowsing.com/prometheus`): the autonomous browser build behind FSB -- native control spine, stdio MCP bridge, multi-agent tab ownership, runtime sidebar, and DOM-native supervision.
- Site Maps (`https://full-selfbrowsing.com/sitemaps`): community hub (under development) for contributing well-tested site schemas that can become built-in browser knowledge.
Expand All @@ -175,6 +176,7 @@ Operator is OpenAI's agentic browser product (2025). Overlap with FSB: end-user-
- Support: https://full-selfbrowsing.com/support
- Privacy: https://full-selfbrowsing.com/privacy
- Lattice: https://full-selfbrowsing.com/lattice
- Concierge: https://full-selfbrowsing.com/concierge
- PhantomStream: https://full-selfbrowsing.com/phantom-stream
- Prometheus: https://full-selfbrowsing.com/prometheus
- Site Maps: https://full-selfbrowsing.com/sitemaps
Expand Down
1 change: 1 addition & 0 deletions showcase/angular/scripts/llms.source.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Unlike cloud browser agents that run in a headless container without your cookie
- [Support](https://full-selfbrowsing.com/support): Setup guides, MCP configuration, troubleshooting, GitHub issues, and direct contact.
- [Privacy](https://full-selfbrowsing.com/privacy): How FSB handles your data -- API keys encrypted in Chrome local storage, opt-out anonymous usage telemetry for aggregate public stats only, automation runs locally in your browser.
- [Lattice](https://full-selfbrowsing.com/lattice): Capability runtime SDK for multimodal AI applications -- typed outputs, inspectable plans, provider routing, artifacts, tools, audit receipts, and replay-friendly records.
- [Concierge](https://full-selfbrowsing.com/concierge): Safe action layer for agent-ready web applications -- typed verbs, live catalogs, consent-bound dispatch, and signed replay-protected batches.
- [PhantomStream](https://full-selfbrowsing.com/phantom-stream): DOM-native live browser mirroring -- one style-inlined snapshot, then MutationObserver diffs instead of pixels. Powers the FSB remote dashboard live preview.
- [Prometheus](https://full-selfbrowsing.com/prometheus): The autonomous browser build behind FSB -- native control spine, stdio MCP bridge, multi-agent tab ownership, runtime sidebar, and DOM-native supervision.
- [Site Maps](https://full-selfbrowsing.com/sitemaps): Community site maps hub (under development) -- contribute well-tested site schemas that can become built-in browser knowledge.
Expand Down
1 change: 1 addition & 0 deletions showcase/angular/scripts/smoke-crawler.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ const MARKETING_ASSERTIONS = [
{ path: '/support', titleSubstr: 'Support', canonical: `${PROD_HOST}/support` },
{ path: '/privacy', titleSubstr: 'Privacy', canonical: `${PROD_HOST}/privacy` },
{ path: '/lattice', titleSubstr: 'Lattice', canonical: `${PROD_HOST}/lattice` },
{ path: '/concierge', titleSubstr: 'Concierge', canonical: `${PROD_HOST}/concierge` },
{ path: '/phantom-stream', titleSubstr: 'PhantomStream', canonical: `${PROD_HOST}/phantom-stream` },
{ path: '/prometheus', titleSubstr: 'Prometheus', canonical: `${PROD_HOST}/prometheus` },
{ path: '/sitemaps', titleSubstr: 'Site Maps', canonical: `${PROD_HOST}/sitemaps` },
Expand Down
1 change: 1 addition & 0 deletions showcase/angular/scripts/verify-translation-quality.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const INVARIANT_TECHNICAL_LITERALS = [
'FSB',
'PhantomStream',
'Lattice',
'Concierge',
'Prometheus',
'Playwright',
'OpenAI',
Expand Down
1 change: 1 addition & 0 deletions showcase/angular/src/app/app.routes.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export const serverRoutes: ServerRoute[] = [
{ path: 'support', renderMode: RenderMode.Prerender },
{ path: 'agents', renderMode: RenderMode.Prerender },
{ path: 'lattice', renderMode: RenderMode.Prerender },
{ path: 'concierge', renderMode: RenderMode.Prerender },
{ path: 'phantom-stream', renderMode: RenderMode.Prerender },
{ path: 'prometheus', renderMode: RenderMode.Prerender },
{ path: 'sitemaps', renderMode: RenderMode.Prerender },
Expand Down
1 change: 1 addition & 0 deletions showcase/angular/src/app/app.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const routes: Routes = [
{ path: 'support', loadComponent: () => import('./pages/support/support-page.component').then(m => m.SupportPageComponent) },
{ path: 'stats', loadComponent: () => import('./pages/stats/stats-page.component').then(m => m.StatsPageComponent), data: { shellless: true } },
{ path: 'lattice', loadComponent: () => import('./pages/lattice/lattice-page.component').then(m => m.LatticePageComponent), data: { shellless: true } },
{ path: 'concierge', loadComponent: () => import('./pages/concierge/concierge-page.component').then(m => m.ConciergePageComponent), data: { shellless: true } },
{ path: 'phantom-stream', loadComponent: () => import('./pages/phantom-stream/phantom-stream-page.component').then(m => m.PhantomStreamPageComponent), data: { shellless: true } },
{ path: 'prometheus', loadComponent: () => import('./pages/prometheus/prometheus-page.component').then(m => m.PrometheusPageComponent), data: { shellless: true } },
{ path: 'sitemaps', loadComponent: () => import('./pages/sitemaps/sitemaps-page.component').then(m => m.SiteMapsPageComponent) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,15 @@ <h4 i18n="@@shell.footer.col.project.title">Project</h4>
<div class="footer-column">
<h4 i18n="@@shell.footer.col.research.title">Research</h4>
<a routerLink="/lattice" i18n="@@shell.footer.research.lattice" [attr.translate]="'no'">Lattice</a>
<a routerLink="/concierge" i18n="@@shell.footer.research.concierge" [attr.translate]="'no'">Concierge</a>
<a routerLink="/phantom-stream" i18n="@@shell.footer.research.phantomStream" [attr.translate]="'no'">PhantomStream</a>
<a routerLink="/prometheus" i18n="@@shell.footer.research.prometheus" [attr.translate]="'no'">Prometheus</a>
</div>
<div class="footer-column">
<h4 i18n="@@shell.footer.col.community.title">Community</h4>
<a routerLink="/sitemaps" i18n="@@shell.footer.community.sitemaps" [attr.translate]="'no'">Sitemaps</a>
<a href="https://discord.gg/xRbj6JQpY" target="_blank" rel="noopener" i18n="@@shell.footer.community.discord" [attr.translate]="'no'">Discord</a>
<a href="https://x.com/fsb0804" target="_blank" rel="noopener" class="footer-x-link" i18n="@@shell.footer.community.x" [attr.translate]="'no'">X</a>
<a routerLink="/sitemaps" i18n="@@shell.footer.community.sitemaps" [attr.translate]="'no'">Sitemaps</a>
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,78 +233,29 @@
background: var(--bg-elevated);
}

/* --- Footer --- */
/* --- Footer colors only; layout lives in styles.scss --- */
.footer {
background: var(--bg-card);
border-top: 1px solid var(--border-color);
padding: 48px 0 32px;
}

.footer-inner {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px;
margin-bottom: 32px;
}

.footer-brand {
display: flex;
align-items: center;
gap: 10px;
}

.footer-links {
display: flex;
gap: 48px;
flex-wrap: wrap;
}

.footer-column h4 {
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
margin-bottom: 12px;
}

.footer-column a {
display: block;
color: var(--text-secondary);
font-size: 0.9rem;
padding: 4px 0;
}

.footer-column a:hover {
color: var(--text-primary);
}

.footer-column a.footer-x-link {
align-items: center;
display: flex;
font-size: 0;
line-height: 1;
width: fit-content;
}

.footer-column a.footer-x-link::before {
content: '\e61b';
font-family: 'Font Awesome 6 Brands';
font-size: 0.95rem;
font-weight: 400;
}

.footer-bottom {
border-top: 1px solid var(--border-color);
padding-top: 24px;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 12px;
}

.footer-bottom p {
font-size: 0.85rem;
color: var(--text-muted);
}

Expand All @@ -331,48 +282,6 @@
display: flex;
}

.footer {
padding: 32px 0 24px;
}

.footer-inner {
grid-template-columns: 1fr;
gap: 24px;
}

.footer-links {
flex-direction: column;
gap: 20px;
}

.footer-bottom {
flex-direction: column;
text-align: center;
gap: 8px;
}
}

@media (max-width: 480px) {
.footer {
padding: 24px 0 20px;
}

.footer-brand .fsb-mark {
font-size: 1rem;
}

.footer-column h4 {
font-size: 0.8rem;
margin-bottom: 8px;
}

.footer-column a {
font-size: 0.85rem;
}

.footer-bottom p {
font-size: 0.8rem;
}
}

@media (min-width: 769px) {
Expand Down
Loading
Loading