Upgrading to ElmapiCMS v3.2

Upgrading to ElmapiCMS v3.2

This guide will help you upgrade from ElmapiCMS v3.1 to v3.2. This is a minor version update that includes significant new features and improvements while maintaining backward compatibility.

Overview

ElmapiCMS v3.2 introduces several major improvements:

  • Field Groups: New field type that allows grouping multiple fields together for repeatable content structures
  • Translation System: Enhanced multilingual content management with translation groups
  • Import/Export: New project and content import/export functionality
  • Project Templates: Improved template system with individual template files
  • API Enhancements: New translation locale parameter, field group support, and improved sorting
  • Rich Text Editor: Improved handling of rich text content

Important: Backup First!

Before making any changes, create a complete backup of your ElmapiCMS installation:

  1. Backup your database
  2. Backup your uploaded files (storage directory)
  3. Backup your configuration file (.env)

Step 1: Download the New Files

Download the ElmapiCMS v3.2 files and extract them to a temporary folder. You'll need to replace several files and folders.

Step 2: Replace Updated Files

Replace the following files and folders with the new v3.2 versions:

app/Http/Controllers/Api/ContentController.php
app/Http/Controllers/CollectionController.php
app/Http/Controllers/ContentController.php
app/Http/Controllers/FieldController.php
app/Http/Controllers/ProjectController.php
app/Http/Controllers/ProjectSettingsController.php
app/Http/Middleware/HandleInertiaRequests.php
app/Http/Requests/ContentRequest.php
app/Http/Resources/CollectionResource.php
app/Http/Resources/ContentEntryResource.php
app/Models/Collection.php
app/Models/ContentEntry.php
app/Models/ContentFieldGroup.php (NEW)
app/Models/ContentFieldValue.php
app/Models/Field.php
app/Services/ProjectExportService.php (NEW)
composer.json
composer.lock
package.json
package-lock.json
 
database/migrations/2025_11_12_000000_add_field_groups_support.php (NEW)
database/migrations/2025_11_18_133809_add_translation_group_id_to_content_entries_table.php (NEW)
database/migrations/2025_11_20_071624_fix_collection_fields_unique_constraint.php (NEW)
database/seeders/PaginationExampleSeeder.php (NEW)
database/seeders/ProjectTemplateSeeder.php
database/seeders/TranslationsExampleSeeder.php (NEW)
 
public/build/ //Replace all files in this folder
 
resources/data/project_templates.json //DELETED - replaced with individual files
resources/data/project_templates/ //NEW - individual template files
resources/js/components/app-sidebar.tsx
resources/js/components/editor/editor.tsx
resources/js/components/editor/nodes.ts
resources/js/components/editor/nodes/extended-text-node.ts (NEW)
resources/js/components/editor/plugins/toolbar/source-code-toolbar-plugin.tsx
resources/js/components/ui/data-table.tsx
resources/js/components/ui/relation-entries-table.tsx
resources/js/layouts/auth/auth-card-layout.tsx
resources/js/lib/fields.json
resources/js/lib/utils.ts
resources/js/pages/Collections/CreateCollectionModal.tsx
resources/js/pages/Collections/Fields/AddFieldModal.tsx
resources/js/pages/Collections/Fields/FieldFormModal.tsx
resources/js/pages/Collections/Fields/FieldList.tsx
resources/js/pages/Content/ContentForm.tsx
resources/js/pages/Content/ContentList.tsx
resources/js/pages/Content/Fields/BooleanField.tsx
resources/js/pages/Content/Fields/EmailField.tsx
resources/js/pages/Content/Fields/FieldBase.tsx
resources/js/pages/Content/Fields/FieldGroup.tsx (NEW)
resources/js/pages/Content/Fields/LongTextField.tsx
resources/js/pages/Content/Fields/NumberField.tsx
resources/js/pages/Content/Fields/PasswordField.tsx
resources/js/pages/Content/Fields/RelationField.tsx
resources/js/pages/Content/Fields/RelationModal.tsx
resources/js/pages/Content/Fields/RichTextField.tsx
resources/js/pages/Content/Fields/SlugField.tsx
resources/js/pages/Content/Fields/TextField.tsx
resources/js/pages/Content/TranslationSelectModal.tsx (NEW)
resources/js/pages/Projects/CreateProjectModal.tsx
resources/js/pages/Projects/Settings/ExportImport.tsx (NEW)
resources/js/pages/Projects/Settings/Project.tsx
resources/js/pages/Projects/Settings/layout.tsx
resources/js/pages/Projects/Show.tsx
resources/js/types/index.d.ts
resources/js/types/project.d.ts
routes/web.php
tests/Feature/API/APIProjectTest.php

