@lightupai/polaris 0.0.74 → 0.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,22 +1,22 @@
1
1
  {
2
- "url": "http://localhost:3000",
3
- "timestamp": "2026-06-18T18:13:42.438Z",
2
+ "url": "http://localhost:50322",
3
+ "timestamp": "2026-06-18T20:27:49.897Z",
4
4
  "mobile": {
5
5
  "score": 100,
6
- "fcp": 1052.0306,
7
- "lcp": 1277.0306,
6
+ "fcp": 1082.8588,
7
+ "lcp": 1307.8588,
8
8
  "tbt": 0,
9
9
  "cls": 0,
10
- "si": 1052.0306,
11
- "weight": 77990
10
+ "si": 1082.8588,
11
+ "weight": 79823
12
12
  },
13
13
  "desktop": {
14
14
  "score": 100,
15
- "fcp": 281.5984,
16
- "lcp": 321.5984,
15
+ "fcp": 285.3152626391121,
16
+ "lcp": 325.3152626391121,
17
17
  "tbt": 0,
18
18
  "cls": 0,
19
- "si": 281.5984,
20
- "weight": 77990
19
+ "si": 285.3152626391121,
20
+ "weight": 79823
21
21
  }
22
22
  }
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "url": "https://app.withpolaris.ai",
3
- "timestamp": "2026-06-18T17:52:26.077Z",
3
+ "timestamp": "2026-06-18T20:25:07.614Z",
4
4
  "mobile": {
5
- "score": 84,
6
- "fcp": 3411.0824999999995,
7
- "lcp": 3411.0824999999995,
5
+ "score": 99,
6
+ "fcp": 1548.719,
7
+ "lcp": 1548.719,
8
8
  "tbt": 0,
9
9
  "cls": 0,
10
- "si": 3411.0824999999995,
11
- "weight": 179565
10
+ "si": 2085.526104013538,
11
+ "weight": 78524
12
12
  },
13
13
  "desktop": {
14
- "score": 91,
15
- "fcp": 1405.5195,
16
- "lcp": 1405.5195,
14
+ "score": 100,
15
+ "fcp": 500.655,
16
+ "lcp": 500.655,
17
17
  "tbt": 0,
18
18
  "cls": 0,
19
- "si": 1405.5195,
20
- "weight": 179543
19
+ "si": 843.4371999583243,
20
+ "weight": 78533
21
21
  }
22
22
  }
