Uploaded images were inlined as full-resolution base64 in the message
metadata, and the entire chat history is posted on every turn. Two 4MB
uploads exceeded the 4.5MB request body cap, so the platform rejected the
request before the route ran (FUNCTION_PAYLOAD_TOO_LARGE).
- Downscale and re-encode raster uploads client-side (1536px longest edge,
WebP with a JPEG fallback, ~300KB target). UI screenshots land around
12KB with imperceptible color drift, so token extraction is unaffected.
- Trim images from the oldest messages when the serialized request body
would still exceed the budget, rather than failing the request outright.
- Raise MAX_IMAGE_FILES from 2 to 5 now that the payload allows it, and
wrap the multi-image message preview row so the thumbnails stay legible.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Select sat below the title's center because the grid CardAction is
self-start and spans two rows with no description row. Use a centered
flex header so the title and period selector align.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds dense Application and full landing-page Marketing demo tabs to the theme preview, themed entirely via editor tokens. Includes follow-up fixes: Mail/Color Palette moved into the More previews dropdown, marketing scrollbar kept above the sticky nav, Application fills the preview frame, and atp/src tracking params on shadcncraft attribution links.
- Add shadcncraft.svg with new two-parallelogram mark
- Switch dialog to use shadcncraft logo
- Bump dialog max-width to 800px and split pricing card 3fr/2fr
- Switch heading font weight from semibold to medium
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Updates the tweakcn × shadcncraft modal to match the new Figma design:
new hero, UI blocks and React code sections, refreshed pricing card,
and rebrand from "shadcraft" to "shadcncraft" across the figma surface.
- Upgrade streamdown 1.0.11 → 2.4.0 with native streaming animation support
- Use Streamdown's built-in isAnimating/animated props instead of custom typewriter
- Remove useStreamText hook (replaced by Streamdown's native animation)
- Simplify StreamText component to pass through to Streamdown directly
- Add streamdown/styles.css import and Tailwind @source for class detection
- Fix ChatThemePreview card height by overriding Card's default py-6/gap-6
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a "Popular" section at the top of the font picker dropdown with
10+ curated fonts per category (sans-serif, serif, monospace, display,
handwriting) including Geist and Geist Mono. The rest of the fonts
continue in alphabetical order under "All Fonts". The popular section
hides when searching.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a "Sync" toggle button to the Sidebar color group header that syncs
all sidebar colors to their respective base counterparts (e.g. sidebar
background → background, sidebar-primary → primary). When enabled, base
color changes automatically propagate to sidebar colors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Cards preview: remove horizontal/top padding, reduce inner top padding
- Mail preview: full-width account switcher, aligned header borders,
viewport-responsive height (min 800px/90vh), scrollable inbox list
with styled ScrollArea, border on inner content div
- Preview panel: conditional padding/rounding per active tab
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add search bar to Colors tab with data-driven color group rendering
- Replace accordion headers with compact pill badge style
- Make all controls inline (label + control on same row)
- Add focus-within active style on accordion pills
- Fix sidebar resizable overlap and horizontal overflow
- Tighten spacing across all tabs for consistent density
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace ScrollArea with CommandList so cmdk groups render inside the
scrollable container, and widen the popover from 300px to 400px.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: update shadcn/ui components to v3.8.5 and migrate to unified radix-ui
- Update shadcn CLI from 2.5.0 to 3.8.5
- Update 45 standard UI components to latest versions
- Migrate from 28 individual @radix-ui/react-* packages to unified radix-ui
- Update react-resizable-panels from v2 to v4 (direction→orientation,
onLayout→onLayoutChanged, ref→panelRef, numeric sizes→percentage strings)
- Fix revola.tsx runtime error by sharing shouldUseDialog via React context
instead of independent useMediaQuery calls in each sub-component
- Preserve custom components: sidebar.tsx, base-ui-tabs.tsx, revola.tsx
- Re-apply button accent variant after component update
- Fix direct Radix imports in theme-toggle, user-profile-dropdown,
data-table-view-options
- Fix registryItemSchema import (shadcn/registry→shadcn/schema)
- Fix ScrollArea viewPortClassName removal (use data-slot CSS selector)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: resolve CSS specificity regressions from shadcn v3.8.5 update
- button: remove has-[>svg]:px-* variants that override custom padding, restore lg px-8
- dialog: revert sm:max-w-lg to max-w-lg so consumer max-w overrides work
- separator: use JS conditionals instead of data-attribute variants for orientation
- tabs: restore old TabsTrigger styles to prevent dark mode border overrides
- select consumers: use size="sm" prop instead of className h-8 override
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Click a theme card to apply it and open a preview dialog with Cards Demo,
like/share/toggle actions, and left/right arrow navigation between themes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Loose markdown lists (items separated by blank lines) wrap each item's
content in a <p> tag with browser-default margins, causing large gaps.
Added [&_li>p]:my-0 to collapse those margins.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The "Open in v0" button on /themes/[id] was using the themeId as the
title, causing v0 API to reject it. Now passes the actual theme name
and truncates the title to 32 chars to stay within v0's limit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The code panel on /themes/[id] incorrectly showed "Save your theme to
get the registry command" because it relied on the editor store's preset
field, which isn't set when viewing a theme page. Pass themeId through
to CodePanel so it always shows the registry command for saved themes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adjust community card height and grid gap, apply theme-aware border
radius and font family to preset buttons, and fix preview text alignment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace duplicated color swatch strips in CommunityThemeCard and
ThemeCard with a new ThemePreview component that shows palette bars,
font preview, and box shadow. Adjust grid gap for community page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace dropdown menu with inline "Open in Editor" button
- Remove "Published" badge from theme name
- Make header section mobile responsive with flex-col/row
- Skip save check when opening in v0 from theme detail page since theme already exists
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simplify and modernize the landing page components including hero,
features, FAQ, how-it-works, and AI generation CTA. Remove the
roadmap section entirely. Update AI chat message styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a predefined tag system for community themes (50 tags across
style, use-case, season, and aesthetic categories). Users select
1-5 tags when publishing via a searchable command dropdown.
Tags display as overlay pills on community cards and as badges
on theme view pages. Includes SEO metadata enrichment with tags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the separate edit mode (ThemeEditActions bar + EditButton) and
instead track unsaved changes inline. The preset selector now shows
`<name>*` for any preset with unsaved changes. Clicking Save on a
saved preset opens a dialog offering to update the existing theme or
save as a new one.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use current theme mode for community card color swatches instead of
hardcoded "light"
- Add light/dark theme toggle switch to user profile dropdown menu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* add community themes feature
Allow users to publish saved themes to a public community page,
browse/sort community themes, and like them with auth-gated interactions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* improve community themes UI and fix like state
- Polish community page with better layout, sort icons, loading skeletons
- Show author, date, like count on theme detail page
- Fix isLikedByMe not being fetched in getCommunityDataForTheme
- Remove Community link from app header
- Replace Save with Publish button in editor action bar for saved themes
- Include isPublished in getThemes() via server-side join to avoid layout shift
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* ui
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Enhance Preview Panel and Support External Websites (#184)
* feat: Add Block Viewer for Preview Panel
* feat: support theme injection for external websites
* refactor: Improve Naming and Composition
* Support for Google Fonts in Preview script and Error Feedback (#202)
* feat: Add support for loading Google Fonts in the embed script.
* feat: Add error state and UI feedback
* fix font loading by overriding classes
* add reset button + update some ui
* syntax highlighting plus copy changes
* rename script
* update ui for connection status
* ui
* zustand store for preview state
* use nuqs for active preview tab
* get shadows working
* refactor
* A
* add tracking
---------
Co-authored-by: Luis Llanes <137589205+llanesluis@users.noreply.github.com>
Co-authored-by: Luis Llanes <luisllaboj@gmail.com>
* update package locks to avoid conflict
* Refactor AI Generation with AI SDK v5 (#210)
* refactor(wip): Whole Chat implementation
* fix: Deps
* chore: Update types and create tool to handle theme generation
* chore: Add hook and component to handle feedback text
* chore: Check for themeStyles in asssiatant metadata
* feat: Improve messages styles and feedback
* chore: Update react-hook-form deps
* chore: Improve Messages display
* chore: Show a banner when theme is generating
* chore: Optimize the Messages syncing
* feat: Add debug button to MessageActions in dev mode
* chore: messages
* chore: Improve System prompt + tools + utils
* fix: correctly display User messages with only images
* feat: Handle errors in UI and adapt to AI sdk
* feat: Use tool output instead of custom data parts
* chore: System prompt and schema context
* chore: Gemini 2.5 pro as the default model
* refactor: Change name to Chat Context and apply generated theme automatically
* chore: Update ai packages to latest version
* feat: Stop ongoing request before starting a new chat
* feat: Refactor logic for Scroll start/end sentinels
* feat: Improve UI streaming with AI Elements and Stream Text utils
* chore: Generate theme types and logic
* feat: Allow customize the speed of streaming text
* refactor: Theme generation utils
* fix: Avoid duplicated Mention references
* styles: Improve Chat error banner
* feat: Enhance Prompt core implementation
* feat: Implement enhance prompt in components
* chore: Add TODOS comments
* chore: Remove Openai provider
* chore: Update AI adk packages
* fix: Free request constant
---------
Co-authored-by: Sahaj Jain <82111591+jnsahaj@users.noreply.github.com>
* update lockfile
* fix import
* fix types
* chore: Trigger theme generation before transitioning to editor page
* refactor: Move AI sdk specific code into Lib and update imports
* chore: Provide model ID to record usage util
* refactor: Multi model provider convention
* fix types
* refactor: Use Zustand persist middleware versioning
* feat: Improve prompts and context
* feat: Optimize streaming JSONContent into text area
* chore: Improve Theme Generation prompt
* feat: Improve prompt
* feat: Add subscription checks for enhancing prompt and Posthog tracking
---------
Co-authored-by: Luis Llanes <137589205+llanesluis@users.noreply.github.com>
Co-authored-by: Luis Llanes <luisllaboj@gmail.com>
* chore: add @base-ui-components/react dependency and update pnpm-lock.yaml
* feat: add custom hook useMediaQuery for responsive design
* refactor: streamline button component code for improved readability
* refactor: enhance ScrollArea component with viewport className prop and improve className organization
* refactor: replace Dialog component with ResponsiveDialog for improved responsiveness and UI consistency
* feat: introduce ResponsiveDialog component for enhanced mobile and desktop dialog handling
* refactor: update Next.js configuration to use TypeScript type for NextConfig
* refactor: replace Dialog with ResponsiveDialog in CardsChat component for improved UI consistency and responsiveness
* refactor: replace Dialog with ResponsiveDialog in ShareDialog component for improved UI consistency and responsiveness
* refactor: replace Dialog with ResponsiveDialog in FigmaExportDialog component for improved UI consistency and responsiveness.
- Use `Scrollarea` for cleaner scrollbar and structure it a bit different, so scrollbar's doesn't overflow beyond dialog.
* refactor: replace Dialog with ResponsiveDialog in ThemeSaveDialog component for improved UI consistency and responsiveness
* refactor: replace Dialog with ResponsiveDialog in PodcastEmptyPlaceholder component for improved UI consistency and responsiveness
* refactor: replace Dialog with ResponsiveDialog in ChatImagePreview component for improved UI consistency and responsiveness
* feat: add Tabs component based on BaseUI with customizable TabsList, TabsTrigger, TabsContent, and TabsIndicator for improved UI navigation
* refactor: replace Dialog with ResponsiveDialog in CssImportDialog component for improved UI consistency and responsiveness
* refactor: replace Dialog with ResponsiveDialog in AuthDialog component for improved UI consistency and responsiveness
* refactor: replace Dialog with ResponsiveDialog in MCPDialog component for improved UI consistency and responsiveness
- Replace `Tabs` component with new Base UI based `Tabs` component
* refactor: update Tabs and Select components in CodePanel for improved UI consistency
- Replace old Tabs component with new Base UI based Tabs component
- Add TabsIndicator for enhanced visual feedback
- Adjust SelectContent z-index for better layering
* refactor: replace Dialog with ResponsiveDialog in CodePanelDialog component for improved UI consistency and responsiveness
- fix: accessibility issue cased by missing title and description for dialog
* refactor: replace Dialog with ResponsiveDialog in ContrastChecker component for improved UI consistency and responsiveness
- Disable `Issues` button, when there's no issue
- Sticky Header for each section for better messaging for each section especially on mobile
* refactor: adjust layout and spacing in FigmaExportDialog for improved visual consistency
- Update margin and padding for better alignment of elements
- Remove unnecessary line breaks to streamline the code
* refactor: adjust layout and spacing in GetProDialog and AIChatDemo components for improved visual consistency
- Update positioning of elements in GetProDialog for better alignment
- Remove unnecessary inset from AIChatDemo for cleaner layout
* refactor: enhance layout in CodePanelDialog for improved responsiveness
- Adjust max-height for better display on smaller screens
- Maintain overall visual consistency with other dialog components
* refactor: enhance CodePanel layout with additional ScrollBar orientations
- Add horizontal and vertical ScrollBars for improved navigation within code panels
- Adjust padding in CodePanelDialog for better spacing and visual consistency
* refactor: clean up TabsIndicator component by removing commented code
- Remove unnecessary commented-out code for better readability
- Streamline TabsIndicator implementation for improved clarity
* refactor: update ResponsiveDialog components to use isDesktop for breakpoint detection
- Replace isMobile with isDesktop in ResponsiveDialog components for improved clarity
- Ensure consistent behavior across dialog and drawer implementations based on desktop view
* refactor: enhance ResponsiveDialogContent with additional props for customization (v1.4) update
- Introduce closeButtonClassName and dragHandleClassName props for better styling control
- Update context initialization to allow null values for improved type safety
- Refactor ResponsiveDialogContent to streamline rendering logic and improve readability
* refactor: reorganize imports and clean up AuthDialog component for improved readability
- Rearranged import statements for better structure
- Removed unnecessary props from ResponsiveDialogContent for cleaner layout
- Enhanced overall code clarity and maintainability
* refactor: reorganize imports in MCPDialog for improved clarity and consistency
- Rearranged import statements for better structure
- Cleaned up component imports to enhance readability
- Maintained overall code organization for future maintainability
* refactor: reorganize imports and enhance layout in various dialog components for improved readability
- Cleaned up and rearranged import statements for better structure
- Updated ResponsiveDialogContent and ResponsiveDialogHeader for consistent padding and spacing
- Enhanced overall layout and visual consistency across multiple dialog components
* refactor: add iOS detection to adjust repositioning of inputs in ResponsiveDialog