* Add create template functionality in Admin Panel
- Implemented a new endpoint for creating templates in AdminController, utilizing the GenerateTemplate command.
- Added a form in the admin settings Vue component to allow users to input a template description and submit it.
- Enhanced the user experience with loading states and success/error alerts during template creation.
These changes facilitate the generation of new form templates directly from the admin interface, improving usability and functionality.
* Update template prompt validation length in AdminController
- Increased the maximum length of the 'template_prompt' field from 1000 to 4000 characters in the createTemplate method.
This change allows for more extensive template descriptions, enhancing the flexibility of template creation in the admin panel.
* Refactor template generation to use job-based approach
- Migrate template generation logic from the GenerateTemplate command to a new GenerateTemplateJob class for improved separation of concerns and better handling of asynchronous processing.
- Update AdminController to utilize the new job for generating templates, enhancing maintainability and clarity in the codebase.
- Remove unused dependencies and streamline the command's handle method for better performance and readability.
* fix lint
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Implement quick login/register flow with global event handling
- Add QuickRegister component with improved modal management
- Integrate quick login/register with app store state
- Implement custom event handling for login/registration flow
- Update OAuth callback to support quick login in popup windows
- Refactor authentication-related components to use global events
* Refactor authentication flow with centralized useAuth composable
- Create new useAuth composable to centralize login, registration, and social login logic
- Simplify authentication methods in LoginForm and RegisterForm
- Add event-based login/registration flow with quick login support
- Remove redundant API calls and consolidate authentication processes
- Improve error handling and analytics tracking for authentication events
* Enhance QuickRegister and RegisterForm components with unauthorized error handling
- Add closeable functionality to modals based on unauthorized error state
- Implement logout button in QuickRegister for unauthorized users
- Reset unauthorized error state on component unmount
- Update styling for "OR" text in RegisterForm for consistency
- Set unauthorized error flag in app store upon 401 response in API calls
* Refactor Authentication Flow and Remove Unused Callback Views
- Deleted unused callback views for Notion and OAuth to streamline the codebase.
- Updated QuickRegister and LoginForm components to remove the after-login event emission, replacing it with a window message system for better communication between components.
- Enhanced the RegisterForm and other components to utilize the new window message system for handling login completion, improving reliability and maintainability.
- Added a verifyAuthentication method in the useAuth composable to ensure user data is loaded correctly after social logins, including retry logic for fetching user data.
These changes aim to simplify the authentication process and improve the overall user experience by ensuring a more robust handling of login events.
* Add eslint-disable comment to useWindowMessage composable for linting control
* Refactor QuickRegister.vue for improved template structure and clarity
- Adjusted the rendering of horizontal dividers and the "or" text for better semantic HTML.
- Added a compact-header prop to the modal for enhanced layout control.
These changes aim to enhance the readability and maintainability of the QuickRegister component.
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Decouple title from title block
* fix lint
* remove dry run for FormTitleMigration
* Skip form title migration for forms with hidden titles
* Refactor AI Form Generation with Dedicated Prompt Services
- Extract AI form generation logic from GenerateTemplate command into dedicated prompt service classes
- Update GenerateAiForm job to use new prompt generation services
- Improve GptCompleter with more robust error handling and token tracking
- Add error field to AiFormCompletion model for better error logging
- Simplify command signature from 'ai:make-form-template' to 'form:generate'
* Consolidate Template Metadata Generation with Unified Prompt Service
- Create GenerateTemplateMetadataPrompt to centralize template metadata generation
- Update GenerateTemplate command to use new consolidated metadata generation approach
- Enhance GptCompleter to support strict JSON schema validation
- Increase form prompt max length to support more complex form descriptions
- Refactor form generation to simplify metadata extraction and processing
* Implement Form Mode Strategy for Flexible Form Rendering
- Introduce FormModeStrategy to centralize form rendering logic
- Add support for different form modes: LIVE, PREVIEW, TEST, EDIT, PREFILL
- Refactor components to use mode-based rendering strategy
- Remove legacy boolean props like adminPreview and creating
- Enhance form component flexibility and reusability
* Refine Form Mode Strategy Display Behavior
- Update FormModeStrategy to hide hidden fields in PREVIEW mode
- Add FormMode getter in UrlFormPrefill component for mode-specific rendering
- Clarify mode-specific validation and display logic in form strategies
* Enhance Form Template Generation with Advanced Field Options
- Update GenerateTemplate command to use front_url for template URL output
- Expand GenerateFormPrompt with comprehensive field configuration options
- Add support for advanced field types: date with time, toggle switches, radio/checkbox selections
- Introduce field width configuration and HTML formatting for text elements
- Re-enable select, multi-select, and matrix field type definitions with enhanced configurations
* Remove Deprecated Template Metadata Generation Services
- Delete multiple AI prompt services related to template metadata generation
- Simplify GenerateTemplate command to use default values instead of complex metadata generation
- Remove GenerateTemplateMetadataPrompt and related classes like GenerateTemplateDescriptionPrompt, GenerateTemplateImageKeywordsPrompt, etc.
- Update form template generation to use basic fallback metadata generation approach
* Restore GenerateTemplateMetadataPrompt for Comprehensive Template Generation
- Reintroduce GenerateTemplateMetadataPrompt to replace default metadata generation
- Update GenerateTemplate command to use consolidated metadata generation approach
- Extract detailed metadata components including title, description, industries, and image search query
- Improve template generation with more dynamic and AI-generated metadata
* Refactor Template Preview Section Layout
- Remove unnecessary nested div in template preview section
- Simplify HTML structure for the template preview component
- Maintain existing styling and functionality while improving code readability
* Refactor Constructor and Code Formatting in AI Form Generation and Prompt Classes
- Updated the constructor in GenerateAiForm.php to use a block structure for improved readability and consistency.
- Added a blank line in the Prompt.php file to enhance code formatting and maintain consistency with PHP coding standards.
- Modified the migration file to use a more concise class declaration syntax, improving clarity.
These changes aim to enhance code readability and maintainability across the affected files.
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Create form abuse page
* Update iframe height in report-abuse.vue for improved user experience
- Increased the minimum height of the iframe from 600px to 1000px to enhance visibility and usability of the abuse report form. This change aims to provide a better user experience by ensuring that the entire form is more easily accessible without the need for scrolling.
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Refactor Form Not Found Handling and Improve Error Response
- Replace the existing "Whoops" message with a NotFoundForm component for better user experience when a form is not found.
- Enhance error handling in the loadForm function to set a 404 response status when a form cannot be loaded, improving clarity for users and developers.
These changes aim to streamline the user experience and provide clearer feedback when forms are unavailable.
* Refactor Navbar and NotFoundForm Components for Improved User Experience
- Simplify the Navbar component by removing unnecessary conditional rendering for the authentication display, enhancing clarity in the layout.
- Update the NotFoundForm component to utilize a dynamic actions array for rendering navigation options, improving maintainability and flexibility.
- Adjust text styles for better readability and consistency across the NotFoundForm component.
These changes aim to streamline the user interface and enhance the overall user experience when navigating forms and handling not found scenarios.
* Update NotFoundForm Component for Improved Action Clarity
- Adjust the text and icon in the actions array of the NotFoundForm component to enhance clarity and user experience. The "Start Fresh" action has been renamed to "Create Form" and the icon has been updated from a check-circle to a rocket-launch icon, better reflecting the action's purpose.
- Minor formatting adjustments were made to the template for improved readability.
These changes aim to provide users with clearer navigation options and a more intuitive interface when encountering a not found scenario.
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
- Implement extended token lifetime for "Remember Me" functionality
- Add token expiration details to authentication responses
- Update client-side token handling to support dynamic expiration
- Modify authentication middleware to handle token initialization more robustly
- Configure JWT configuration to support longer token lifetimes
* Billing flow redirect
* fix checkout url
* Refactor checkout and subscription flow
- Improve checkout URL generation with ref unwrapping
- Enhance user data handling in subscription modal
- Remove deprecated CheckoutDetailsModal component
- Update form field and register form styling
- Add more robust user data update mechanism
* Refactor checkout and subscription flow
- Improve checkout URL generation with ref unwrapping
- Enhance user data handling in subscription modal
- Remove deprecated CheckoutDetailsModal component
- Update form field and register form styling
- Add more robust user data update mechanism
* Fix accessibility and checkout URL generation
- Add proper label for terms and conditions checkbox in RegisterForm
- Refactor checkout URL generation in SubscriptionModal using computed refs
- Improve form input handling and reactivity
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
- Update .dockerignore with comprehensive ignore patterns for API and client
- Modify docker-compose files to improve service configurations
- Enhance Nginx configuration for development and production environments
- Refactor Dockerfile.api with improved build process
- Add docker-setup.sh script for simplified Docker deployment
- Update update-credentials.vue page with improved UI
- Remove hCaptcha dependency from package-lock.json
- Update PHP configuration and entrypoint scripts
Enhance CI/CD pipeline by introducing a new job to run ESLint on the client application. This ensures code quality and consistency for the frontend codebase.
* Readonly User
* Refactor FormPolicy and TemplatePolicy to centralize write operation logic
- Introduced a private method `canPerformWriteOperation` in both FormPolicy and TemplatePolicy to encapsulate the logic for determining if a user can perform write operations on the respective models.
- Updated the `update`, `delete`, `restore`, and `forceDelete` methods in FormPolicy to use the new method for improved readability and maintainability.
- Simplified the `update` and `delete` methods in TemplatePolicy to leverage the centralized write operation logic.
This refactoring enhances code clarity and reduces duplication across policy classes.
* Refactor user and workspace permissions handling
- Updated FormController to authorize form creation based on workspace context.
- Removed the `is_readonly` attribute from UserResource and integrated it into WorkspaceResource for better encapsulation.
- Refactored User model to eliminate the `getIsReadonlyAttribute` method, shifting readonly logic to the Workspace model.
- Adjusted FormPolicy and TemplatePolicy to utilize workspace readonly checks for user permissions.
- Updated various frontend components to reference workspace readonly status instead of user readonly status, enhancing clarity and consistency in permission handling.
These changes improve the management of user permissions in relation to workspaces, ensuring a more robust and maintainable authorization system.
* Fix isReadonlyUser
* fix pint
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Form Translation
* Support for other languages
* Support locale for datepicker
* Apply translation on select input
* Apply translation on select input
* Improve translation
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Custom SMTP Settings
* Fix lint
* Custom SMTP add in Pricing plan
* Allow reset email settings
* improve custom SMTP using seprate abstract class
* test case for custom SMTP
* fix test case
* UI improvement
* add CASHIER_KEY in phpunit for testcase
* Attempt to fix tests
* Run pint and attempt to fix cache tests
* Fix user management tests
* Fix code linters
* Merged main & fix linting
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Form editor v2
* fix template test
* setFormDefaults when save
* fix form cleaning dark mode
* improvements on open sidebar
* UI polish
* Fix change type button
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Better Form Stats
* fix lint
* submission timer store in localstorage
* Update test case for stats
* remove extra code
* fix form stats
* on restart remove timer
* fix resetTimer function name
* Improve form timer
* Fix timer after form validation error + polish UI
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Dynamic OauthDriver scope
* support migration for mysql
* Refactor default scopes for integrations
* Small UI changes
* fix flet select tooltip
* fix linter
* Fix google token size in DB
---------
Co-authored-by: Julien Nahum <julien@nahum.net>
* Re-organize a bit controllers
* Added the featureflagcontroller
* Implement feature flags in the front-end
* Clean env files
* Clean console.log messages
* Fix feature flag test
* Google Fonts
* Google fonts improvement
* font button color
* Refine font selection UI and update font fetching logic
- Update FontsController to fetch Google fonts sorted by popularity.
- Enhance FontCard component with additional skeleton loaders for better UX during font loading.
- Adjust check icon positioning in FontCard to be absolute for consistent UI.
- Remove unnecessary class in GoogleFontPicker's text input.
- Add border and rounded styling to the font list container in GoogleFontPicker.
- Simplify computed property for enrichedFonts in GoogleFontPicker.
- Implement inline font style preview in FormCustomization component.
---------
Co-authored-by: Frank <csskfaves@gmail.com>
Co-authored-by: Julien Nahum <julien@nahum.net>
* fix password reset bug
* self hosted mode middleware changes on pages
* fix lint
* wip: self hosted changes
* wip: self hosted frontend changes
* wip self hosted mode changes
* typo correction
* remove commented logic
* fix env variable names
* fix lint issues
* fix minor updates
* #445 Switched from single monolithic docker image to a docker-compose
orchestrated network of services
* Automatically configures shared secret
* Working through some issues
* Use local file storage
* Moved the dockerfiles
* Fixed some issues when building from clean
* Corrected workflow
* Hopefully schedules everything correctly now
* Prep storage for worker process as well
* .env files are required
* Pinned dependency versions
* Disable self hosted in the client as well
* Removed double defaulting logic
* Using regexs is more succinct
* Added FRONT_URL environment variable
* Merge 236e4-self-hosted-mode-changes
* Improve inital user setup
* Finalized the new docker-compose setup
* Fix back-end formatting issues
---------
Co-authored-by: Frank <csskfaves@gmail.com>
Co-authored-by: Don Benjamin <don@webhammer.co.uk>
* add api enpoints for adding, removing, updating user to workspace and leaving workspace
* feat: updates client site workspace settings
* refactor and add domain setting ui in modal
* move workspace user functionality to its own component
* adds tests
* fix linting
* updates select input to FlatSelectInput
* moves workspace user role edit to seperated component
* move user adding to its own component
* adds check to usure users exist before checking is admin
* fix loading users
* feat: invite user to team functionality
* fix token coulmn
* fix self host mode changes
* tests for user invite
* Refactor back-end
* Rename variables
* Improve some styling elements + refactor workspace settings
* More styling
* More UI polishing
* More UI fixes
* PHP linting
* Implemented most of the logic for team-functionnality
* Fix user avatar URL
* WIP remove users on cancellation
* Finished pricing for team functionality
* Fix tests
* Fix linting
* Added pricing_enabled helper
* Fix pricing_enabled shortcut
* Debug CI
* Disable pricing when testing
---------
Co-authored-by: LL-Etiane <lukongleinyuyetiane@gmail.com>
Co-authored-by: Lukong Etiane <83535251+LL-Etiane@users.noreply.github.com>
Co-authored-by: Julien Nahum <julien@nahum.net>