Step 3: Update Database

Run the new migrations to add support for field groups, translations, and fix database constraints:

php artisan migrate

This will:

  • Add parent_field_id column to collection_fields table
  • Create content_field_groups table for field group instances
  • Add group_instance_id column to content_field_values table
  • Add translation_group_id column to content_entries table
  • Fix unique constraint on collection_fields to support field groups

Manual Migration (If Needed)

If you don't have terminal access, you can manually run the SQL commands below.

ALTER TABLE `collection_fields` ADD COLUMN `parent_field_id` BIGINT UNSIGNED NULL AFTER `collection_id`;
ALTER TABLE `content_field_values` ADD COLUMN `group_instance_id` BIGINT UNSIGNED NULL AFTER `content_entry_id`;
ALTER TABLE `content_entries` ADD COLUMN `translation_group_id` CHAR(36) NULL AFTER `locale`;
ALTER TABLE `content_field_values` DROP FOREIGN KEY `content_field_values_field_id_foreign`;
ALTER TABLE `collection_fields` DROP FOREIGN KEY `collection_fields_collection_id_foreign`;
ALTER TABLE `collection_fields` DROP FOREIGN KEY `collection_fields_project_id_foreign`;
ALTER TABLE `collection_fields` DROP INDEX `collection_fields_collection_id_name_unique`;
ALTER TABLE `collection_fields` ADD UNIQUE KEY `collection_fields_collection_parent_name_unique` (`collection_id`, `parent_field_id`, `name`);
ALTER TABLE `collection_fields` ADD CONSTRAINT `collection_fields_parent_field_id_foreign` FOREIGN KEY (`parent_field_id`) REFERENCES `collection_fields` (`id`) ON DELETE CASCADE;
ALTER TABLE `collection_fields` ADD CONSTRAINT `collection_fields_collection_id_foreign` FOREIGN KEY (`collection_id`) REFERENCES `collections` (`id`) ON DELETE CASCADE;
ALTER TABLE `collection_fields` ADD CONSTRAINT `collection_fields_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE;
CREATE TABLE IF NOT EXISTS `content_field_groups` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `uuid` CHAR(36) NOT NULL,
    `project_id` BIGINT UNSIGNED NOT NULL,
    `collection_id` BIGINT UNSIGNED NOT NULL,
    `content_entry_id` BIGINT UNSIGNED NOT NULL,
    `field_id` BIGINT UNSIGNED NOT NULL,
    `sort_order` INT UNSIGNED NOT NULL DEFAULT 0,
    `created_at` TIMESTAMP NULL,
    `updated_at` TIMESTAMP NULL,
    `deleted_at` TIMESTAMP NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `content_field_groups_uuid_unique` (`uuid`),
    KEY `content_field_groups_content_entry_id_field_id_index` (`content_entry_id`, `field_id`),
    CONSTRAINT `content_field_groups_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE,
    CONSTRAINT `content_field_groups_collection_id_foreign` FOREIGN KEY (`collection_id`) REFERENCES `collections` (`id`) ON DELETE CASCADE,
    CONSTRAINT `content_field_groups_content_entry_id_foreign` FOREIGN KEY (`content_entry_id`) REFERENCES `content_entries` (`id`) ON DELETE CASCADE,
    CONSTRAINT `content_field_groups_field_id_foreign` FOREIGN KEY (`field_id`) REFERENCES `collection_fields` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `content_field_values` ADD CONSTRAINT `content_field_values_group_instance_id_foreign` FOREIGN KEY (`group_instance_id`) REFERENCES `content_field_groups` (`id`) ON DELETE CASCADE;
ALTER TABLE `content_field_values` ADD CONSTRAINT `content_field_values_field_id_foreign` FOREIGN KEY (`field_id`) REFERENCES `collection_fields` (`id`) ON DELETE CASCADE;
ALTER TABLE `content_entries` ADD INDEX `content_entries_translation_group_id_index` (`translation_group_id`);

Step 4: Import Landing Page Template

ElmapiCMS v3.2 includes a new "Landing Page Next.js" template. If you don't have terminal access to run the seeder, you can import it manually using SQL:

