Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
8dc7fed
Add guided chat interface for Slides template creation
builderio-bot Jul 31, 2026
5052121
Update i18n strings for presentation features and try-now flow
builderio-bot Jul 31, 2026
f28b31e
Update i18n strings for presentation creation flow
builderio-bot Jul 31, 2026
f5bf0e7
Update Japanese and Korean i18n strings for deck creation
builderio-bot Jul 31, 2026
e37f84c
Add "Try Now" interactive onboarding flow to presentation creation
builderio-bot Jul 31, 2026
60bb065
Update Clips template heading to reflect human and agent use
builderio-bot Aug 5, 2026
8a7e149
Change Clips template CTA from "Try It" to "Start recording"
builderio-bot Aug 5, 2026
b75fadb
Update Clips template description to emphasize recording and sharing
builderio-bot Aug 5, 2026
26014ba
Add Clips quick start recording mode selector
builderio-bot Aug 5, 2026
507f43f
Add quick start UI and improve i18n translations
builderio-bot Aug 5, 2026
28aa049
Add audio source selection to Clips quick start guide
builderio-bot Aug 5, 2026
f9599f3
Add audio source translations across all supported languages
builderio-bot Aug 5, 2026
ebe7bfa
Update Slides template tagline to emphasize agent capabilities
builderio-bot Aug 5, 2026
76b4eab
Update slides product messaging across all languages
builderio-bot Aug 5, 2026
2eea38d
Update slides feature copy across all languages
builderio-bot Aug 5, 2026
f10596a
Extract slides template description to i18n
builderio-bot Aug 5, 2026
ae11904
Add "how it works" description translations across all locales
builderio-bot Aug 5, 2026
d7dce72
Add design reference crawler action for slides generation
builderio-bot Aug 5, 2026
da85b19
Add tests and improve code formatting for design reference crawler
builderio-bot Aug 5, 2026
58c421c
Allow bare domain URLs in slides design reference input
builderio-bot Aug 5, 2026
5a9d6a2
Add "Upload Design Reference" button to Slides try now
builderio-bot Aug 5, 2026
8e175f3
Add design reference upload translation strings
builderio-bot Aug 5, 2026
ddde608
Improve design reference formatting in Slides try-now
builderio-bot Aug 5, 2026
490c5a6
Improve style guide prefix messaging across locales
builderio-bot Aug 5, 2026
3dfab92
Update slides onboarding copy to emphasize design preferences
builderio-bot Aug 5, 2026
b2f5aa0
Update slide deck creation copy across all languages
builderio-bot Aug 5, 2026
120183c
Restore title and description fallbacks in design reference crawler
builderio-bot Aug 5, 2026
aca365b
Enhance design reference crawling with SPA support and color names
builderio-bot Aug 5, 2026
7a89bfb
Refine style guide streaming with better color handling and font coll…
builderio-bot Aug 5, 2026
d070a7e
Add builder verification policy for faster iteration
builderio-bot Aug 5, 2026
cf7f1bd
Add Firecrawl branding extraction for design reference crawling
builderio-bot Aug 5, 2026
7b556ba
Improve style guide streaming format and subject placeholder
builderio-bot Aug 5, 2026
24cafdd
Add offering memorandum deck type option
builderio-bot Aug 5, 2026
ac8e3a9
Add team meeting agenda deck type and set B2B sales as default
builderio-bot Aug 5, 2026
f54a962
Improve website crawl error messaging and UX in Slides
builderio-bot Aug 5, 2026
5b3ebfe
Update homepage hero messaging across all languages
builderio-bot Aug 5, 2026
ef9a001
Refactor hero copy to split body into two lines
builderio-bot Aug 5, 2026
d01da0b
Replace Firecrawl with free-design-md for design extraction
builderio-bot Aug 5, 2026
e741e55
Support bare HSL color values in design reference crawler
builderio-bot Aug 6, 2026
b067e84
Add pricing page with multi-language support
builderio-bot Aug 6, 2026
54dc1eb
Remove upload video and import Loom links from clips landing
builderio-bot Aug 6, 2026
c2b58c1
Reorder featured templates to match new priority
builderio-bot Aug 6, 2026
aa7259e
Update clips template description text
builderio-bot Aug 6, 2026
baae941
Remove computer audio option from clips quick start
builderio-bot Aug 7, 2026
fda8fbb
Add View all apps CTA to Clips landing page
builderio-bot Aug 11, 2026
a033bc8
Update clips page messaging for AI-focused positioning
builderio-bot Aug 11, 2026
b8bc82f
AI-generated changes
builderio-bot Aug 11, 2026
c2f0cfa
AI-generated changes
builderio-bot Aug 11, 2026
42b0258
Update Clips comparison table and competitor lineup
builderio-bot Aug 11, 2026
813832c
AI-generated changes
builderio-bot Aug 11, 2026
78da510
AI-generated changes
builderio-bot Aug 11, 2026
15ce5e1
Fix Clips template prompt punctuation for clearer instructions
builderio-bot Aug 11, 2026
cf0517d
Update slides page tagline for clearer AI value
builderio-bot Aug 11, 2026
3fa120e
Update slides workflow labels for clearer messaging
builderio-bot Aug 11, 2026
ebbe1ce
AI-generated changes
builderio-bot Aug 11, 2026
9ab5e00
Clarify Slides brand support comparison copy
builderio-bot Aug 11, 2026
bbcb958
AI-generated changes
builderio-bot Aug 11, 2026
df7c280
<commit_message>Add Agent-Native design and app workflow plugins
builderio-bot Aug 11, 2026
1d8d5d6
AI-generated changes
builderio-bot Aug 11, 2026
6cf2699
AI-generated changes
builderio-bot Aug 11, 2026
f131603
AI-generated changes
builderio-bot Aug 12, 2026
aa28f96
Promote AI prompt to the top of the Clips page
builderio-bot Aug 12, 2026
5aa7ee2
Replace Clips recorder with preview video slider
builderio-bot Aug 12, 2026
38f9d1e
AI-generated changes
builderio-bot Aug 12, 2026
8c99890
Link slide deck generation to prompt builder
builderio-bot Aug 12, 2026
9597d9e
fix: include only selected dropdown values in slide prompts
builderio-bot Aug 12, 2026
3c3cc6b
fix(docs): update global and Brand Kit logos
builderio-bot Aug 13, 2026
9a3abc5
AI-generated changes
builderio-bot Aug 13, 2026
425c90d
Update clips template hero to match new design
builderio-bot Aug 13, 2026
097317b
AI-generated changes
builderio-bot Aug 13, 2026
1ab8b1a
AI-generated changes
builderio-bot Aug 13, 2026
b017fa0
AI-generated changes
builderio-bot Aug 13, 2026
d8ac744
AI-generated changes
builderio-bot Aug 13, 2026
ed9befe
AI-generated changes
builderio-bot Aug 13, 2026
9181d51
Redesign Clips AI prompt section with copy control
builderio-bot Aug 13, 2026
4848fdd
Redesign Clips core capabilities section
builderio-bot Aug 13, 2026
4293917
AI-generated changes
builderio-bot Aug 13, 2026
d3fcb1a
AI-generated changes
builderio-bot Aug 14, 2026
a3213c5
fix(docs): apply dark page surface consistently sitewide
builderio-bot Aug 14, 2026
db5c31d
AI-generated changes
builderio-bot Aug 14, 2026
c1b3a8d
AI-generated changes
builderio-bot Aug 14, 2026
692beb9
fix(docs): tighten Clips hero spacing below navigation
builderio-bot Aug 14, 2026
8f810ab
AI-generated changes
builderio-bot Aug 14, 2026
a4b1252
AI-generated changes
builderio-bot Aug 14, 2026
50a48ec
AI-generated changes
builderio-bot Aug 14, 2026
5d1579d
AI-generated changes
builderio-bot Aug 14, 2026
78488df
AI-generated changes
builderio-bot Aug 14, 2026
e2ce638
AI-generated changes
builderio-bot Aug 14, 2026
9349501
fix(docs): match Clips screenshot background to site
builderio-bot Aug 14, 2026
cdd49e8
fix(docs): remove background color from clips AI section
builderio-bot Aug 14, 2026
4e318dc
fix(clips): align prompt section padding and grid borders
builderio-bot Aug 14, 2026
00a4342
fix(docs): set clips prompt layout to one-third and two-thirds
builderio-bot Aug 14, 2026
4ff9561
AI-generated changes
builderio-bot Aug 14, 2026
7b41b45
AI-generated changes
builderio-bot Aug 14, 2026
15c13e5
AI-generated changes
builderio-bot Aug 14, 2026
6e28ad5
fix(docs): remove local backgrounds from clip stat cards
builderio-bot Aug 14, 2026
639bdff
feat(docs): add reusable divider to clips template sections
builderio-bot Aug 14, 2026
3a38bf1
AI-generated changes
builderio-bot Aug 14, 2026
251de42
AI-generated changes
builderio-bot Aug 14, 2026
36ba3de
AI-generated changes
builderio-bot Aug 14, 2026
3a5e1ad
feat(clips): add documentation link to capabilities section
builderio-bot Aug 14, 2026
af15630
fix(clips): align capabilities content with responsive padding
builderio-bot Aug 14, 2026
6130b77
fix(docs): make Clips capability panel width responsive
builderio-bot Aug 14, 2026
33b3d3a
AI-generated changes
builderio-bot Aug 14, 2026
4f58e49
AI-generated changes
builderio-bot Aug 14, 2026
3916cf4
style(docs): align Clips library section with new design
builderio-bot Aug 14, 2026
ceae951
AI-generated changes
builderio-bot Aug 14, 2026
46b9709
AI-generated changes
builderio-bot Aug 14, 2026
c21c0ff
fix(docs): refine clips comparison table header styling
builderio-bot Aug 14, 2026
e62fbca
AI-generated changes
builderio-bot Aug 14, 2026
6ceca8e
AI-generated changes
builderio-bot Aug 14, 2026
a4daa65
AI-generated changes
builderio-bot Aug 14, 2026
5d9c10a
Update clip preview cards to match carousel design
builderio-bot Aug 14, 2026
5398007
AI-generated changes
builderio-bot Aug 14, 2026
2c2784c
fix(docs): add section divider below clips templates
builderio-bot Aug 14, 2026
e73922c
style(clips): add grid background to CTA section
builderio-bot Aug 14, 2026
0331ce0
AI-generated changes
builderio-bot Aug 14, 2026
ff2ce73
AI-generated changes
builderio-bot Aug 14, 2026
7caa572
AI-generated changes
builderio-bot Aug 14, 2026
f53ac47
AI-generated changes
builderio-bot Aug 14, 2026
3baf84b
AI-generated changes
builderio-bot Aug 14, 2026
319609c
AI-generated changes
builderio-bot Aug 14, 2026
91ba4f7
fix(docs): improve Slides Try Now accessibility and layout
builderio-bot Aug 14, 2026
3a545b1
AI-generated changes
builderio-bot Aug 14, 2026
cf1f4f2
AI-generated changes
builderio-bot Aug 14, 2026
67a0ad2
fix(docs): enforce white text on clips template headings
builderio-bot Aug 14, 2026
e7d9230
AI-generated changes
builderio-bot Aug 14, 2026
8b8da5e
fix(i18n): translate Arabic template landing page FAQs
builderio-bot Aug 14, 2026
0fd4330
AI-generated changes
builderio-bot Aug 14, 2026
f82fc44
fix(pricing): remove self-hosting comparison section
builderio-bot Aug 14, 2026
8f2c55b
Remove backend messaging and updates signup from pricing page
builderio-bot Aug 14, 2026
d611fcf
Update pricing page backend cost messaging
builderio-bot Aug 14, 2026
8f833b3
Update pricing copy for all-in-one backend providers
builderio-bot Aug 14, 2026
d3f792a
Remove design reference crawl from slides try-now
builderio-bot Aug 14, 2026
ac35d36
fix(slides): remove preset prompts and add prompt guidance
builderio-bot Aug 14, 2026
111786d
AI-generated changes
builderio-bot Aug 14, 2026
9879971
Remove CLI copy boxes from template landing pages
builderio-bot Aug 14, 2026
2154e97
Update template CTAs to sign in and view more apps
builderio-bot Aug 14, 2026
02947d8
Align template landing actions and simplify try links
builderio-bot Aug 14, 2026
cc72c43
AI-generated changes
builderio-bot Aug 14, 2026
6bd0805
fix(docs): enclose final capability card with grid borders
builderio-bot Aug 14, 2026
24aff6f
fix(docs): enclose alternating capability cards
builderio-bot Aug 14, 2026
edd3d55
AI-generated changes
builderio-bot Aug 14, 2026
e7d00fc
AI-generated changes
builderio-bot Aug 14, 2026
199821d
AI-generated changes
builderio-bot Aug 14, 2026
50701e9
style(docs): align buttons with shared navigation styles
builderio-bot Aug 14, 2026
1c33f3b
AI-generated changes
builderio-bot Aug 14, 2026
9488b28
AI-generated changes
builderio-bot Aug 14, 2026
9643e82
AI-generated changes
builderio-bot Aug 14, 2026
5e154bb
AI-generated changes
builderio-bot Aug 14, 2026
85aa992
fix(docs): update app tile buttons and actions
builderio-bot Aug 14, 2026
a99b690
AI-generated changes
builderio-bot Aug 14, 2026
cdf5a80
AI-generated changes
builderio-bot Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .builderrules
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Always verify if a changeset is required
Always verify if a changeset is required
170 changes: 170 additions & 0 deletions packages/docs/actions/crawl-design-reference.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
import { beforeEach, describe, expect, it, vi } from "vitest";

