comparison mrjunejune/src/jrpg/index.html @ 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
1 <!doctype html> 1 <!doctype html>
2 <html lang="en" data-zen-theme="cyberpunk"> 2 <html lang="en" data-zen-theme="cyberpunk">
3 <head> 3 <head>
4 <title>Shiba Quest | MrJuneJune</title> 4 <title>Shiba Quest | MrJuneJune</title>
5 {{/parts/base_head.html}} 5 {{/parts/base_head.html}}
6 <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image"> 6 <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image" media="not ((max-width: 52rem) and (orientation: portrait))">
7 <link rel="preload" href="/public/jrpg/background-frame-mobile.webp" as="image" media="(max-width: 52rem) and (orientation: portrait)">
7 <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image"> 8 <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image">
8 <link rel="stylesheet" href="/jrpg/jrpg.css"> 9 <link rel="stylesheet" href="/jrpg/jrpg.css">
9 <script type="module" src="/jrpg/jrpg.js"></script> 10 <script type="module" src="/jrpg/jrpg.js"></script>
10 </head> 11 </head>
11 <body class="jrpg-page"> 12 <body class="jrpg-page">
44 <a href="/" aria-label="Close interface and return home"> 45 <a href="/" aria-label="Close interface and return home">
45 <zen-icon name="close"></zen-icon> 46 <zen-icon name="close"></zen-icon>
46 </a> 47 </a>
47 </zen-button> 48 </zen-button>
48 </nav> 49 </nav>
50 <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs">
51 <button
52 type="button"
53 data-mobile-menu-toggle
54 aria-label="Toggle destination menu"
55 aria-expanded="true"
56 aria-controls="jrpg-destination-menu"
57 >
58 <zen-icon name="menu"></zen-icon>
59 </button>
60 </zen-button>
49 <footer class="jrpg-frame-telemetry" aria-label="System telemetry"> 61 <footer class="jrpg-frame-telemetry" aria-label="System telemetry">
50 <span aria-label="Temperature unavailable">N/A</span> 62 <span aria-label="Temperature unavailable">N/A</span>
51 <span aria-label="User June">JUNE</span> 63 <span data-frame-account aria-live="polite"><a href="/login?next=/jrpg">LOGIN</a></span>
52 <span data-frame-network aria-label="Status online">ONLINE</span> 64 <span data-frame-network aria-label="Status online">ONLINE</span>
53 <time data-frame-uptime aria-label="Uptime">00:00:00</time> 65 <time data-frame-uptime aria-label="Uptime">00:00:00</time>
54 </footer> 66 </footer>
55 67
56 <section class="jrpg-scene" aria-label="Shiba Quest conversation"> 68 <section class="jrpg-scene" aria-label="Shiba Quest conversation">
101 </section> 113 </section>
102 114
103 <section class="jrpg-utility" aria-label="Selected destination"> 115 <section class="jrpg-utility" aria-label="Selected destination">
104 <mjj-jrpg-preview data-selection="resume"> 116 <mjj-jrpg-preview data-selection="resume">
105 <article class="jrpg-preview-panel" aria-live="polite"> 117 <article class="jrpg-preview-panel" aria-live="polite">
106 <p class="jrpg-preview-kicker" data-preview-kicker>CHARACTER RECORD</p>
107 <zen-heading size="xl"> 118 <zen-heading size="xl">
108 <h2 data-preview-title>Resume</h2> 119 <h2 data-preview-title>Resume</h2>
109 </zen-heading> 120 </zen-heading>
110 <p data-preview-copy>Experience, projects, and the systems I have helped build.</p> 121 <p data-preview-copy>
122 Member of Technical Staff and engineering leader with 10+ years building AI agent platforms and production systems.
123 </p>
111 <ul class="jrpg-work-showcase" data-work-showcase> 124 <ul class="jrpg-work-showcase" data-work-showcase>
112 <li> 125 <li>
113 <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/"> 126 <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/">
114 <span>Copilot Tasks</span> 127 <span>Copilot Tasks</span>
115 <small>Agentic execution</small> 128 <small>Agentic execution</small>
191 </div> 204 </div>
192 </dialog> 205 </dialog>
193 </zen-dialog> 206 </zen-dialog>
194 </article> 207 </article>
195 </mjj-jrpg-preview> 208 </mjj-jrpg-preview>
209
210 <mjj-conversation-archive hidden aria-label="Conversations">
211 <div class="jrpg-archive-heading">
212 <h2>Archive</h2>
213 <zen-button appearance="plain" size="xs">
214 <button type="button" data-archive-close aria-label="Close conversations">
215 <zen-icon name="close"></zen-icon>
216 </button>
217 </zen-button>
218 </div>
219 <div class="jrpg-archive-actions">
220 <zen-button appearance="plain" size="sm">
221 <button type="button" data-archive-new>
222 <zen-icon name="plus"></zen-icon>
223 New
224 </button>
225 </zen-button>
226 </div>
227 <ol class="jrpg-archive-list" data-archive-list aria-label="Conversations">
228 </ol>
229 <zen-button appearance="plain" size="sm" data-archive-load-more-owner hidden>
230 <button type="button" data-archive-load-more>Load more</button>
231 </zen-button>
232 <p class="jrpg-archive-status" data-archive-status aria-live="polite">Loading conversations...</p>
233 <dialog
234 class="jrpg-archive-dialog"
235 data-archive-delete-dialog
236 aria-labelledby="archive-delete-title"
237 aria-modal="true"
238 >
239 <p id="archive-delete-title" class="jrpg-archive-dialog-title">Delete this conversation?</p>
240 <p data-archive-delete-name class="jrpg-archive-dialog-subtitle"></p>
241 <div class="jrpg-archive-dialog-actions">
242 <zen-button appearance="plain" size="md">
243 <button type="button" data-archive-delete-cancel>Cancel</button>
244 </zen-button>
245 <zen-button appearance="plain" size="md">
246 <button type="button" data-archive-delete-confirm>Delete</button>
247 </zen-button>
248 </div>
249 </dialog>
250 <dialog
251 class="jrpg-archive-dialog"
252 data-archive-rename-dialog
253 aria-labelledby="archive-rename-title"
254 aria-modal="true"
255 >
256 <p id="archive-rename-title" class="jrpg-archive-dialog-title">Rename conversation</p>
257 <form data-archive-rename-form novalidate>
258 <zen-field appearance="plain" size="md">
259 <label for="archive-rename-input">New title</label>
260 <input
261 id="archive-rename-input"
262 data-archive-rename-input
263 type="text"
264 maxlength="200"
265 required
266 autocomplete="off"
267 >
268 </zen-field>
269 <div class="jrpg-archive-dialog-actions">
270 <zen-button appearance="plain" size="md">
271 <button type="button" data-archive-rename-cancel>Cancel</button>
272 </zen-button>
273 <zen-button appearance="plain" size="md">
274 <button type="submit">Save</button>
275 </zen-button>
276 </div>
277 </form>
278 </dialog>
279 </mjj-conversation-archive>
196 </section> 280 </section>
197 281
198 <mjj-jrpg-composer> 282 <mjj-jrpg-composer>
199 <form class="jrpg-composer" data-composer> 283 <form class="jrpg-composer" data-composer>
200 <zen-field appearance="plain" size="lg"> 284 <zen-field appearance="plain" size="lg">
220 Cancel 304 Cancel
221 <zen-icon name="close"></zen-icon> 305 <zen-icon name="close"></zen-icon>
222 </button> 306 </button>
223 </zen-button> 307 </zen-button>
224 </div> 308 </div>
309 <p class="jrpg-composer-quota" data-quota aria-live="polite" hidden></p>
225 <p class="jrpg-composer-hint">Enter to send / Shift + Enter for a new line</p> 310 <p class="jrpg-composer-hint">Enter to send / Shift + Enter for a new line</p>
226 </form> 311 </form>
227 </mjj-jrpg-composer> 312 </mjj-jrpg-composer>
228 313
229 <mjj-jrpg-menu> 314 <mjj-jrpg-menu id="jrpg-destination-menu">
230 <nav aria-label="Shiba Quest destinations"> 315 <nav aria-label="Shiba Quest destinations">
231 <p class="jrpg-menu-label">Menu</p> 316 <p class="jrpg-menu-label">Menu</p>
232 <ul> 317 <ul>
233 <li> 318 <li>
234 <zen-button appearance="plain" size="sm"> 319 <zen-button appearance="plain" size="sm">
252 <zen-icon name="chevron-right"></zen-icon> 337 <zen-icon name="chevron-right"></zen-icon>
253 Blogs 338 Blogs
254 </button> 339 </button>
255 </zen-button> 340 </zen-button>
256 </li> 341 </li>
342 <li>
343 <zen-button appearance="plain" size="sm">
344 <button type="button" data-preview="conversations" aria-pressed="false">
345 <zen-icon name="chevron-right"></zen-icon>
346 Conversations
347 </button>
348 </zen-button>
349 </li>
257 </ul> 350 </ul>
258 </nav> 351 </nav>
259 </mjj-jrpg-menu> 352 </mjj-jrpg-menu>
353
354 <zen-dialog class="jrpg-login-dialog-owner" data-login-dialog-owner>
355 <zen-button appearance="plain" size="md" hidden>
356 <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button>
357 </zen-button>
358 <dialog
359 class="jrpg-login-dialog"
360 data-login-dialog
361 aria-labelledby="jrpg-login-title"
362 aria-modal="true"
363 >
364 <div class="jrpg-login-dialog-header">
365 <h2 id="jrpg-login-title">SIGN IN</h2>
366 <zen-button appearance="plain" size="md">
367 <button type="button" data-zen-close aria-label="Close sign-in dialog">
368 <zen-icon name="close"></zen-icon>
369 </button>
370 </zen-button>
371 </div>
372 <div role="alert" data-login-error aria-live="assertive" hidden></div>
373 <form data-login-form novalidate>
374 <zen-field appearance="plain" size="md">
375 <label for="jrpg-login-username">Username</label>
376 <input
377 id="jrpg-login-username"
378 name="username"
379 type="text"
380 autocomplete="username"
381 autocapitalize="none"
382 spellcheck="false"
383 required
384 maxlength="32"
385 >
386 </zen-field>
387 <zen-field appearance="plain" size="md">
388 <label for="jrpg-login-password">Password</label>
389 <input
390 id="jrpg-login-password"
391 name="password"
392 type="password"
393 autocomplete="current-password"
394 required
395 minlength="12"
396 maxlength="1024"
397 >
398 </zen-field>
399 <div class="jrpg-login-dialog-actions">
400 <zen-button appearance="plain" size="md">
401 <button type="button" data-login-cancel data-zen-close>Cancel</button>
402 </zen-button>
403 <zen-button appearance="plain" size="md">
404 <button type="submit" data-login-submit>Sign in</button>
405 </zen-button>
406 </div>
407 </form>
408 </dialog>
409 </zen-dialog>
260 </div> 410 </div>
261 </mjj-jrpg-shell> 411 </mjj-jrpg-shell>
262 </main> 412 </main>
263 </body> 413 </body>
264 </html> 414 </html>