@@ -0,0 +1,366 @@
1
+ <!-- ============================================================
2
+ POLARIS - FEATURE COMPARISON MATRIX
3
+ Self-contained. No external dependencies, no JS required.
4
+ All styles are namespaced under .plrs-compare so they
5
+ won't collide with the rest of the site.
6
+ Paste this whole block wherever you want it to appear.
7
+ To recolor, edit the CSS variables in the :root-like block
8
+ at the top of <style> (under .plrs-compare).
9
+ ============================================================ -->
10
+ <section class="plrs-compare" aria-labelledby="plrs-compare-title">
11
+ <style>
12
+ .plrs-compare{
13
+ /* --- theme tokens: edit these to match the site exactly --- */
14
+ --plrs-ink:#0a0e1a; /* section background (deep night) */
15
+ --plrs-surface:#111726; /* table surface */
16
+ --plrs-surface-2:#0e1422; /* zebra row */
17
+ --plrs-line:#222c44; /* hairlines */
18
+ --plrs-text:#e8edf7; /* primary text */
19
+ --plrs-muted:#8794ad; /* secondary text / "no" cells */
20
+ --plrs-star:#7cc4ff; /* the accent - Polaris blue */
21
+ --plrs-star-soft:rgba(124,196,255,.14);
22
+ --plrs-radius:16px;
23
+
24
+ box-sizing:border-box;
25
+ background:
26
+ radial-gradient(1100px 380px at 78% -8%, rgba(124,196,255,.10), transparent 60%),
27
+ var(--plrs-ink);
28
+ color:var(--plrs-text);
29
+ font-family:'Inter',system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
30
+ font-feature-settings:'tnum' 1,'cv05' 1;
31
+ padding:clamp(40px,6vw,84px) clamp(18px,5vw,48px);
32
+ -webkit-font-smoothing:antialiased;
33
+ }
34
+ .plrs-compare *{box-sizing:border-box}
35
+
36
+ .plrs-compare .plrs-head{max-width:760px;margin:0 0 clamp(24px,4vw,40px)}
37
+ .plrs-compare .plrs-eyebrow{
38
+ display:inline-flex;align-items:center;gap:8px;
39
+ font-size:12px;letter-spacing:.16em;text-transform:uppercase;
40
+ color:var(--plrs-star);font-weight:600;margin:0 0 16px;
41
+ }
42
+ .plrs-compare .plrs-eyebrow::before{
43
+ content:"";width:6px;height:6px;border-radius:50%;
44
+ background:var(--plrs-star);box-shadow:0 0 12px 2px var(--plrs-star);
45
+ }
46
+ .plrs-compare h2{
47
+ font-size:clamp(26px,4.4vw,42px);line-height:1.05;letter-spacing:-.02em;
48
+ font-weight:680;margin:0 0 14px;
49
+ }
50
+ .plrs-compare h2 em{font-style:normal;color:var(--plrs-star)}
51
+ .plrs-compare .plrs-sub{
52
+ font-size:clamp(15px,1.6vw,17px);line-height:1.5;color:var(--plrs-muted);margin:0;max-width:60ch;
53
+ }
54
+
55
+ /* scroll wrapper for small screens */
56
+ .plrs-compare .plrs-scroll{
57
+ overflow-x:auto;-webkit-overflow-scrolling:touch;
58
+ border:1px solid var(--plrs-line);border-radius:var(--plrs-radius);
59
+ background:var(--plrs-surface);
60
+ }
61
+ .plrs-compare table{
62
+ width:100%;border-collapse:separate;border-spacing:0;
63
+ min-width:1020px;font-size:14.5px;
64
+ }
65
+ .plrs-compare thead th{
66
+ position:sticky;top:0;z-index:3;
67
+ background:var(--plrs-surface);
68
+ vertical-align:bottom;text-align:center;
69
+ padding:22px 14px 18px;font-weight:600;
70
+ border-bottom:1px solid var(--plrs-line);
71
+ white-space:nowrap;
72
+ }
73
+ .plrs-compare thead th .plrs-co-name{font-size:14px;color:var(--plrs-muted);font-weight:600}
74
+ .plrs-compare thead th .plrs-co-tag{display:block;font-size:11.5px;color:var(--plrs-muted);opacity:.72;font-weight:500;margin-top:4px;letter-spacing:.01em}
75
+
76
+ /* feature label column - sticky on horizontal scroll */
77
+ .plrs-compare th.plrs-rowhead,
78
+ .plrs-compare td.plrs-rowhead{
79
+ position:sticky;left:0;z-index:2;
80
+ text-align:left;font-weight:500;color:var(--plrs-text);
81
+ background:var(--plrs-surface);
82
+ min-width:240px;width:24%;
83
+ padding:16px 20px;border-bottom:1px solid var(--plrs-line);
84
+ }
85
+ .plrs-compare thead th.plrs-rowhead{z-index:4;color:var(--plrs-muted);font-weight:600}
86
+ .plrs-compare tbody tr:nth-child(even) td,
87
+ .plrs-compare tbody tr:nth-child(even) td.plrs-rowhead{background:var(--plrs-surface-2)}
88
+
89
+ .plrs-compare tbody td{
90
+ text-align:center;padding:16px 14px;
91
+ border-bottom:1px solid var(--plrs-line);color:var(--plrs-muted);
92
+ }
93
+ .plrs-compare tbody tr:last-child td{border-bottom:0}
94
+
95
+ /* section divider rows */
96
+ .plrs-compare .plrs-section-row td{
97
+ padding:12px 20px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;
98
+ font-weight:700;color:var(--plrs-muted);opacity:.7;
99
+ border-bottom:1px solid var(--plrs-line);
100
+ background:var(--plrs-ink)!important;
101
+ }
102
+
103
+ /* the Polaris column - the fixed point everything is measured against */
104
+ .plrs-compare .plrs-col-polaris{
105
+ background:var(--plrs-star-soft)!important;
106
+ border-left:1px solid rgba(124,196,255,.45);
107
+ border-right:1px solid rgba(124,196,255,.45);
108
+ color:var(--plrs-text);
109
+ }
110
+ .plrs-compare thead th.plrs-col-polaris{
111
+ background:linear-gradient(180deg,rgba(124,196,255,.22),var(--plrs-star-soft))!important;
112
+ border-top:1px solid rgba(124,196,255,.55);
113
+ border-top-left-radius:12px;border-top-right-radius:12px;
114
+ }
115
+ .plrs-compare thead th.plrs-col-polaris .plrs-co-name{
116
+ color:var(--plrs-text);font-weight:720;font-size:16px;
117
+ display:inline-flex;align-items:center;gap:7px;
118
+ }
119
+ .plrs-compare thead th.plrs-col-polaris .plrs-co-tag{color:var(--plrs-star);opacity:.95}
120
+
121
+ /* yes / no / partial marks */
122
+ .plrs-compare .yes{
123
+ display:inline-flex;align-items:center;justify-content:center;
124
+ width:24px;height:24px;border-radius:50%;
125
+ background:rgba(124,196,255,.16);
126
+ }
127
+ .plrs-compare .yes svg{width:13px;height:13px;stroke:var(--plrs-star);stroke-width:2.6;fill:none}
128
+ .plrs-compare .plrs-col-polaris .yes{background:var(--plrs-star);box-shadow:0 0 14px rgba(124,196,255,.5)}
129
+ .plrs-compare .plrs-col-polaris .yes svg{stroke:#06101f}
130
+ .plrs-compare .no{display:inline-block;width:14px;height:2px;border-radius:2px;background:var(--plrs-line)}
131
+ .plrs-compare .partial{font-size:12px;color:var(--plrs-muted);font-weight:500}
132
+ .plrs-compare .plrs-col-polaris .partial{color:var(--plrs-star)}
133
+ .plrs-compare .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
134
+
135
+ .plrs-compare .plrs-foot{
136
+ margin:22px 2px 0;font-size:13px;line-height:1.55;color:var(--plrs-muted);max-width:74ch;
137
+ }
138
+ .plrs-compare .plrs-foot strong{color:var(--plrs-text);font-weight:600}
139
+
140
+ @media (max-width:560px){
141
+ .plrs-compare th.plrs-rowhead,.plrs-compare td.plrs-rowhead{min-width:180px;width:auto;padding:14px 14px}
142
+ .plrs-compare table{font-size:13px}
143
+ }
144
+ </style>
145
+
146
+ <div class="plrs-head">
147
+ <p class="plrs-eyebrow">How Polaris compares</p>
148
+ <h2 id="plrs-compare-title">Every tool records. <em>Polaris connects your team.</em></h2>
149
+ <p class="plrs-sub">Most AI coding session tools are built for one developer replaying their own work. Polaris is the live, shared layer your whole team works in &mdash; and the memory that outlasts the session.</p>
150
+ </div>
151
+
152
+ <div class="plrs-scroll" role="region" aria-label="Feature comparison: Polaris versus other AI coding session tools" tabindex="0">
153
+ <table>
154
+ <thead>
155
+ <tr>
156
+ <th class="plrs-rowhead" scope="col">Capability</th>
157
+ <th class="plrs-col-polaris" scope="col">
158
+ <span class="plrs-co-name">Polaris</span>
159
+ <span class="plrs-co-tag">Live team layer</span>
160
+ </th>
161
+ <th scope="col"><span class="plrs-co-name">AgentReplay</span><span class="plrs-co-tag">Shareable replays</span></th>
162
+ <th scope="col"><span class="plrs-co-name">SessionForge</span><span class="plrs-co-tag">Remote sessions</span></th>
163
+ <th scope="col"><span class="plrs-co-name">vibe-replay</span><span class="plrs-co-tag">Replay + analytics</span></th>
164
+ <th scope="col"><span class="plrs-co-name">Longhouse</span><span class="plrs-co-tag">Mission control</span></th>
165
+ <th scope="col"><span class="plrs-co-name">Mantra</span><span class="plrs-co-tag">Session manager</span></th>
166
+ <th scope="col"><span class="plrs-co-name">claude-devtools</span><span class="plrs-co-tag">Session inspector</span></th>
167
+ <th scope="col"><span class="plrs-co-name">SessionBase</span><span class="plrs-co-tag">Save &amp; share</span></th>
168
+ </tr>
169
+ </thead>
170
+ <tbody>
171
+ <!-- ── SECTION: TABLE STAKES ── -->
172
+ <tr class="plrs-section-row"><td colspan="9">Record &amp; replay</td></tr>
173
+
174
+ <tr>
175
+ <td class="plrs-rowhead" scope="row">Captures prompts, responses &amp; tool calls</td>
176
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
177
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
178
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
179
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
180
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
181
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
182
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
183
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
184
+ </tr>
185
+ <tr>
186
+ <td class="plrs-rowhead" scope="row">Replay &amp; audit after the fact</td>
187
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
188
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
189
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
190
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
191
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
192
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
193
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
194
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
195
+ </tr>
196
+ <tr>
197
+ <td class="plrs-rowhead" scope="row">Shareable session links</td>
198
+ <td class="plrs-col-polaris"><span class="partial">via Slack</span></td>
199
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
200
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
201
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
202
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
203
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
204
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
205
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
206
+ </tr>
207
+ <tr>
208
+ <td class="plrs-rowhead" scope="row">Multi-tool (Claude Code + Cursor + more)</td>
209
+ <td class="plrs-col-polaris"><span class="partial">Claude Code</span></td>
210
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
211
+ <td><span class="partial">Claude Code</span></td>
212
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
213
+ <td><span class="partial">Claude Code</span></td>
214
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
215
+ <td><span class="partial">Claude Code</span></td>
216
+ <td><span class="partial">Claude Code</span></td>
217
+ </tr>
218
+ <tr>
219
+ <td class="plrs-rowhead" scope="row">Analytics &amp; cost tracking</td>
220
+ <td class="plrs-col-polaris"><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
221
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
222
+ <td><span class="partial">Metrics</span></td>
223
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
224
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
225
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
226
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
227
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
228
+ </tr>
229
+ <tr>
230
+ <td class="plrs-rowhead" scope="row">Cross-session search</td>
231
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
232
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
233
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
234
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
235
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
236
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
237
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
238
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
239
+ </tr>
240
+
241
+ <!-- ── SECTION: TEAM ── -->
242
+ <tr class="plrs-section-row"><td colspan="9">Team collaboration</td></tr>
243
+
244
+ <tr>
245
+ <td class="plrs-rowhead" scope="row">Built for teams, not just solo</td>
246
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
247
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
248
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
249
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
250
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
251
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
252
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
253
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
254
+ </tr>
255
+ <tr>
256
+ <td class="plrs-rowhead" scope="row">Team dashboard &amp; RBAC</td>
257
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
258
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
259
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
260
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
261
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
262
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
263
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
264
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
265
+ </tr>
266
+ <tr>
267
+ <td class="plrs-rowhead" scope="row">Attach session trace to a PR</td>
268
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
269
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
270
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
271
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
272
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
273
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
274
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
275
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
276
+ </tr>
277
+
278
+ <!-- ── SECTION: ONLY POLARIS ── -->
279
+ <tr class="plrs-section-row"><td colspan="9">Live multiplayer</td></tr>
280
+
281
+ <tr>
282
+ <td class="plrs-rowhead" scope="row">Real-time streaming to your team</td>
283
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
284
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
285
+ <td><span class="partial">Terminal</span></td>
286
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
287
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
288
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
289
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
290
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
291
+ </tr>
292
+ <tr>
293
+ <td class="plrs-rowhead" scope="row">Slack-native &mdash; no new app to learn</td>
294
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
295
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
296
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
297
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
298
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
299
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
300
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
301
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
302
+ </tr>
303
+ <tr>
304
+ <td class="plrs-rowhead" scope="row">Pull a teammate into a live session</td>
305
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
306
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
307
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
308
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
309
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
310
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
311
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
312
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
313
+ </tr>
314
+ <tr>
315
+ <td class="plrs-rowhead" scope="row">Redirect the agent mid-session</td>
316
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
317
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
318
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
319
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
320
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
321
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
322
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
323
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
324
+ </tr>
325
+ <tr>
326
+ <td class="plrs-rowhead" scope="row">Cross-agent shared context</td>
327
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
328
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
329
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
330
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
331
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
332
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
333
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
334
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
335
+ </tr>
336
+ <tr>
337
+ <td class="plrs-rowhead" scope="row">Team-wide searchable memory</td>
338
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
339
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
340
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
341
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
342
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
343
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
344
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
345
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
346
+ </tr>
347
+ <tr>
348
+ <td class="plrs-rowhead" scope="row">Open source</td>
349
+ <td class="plrs-col-polaris"><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
350
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
351
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
352
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
353
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
354
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
355
+ <td><span class="yes"><svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></span><span class="sr-only">Yes</span></td>
356
+ <td><span class="no" aria-hidden="true"></span><span class="sr-only">No</span></td>
357
+ </tr>
358
+ </tbody>
359
+ </table>
360
+ </div>
361
+
362
+ <p class="plrs-foot"><strong>How to read this:</strong> every tool in this table is good at recording and replaying sessions. Where they differ is what happens <em>during</em> the session and <em>across</em> the team. Polaris streams every session to Slack as it happens, lets anyone step in to advise or redirect the agent, and keeps the full history as searchable team memory. We don't do analytics or cost tracking yet &mdash; use vibe-replay or Mantra for that today.</p>
363
+ </section>
364
+ <!-- ============================================================
365
+ END POLARIS COMPARISON MATRIX
366
+ ============================================================ -->
package/docs/seo-geo.md CHANGED
@@ -50,6 +50,11 @@ Longhouse, SessionForge, CC Replay, Blackcrab, Mantra, Nokos.
50
50
  - [x] **GitHub README as the canonical source** — rewrote intro to lead with "Gong for Claude Code sessions", added "What Polaris does" section matching LLM fan-out queries
51
51
  - [x] **npm package description** — added description, 10 keywords, homepage, and repo URL to package.json
52
52
 
53
+ - [ ] **Comparison matrix into landing page and blog**
54
+ Draft in `docs/comparison-matrix.html`. Needs review on positioning,
55
+ competitor accuracy, and feature claims before publishing. Use as
56
+ a landing page section and as the basis for a comparison blog post.
57
+
53
58
  - [ ] **Comparison / "alternatives" blog post**
54
59
  LLMs heavily cite comparison pages. Write a post like "Polaris vs
55
60
  AgentReplay vs SessionForge — AI coding session tools compared"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightupai/polaris",
3
- "version": "0.0.74",
3
+ "version": "0.0.76",
4
4
  "description": "Record and stream Claude Code sessions to Slack. Like Gong for AI coding — capture every prompt, response, and tool call. Multiplayer collaboration across AI coding agents.",
5
5
  "keywords": [
6
6
  "claude-code",