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>
* 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: allow overriding ControlSection classNames
* feat: Support Google Fonts API and load fonts dynamically
* feat: Enforce System Prompt to use Google Fonts API if needed
* styles: Improve GoogleFontPicker styles
* feat: Pull Fonts from fileSystem instead of hitting the Google Fonts API every time
* feat: Improve System Prompt to reference Google Fonts
* refactor: Use Next.js Cache instead of manually fetching and reading from the filesystem
* feat: Only enable Font picker fetch when it's open
* chore: Remove JSON for Google Fonts catalogue
* feat: Scroll to selected font if it's already fetched and add clean search button
* chore: update imports
* fix: dashboard preview
---------
Co-authored-by: Luis Llanes <luisllaboj@gmail.com>
* fix: border radius and overflow in ImagePreview component
* fix: Proper support for SVGs and UI feedback when errors occur
* SVG files are treated and displayed as Images in the UI
* SVG files are processed as Markup Text to send to the API
* Remove support for GIFs
* chore: improve system prompt to handle SVGs properly
* styles: Add border radius to uploaded image preview when loading
* feat: Add polar for tweakcn-plus checkout
* migrate to polar nextjs for more control
* chore: save closable chat suggestions state as a preference in local storage
* chore: improve color contrast in user UI message
* feat: add pro features components
* chore: update TextArea styles
* feat: adjust theme generation types, functions and API to support adding an image
* feat: AI components now support and display images
* feat: add support for multiple images
* feat: add support for multiple images to components
* feat: support image only prompts and clean up API code
* chore: save closable chat suggestions state as a preference in local storage
* chore: improve color contrast in user UI message
* feat: add pro features components
* chore: update TextArea styles
* feat: adjust theme generation types, functions and API to support adding an image
* feat: AI components now support and display images
* feat: add support for multiple images
* feat: add support for multiple images to components
* feat: support image only prompts and clean up API code
* add checkout link support
* add ai-usage schema and actions
* feat: dashboard: add AI usage stats with bar chart
* feat: enforce subscription limits and improved error handling for AI theme generation
* feat: Integrate alert-banner with actual usage
* fix: pricing navigation
* feat: Checkout link generation
* feat: add quick action to create a theme from an image in ai page
* feat: add drag and drop for images
* chore: move Image Upload constant vars and update imports
* feat: improve feedback while theme is being generated
* feat: Add pricing page UI
* refactor: Dashboard migration to Settings page
* feat: improve pricing page
* feat: add auth check in checkout and refactor implementation for consistency and typesafety
* refactor: adjust code and API to follow new types and useQuery hook typesafety
* refactor: alert banner displays correctly and uses the new subscription hook
* feat: improve UI feedback for Pro users
* feat: upload images by pasting (cmd/crtl + v)
* feat: add Go Pro dialog, and global store (no implemented in app yet)
* chore(WIP): scaffold of Pro subscription modal show logic
* feat: Add openProModal logic to handleGenerateTheme in chat-interface
* chore: save closable chat suggestions state as a preference in local storage
* chore: improve color contrast in user UI message
* feat: add pro features components
* chore: update TextArea styles
* feat: adjust theme generation types, functions and API to support adding an image
* feat: AI components now support and display images
* feat: add support for multiple images
* feat: add support for multiple images to components
* feat: support image only prompts and clean up API code
* add ai-usage schema and actions
* feat: dashboard: add AI usage stats with bar chart
* feat: enforce subscription limits and improved error handling for AI theme generation
* feat: Integrate alert-banner with actual usage
* fix: pricing navigation
* feat: Checkout link generation
* feat: add quick action to create a theme from an image in ai page
* feat: add drag and drop for images
* chore: move Image Upload constant vars and update imports
* feat: improve feedback while theme is being generated
* feat: Add pricing page UI
* refactor: Dashboard migration to Settings page
* feat: improve pricing page
* feat: add auth check in checkout and refactor implementation for consistency and typesafety
* refactor: adjust code and API to follow new types and useQuery hook typesafety
* refactor: alert banner displays correctly and uses the new subscription hook
* feat: improve UI feedback for Pro users
* feat: upload images by pasting (cmd/crtl + v)
* feat: add Go Pro dialog, and global store (no implemented in app yet)
* chore(WIP): scaffold of Pro subscription modal show logic
* feat: Add openProModal logic to handleGenerateTheme in chat-interface
* refactor: follow naming convention
* chore: refactor components and layout/pages for consistency
* fix: enforce auth checks or redirect in /settings routes
* chore: update Go Pro dialog
* refactor: create reusable theme toggle component
* feat: add Get Pro dialog to header
* chore: rename GoPro dialog to GetPro and update imports
* feat: add AI generation section to Home page and adjust Get Pro dialog
* chore: save closable chat suggestions state as a preference in local storage
* chore: improve color contrast in user UI message
* feat: add pro features components
* chore: update TextArea styles
* feat: adjust theme generation types, functions and API to support adding an image
* feat: AI components now support and display images
* feat: add support for multiple images
* feat: add support for multiple images to components
* feat: support image only prompts and clean up API code
* add ai-usage schema and actions
* feat: dashboard: add AI usage stats with bar chart
* feat: enforce subscription limits and improved error handling for AI theme generation
* feat: Integrate alert-banner with actual usage
* fix: pricing navigation
* feat: Checkout link generation
* feat: add quick action to create a theme from an image in ai page
* feat: add drag and drop for images
* chore: move Image Upload constant vars and update imports
* feat: improve feedback while theme is being generated
* feat: Add pricing page UI
* refactor: Dashboard migration to Settings page
* feat: improve pricing page
* feat: add auth check in checkout and refactor implementation for consistency and typesafety
* refactor: adjust code and API to follow new types and useQuery hook typesafety
* refactor: alert banner displays correctly and uses the new subscription hook
* feat: improve UI feedback for Pro users
* feat: upload images by pasting (cmd/crtl + v)
* feat: add Go Pro dialog, and global store (no implemented in app yet)
* chore(WIP): scaffold of Pro subscription modal show logic
* feat: Add openProModal logic to handleGenerateTheme in chat-interface
* refactor: follow naming convention
* chore: refactor components and layout/pages for consistency
* fix: enforce auth checks or redirect in /settings routes
* chore: update Go Pro dialog
* refactor: create reusable theme toggle component
* feat: add Get Pro dialog to header
* chore: rename GoPro dialog to GetPro and update imports
* feat: add AI generation section to Home page and adjust Get Pro dialog
* feat: Add customer portal
* feat: add chat input draft persistence (not images)
* styles: improve styles for ai generation and alert banner defaults
* feat: Send whole chat context to AI
* fix: silly typo lol
* feat: support images persistence and sync
* feat: edit message (text, mentions and images)
* fix: add eslint-disable for exhaustive-deps warnings
* chore: fix build error & improve text and styles in suggested prompts
* refactor: handle session and subscription checks and handle post login actions
* migrate to turbopack
* refactor: use reducer builder pattern to sync ai-draft-store with image-uploader
* fix: ai-usage computation: account for abort
* feat: Theme limit handling for pro tier
* refactor: remove duplicate code from ai-chat-form and chat-input
* feat: Add faq to pricing page
* fix: /dashboard navigations -> /settings
* feat: update ui for success page
* feat: Migrate ai chat and draft message store to idb-keyval
* feat: move subscription details in-house
* generate migration
* fix: build err
* styles: improve Message UI
* fix: allow scroll in GoPro dialog chat preview
* feat: improve AI usage feedback when theme generation when success or failure
* feat: Message UI enhancement when assistant message is error feedback
* feat: add latest features in /ai page and refactor Core Theme Generation logic hooks
* styles: improve styles and layout for consistency
* styles: improve styles in settings pages for consistency
* cancelled theme doesn't cost requests
* update next to latest (for turbopack compat)
* fail build if polar webhook secret is not set
* update polar sdk and nextjs plugin
* feat: Create customer before creating checkout for them
* chore: save closable chat suggestions state as a preference in local storage
* chore: improve color contrast in user UI message
* feat: add pro features components
* chore: update TextArea styles
* feat: adjust theme generation types, functions and API to support adding an image
* feat: AI components now support and display images
* feat: add support for multiple images
* feat: add support for multiple images to components
* feat: support image only prompts and clean up API code
* add ai-usage schema and actions
* feat: dashboard: add AI usage stats with bar chart
* feat: enforce subscription limits and improved error handling for AI theme generation
* feat: Integrate alert-banner with actual usage
* fix: pricing navigation
* feat: Checkout link generation
* feat: add quick action to create a theme from an image in ai page
* feat: add drag and drop for images
* chore: move Image Upload constant vars and update imports
* feat: improve feedback while theme is being generated
* feat: Add pricing page UI
* refactor: Dashboard migration to Settings page
* feat: improve pricing page
* feat: add auth check in checkout and refactor implementation for consistency and typesafety
* refactor: adjust code and API to follow new types and useQuery hook typesafety
* refactor: alert banner displays correctly and uses the new subscription hook
* feat: improve UI feedback for Pro users
* feat: upload images by pasting (cmd/crtl + v)
* feat: add Go Pro dialog, and global store (no implemented in app yet)
* chore(WIP): scaffold of Pro subscription modal show logic
* feat: Add openProModal logic to handleGenerateTheme in chat-interface
* refactor: follow naming convention
* chore: refactor components and layout/pages for consistency
* fix: enforce auth checks or redirect in /settings routes
* chore: update Go Pro dialog
* refactor: create reusable theme toggle component
* feat: add Get Pro dialog to header
* chore: rename GoPro dialog to GetPro and update imports
* feat: add AI generation section to Home page and adjust Get Pro dialog
* feat: Add customer portal
* feat: add chat input draft persistence (not images)
* styles: improve styles for ai generation and alert banner defaults
* feat: Send whole chat context to AI
* fix: silly typo lol
* feat: support images persistence and sync
* feat: edit message (text, mentions and images)
* fix: add eslint-disable for exhaustive-deps warnings
* chore: fix build error & improve text and styles in suggested prompts
* refactor: handle session and subscription checks and handle post login actions
* migrate to turbopack
* refactor: use reducer builder pattern to sync ai-draft-store with image-uploader
* fix: ai-usage computation: account for abort
* feat: Theme limit handling for pro tier
* refactor: remove duplicate code from ai-chat-form and chat-input
* feat: Add faq to pricing page
* fix: /dashboard navigations -> /settings
* feat: update ui for success page
* feat: Migrate ai chat and draft message store to idb-keyval
* feat: move subscription details in-house
* generate migration
* fix: build err
* styles: improve Message UI
* fix: allow scroll in GoPro dialog chat preview
* feat: improve AI usage feedback when theme generation when success or failure
* feat: Message UI enhancement when assistant message is error feedback
* feat: add latest features in /ai page and refactor Core Theme Generation logic hooks
* styles: improve styles and layout for consistency
* styles: improve styles in settings pages for consistency
* cancelled theme doesn't cost requests
* update next to latest (for turbopack compat)
* fail build if polar webhook secret is not set
* update polar sdk and nextjs plugin
* feat: Create customer before creating checkout for them
---------
Co-authored-by: Luis Llanes <luisllaboj@gmail.com>
* feat: Support Tailwind CSS Color Palette in UI Color Pickers
* adding a hex function
* fixes position of color picker
* improve code and adding tailwindcss classes on typing
* refactor: simplify ColorPicker and adding Color Popover component
* remove state and ref
---------
Co-authored-by: Sahaj Jain <82111591+jnsahaj@users.noreply.github.com>
* refactor: Rename and break components into smaller components
* refactor: move ai utils to own folder and update imports
* feat: improve the AI context for theme generation
* fix: line breaks on CustomTextArea when shift + enter and when pasting a multiline prompt
* feat: improve 'create' example prompts for more consistent results
* Enhanced Editor (#100)
* refactor: editor page to improve responsiveness
* feat: add editor tab persistance to url
* chore: clean up classNames
* feat: enhance theme color-preview to make it responsive
* feat: add ai chat tab working with local state
* successful responses return a theme color-preview
* error responses return a generic message
* fix: invalid tabs fallback to default tab "colors"
* fix: remove messages scroll animation on tabs change and remove duplicate preview
* fix: minor fixes in classNames
* feat: Chat starts with a default message
* refactor: Enhance editor controls and toolbar buttons to disable when generating theme
- Updated button components to be extendible.
- Refactored buttons to utilize TooltipWrapper for consistent tooltip behavior.
* fix: sync controls tabs by 'value' instead of 'defaultValue'
* fix: load messages from local storage, otherwise set a default initial message
* fix: editor mention list positions correctly and add a tab handler for selecting mention
* fix: build errors due to unused imports
* chore: improve defaults and styles for ai chat interface and editor
* refactor: move AIChat state management to a zustand store
* feat: preserve control tab between edit mode and traditional editor mode
* feat: reset ai chat on editor reset button click
* feat: load chat messages dynamically to avoid layout shifts due to local storage
* fix: Use const id for default ai message to avoid re-render
* fix: Use searchParams for callback url as well after auth
* refactor: Remove unused getEditorConfig code
* feat: Only have 1 handler per postlogin action type
This was causing issues in AI Chat form. AI_GENERATE_FROM_CHAT action
was being scheduled twice because of re-render (caused by lazy-loaded
component)
* fix: Add user message for post login action
* refactor: Only use JSONContent in application state (derive textContent from it)
* feat: Auto-attach current theme to prompt after 1st user message
* feat: clean up AI interface and add community themes section
* feat: AI entrypoint redirect to main Editor and trigger theme generation
* chore: improve styles on ai page
* refactor: clean up AI components components from AI page and Editor page
* refactor: share repeated theme generation logic
* fix: chat messages inconsistent padding and pill buttons disabled state
* fix: build error
* feat: remove AI Generation Dialog and related logic
* feat: show agent response about the theme
* refactor: simplify theme generation logic and improve error handling
* refactor: transition from JSONContent to AIPromptData for theme generation
* feat: add retry functionality for user messages in AI chat interface
* refactor: remove unused loading fallback component and integrate loading indicator in chat messages
* change position of retry button
* feat: Improve system prompt
* refactor: replace createCurrentThemePrompt with attachCurrentThemeMention for improved prompt handling
* feat: add a placeholder for new chat and fix chat area styles
* chore: hide Community themes from AI page
* fix: build errors
* fix: ai theme generation only happens when there is content to be sent as the prompt
* feat: show AI tab in production
* fix: Early return after showing error message in ai chat
* feat: Attach last generated message instead of current theme for chat
* Use @ mentions in example prompts
* Enhance mention rendering in AI prompts and update mention styles in CSS
* skip posthog on dev
* Enhanced Editor (#100)
* refactor: editor page to improve responsiveness
* feat: add editor tab persistance to url
* chore: clean up classNames
* feat: enhance theme color-preview to make it responsive
* feat: add ai chat tab working with local state
* successful responses return a theme color-preview
* error responses return a generic message
* fix: invalid tabs fallback to default tab "colors"
* fix: remove messages scroll animation on tabs change and remove duplicate preview
* fix: minor fixes in classNames
* feat: Chat starts with a default message
* refactor: Enhance editor controls and toolbar buttons to disable when generating theme
- Updated button components to be extendible.
- Refactored buttons to utilize TooltipWrapper for consistent tooltip behavior.
* fix: sync controls tabs by 'value' instead of 'defaultValue'
* fix: load messages from local storage, otherwise set a default initial message
* fix: editor mention list positions correctly and add a tab handler for selecting mention
* fix: build errors due to unused imports
* chore: improve defaults and styles for ai chat interface and editor
* refactor: move AIChat state management to a zustand store
* feat: preserve control tab between edit mode and traditional editor mode
* feat: reset ai chat on editor reset button click
* feat: load chat messages dynamically to avoid layout shifts due to local storage
* fix: Use const id for default ai message to avoid re-render
* fix: Use searchParams for callback url as well after auth
* refactor: Remove unused getEditorConfig code
* feat: Only have 1 handler per postlogin action type
This was causing issues in AI Chat form. AI_GENERATE_FROM_CHAT action
was being scheduled twice because of re-render (caused by lazy-loaded
component)
* fix: Add user message for post login action
* refactor: Only use JSONContent in application state (derive textContent from it)
* feat: Auto-attach current theme to prompt after 1st user message
* feat: clean up AI interface and add community themes section
* feat: AI entrypoint redirect to main Editor and trigger theme generation
* chore: improve styles on ai page
* refactor: clean up AI components components from AI page and Editor page
* refactor: share repeated theme generation logic
* fix: chat messages inconsistent padding and pill buttons disabled state
* fix: build error
* feat: remove AI Generation Dialog and related logic
* feat: show agent response about the theme
* refactor: simplify theme generation logic and improve error handling
* refactor: transition from JSONContent to AIPromptData for theme generation
* feat: add retry functionality for user messages in AI chat interface
* refactor: remove unused loading fallback component and integrate loading indicator in chat messages
* change position of retry button
* feat: Improve system prompt
* refactor: replace createCurrentThemePrompt with attachCurrentThemeMention for improved prompt handling
* feat: add a placeholder for new chat and fix chat area styles
* chore: hide Community themes from AI page
* fix: build errors
* fix: ai theme generation only happens when there is content to be sent as the prompt
* feat: show AI tab in production
* fix: Early return after showing error message in ai chat
* feat: Attach last generated message instead of current theme for chat
* Use @ mentions in example prompts
* Enhance mention rendering in AI prompts and update mention styles in CSS
* fix: missing fade effect on chat messages scroll area and overflow in placeholder buttons
* feat: add user name from session to the chat placeholder component
* feat: Improve system prompt context
* chore: remove unnecessary context from example prompts
* feat: Enhance mention list with auto-scroll functionality and update prompt structures in no-messages placeholder
* feat: Add character limit for AI prompt input and integrate character count extension
* fix: Simplify prompt data handling in AI chat component and adjust textarea behavior during AI generation
* fix: Update theme state handling to include current mode in editor store
* chore: improve styles for consistency
* feat: add fun prompts to chat placeholder
* feat: add typography demo to preview panel
* feat: add responsive cards demo based on shadcn showcase
* fix: typography demo scroll area
* fix: build errors due to components refactor
* fix: wrap typography demo in ExamplesPreviewContainer
* feat: change default theme to match shadcn/ui default
* chore: move some theme previews into a dropdown to keep ui clean
---------
Co-authored-by: Luis Llanes <137589205+llanesluis@users.noreply.github.com>
Co-authored-by: Luis Llanes <luisllaboj@gmail.com>
* feat: add formatCompactNumber utility for compact number formatting
* Feature/save (#41)
* setup drizzle with better-auth
* switch to turso
* chore: better auth migrations
* feat: add basic signin signup auth
* update form uis
* remove emailAndPassword
* loading state for auth btns
* add theme routes and save function
* migrate to actions
* feat: Add dashboard page to view saved themes
* hook up delete theme functionality
* minor improvements
* feat(auth): add AuthDialogWrapper and integrate with existing components
* setup post login action to open save modal after login
* refactor action bar
* refactor
* add ability to open theme by id
* Use URL param for themeId
* feat(editor): improve theme loading and add theme editing actions component
* feat(theme): implement theme editing functionality with routing updates
* refactor: move to try-catch
* remove unused files for auth and theme routes
* fix build errors
* modify copies
* add theme limit
* fix: Recursive setstate
* fix: Save theme loading state
* feat: Implement theme checkpoint for better reset during editing
* reset theme after save/reset
* feat: Add privacy-policy page
* speed up nav using prefetch and loading with better loader
* refactor
* update dashbaord UI
* add quick apply to theme card
* switch to neon
* minor ui updates