Mercurial
diff 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 |
line wrap: on
line diff
--- a/mrjunejune/test/snapshots/jrpg.snapshot Thu Aug 06 11:31:30 2026 -0700 +++ b/mrjunejune/test/snapshots/jrpg.snapshot Fri Aug 07 07:34:12 2026 -0700 @@ -32,7 +32,8 @@ <script src="/public/pwa-register.js" defer></script> - <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image"> + <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image" media="not ((max-width: 52rem) and (orientation: portrait))"> + <link rel="preload" href="/public/jrpg/background-frame-mobile.webp" as="image" media="(max-width: 52rem) and (orientation: portrait)"> <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image"> <link rel="stylesheet" href="/jrpg/jrpg.css"> <script type="module" src="/jrpg/jrpg.js"></script> @@ -75,9 +76,20 @@ </a> </zen-button> </nav> + <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs"> + <button + type="button" + data-mobile-menu-toggle + aria-label="Toggle destination menu" + aria-expanded="true" + aria-controls="jrpg-destination-menu" + > + <zen-icon name="menu"></zen-icon> + </button> + </zen-button> <footer class="jrpg-frame-telemetry" aria-label="System telemetry"> <span aria-label="Temperature unavailable">N/A</span> - <span aria-label="User June">JUNE</span> + <span data-frame-account aria-live="polite"><a href="/login?next=/jrpg">LOGIN</a></span> <span data-frame-network aria-label="Status online">ONLINE</span> <time data-frame-uptime aria-label="Uptime">00:00:00</time> </footer> @@ -132,11 +144,12 @@ <section class="jrpg-utility" aria-label="Selected destination"> <mjj-jrpg-preview data-selection="resume"> <article class="jrpg-preview-panel" aria-live="polite"> - <p class="jrpg-preview-kicker" data-preview-kicker>CHARACTER RECORD</p> <zen-heading size="xl"> <h2 data-preview-title>Resume</h2> </zen-heading> - <p data-preview-copy>Experience, projects, and the systems I have helped build.</p> + <p data-preview-copy> + Member of Technical Staff and engineering leader with 10+ years building AI agent platforms and production systems. + </p> <ul class="jrpg-work-showcase" data-work-showcase> <li> <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/"> @@ -222,6 +235,77 @@ </zen-dialog> </article> </mjj-jrpg-preview> + + <mjj-conversation-archive hidden aria-label="Conversations"> + <div class="jrpg-archive-heading"> + <h2>Archive</h2> + <zen-button appearance="plain" size="xs"> + <button type="button" data-archive-close aria-label="Close conversations"> + <zen-icon name="close"></zen-icon> + </button> + </zen-button> + </div> + <div class="jrpg-archive-actions"> + <zen-button appearance="plain" size="sm"> + <button type="button" data-archive-new> + <zen-icon name="plus"></zen-icon> + New + </button> + </zen-button> + </div> + <ol class="jrpg-archive-list" data-archive-list aria-label="Conversations"> + </ol> + <zen-button appearance="plain" size="sm" data-archive-load-more-owner hidden> + <button type="button" data-archive-load-more>Load more</button> + </zen-button> + <p class="jrpg-archive-status" data-archive-status aria-live="polite">Loading conversations...</p> + <dialog + class="jrpg-archive-dialog" + data-archive-delete-dialog + aria-labelledby="archive-delete-title" + aria-modal="true" + > + <p id="archive-delete-title" class="jrpg-archive-dialog-title">Delete this conversation?</p> + <p data-archive-delete-name class="jrpg-archive-dialog-subtitle"></p> + <div class="jrpg-archive-dialog-actions"> + <zen-button appearance="plain" size="md"> + <button type="button" data-archive-delete-cancel>Cancel</button> + </zen-button> + <zen-button appearance="plain" size="md"> + <button type="button" data-archive-delete-confirm>Delete</button> + </zen-button> + </div> + </dialog> + <dialog + class="jrpg-archive-dialog" + data-archive-rename-dialog + aria-labelledby="archive-rename-title" + aria-modal="true" + > + <p id="archive-rename-title" class="jrpg-archive-dialog-title">Rename conversation</p> + <form data-archive-rename-form novalidate> + <zen-field appearance="plain" size="md"> + <label for="archive-rename-input">New title</label> + <input + id="archive-rename-input" + data-archive-rename-input + type="text" + maxlength="200" + required + autocomplete="off" + > + </zen-field> + <div class="jrpg-archive-dialog-actions"> + <zen-button appearance="plain" size="md"> + <button type="button" data-archive-rename-cancel>Cancel</button> + </zen-button> + <zen-button appearance="plain" size="md"> + <button type="submit">Save</button> + </zen-button> + </div> + </form> + </dialog> + </mjj-conversation-archive> </section> <mjj-jrpg-composer> @@ -251,11 +335,12 @@ </button> </zen-button> </div> + <p class="jrpg-composer-quota" data-quota aria-live="polite" hidden></p> <p class="jrpg-composer-hint">Enter to send / Shift + Enter for a new line</p> </form> </mjj-jrpg-composer> - <mjj-jrpg-menu> + <mjj-jrpg-menu id="jrpg-destination-menu"> <nav aria-label="Shiba Quest destinations"> <p class="jrpg-menu-label">Menu</p> <ul> @@ -283,9 +368,74 @@ </button> </zen-button> </li> + <li> + <zen-button appearance="plain" size="sm"> + <button type="button" data-preview="conversations" aria-pressed="false"> + <zen-icon name="chevron-right"></zen-icon> + Conversations + </button> + </zen-button> + </li> </ul> </nav> </mjj-jrpg-menu> + + <zen-dialog class="jrpg-login-dialog-owner" data-login-dialog-owner> + <zen-button appearance="plain" size="md" hidden> + <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> + </zen-button> + <dialog + class="jrpg-login-dialog" + data-login-dialog + aria-labelledby="jrpg-login-title" + aria-modal="true" + > + <div class="jrpg-login-dialog-header"> + <h2 id="jrpg-login-title">SIGN IN</h2> + <zen-button appearance="plain" size="md"> + <button type="button" data-zen-close aria-label="Close sign-in dialog"> + <zen-icon name="close"></zen-icon> + </button> + </zen-button> + </div> + <div role="alert" data-login-error aria-live="assertive" hidden></div> + <form data-login-form novalidate> + <zen-field appearance="plain" size="md"> + <label for="jrpg-login-username">Username</label> + <input + id="jrpg-login-username" + name="username" + type="text" + autocomplete="username" + autocapitalize="none" + spellcheck="false" + required + maxlength="32" + > + </zen-field> + <zen-field appearance="plain" size="md"> + <label for="jrpg-login-password">Password</label> + <input + id="jrpg-login-password" + name="password" + type="password" + autocomplete="current-password" + required + minlength="12" + maxlength="1024" + > + </zen-field> + <div class="jrpg-login-dialog-actions"> + <zen-button appearance="plain" size="md"> + <button type="button" data-login-cancel data-zen-close>Cancel</button> + </zen-button> + <zen-button appearance="plain" size="md"> + <button type="submit" data-login-submit>Sign in</button> + </zen-button> + </div> + </form> + </dialog> + </zen-dialog> </div> </mjj-jrpg-shell> </main>