This website requires JavaScript.
05e00c572d
Show component-indicator selection badge in the canvas
shadowdao and Claude Opus 4.8
2026-07-12 20:15:08 -07:00
458069afb6
Show empty-canvas hint on a page with no components yet
shadowdao and Claude Opus 4.8
2026-07-12 20:14:58 -07:00
b3e5009aec
Fix preset-grid orphan row for 5/6-item preset sets
shadowdao and Claude Opus 4.8
2026-07-12 20:14:38 -07:00
eeb0660d83
Replace emoji-as-icons in editor chrome with Font Awesome
shadowdao and Claude Opus 4.8
2026-07-12 20:14:29 -07:00
138e1a8273
Bump muted/dim text contrast and block label legibility
shadowdao and Claude Opus 4.8
2026-07-12 20:14:10 -07:00
1b12b79a0d
Merge PR #5 : image placeholder + Gallery/safeImageUrl fix
jknapp
2026-07-13 02:54:24 +00:00
621bb21d52
fix(builder): safeImageUrl for FeaturesGrid/ContentSlider image sinks + tighten data:image allowlist
placeholder-and-gallery-fix
shadowdao
2026-07-12 19:53:02 -07:00
3f3c6fb851
security: add safeImageUrl, un-break M-5's over-blocking of image-context SVG data URIs
shadowdao and Claude Opus 4.8
2026-07-12 19:45:58 -07:00
802938ec1a
fix(builder): Image block placeholder no longer overridden by explicit src=""
shadowdao and Claude Opus 4.8
2026-07-12 19:45:28 -07:00
3e43aee6e9
Merge PR #4 : head code to published pages + adversarial-review Minors
jknapp
2026-07-13 01:37:13 +00:00
bf4a9f48eb
security: block data:image/svg+xml + sandbox HtmlBlock iframes
headcode-and-minors
shadowdao and Claude Opus 4.8
2026-07-12 18:31:25 -07:00
86455413d0
fix: unique addPage ids + collision-free scopeId hashing
shadowdao and Claude Opus 4.8
2026-07-12 18:31:12 -07:00
0cbc58f8d1
a11y/security: scope Navbar ids + hover styles, Gallery lightbox focus trap
shadowdao and Claude Opus 4.8
2026-07-12 18:30:22 -07:00
92841e3f35
feat(builder): send + restore site head code in save/load
shadowdao and Claude Opus 4.8
2026-07-12 18:22:38 -07:00
e892ee0e53
Merge PR #3 : site builder security & data-loss hardening + asset picker + audit backlog
jknapp and Claude Opus 4.8
2026-07-13 01:13:27 +00:00
591a51dcc2
fix(builder): escape/allowlist all attribute-value sinks incl. numeric/enum props (XSS)
builder-hardening-2026-07
shadowdao and Claude Opus 4.8
2026-07-12 18:03:44 -07:00
7ba91d9829
fix(builder): sanitize non-string style values + allowlist element tags (XSS)
shadowdao and Claude Opus 4.8
2026-07-12 17:44:59 -07:00
e12fb89ada
Fix M-4: punctuation-only page name yields empty slug ('.html')
shadowdao and Claude Opus 4.8
2026-07-12 17:33:33 -07:00
25507cb57a
Fix INT: ContentSlider Slides editor wrote wrong prop key (image vs imageSrc)
shadowdao and Claude Opus 4.8
2026-07-12 17:32:47 -07:00
9d3bbc2c46
Fix I-2: dangling parent on shell/ColumnLayout-rooted AI-replace trees
shadowdao and Claude Opus 4.8
2026-07-12 17:31:01 -07:00
25e674badd
Fix I-1: landing-page edits lost when activePageId goes dangling
shadowdao and Claude Opus 4.8
2026-07-12 17:29:32 -07:00
e5f30a4a56
Fix C1/C2: XSS via unsanitized style keys and animation attrs
shadowdao and Claude Opus 4.8
2026-07-12 17:27:22 -07:00
36c3b2f503
fix(builder): sanitize CSS-value sinks to prevent style/<style> breakout XSS
shadowdao and Claude Opus 4.8
2026-07-12 15:56:25 -07:00
5acf172511
docs(builder): update CLAUDE.md for hardening branch (remove dead settings/zones, asset picker)
shadowdao and Claude Opus 4.8
2026-07-12 15:39:16 -07:00
ebb8fe1027
refactor(builder): type the AI-response/patch boundary
shadowdao and Claude Opus 4.8
2026-07-12 15:30:56 -07:00
b88b242b6a
refactor(builder): extract shared Modal component for the three editor modals
shadowdao and Claude Opus 4.8
2026-07-12 15:22:05 -07:00
8f51b5144a
refactor(builder): extract shared ArrayItemFieldsEditor from SectionTypePanel/GenericPropsEditor
shadowdao and Claude Opus 4.8
2026-07-12 15:15:34 -07:00
4733fe84b5
refactor(builder): extract useNodeProp hook, dedup StylePanel setProp boilerplate
shadowdao and Claude Opus 4.8
2026-07-12 15:13:35 -07:00
3cd4ad0154
test(builder): cover Ctrl+C/V shortcut id-regeneration and guards
shadowdao and Claude Opus 4.8
2026-07-12 15:08:46 -07:00
6421306849
feat(builder): implement Ctrl+C/V copy-paste shortcuts
shadowdao and Claude Opus 4.8
2026-07-12 15:01:30 -07:00
e40d55b2f2
chore(builder): point dev proxy at current test server
shadowdao and Claude Opus 4.8
2026-07-12 14:59:42 -07:00
1958b8e0b5
chore(builder): remove GuidedStyles classification cruft
shadowdao and Claude Opus 4.8
2026-07-12 14:59:39 -07:00
99cc4c79f2
fix(builder): clickableProps must ignore keydown bubbled from nested controls
shadowdao
2026-07-12 14:58:13 -07:00
4b8dd8baee
ux: in-app confirm for asset/sitesmith delete + safe copy
shadowdao and Claude Opus 4.8
2026-07-12 14:51:00 -07:00
46ebd253f3
a11y: keyboard-operable editor chrome + topbar aria-labels
shadowdao and Claude Opus 4.8
2026-07-12 14:50:50 -07:00
a036843728
fix(builder): deterministic ids for NumberCounter + form-relay marker
shadowdao
2026-07-12 14:43:31 -07:00
177eda93d0
script nits: slider hover/visibility pause + silent autoplay + iframe amp guard
shadowdao and Claude Opus 4.8
2026-07-12 14:35:27 -07:00
8029126ab7
deterministic + unique ids in 6 components (node-derived scope)
shadowdao and Claude Opus 4.8
2026-07-12 14:35:12 -07:00
c2aac870e7
thread node id through toHtml for deterministic+unique export ids
shadowdao and Claude Opus 4.8
2026-07-12 14:34:53 -07:00
9969adca72
a11y: exported semantics (forms/rating/nav/iframe/icons)
shadowdao and Claude Opus 4.8
2026-07-12 14:19:01 -07:00
9b532e36e8
a11y: exported widget ARIA (slider/tabs/gallery)
shadowdao and Claude Opus 4.8
2026-07-12 14:18:49 -07:00
c83db99ae4
fix(builder): update_props no longer wipes style on style: null
shadowdao and Claude Opus 4.8
2026-07-12 14:05:59 -07:00
605a6ba9f3
refactor(builder): consolidate buildNodeTree onto shared flattener; delete dead serializeTreeForCraft
shadowdao and Claude Opus 4.8
2026-07-12 14:05:37 -07:00
f3c175436a
fix(builder): guard PageContext.treeToState against unknown resolvedNames
shadowdao and Claude Opus 4.8
2026-07-12 14:04:57 -07:00
b2b9278d3c
refactor(builder): extract shared tree-flattener into craft-tree.ts
shadowdao and Claude Opus 4.8
2026-07-12 14:04:43 -07:00
71e675489c
fix(builder): Footer commits in-progress edits on deselect, not just blur (D7)
shadowdao and Claude Opus 4.8
2026-07-12 13:46:52 -07:00
fdd088b4bf
fix(builder): VideoBlock parses more YouTube/Vimeo URL shapes (D4)
shadowdao and Claude Opus 4.8
2026-07-12 13:46:48 -07:00
cdcc3969bc
fix(builder): ColumnLayout.toHtml derives column widths from split (D2b)
shadowdao and Claude Opus 4.8
2026-07-12 13:46:44 -07:00
2887cc9bdf
fix(builder): Testimonials single-layout static-parity export (D2a)
shadowdao and Claude Opus 4.8
2026-07-12 13:46:38 -07:00
a0cdbd1d82
refactor(builder): remove dead FeaturesGrid mediaType field (D1c)
shadowdao and Claude Opus 4.8
2026-07-12 13:46:33 -07:00
f0728a9070
fix(builder): emit ContactForm successMessage as a data attribute (D1b)
shadowdao and Claude Opus 4.8
2026-07-12 13:46:29 -07:00
36ce256760
fix(builder): emit Container cssId/cssClass with live panel controls (D1a)
shadowdao and Claude Opus 4.8
2026-07-12 13:46:23 -07:00
cf56f2a388
refactor(builder): remove dead per-page headCode field (D9)
shadowdao and Claude Opus 4.8
2026-07-12 13:30:17 -07:00
e1d381dc8a
fix(builder): Preview includes site headCode and is \$-safe (D8)
shadowdao and Claude Opus 4.8
2026-07-12 13:29:02 -07:00
d4ee09e54c
fix(builder): make switchPage/deletePage state updaters pure (D6)
shadowdao and Claude Opus 4.8
2026-07-12 13:28:27 -07:00
7973ee9ba8
fix(builder): await TemplateModal's load sequence before closing (D5)
shadowdao and Claude Opus 4.8
2026-07-12 13:26:46 -07:00
2ee66ebae9
fix(builder): dedupe page slugs on add/rename/replaceAll (D3)
shadowdao and Claude Opus 4.8
2026-07-12 13:25:41 -07:00
a7c00119e6
refactor(builder): remove dead HeaderZone/FooterZone components
shadowdao and Claude Opus 4.8
2026-07-12 13:17:03 -07:00
232dc3c980
refactor(builder): remove orphaned ui/ settings controls
shadowdao and Claude Opus 4.8
2026-07-12 13:16:57 -07:00
65a10a1ef9
refactor(builder): remove dead component settings UI
shadowdao and Claude Opus 4.8
2026-07-12 13:16:53 -07:00
4674a99ec9
feat(builder): unify StylePanel image fields on AssetPicker
shadowdao and Claude Opus 4.8
2026-07-12 13:00:10 -07:00
c50b385661
feat(builder): reusable AssetPicker (full/compact, media-typed)
shadowdao and Claude Opus 4.8
2026-07-12 12:49:34 -07:00
296c10d019
feat(builder): shared asset upload/list util
shadowdao and Claude Opus 4.8
2026-07-12 12:43:59 -07:00
b46b6915a5
fix(builder): validate AI response before deserializing into craft state
shadowdao and Claude Opus 4.8
2026-07-12 12:37:25 -07:00
4b36ce0d6a
fix(builder): route live header/footer edits correctly on save
shadowdao and Claude Opus 4.8
2026-07-12 12:28:38 -07:00
1a88baa95d
fix(builder): deep-clone node data on id regeneration to avoid shared props
shadowdao and Claude Opus 4.8
2026-07-12 12:25:22 -07:00
97123c4c58
fix(builder): regenerate node ids on duplicate/paste to prevent state corruption
shadowdao and Claude Opus 4.8
2026-07-12 12:18:44 -07:00
4c001e1af4
fix(builder): preserve data-URI semicolons in css value sanitizer
shadowdao and Claude Opus 4.8
2026-07-12 12:15:23 -07:00
fb4e9f87be
fix(builder): sanitize style-string emission
shadowdao and Claude Opus 4.8
2026-07-12 12:06:16 -07:00
7179287087
fix(builder): sanitize HtmlBlock/Countdown/Gallery JS contexts
shadowdao and Claude Opus 4.8
2026-07-12 12:06:07 -07:00
48d0441be3
fix(builder): neutralize javascript:/breakout URLs in export
shadowdao and Claude Opus 4.8
2026-07-12 12:05:57 -07:00
fad1882117
refactor(builder): use shared escaper everywhere, drop 26 local copies
shadowdao and Claude Opus 4.8
2026-07-12 11:49:10 -07:00
cce984508f
feat(builder): add shared escape/safeUrl util
shadowdao and Claude Opus 4.8
2026-07-12 11:41:11 -07:00
94140990c2
Add implementation plan: site builder hardening + asset picker
shadowdao and Claude Opus 4.8
2026-07-12 11:36:27 -07:00
02e99f7623
Add design spec: site builder security & data-loss hardening
shadowdao and Claude Opus 4.8
2026-07-12 11:27:57 -07:00
aaa305cc3e
Add design spec: unified image/asset picker for site builder
shadowdao and Claude Opus 4.8
2026-07-12 11:14:00 -07:00
97cb439508
site-builder: fix Menu guided panel (empty Colors) + surface layout/nav colors
shadowdao and Claude Opus 4.8
2026-07-10 13:10:46 -07:00
d20b77e66d
site-builder: dedicated Features editor in guided panel (per-card icon/image+upload/button, robust to template items missing keys)
shadowdao
2026-07-07 17:19:37 -07:00
5a26e4ef43
site-builder: FeaturesGrid renders image when 'image' set + expose image/button keys so the guided array editor edits them
shadowdao
2026-07-07 14:16:14 -07:00
1cfb51f181
site-builder: surface Spotify/Twitch + contact-form recipient in the Styles (guided) panel
shadowdao
2026-07-07 14:06:24 -07:00
814ad29b91
Merge branch 'site-builder-feedback-batch'
shadowdao
2026-07-07 13:50:12 -07:00
b9c5d3dd1c
site-builder: relay wiring on FormContainer (template forms) + shared helper
shadowdao
2026-07-07 13:35:18 -07:00
6b9c258d26
Merge pull request 'ContactForm relay wiring (recipient, thank-you, honeypot, marker)' (#2 ) from contact-form-relay into main
jknapp
2026-07-07 19:35:27 +00:00
4877a63a3b
site-builder: pin non-relay byte-identity on the realistic (non-empty fields) case [PR #2 review]
contact-form-relay
shadowdao
2026-07-07 12:22:28 -07:00
cf5d30382a
site-builder: ContactForm non-relay output byte-identical (honeypot whitespace fix) + test guard
shadowdao and Claude Opus 4.8
2026-07-07 08:30:36 -07:00
66117d375e
site-builder: ContactForm relay wiring (recipient, thank-you, honeypot, marker)
shadowdao and Claude Opus 4.8
2026-07-07 08:24:56 -07:00
53c40f856f
site-builder: feedback batch (social, features, header menu, spacer)
shadowdao and Claude Opus 4.8
2026-07-06 17:53:22 -07:00
d0925d9e2d
site-builder: dynamic CTAs, section anchors, edit-with-Sitesmith
shadowdao and Claude Opus 4.7
2026-05-25 12:43:28 -07:00
7b747f775f
site-builder: lock landing page to index.html regardless of name
shadowdao and Claude Opus 4.7
2026-05-25 12:14:26 -07:00
330032eea3
sitesmith: publish home page to index.html, not home.html
shadowdao
2026-05-24 17:50:08 -07:00
5e60415311
sitesmith: strip diagnostic shim + state-dump now that the fix is verified
shadowdao
2026-05-24 17:32:38 -07:00
87dd4340f7
sitesmith: pre-create section-inner/bg-section-inner/form-inner linkedNodes
shadowdao
2026-05-24 17:22:40 -07:00
a1ec51afc3
sitesmith: filter known-benign invariants from diagnostic shim
shadowdao
2026-05-24 16:37:08 -07:00
43627bddb0
sitesmith: alias tiny-invariant to a diagnostic shim
shadowdao
2026-05-24 16:32:50 -07:00
849f432330
sitesmith: narrow CANVAS_TYPES to just Container
shadowdao
2026-05-24 16:27:38 -07:00
6428f93cec
sitesmith: route ColumnLayout children through linkedNodes (Invariant fix)
shadowdao
2026-05-24 16:17:25 -07:00
906695379b
sitesmith: null-safe esc() in Navbar/Menu/Logo + clear chat button
shadowdao
2026-05-24 16:03:02 -07:00
069ea1235a
sitesmith: null-safe esc() across all toHtml + WorkingIndicator
shadowdao
2026-05-24 15:54:48 -07:00
ac0347ae5f
sitesmith: fix blank canvas on Replace site
shadowdao
2026-05-24 15:35:05 -07:00
5c5066c20b
Merge pull request 'Sitesmith: AI site builder addon (frontend)' (#1 ) from sitesmith-ai-builder into main
jknapp
2026-05-24 17:11:03 +00:00