Mercurial
comparison mrjunejune/test/snapshots/jrpg.snapshot @ 264:04fee26ecce0
add authenticated JRPG conversation platform
Add reusable auth/session storage, owned conversation recovery, guest quotas, admin workflows, URL-routed conversation UI, mobile frame support, and parallel browser acceptance.
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Fri, 07 Aug 2026 07:34:12 -0700 |
| parents | ee04e4e69fed |
| children | 056790c4fb0d |
comparison
equal
deleted
inserted
replaced
| 263:ee04e4e69fed | 264:04fee26ecce0 |
|---|---|
| 30 src="/public/design-system/components/index.js" | 30 src="/public/design-system/components/index.js" |
| 31 ></script> | 31 ></script> |
| 32 | 32 |
| 33 <script src="/public/pwa-register.js" defer></script> | 33 <script src="/public/pwa-register.js" defer></script> |
| 34 | 34 |
| 35 <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image"> | 35 <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image" media="not ((max-width: 52rem) and (orientation: portrait))"> |
| 36 <link rel="preload" href="/public/jrpg/background-frame-mobile.webp" as="image" media="(max-width: 52rem) and (orientation: portrait)"> | |
| 36 <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image"> | 37 <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image"> |
| 37 <link rel="stylesheet" href="/jrpg/jrpg.css"> | 38 <link rel="stylesheet" href="/jrpg/jrpg.css"> |
| 38 <script type="module" src="/jrpg/jrpg.js"></script> | 39 <script type="module" src="/jrpg/jrpg.js"></script> |
| 39 </head> | 40 </head> |
| 40 <body class="jrpg-page"> | 41 <body class="jrpg-page"> |
| 73 <a href="/" aria-label="Close interface and return home"> | 74 <a href="/" aria-label="Close interface and return home"> |
| 74 <zen-icon name="close"></zen-icon> | 75 <zen-icon name="close"></zen-icon> |
| 75 </a> | 76 </a> |
| 76 </zen-button> | 77 </zen-button> |
| 77 </nav> | 78 </nav> |
| 79 <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs"> | |
| 80 <button | |
| 81 type="button" | |
| 82 data-mobile-menu-toggle | |
| 83 aria-label="Toggle destination menu" | |
| 84 aria-expanded="true" | |
| 85 aria-controls="jrpg-destination-menu" | |
| 86 > | |
| 87 <zen-icon name="menu"></zen-icon> | |
| 88 </button> | |
| 89 </zen-button> | |
| 78 <footer class="jrpg-frame-telemetry" aria-label="System telemetry"> | 90 <footer class="jrpg-frame-telemetry" aria-label="System telemetry"> |
| 79 <span aria-label="Temperature unavailable">N/A</span> | 91 <span aria-label="Temperature unavailable">N/A</span> |
| 80 <span aria-label="User June">JUNE</span> | 92 <span data-frame-account aria-live="polite"><a href="/login?next=/jrpg">LOGIN</a></span> |
| 81 <span data-frame-network aria-label="Status online">ONLINE</span> | 93 <span data-frame-network aria-label="Status online">ONLINE</span> |
| 82 <time data-frame-uptime aria-label="Uptime">00:00:00</time> | 94 <time data-frame-uptime aria-label="Uptime">00:00:00</time> |
| 83 </footer> | 95 </footer> |
| 84 | 96 |
| 85 <section class="jrpg-scene" aria-label="Shiba Quest conversation"> | 97 <section class="jrpg-scene" aria-label="Shiba Quest conversation"> |
| 130 </section> | 142 </section> |
| 131 | 143 |
| 132 <section class="jrpg-utility" aria-label="Selected destination"> | 144 <section class="jrpg-utility" aria-label="Selected destination"> |
| 133 <mjj-jrpg-preview data-selection="resume"> | 145 <mjj-jrpg-preview data-selection="resume"> |
| 134 <article class="jrpg-preview-panel" aria-live="polite"> | 146 <article class="jrpg-preview-panel" aria-live="polite"> |
| 135 <p class="jrpg-preview-kicker" data-preview-kicker>CHARACTER RECORD</p> | |
| 136 <zen-heading size="xl"> | 147 <zen-heading size="xl"> |
| 137 <h2 data-preview-title>Resume</h2> | 148 <h2 data-preview-title>Resume</h2> |
| 138 </zen-heading> | 149 </zen-heading> |
| 139 <p data-preview-copy>Experience, projects, and the systems I have helped build.</p> | 150 <p data-preview-copy> |
| 151 Member of Technical Staff and engineering leader with 10+ years building AI agent platforms and production systems. | |
| 152 </p> | |
| 140 <ul class="jrpg-work-showcase" data-work-showcase> | 153 <ul class="jrpg-work-showcase" data-work-showcase> |
| 141 <li> | 154 <li> |
| 142 <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/"> | 155 <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/"> |
| 143 <span>Copilot Tasks</span> | 156 <span>Copilot Tasks</span> |
| 144 <small>Agentic execution</small> | 157 <small>Agentic execution</small> |
| 220 </div> | 233 </div> |
| 221 </dialog> | 234 </dialog> |
| 222 </zen-dialog> | 235 </zen-dialog> |
| 223 </article> | 236 </article> |
| 224 </mjj-jrpg-preview> | 237 </mjj-jrpg-preview> |
| 238 | |
| 239 <mjj-conversation-archive hidden aria-label="Conversations"> | |
| 240 <div class="jrpg-archive-heading"> | |
| 241 <h2>Archive</h2> | |
| 242 <zen-button appearance="plain" size="xs"> | |
| 243 <button type="button" data-archive-close aria-label="Close conversations"> | |
| 244 <zen-icon name="close"></zen-icon> | |
| 245 </button> | |
| 246 </zen-button> | |
| 247 </div> | |
| 248 <div class="jrpg-archive-actions"> | |
| 249 <zen-button appearance="plain" size="sm"> | |
| 250 <button type="button" data-archive-new> | |
| 251 <zen-icon name="plus"></zen-icon> | |
| 252 New | |
| 253 </button> | |
| 254 </zen-button> | |
| 255 </div> | |
| 256 <ol class="jrpg-archive-list" data-archive-list aria-label="Conversations"> | |
| 257 </ol> | |
| 258 <zen-button appearance="plain" size="sm" data-archive-load-more-owner hidden> | |
| 259 <button type="button" data-archive-load-more>Load more</button> | |
| 260 </zen-button> | |
| 261 <p class="jrpg-archive-status" data-archive-status aria-live="polite">Loading conversations...</p> | |
| 262 <dialog | |
| 263 class="jrpg-archive-dialog" | |
| 264 data-archive-delete-dialog | |
| 265 aria-labelledby="archive-delete-title" | |
| 266 aria-modal="true" | |
| 267 > | |
| 268 <p id="archive-delete-title" class="jrpg-archive-dialog-title">Delete this conversation?</p> | |
| 269 <p data-archive-delete-name class="jrpg-archive-dialog-subtitle"></p> | |
| 270 <div class="jrpg-archive-dialog-actions"> | |
| 271 <zen-button appearance="plain" size="md"> | |
| 272 <button type="button" data-archive-delete-cancel>Cancel</button> | |
| 273 </zen-button> | |
| 274 <zen-button appearance="plain" size="md"> | |
| 275 <button type="button" data-archive-delete-confirm>Delete</button> | |
| 276 </zen-button> | |
| 277 </div> | |
| 278 </dialog> | |
| 279 <dialog | |
| 280 class="jrpg-archive-dialog" | |
| 281 data-archive-rename-dialog | |
| 282 aria-labelledby="archive-rename-title" | |
| 283 aria-modal="true" | |
| 284 > | |
| 285 <p id="archive-rename-title" class="jrpg-archive-dialog-title">Rename conversation</p> | |
| 286 <form data-archive-rename-form novalidate> | |
| 287 <zen-field appearance="plain" size="md"> | |
| 288 <label for="archive-rename-input">New title</label> | |
| 289 <input | |
| 290 id="archive-rename-input" | |
| 291 data-archive-rename-input | |
| 292 type="text" | |
| 293 maxlength="200" | |
| 294 required | |
| 295 autocomplete="off" | |
| 296 > | |
| 297 </zen-field> | |
| 298 <div class="jrpg-archive-dialog-actions"> | |
| 299 <zen-button appearance="plain" size="md"> | |
| 300 <button type="button" data-archive-rename-cancel>Cancel</button> | |
| 301 </zen-button> | |
| 302 <zen-button appearance="plain" size="md"> | |
| 303 <button type="submit">Save</button> | |
| 304 </zen-button> | |
| 305 </div> | |
| 306 </form> | |
| 307 </dialog> | |
| 308 </mjj-conversation-archive> | |
| 225 </section> | 309 </section> |
| 226 | 310 |
| 227 <mjj-jrpg-composer> | 311 <mjj-jrpg-composer> |
| 228 <form class="jrpg-composer" data-composer> | 312 <form class="jrpg-composer" data-composer> |
| 229 <zen-field appearance="plain" size="lg"> | 313 <zen-field appearance="plain" size="lg"> |
| 249 Cancel | 333 Cancel |
| 250 <zen-icon name="close"></zen-icon> | 334 <zen-icon name="close"></zen-icon> |
| 251 </button> | 335 </button> |
| 252 </zen-button> | 336 </zen-button> |
| 253 </div> | 337 </div> |
| 338 <p class="jrpg-composer-quota" data-quota aria-live="polite" hidden></p> | |
| 254 <p class="jrpg-composer-hint">Enter to send / Shift + Enter for a new line</p> | 339 <p class="jrpg-composer-hint">Enter to send / Shift + Enter for a new line</p> |
| 255 </form> | 340 </form> |
| 256 </mjj-jrpg-composer> | 341 </mjj-jrpg-composer> |
| 257 | 342 |
| 258 <mjj-jrpg-menu> | 343 <mjj-jrpg-menu id="jrpg-destination-menu"> |
| 259 <nav aria-label="Shiba Quest destinations"> | 344 <nav aria-label="Shiba Quest destinations"> |
| 260 <p class="jrpg-menu-label">Menu</p> | 345 <p class="jrpg-menu-label">Menu</p> |
| 261 <ul> | 346 <ul> |
| 262 <li> | 347 <li> |
| 263 <zen-button appearance="plain" size="sm"> | 348 <zen-button appearance="plain" size="sm"> |
| 281 <zen-icon name="chevron-right"></zen-icon> | 366 <zen-icon name="chevron-right"></zen-icon> |
| 282 Blogs | 367 Blogs |
| 283 </button> | 368 </button> |
| 284 </zen-button> | 369 </zen-button> |
| 285 </li> | 370 </li> |
| 371 <li> | |
| 372 <zen-button appearance="plain" size="sm"> | |
| 373 <button type="button" data-preview="conversations" aria-pressed="false"> | |
| 374 <zen-icon name="chevron-right"></zen-icon> | |
| 375 Conversations | |
| 376 </button> | |
| 377 </zen-button> | |
| 378 </li> | |
| 286 </ul> | 379 </ul> |
| 287 </nav> | 380 </nav> |
| 288 </mjj-jrpg-menu> | 381 </mjj-jrpg-menu> |
| 382 | |
| 383 <zen-dialog class="jrpg-login-dialog-owner" data-login-dialog-owner> | |
| 384 <zen-button appearance="plain" size="md" hidden> | |
| 385 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> | |
| 386 </zen-button> | |
| 387 <dialog | |
| 388 class="jrpg-login-dialog" | |
| 389 data-login-dialog | |
| 390 aria-labelledby="jrpg-login-title" | |
| 391 aria-modal="true" | |
| 392 > | |
| 393 <div class="jrpg-login-dialog-header"> | |
| 394 <h2 id="jrpg-login-title">SIGN IN</h2> | |
| 395 <zen-button appearance="plain" size="md"> | |
| 396 <button type="button" data-zen-close aria-label="Close sign-in dialog"> | |
| 397 <zen-icon name="close"></zen-icon> | |
| 398 </button> | |
| 399 </zen-button> | |
| 400 </div> | |
| 401 <div role="alert" data-login-error aria-live="assertive" hidden></div> | |
| 402 <form data-login-form novalidate> | |
| 403 <zen-field appearance="plain" size="md"> | |
| 404 <label for="jrpg-login-username">Username</label> | |
| 405 <input | |
| 406 id="jrpg-login-username" | |
| 407 name="username" | |
| 408 type="text" | |
| 409 autocomplete="username" | |
| 410 autocapitalize="none" | |
| 411 spellcheck="false" | |
| 412 required | |
| 413 maxlength="32" | |
| 414 > | |
| 415 </zen-field> | |
| 416 <zen-field appearance="plain" size="md"> | |
| 417 <label for="jrpg-login-password">Password</label> | |
| 418 <input | |
| 419 id="jrpg-login-password" | |
| 420 name="password" | |
| 421 type="password" | |
| 422 autocomplete="current-password" | |
| 423 required | |
| 424 minlength="12" | |
| 425 maxlength="1024" | |
| 426 > | |
| 427 </zen-field> | |
| 428 <div class="jrpg-login-dialog-actions"> | |
| 429 <zen-button appearance="plain" size="md"> | |
| 430 <button type="button" data-login-cancel data-zen-close>Cancel</button> | |
| 431 </zen-button> | |
| 432 <zen-button appearance="plain" size="md"> | |
| 433 <button type="submit" data-login-submit>Sign in</button> | |
| 434 </zen-button> | |
| 435 </div> | |
| 436 </form> | |
| 437 </dialog> | |
| 438 </zen-dialog> | |
| 289 </div> | 439 </div> |
| 290 </mjj-jrpg-shell> | 440 </mjj-jrpg-shell> |
| 291 </main> | 441 </main> |
| 292 </body> | 442 </body> |
| 293 </html> | 443 </html> |