INSERT INTO `project_templates` (`uuid`, `name`, `slug`, `description`, `has_demo_data`, `data`, `created_at`, `updated_at`) VALUES ('6e127e2e-f34e-48f8-a973-c58f366ff1d6', 'Landing Page Next.js', 'landing-page-nextjs', 'A production-ready Next.js landing page starter template with blog functionality, powered by ElmapiCMS', 1, '{"name":"Landing Page Next.js","slug":"landing-page-nextjs","locales":["en"],"demo_data":[{"entries":[{"id":"e0","fields":{"author":"My Website Team","favicon":null,"keywords":"website, nextjs, cms, headless cms, modern web","language":"en","og_image":null,"site_url":"https://example.com","logo_dark":null,"site_name":"My Website","logo_light":null,"footer_links":[{"href":"/#features","label":"Features","category":"Product"},{"href":"/#pricing","label":"Pricing","category":"Product"},{"href":"https://docs.example.com/","label":"Documentation","category":"Resources"},{"href":"https://demo.example.com/","label":"Demo","category":"Resources"}],"social_links":[{"url":"https://twitter.com/username","platform":"Twitter"},{"url":"https://github.com/username","platform":"GitHub"}],"copyright_text":"© 2025 My Website. All rights reserved.","ga_tracking_id":null,"twitter_handle":"username","header_nav_links":[{"href":"/#features","label":"Features"},{"href":"/blog","label":"Blog"},{"href":"/#pricing","label":"Pricing"},{"href":"/#faq","label":"FAQ"}],"meta_description":"A modern website built with Next.js and powered by ElmapiCMS","site_description":"A modern website built with Next.js and powered by ElmapiCMS","theme_color_dark":"#000000","theme_color_light":"#ffffff","footer_description":"A modern website built with Next.js and powered by ElmapiCMS","google_verification":null,"meta_title_template":"%s | My Website","background_color_dark":"#000000","background_color_light":"#ffffff"},"locale":"en","status":"published"}],"collection":"settings"},{"entries":[{"id":"e1","fields":{"title":"Welcome to Our Platform","subtext":"Start your free trial today. No credit card required.","badge_text":"✨ New Launch","image_dark":null,"description":"Discover a powerful solution designed to help you achieve your goals. Get started today and experience the difference.","image_light":null,"primary_button_link":"#pricing","primary_button_text":"Get Started","secondary_button_link":"#features","secondary_button_text":"Learn More","secondary_button_new_tab":false},"locale":"en","status":"published"}],"collection":"hero-section"},{"entries":[{"id":"e5","fields":{"title":"Key Features","features":[{"title":"Fast Performance","icon_name":"zap","description":"Lightning-fast load times and optimized for speed across all devices."},{"title":"Easy to Use","icon_name":"layout","description":"Intuitive interface designed for users of all technical levels."},{"title":"Secure & Reliable","icon_name":"server","description":"Enterprise-grade security with 99.9% uptime guarantee."},{"title":"24/7 Support","icon_name":"users","description":"Round-the-clock customer support to help you whenever you need it."},{"title":"Scalable","icon_name":"cloud","description":"Grows with your business from startup to enterprise scale."},{"title":"Customizable","icon_name":"penLine","description":"Tailor the solution to fit your specific needs and requirements."}],"description":"Discover what makes our solution stand out from the rest."},"locale":"en","status":"published"}],"collection":"features-section"},{"entries":[{"id":"e6","fields":{"price":"$99","title":"Simple Pricing","features":["All core features","Priority support","Regular updates","30-day money-back guarantee"],"button_link":"#","button_text":"Get Started","description":"Choose the plan that works best for you. All plans include our core features.","footer_text":"Secure checkout. Cancel anytime.","button_new_tab":false,"price_subtitle":"One-time payment. No recurring fees."},"locale":"en","status":"published"}],"collection":"pricing-section"},{"entries":[{"id":"e7","fields":{"faqs":[{"answer":"Getting started is easy! Simply sign up for an account, choose your plan, and you\'ll have access to all features immediately.","question":"How do I get started?"},{"answer":"We accept all major credit cards, PayPal, and bank transfers. All payments are processed securely.","question":"What payment methods do you accept?"},{"answer":"Yes, you can cancel your subscription at any time. There are no cancellation fees or long-term commitments.","question":"Can I cancel my subscription anytime?"},{"answer":"We offer a 30-day money-back guarantee. If you\'re not satisfied, contact us within 30 days for a full refund.","question":"Do you offer refunds?"},{"answer":"Yes! We offer a 14-day free trial with full access to all features. No credit card required.","question":"Is there a free trial available?"},{"answer":"We provide email support, live chat, and comprehensive documentation. Premium plans include priority support.","question":"What kind of support do you provide?"},{"answer":"Absolutely! You can change your plan at any time. Upgrades take effect immediately, and downgrades apply at the next billing cycle.","question":"Can I upgrade or downgrade my plan?"},{"answer":"Security is our top priority. We use industry-standard encryption and follow best practices to protect your data.","question":"Is my data secure?"}],"title":"Frequently Asked Questions","description":"Have questions? We\'ve got answers. Can\'t find what you\'re looking for? Contact our support team."},"locale":"en","status":"published"}],"collection":"faq-section"},{"entries":[{"id":"e2","fields":{"date":"2024-01-15","slug":"welcome-to-our-blog","image":null,"title":"Welcome to Our Blog","content":"<p>This is your first blog post. You can edit this content directly in your CMS.</p>\\n\\n<h2>Getting Started</h2>\\n\\n<p>This blog is powered by a headless CMS, giving you complete control over your content and how it\'s displayed.</p>\\n\\n<h2>Key Features</h2>\\n\\n<ul>\\n<li><strong>Easy Content Management</strong> - Update your content without touching code</li>\\n<li><strong>Flexible Structure</strong> - Organize your content however you want</li>\\n<li><strong>Fast Performance</strong> - Optimized for speed and SEO</li>\\n<li><strong>Modern Design</strong> - Beautiful, responsive layouts out of the box</li>\\n</ul>\\n\\n<h2>Next Steps</h2>\\n\\n<ol>\\n<li>Customize your content</li>\\n<li>Add more blog posts</li>\\n<li>Configure your settings</li>\\n<li>Launch your site</li>\\n</ol>\\n\\n<p>Happy writing!</p>","category":"Getting Started","image_dark":null,"description":"Learn about our blog and how to get started with your first post."},"locale":"en","status":"published"},{"id":"e3","fields":{"date":"2024-01-10","slug":"building-modern-websites-with-nextjs","image":null,"title":"Building Modern Websites with Next.js","content":"<p>Next.js has become the go-to framework for building modern web applications. In this post, we\'ll explore why.</p>\\n\\n<h2>Why Next.js?</h2>\\n\\n<p>Next.js offers:</p>\\n\\n<ul>\\n<li><strong>Server-Side Rendering</strong> - Better SEO and performance</li>\\n<li><strong>Static Site Generation</strong> - Pre-render pages at build time</li>\\n<li><strong>API Routes</strong> - Build your backend alongside your frontend</li>\\n<li><strong>Image Optimization</strong> - Automatic image optimization</li>\\n<li><strong>TypeScript Support</strong> - Built-in TypeScript support</li>\\n</ul>\\n\\n<h2>Getting Started</h2>\\n\\n<pre><code>npx create-next-app@latest my-app\\ncd my-app\\nnpm run dev\\n</code></pre>\\n\\n<p>That\'s it! You\'re ready to start building.</p>","category":"Development","image_dark":null,"description":"Discover why Next.js is the perfect choice for modern web development."},"locale":"en","status":"published"},{"id":"e4","fields":{"date":"2024-01-05","slug":"the-future-of-headless-cms","image":null,"title":"The Future of Headless CMS","content":"<p>Headless CMS architecture is reshaping how we build websites and applications.</p>\\n\\n<h2>What Makes Headless CMS Special?</h2>\\n\\n<p>Unlike traditional CMS platforms, headless CMS separates content management from presentation. This gives developers:</p>\\n\\n<ul>\\n<li><strong>Flexibility</strong> - Use any frontend framework</li>\\n<li><strong>Scalability</strong> - Scale content and frontend independently</li>\\n<li><strong>Performance</strong> - Optimize each layer separately</li>\\n<li><strong>Developer Experience</strong> - Work with modern tools and APIs</li>\\n</ul>\\n\\n<h2>The Benefits</h2>\\n\\n<ol>\\n<li><strong>Content Reusability</strong> - Use the same content across multiple platforms</li>\\n<li><strong>Better Performance</strong> - Serve content via CDN</li>\\n<li><strong>Future-Proof</strong> - Change frontend without migrating content</li>\\n<li><strong>Team Collaboration</strong> - Content editors and developers work independently</li>\\n</ol>\\n\\n<h2>Conclusion</h2>\\n\\n<p>Headless CMS is not just a trend—it\'s the future of content management.</p>","category":"Technology","image_dark":null,"description":"Explore how headless CMS is changing the landscape of web development."},"locale":"en","status":"published"}],"collection":"blog"}],"public_api":false,"collections":[{"name":"Settings","slug":"settings","fields":[{"name":"site_name","type":"text","label":"Site Name","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"The name of your website","placeholder":"My Website","validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"site_description","type":"longtext","label":"Site Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Brief description of your website","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"site_url","type":"text","label":"Site URL","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Base URL of your website (e.g., https://example.com)","placeholder":"https://example.com","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"logo_light","type":"media","label":"Logo (Light)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Logo for light mode","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"logo_dark","type":"media","label":"Logo (Dark)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Logo for dark mode","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"favicon","type":"media","label":"Favicon","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Website favicon","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"meta_title_template","type":"text","label":"Meta Title Template","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Template for page titles (use %s for page title)","placeholder":"%s | Site Name","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"meta_description","type":"longtext","label":"Meta Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Default meta description for SEO","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"keywords","type":"text","label":"Keywords","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"SEO keywords (comma-separated)","placeholder":"keyword1, keyword2, keyword3","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"og_image","type":"media","label":"OpenGraph Image","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Image for social media sharing (1200x630 recommended)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"twitter_handle","type":"text","label":"Twitter Handle","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Twitter/X handle (without @)","placeholder":"username","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"author","type":"text","label":"Author/Publisher","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Author or publisher name","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"language","type":"text","label":"Language","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Site language code (e.g., en, es, fr)","placeholder":"en","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"theme_color_light","type":"text","label":"Theme Color (Light)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Theme color for light mode (hex code)","placeholder":"#ffffff","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"theme_color_dark","type":"text","label":"Theme Color (Dark)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Theme color for dark mode (hex code)","placeholder":"#000000","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"background_color_light","type":"text","label":"Background Color (Light)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Background color for light mode (hex code)","placeholder":"#ffffff","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"background_color_dark","type":"text","label":"Background Color (Dark)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Background color for dark mode (hex code)","placeholder":"#000000","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"footer_description","type":"longtext","label":"Footer Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Description text shown in footer","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"copyright_text","type":"text","label":"Copyright Text","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Copyright notice text","placeholder":"© 2025 Company Name. All rights reserved.","validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"header_nav_links","type":"group","label":"Header Navigation Links","options":{"repeatable":true,"hiddenInAPI":false},"children":[{"name":"label","type":"text","label":"Label","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Link label","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"href","type":"text","label":"URL","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Link URL","placeholder":"/page or https://example.com","validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"description":"Navigation links for header menu","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"footer_links","type":"group","label":"Footer Links","options":{"repeatable":true,"hiddenInAPI":false},"children":[{"name":"category","type":"text","label":"Category","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Link category (e.g., Product, Resources)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"label","type":"text","label":"Label","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Link label","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"href","type":"text","label":"URL","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Link URL","placeholder":"/page or https://example.com","validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"description":"Footer navigation links organized by category","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"social_links","type":"group","label":"Social Media Links","options":{"repeatable":true,"hiddenInAPI":false},"children":[{"name":"platform","type":"text","label":"Platform","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Social platform name (e.g., Twitter, GitHub, LinkedIn)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"url","type":"text","label":"URL","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Social media profile URL","placeholder":"https://twitter.com/username","validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"description":"Social media profile links","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"ga_tracking_id","type":"text","label":"Google Analytics ID","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Google Analytics tracking ID (e.g., G-XXXXXXXXXX)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"google_verification","type":"text","label":"Google Verification Code","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Google Search Console verification code","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"is_singleton":true},{"name":"Blog","slug":"blog","fields":[{"name":"title","type":"text","label":"Title","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Blog post title","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"slug","type":"slug","label":"Slug","options":{"mode":"single","slug":{"field":"title","readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"URL-friendly slug for the blog post","placeholder":null,"validations":{"unique":{"status":true,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"content","type":"richtext","label":"Content","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Blog post content (HTML)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"description","type":"longtext","label":"Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Short description/excerpt for the blog post","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"date","type":"date","label":"Date","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Publication date","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"image","type":"media","label":"Image","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Featured image (light mode)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"image_dark","type":"media","label":"Image (Dark)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Featured image for dark mode","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"category","type":"text","label":"Category","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Blog post category (optional)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"is_singleton":false},{"name":"Hero Section","slug":"hero-section","fields":[{"name":"badge_text","type":"text","label":"Badge Text","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Badge text displayed above the title","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"title","type":"text","label":"Title","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Main hero title","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"description","type":"longtext","label":"Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Hero section description/subtitle","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"primary_button_text","type":"text","label":"Primary Button Text","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Text for the primary CTA button","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"primary_button_link","type":"text","label":"Primary Button Link","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"URL or anchor link for primary button","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"secondary_button_text","type":"text","label":"Secondary Button Text","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Text for the secondary button","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"secondary_button_link","type":"text","label":"Secondary Button Link","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"URL for secondary button","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"secondary_button_new_tab","type":"boolean","label":"Open Secondary Button in New Tab","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Open secondary button link in a new tab","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"subtext","type":"text","label":"Subtext","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Small text below buttons","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"image_light","type":"media","label":"Hero Image (Light)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Hero image for light mode","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"image_dark","type":"media","label":"Hero Image (Dark)","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Hero image for dark mode","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"is_singleton":true},{"name":"Features Section","slug":"features-section","fields":[{"name":"title","type":"text","label":"Title","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Section heading","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"description","type":"longtext","label":"Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Section description","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"features","type":"group","label":"Features","options":{"repeatable":true,"hiddenInAPI":false},"children":[{"name":"title","type":"text","label":"Title","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Feature title","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"description","type":"longtext","label":"Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Feature description","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"icon_name","type":"text","label":"Icon Name","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Icon name from Lucide icons (e.g., layers, server, layout)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"description":"Repeatable features list","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"is_singleton":true},{"name":"Pricing Section","slug":"pricing-section","fields":[{"name":"title","type":"text","label":"Title","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Section heading","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"description","type":"longtext","label":"Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Section description","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"price","type":"text","label":"Price","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Price display (e.g., $49)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"price_subtitle","type":"text","label":"Price Subtitle","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Subtitle below the price","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"features","type":"text","label":"Features","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":true,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"List of features (repeatable)","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"button_text","type":"text","label":"Button Text","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Text for the purchase button","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"button_link","type":"text","label":"Button Link","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"URL for the purchase button","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"button_new_tab","type":"boolean","label":"Open Button in New Tab","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Open button link in a new tab","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"footer_text","type":"text","label":"Footer Text","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Small text below the button","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"is_singleton":true},{"name":"FAQ Section","slug":"faq-section","fields":[{"name":"title","type":"text","label":"Title","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Section heading","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"description","type":"longtext","label":"Description","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"Section description","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"faqs","type":"group","label":"FAQs","options":{"repeatable":true,"hiddenInAPI":false},"children":[{"name":"question","type":"text","label":"Question","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"FAQ question","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}},{"name":"answer","type":"longtext","label":"Answer","options":{"mode":"single","slug":{"field":null,"readonly":false},"media":{"type":1},"editor":{"type":1},"multiple":false,"relation":{"type":1,"collection":null},"repeatable":false,"enumeration":{"list":[]},"hiddenInAPI":false,"includeTime":false,"includeDraft":false,"numberOfMonths":1,"hideInContentList":false},"description":"FAQ answer","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":true,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"description":"Repeatable FAQ items","placeholder":null,"validations":{"unique":{"status":false,"message":null},"required":{"status":false,"message":null},"charcount":{"max":null,"min":null,"type":"Between","status":false,"message":null}}}],"is_singleton":true}],"description":"A production-ready Next.js landing page starter template with blog functionality, powered by ElmapiCMS","has_demo_data":true,"default_locale":"en"}', '2025-11-22 15:09:39', '2025-11-22 15:09:39') ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `description` = VALUES(`description`), `has_demo_data` = VALUES(`has_demo_data`), `data` = VALUES(`data`), `updated_at` = NOW();

Note: This SQL uses ON DUPLICATE KEY UPDATE so it's safe to run even if the template already exists. It will update the template if it's already in your database.

Step 5: Clear Application Cache

Clear all caches to ensure the new features work correctly:

php artisan optimize:clear

Or manually delete cache files:

  • Delete all files in bootstrap/cache/ (except .gitignore)
  • Delete all files in storage/framework/cache/
  • Delete all files in storage/framework/views/

Support

If you encounter any issues, you can refer to the Troubleshooting Guide for help.

If you don't find your issue here, feel free to reach out via the channels described in the Getting Help & Support page.

Search documentation

Find guides and reference pages