Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
ADR 0018: decks and documents use Glance's own formats, Office and PDF are exports. ADR 0019: Glance gives its skills to whichever agent runs. Glossary gains Template, Theme, Brand Kit, Skill and Check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
A deck is a theme plus slides; a slide is one of 12 layouts with its slots filled in. applyOps applies a list of operations all or nothing (add, move, delete, duplicate, hide, setLayout, setSlot, clearSlot, setNotes, setTheme, split, merge) and checks values against the layout. checkDeck lists what to fix: missing title slide, missing or too-long slots, too many entries, three same layouts in a row, missing alt text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Each layout turns a slide's slots into boxes on a 1920 by 1080 slide. The HTML view draws them, and the PowerPoint export will draw the same boxes. Text is fitted by estimating how it wraps, so layout stays pure and testable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
A zip with deck.json and the pictures under media/. Reading checks every slide and keeps what it can, with a warning for anything left out. Pictures must sit in media/, so a deck can't point outside itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
.gdeck files open in their own tab with the slides down the sidebar. Click any text on a slide to type over it, click a picture to replace it, drag slides to reorder them, and use the Slide menu or right-click to add, duplicate, hide or delete them. Every change is one undo step, and decks save and autosave like PDFs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
glance_create makes a deck from slides the AI fills in, glance_deck_edit changes it with deck operations as one undo step, glance_deck_check lists what to fix, glance_deck_outline reads it back and glance_deck_render shows slides as pictures. Pictures named by local path are copied into the deck. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
…irst File > New asks what you want to make. With an AI signed in, Glance opens a new deck and the AI fills it; otherwise it offers to sign in, or to start by hand. Decks export to PDF (real text, Urbanist embedded), PowerPoint (with notes and hidden slides) and PNG, print through the PDF export, and AI apps get glance_export. pptxgenjs (MIT) loads only when exporting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Pitch Deck, Book Report, Weekly Report, Class Lesson and Event Plan sit under the make screen; with an AI signed in and a request typed, the AI fills the template's placeholders. Decks gain the Sunrise, Blossom and Ink themes, picked from a theme menu in the deck bar and by AI apps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Every theme now has three colours that layouts take in turn: cards blocked in colour with big numbers, the big number on a disc, numbered timeline steps, a coloured title column for points, a tinted quote slide with a large quote mark, and circles, rings and pills that run off the edge of title, section and empty picture slides. Slides of one layout vary their shapes by slide. PDF and PowerPoint exports draw the new outlines too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Fraunces, Bricolage Grotesque, Space Grotesk, Caveat and DM Serif Display, as woff2 with their OFL licences, and Urbanist as its full variable font. Browsers fetch each only when a slide uses it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
A slide with layout design names a design (like bakeSale.2) and keeps only its text; the design's art and text boxes are trusted app assets. Every lookup of a slide's slots goes through slotSpecsOf, so operations, the design check, typing and reading a .gdeck all work on designed slides. Text longer than the sample shrinks to fit, measured in the real font where there is one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
scripts/build-templates.mjs renders each board in Chromium, keeps every text as an editable text box (position, turn, font, size, colour, spacing, alignment and the sample text) and the rest as art, and writes src/deck/designs: 18 templates of six slides, each loaded only when needed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
File > New lists the 18 templates by purpose with their real first slides; a preview shows all six, to use as they are or have the AI make them about something. Typing on a designed slide edits its text box in place, and the slide menus offer the deck's template's designs. PDF draws the art as a picture under real text in the design fonts (variable fonts set to each box's weight, turned boxes turned); PowerPoint gets the art as a picture and editable text boxes; pictures inline the fonts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
glance_templates lists each template and its designs, with what each slide is for and its slots' hints and maxChars. glance_create takes a template, and slides of any of its designs in any order and number; glance_deck_edit adds and switches to designs. The instructions tell agents to prefer the designs and keep text within maxChars. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Pure code in src/core/sheet: cells with values, formulas and styles, Excel number formats, a formula parser and evaluator (references, ranges, other sheets, the usual functions, @formulajs/formulajs for the rest), recalculation, data validation, and the operations every change goes through. ExcelJS and @formulajs/formulajs (both MIT) are added for the next steps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Shares the board extraction with the deck build (template-extract.mjs). Fixed pages keep their art and text boxes, rows of cells become tables, and flowing pages become blocks in the look's styles. Adds the document model, the page layout and table totals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
ExcelJS reads and writes values, formulas, styles, merges, sizes, frozen panes, validation, conditional formatting and pictures. Charts live in a very hidden sheet so they come back in Glance, with a picture of each placed for Excel. The check lists formula errors, broken references, numbers typed as text, entries validation doesn't allow and placeholders left in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
…nd Word conversion Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
…and all 84 guests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
…ed tables' rows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Typing fast into a cell kept only the first key, and every edit was committed twice (Enter, then blur), so Undo seemed to do nothing. Ctrl+Z and Ctrl+Y now work from the grid, the Edit menu's Undo is enabled for sheets, and the 'open it in Excel' bar no longer shows on a sheet Glance edits. Titles drawn over a banner in seven templates were lost; the builder now puts floating text into cells and leaves out the band behind it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Keeps both sides: documents and the plan-first guide. A new document made with the AI now plans first on the Outline screen, like a deck. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Keeps both sides: spreadsheets join decks and documents in the tools, menus, commands, File -> New and the docs. A spreadsheet made with the AI plans first on the Outline screen. package-lock.json regenerated with npm. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Registers guide contexts for open documents (gdocSelection) and spreadsheets (sheetSelection, with each picked cell's rules from validationHint), and fixes sheetSelection to report the tab id. The Outline screen offers document and spreadsheet templates as looks and applies the one picked. The sheet grid's rule hint goes through t(). The document-writing and spreadsheet-building skills name the real tools and ops, and the web welcome button covers every kind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Comment on lines
+59
to
+60
| return readFileSync(file, 'utf8') | ||
| .replace(/<script[\s\S]*?<\/script>/g, '') |
|
|
||
| function boardHtml(file) { | ||
| return readFileSync(file, 'utf8') | ||
| .replace(/<script[\s\S]*?<\/script>/g, '') |
Comment on lines
+32
to
+33
| return readFileSync(file, 'utf8') | ||
| .replace(/<script[\s\S]*?<\/script>/g, '') |
| /** The board's HTML without the design tool's scripts, and with the local fonts instead of Google's. */ | ||
| export function boardHtml(file) { | ||
| return readFileSync(file, 'utf8') | ||
| .replace(/<script[\s\S]*?<\/script>/g, '') |
| if (!isFinite(n)) return '#NUM!' | ||
| if (Number.isInteger(n) && Math.abs(n) < 1e11) return String(n) | ||
| const abs = Math.abs(n) | ||
| if (abs !== 0 && (abs >= 1e11 || abs < 1e-9)) return n.toExponential(5).replace(/\.?0+e/, 'E').replace('E+', 'E+').replace(/e/, 'E') |
A new blank document opens with its title ready to type, empty blocks show a hint, clicking below the text adds a paragraph there, Enter starts a new paragraph and Backspace removes an empty one. Clicking Slides in File > New with nothing typed makes a blank deck instead of starting the AI. The Spreadsheet card no longer picks up the web version's bottom sheet style. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
… to the first column Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
…ver PDFs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
When the in-app AI reaches the limit of Glance's tools, a request asks for a kind of file Glance can't make, or the person taps Do more with <company>, Glance gives the job to the company's own ACP agent in a folder under its app data and opens the result with a Made by bar. Downloads from the AI websites in the sidebar save to Downloads and open in Glance; Do more on <site> opens a pre-filled new chat. ADR 0020, PRIVACY, AI-APPS, CHANGELOG. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
… lines The CV page's first Experience entry wrapped to four lines in Chromium and ran into the next entry, because sample text always kept the design's size. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXvo1FTmUxCdQr2fZL9uqr
Up at the start of a block and Down at its end move to the block before or after; Backspace at the start joins a paragraph onto the one before and Delete at the end pulls the next one in; Enter puts the caret at the start of the new paragraph; Ctrl+Z in a box with nothing typed yet undoes the last change to the document or deck. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
Arrow keys finish a cell typed over and move on; Shift+Enter and Shift+Tab move up and left; Ctrl+arrows jump to the edge of the data; Home, Ctrl+Home and Ctrl+End; Ctrl+A selects the data; Ctrl+X cuts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
…at the end, Delete acts on the slide you see Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
Formatting toolbar above the formula bar (number formats, decimals, font, bold/italic/underline, colours, borders, alignment, wrap, merge, sort, filter, chart and Sum). Tabs show the name without the extension, a coloured kind icon and an unsaved dot, with the full name on hover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
Text blocks open as a rich box in the page's own font and paper, so marks show as they are typed. B, I, U, link and bulleted-list buttons light up with the caret; Insert gathers the block buttons. Enter on an empty last list item ends the list. Keys typed while the next block opens are kept, and Enter in a dialog no longer lands in the field behind it. Underlined runs now render on the page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
… show the hand cursor Spreadsheet templates sat in their own section under every tab, so they looked like part of Documents. They now have a Spreadsheets tab next to Slides and Documents, sharing the purpose tabs. Buttons, tabs, menu items, links and checkboxes show the pointer cursor app-wide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L1VkfJrYaEGkxa6MECKHLh
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by redt · project thread
What changes for users
Before: Glance opens and lightly edits files, and AI apps can view, convert and edit PDF text through it, but nobody can create a slide deck or document in Glance.
After (when this branch is done): people and their AI apps (Claude Code, Codex, Gemini, Muse and the rest) create, rearrange and restyle decks and documents in Glance, starting from a "What do you want to make?" screen, templates, a brand kit and design sliders. If an AI is signed in, AI comes first. If not, Glance offers sign-in, and everything also works by hand.
This draft collects the whole feature on one branch, as redt asked. It merges only after redt has tested the CI builds and said OK. Plan: Glance agent documents. Approved mockups: Glance create mockups.
How
.gdeck,.gdoc), with PowerPoint, Word and PDF as exports. ADR 0019: Glance gives its design and writing skills to whichever agent is running.src/core/deck/: the deck model (12 layouts with typed slots),applyOps(all-or-nothing operations shared by AI tools and hand editing), andcheckDeck(the design check agents must pass).Testing
npm run typecheckandnpm testpass (49 files, 356 tests;tests/deck.test.tsis new)cargo testinsrc-tauripasses (if Rust changed): no Rust yetChecklist
t(): no UI yet## New insection ofCHANGELOG.md, if users will notice: added once the feature is visibledocs/FORMATS.mdordocs/AI-APPS.mdupdated: later on this branchGenerated by Claude Code