const ssrfSafeFetch = vi.hoisted(() => vi.fn());
const isBlockedExtensionUrlWithDns = vi.hoisted(() => vi.fn());

vi.mock("@agent-native/core/extensions/url-safety", () => ({
isBlockedExtensionUrlWithDns,
ssrfSafeFetch,
}));

import crawlDesignReference from "./crawl-design-reference";

function extractionPayload(overrides: Record<string, unknown> = {}) {
return {
url: "https://example.com/",
signals: {
title: "Example Studio",
description:
"Design software that helps teams build better products together every day worldwide with confidence",
},
designSystemData: {
colors: {
primary: "#1E3346",
secondary: "",
accent: "#0DA0A0",
},
typography: {
headingFont: "Sora",
bodyFont: "Poppins",
},
},
screenshotDataUrl: "data:image/png;base64,discarded",
...overrides,
};
}

describe("crawl-design-reference", () => {
beforeEach(() => {
ssrfSafeFetch.mockReset();
isBlockedExtensionUrlWithDns.mockReset();
isBlockedExtensionUrlWithDns.mockResolvedValue(false);
});

it("maps hosted design extraction into the Slides contract", async () => {
ssrfSafeFetch
.mockResolvedValueOnce(
new Response(JSON.stringify(extractionPayload()), {
headers: { "content-type": "application/json" },
}),
)
.mockResolvedValueOnce(
new Response(
JSON.stringify({
colors: [
{ name: "Blue Whale", requestedHex: "#1e3346" },
{ name: "Persian Green", requestedHex: "#0da0a0" },
],
}),
{ headers: { "content-type": "application/json" } },
),
);

const output = await crawlDesignReference.run({
url: "https://example.com",
});

const extractionUrl = new URL(ssrfSafeFetch.mock.calls[0][0]);
expect(extractionUrl.origin).toBe("https://freedesign.md");
expect(extractionUrl.pathname).toBe("/api/extract");
expect(extractionUrl.searchParams.get("url")).toBe("https://example.com/");
expect(extractionUrl.searchParams.get("format")).toBe("json");
expect(output).toEqual({
title: "Example Studio",
description:
"Design software that helps teams build better products together every day worldwide with confidence",
primaryColor: "#1e3346",
primaryColorName: "Blue Whale",
accentColor: "#0da0a0",
accentColorName: "Persian Green",
headingFont: "Sora",
bodyFont: "Poppins",
});
});

it("normalizes bare HSL channel values", async () => {
ssrfSafeFetch
.mockResolvedValueOnce(
new Response(
JSON.stringify(
extractionPayload({
designSystemData: {
colors: { primary: "20 90% 48%", accent: "47 100% 96%" },
typography: {},
},
}),
),
),
)
.mockResolvedValueOnce(new Response(JSON.stringify({ colors: [] })));

const output = await crawlDesignReference.run({
url: "https://saltandwisdom.com",
});

expect(output).toMatchObject({
primaryColor: "#e9560c",
accentColor: "#fffbeb",
});
});

it("uses secondary color when no accent is returned", async () => {
ssrfSafeFetch
.mockResolvedValueOnce(
new Response(
JSON.stringify(
extractionPayload({
designSystemData: {
colors: { primary: "#145AB4", secondary: "#F0781E" },
typography: {},
},
}),
),
),
)
.mockResolvedValueOnce(new Response(JSON.stringify({ colors: [] })));

const output = await crawlDesignReference.run({
url: "https://example.com",
});

expect(output).toMatchObject({
primaryColor: "#145ab4",
accentColor: "#f0781e",
headingFont: null,
bodyFont: null,
});
});

it("rejects unresolved challenge pages", async () => {
ssrfSafeFetch.mockResolvedValueOnce(
new Response(
JSON.stringify(
extractionPayload({
signals: { title: "Just a moment...", description: "" },
}),
),
),
);

await expect(
crawlDesignReference.run({ url: "https://example.com" }),
).rejects.toThrow("blocked automated browser inspection");
});

it("rejects private hosts before calling the extraction service", async () => {
isBlockedExtensionUrlWithDns.mockResolvedValueOnce(true);

await expect(
crawlDesignReference.run({ url: "https://private.example.com" }),
).rejects.toThrow("Private or internal");
expect(ssrfSafeFetch).not.toHaveBeenCalled();
});

it("rejects credential-bearing URLs before calling the extraction service", async () => {
await expect(
crawlDesignReference.run({ url: "https://user:secret@example.com" }),
).rejects.toThrow("embedded credentials");
expect(ssrfSafeFetch).not.toHaveBeenCalled();
});
});
Loading
Loading