Merged
Conversation
Made-with: Cursor
- Remove !isEditMode guard from isButtonWithLink and shouldWrapWithLink - Add w-fit class to edit mode className for buttons rendered as <a> - Extract shared layerLinkContext to eliminate 3 duplicate constructions - Merge button-link and <a>-layer-link blocks into single block - Add resolveLinkAttrs utility to deduplicate href/target/rel/download
Click an image in the rich text editor to select it and auto-open an alt text popover anchored to the image toolbar button. Made-with: Cursor
Made-with: Cursor
… canvas to re-render
Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Add outline width, color, and offset controls accessible via the + dropdown in BorderControls. Includes Tailwind class generation, parsing, and CMS color variable binding support. Made-with: Cursor
Closes #69 CMS rich-text field content rendered all elements as <span> on the canvas because renderNestedRichTextContent always forced spans. Now the useSpanForParagraphs flag propagates correctly: rich text layers (div) get proper block tags, while restrictive tags (p, h1-h6) keep spans to avoid invalid nesting. Also fix layers tree collapsibility for CMS-bound rich text layers. Made-with: Cursor
Made-with: Cursor
og:image used relative URLs (/a/hash/slug.ext) which Next.js resolved against VERCEL_URL instead of the site's actual domain. Now makes og:image absolute using globalCanonicalUrl or NEXT_PUBLIC_SITE_URL.
- Keep scroll position when closing and re-opening the same tab, - Prevent images re-loading when switching tabs or opening the sidebar, - Scroll to top when switching to a different tab,
- Enrich page collection item data with dotted relationship keys so reference fields (e.g. Category>Name via Blog) render on canvas - Restrict "Current page item" link option to pages sharing the same collection, preventing broken cross-collection links
The TipTap mark name (richTextLink) was not mapped to the style key (link), so the Link sublayer never appeared in the layers tree and its classes could not be edited on the canvas. Made-with: Cursor
- Enrich page collection item data with dotted keys for canvas
- Restrict "Current page item" to pages sharing same collection
- Add "{FieldName} - Reference field" options for cross-collection links
- Resolve ref-page:* and ref-collection:* at render via item data
- Add richTextLink mark handling in renderTiptapToHtml (page-fetcher) with full LinkResolutionContext so page/field/ref-* links resolve - Scan rich text Tiptap content for page links in PageRenderer so specific item slugs and ref-* target collections are pre-fetched - Add hidePageContextOptions prop to suppress "Current page item" and reference field options when editing CMS item content directly - Refactor PageRenderer link scanning into module-level pure utilities (collectTiptapPageLinks, collectLayerPageLinks, extractCollectionItemSlugs) replacing two separate tree traversals with a single shared pass
feat: add horizontal rule support to rich text editor
refactor: use file manager for SEO social preview image
feat: improve in-builder preview UX
fix: render link tags consistently on canvas
refactor: improve builder UX and fix selection issues
Made-with: Cursor
fix: show Link sublayer in rich text layers tree
Made-with: Cursor
feat: add reference field link resolution for dynamic pages
feat: add rich text image/link popover improvements
fix: filter CMS reference sub-options by allowed field types
fix: render proper HTML tags for CMS-bound rich text on canvas
fix: persist color variable edits from hex input
- Fix clear-all cache endpoint to use clearAllCache service - Sync migration files with cloud for template compatibility Made-with: Cursor
tristan-mouchet
approved these changes
Mar 24, 2026
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.
Summary
Release v0.9.0 — rich text editor improvements, CMS rendering fixes, builder UX refinements, and cache/migration integrity fixes.
Changes
Test plan
Made with Cursor