HTML Page Generator
AI-Powered HTML page generator utilities to help you create your own generative UI experiences.
Live Example
This HTML page generator and preview is just a basic example of the kinds of interfaces and interactions you can build with useHtmlPage
.
useHtmlPage
hook
Generates full HTML documents, returning a raw HTML string.
Iterate on existing pages or previous generation results by passing data to the html
parameter.
'use client'
import { useHtmlPage } from '@trikinco/fullstack-components/client'
export default function Page() {
const { isLoading, data } = useHtmlPage({
/**
* Description of what you want to create
*/
prompt: 'An about page for a cat named Bubbles',
/**
* Full URL to a reference image
*/
src: 'https://awesome-cat-ui/aboutcat.png',
/**
* Comma separated list of unprefixed
* Tailwind colors
*/
colors: 'blue-800,purple-300',
/**
* HTML string of a full HTML document
* used to iterate on an existing document
* or previous generation result
*/
html: `<!DOCTYPE html>
<html lang="en">
<body>
<h1>The Home of Bubbles</h1>
...
</body>
</html>
`,
})
if (isLoading) {
return 'Generating UI...'
}
// Beware of the possible security implications of this, consider XSS, sandboxing, etc.
return <iframe title="About Bubbles" srcDoc={data} />
}
Custom Server Component with getHtmlPage
import { getHtmlPage } from '@trikinco/fullstack-components'
export default async function Page() {
const { responseText } = await getHtmlPage({
prompt: 'A modern marketing site for a speed boat company',
src: 'https://speed-boat-designs.dev/inspiration.png',
colors: 'blue-400,teal-200',
theme: 'light',
// `html` is only used if iterating on a previously generated page
html: '<!DOCTYPE html><html>...</html>',
})
return responseText
}
Setup
Add htmlPage: handleHtmlPageRequest()
to the API route handler.
import {
handleFSComponents,
handleHtmlPageRequest,
type FSCOptions,
} from '@trikinco/fullstack-components'
const fscOptions: FSCOptions = {
htmlPage: handleHtmlPageRequest({
openAiApiKey: process.env.OPENAI_API_KEY || '',
}),
// Additional options and handlers...
}
const fscHandler = handleFSComponents(fscOptions)
export { fscHandler as GET, fscHandler as POST }
API Reference
Types
HtmlPageOptions
HTML page generator API route handler options.Properties
openAiApiKeystring
- default`process.env.OPENAI_API_KEY`.
HtmlPageRequestBodyinterface
HTML page generator request body.Properties
promptstring
A text description of the HTML page you want to build or modify.- example'A colorful about page for a cat named "Fluffy". Rounded corners, a gradient background, and a centered image of a cat.'
srcstring
An absolute URL to a reference image to base the design of the entire HTML page on.- example'https://absolute-cat-inspiration/tabbycat-ui.jpg'
colorsstring
A comma-separated list of unprefixed TailwindCSS colors to use in the generated HTML page.- example'blue-400,red-600'
themelight | dark
The theme to make the UI for, equivalent to media `prefers-color-scheme`.- example'dark'
htmlstring
A stringified HTML page to modify or iterate on. Useful when allowing for follow-up calls to modify a previously generated HTML page.- example'<html><body><h1>Henlo, world!</h1></body></html>'
ChatGptCompletionResponse
The response body for `getHtmlPage`.Properties
responseTextstring
The response text extracted from the completion message content.tokensUsednumber
Total number of tokens used in the request (prompt + completion).finishReasonstring
The reason the chat stopped. This will be `stop` if the model hit a natural stop point or a provided stop sequence, `length` if the maximum number of tokens specified in the request was reached, `content_filter` if content was omitted due to a flag from our content filters, `tool_calls` if the model called a tool, or `function_call` (deprecated) if the model called a function.errorMessagestring
The error message if there was an error.Hooks
useHtmlPagefunction
import { useHtmlPage } from '@trikinco/fullstack-components/client'
Parameters
bodyHtmlPageRequestBodyrequired
- linkHtmlPageRequestBody
- default`theme` is set to the current `prefers-color-scheme` value using `window.matchMedia`
configUseRequestConsumerConfig<HtmlPageRequestBody>
Fetch utility hook request options without the `fetcher`. Allows for overriding the default `request` config.Returns
isLoadingboolean
Fetch loading state. `true` if the fetch is in progress.isErrorboolean
Fetch error state. `true` if an error occurred.errorunknown
Fetch error object if `isError` is `true`datastring | undefined
Fetch response data if the fetch was successful.refetchfunction
Refetches the data.Utilities
getHtmlPagefunction
import { getHtmlPage } from '@trikinco/fullstack-components'
Parameters
requestHtmlPageRequestBodyrequired
optionsHtmlPageOptions
- linkHtmlPageOptions
fetchHtmlPagefunction
import { fetchHtmlPage } from '@trikinco/fullstack-components/client'
Parameters
bodyHtmlPageRequestBodyrequired
configRequestConfigOnly
Fetch utility request options without the `body`