-- Saleem Sial Analytics MySQL backup
-- Generated from SQLite on 2026-03-16 18:26:47
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS=0;
CREATE DATABASE IF NOT EXISTS `saleemsial_cms` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE `saleemsial_cms`;

DROP TABLE IF EXISTS `migrations`;
CREATE TABLE `migrations` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `migration` VARCHAR(255) NOT NULL,
  `batch` INT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `migrations` (`id`, `migration`, `batch`) VALUES
(1, '0001_01_01_000000_create_users_table', 1),
(2, '0001_01_01_000001_create_cache_table', 1),
(3, '0001_01_01_000002_create_jobs_table', 1),
(4, '2026_03_06_000001_create_services_table', 1),
(5, '2026_03_06_000002_create_pages_table', 1),
(6, '2026_03_06_000003_create_settings_table', 1),
(7, '2026_03_06_000004_create_contacts_table', 1),
(8, '2026_03_06_000005_create_media_table', 1),
(9, '2026_03_09_000001_add_role_to_users_table', 1),
(10, '2026_03_09_000002_add_category_to_services_table', 1),
(11, '2026_03_09_000003_add_tags_and_sort_order_to_services_table', 1),
(12, '2026_03_09_000004_create_audits_table', 1),
(13, '2026_03_09_000005_add_sort_order_to_media_table', 1),
(14, '2026_03_16_000001_add_template_and_sections_to_pages_table', 1),
(15, '2026_03_16_000002_add_frontend_fields_to_settings_table', 1),
(16, '2026_03_16_100001_add_workflow_fields_to_contacts_table', 1),
(17, '2026_03_16_100002_expand_media_table_for_library', 1),
(18, '2026_03_16_100003_create_media_usages_table', 1),
(19, '2026_03_16_100004_add_media_references_to_services_and_settings', 1),
(20, '2026_03_16_100005_create_visits_table', 1),
(21, '2026_03_16_100006_add_country_and_contact_mail_fields', 1),
(22, '2026_03_16_100007_add_google_tag_fields_and_traffic_sources', 1),
(23, '2026_03_16_100008_create_roles_table', 1),
(24, '2026_03_16_100009_add_role_id_and_support_chat_fields', 1),
(25, '2026_03_16_120000_add_access_level_to_roles_table', 1),
(26, '2026_03_16_130001_create_blog_posts_table', 1);

DROP TABLE IF EXISTS `audits`;
CREATE TABLE `audits` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `auditable_type` VARCHAR(255) NOT NULL,
  `auditable_id` BIGINT UNSIGNED NOT NULL,
  `user_id` BIGINT UNSIGNED NULL,
  `event` VARCHAR(255) NOT NULL,
  `old_values` TEXT NULL,
  `new_values` TEXT NULL,
  `ip_address` VARCHAR(255) NULL,
  `user_agent` VARCHAR(255) NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  PRIMARY KEY (`id`),
  KEY `audits_user_id_index` (`user_id`),
  KEY `audits_auditable_type_auditable_id_index` (`auditable_type`, `auditable_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `audits` (`id`, `auditable_type`, `auditable_id`, `user_id`, `event`, `old_values`, `new_values`, `ip_address`, `user_agent`, `created_at`, `updated_at`) VALUES
(1, 'App\\Models\\Setting', 1, NULL, 'created', NULL, '{"id":1,"site_name":"Saleem Sial Analytics","tagline":"GA4, GTM and performance tracking specialist","logo":"uploads\\/logos\\/saleem-sial-logo.png","logo_media_id":1,"favicon":"uploads\\/placeholders\\/saleem-sial-favicon.png","favicon_media_id":3,"contact_email":"hello@saleemsial.com","contact_phone":"+92 300 1234567","footer_text":"Saleem Sial Analytics builds clean, scalable tracking systems for advertisers, agencies, and growth teams.","social_links":"{\\"facebook\\":\\"https:\\\\\\/\\\\\\/facebook.com\\\\\\/#\\",\\"instagram\\":\\"https:\\\\\\/\\\\\\/instagram.com\\\\\\/#\\",\\"x\\":\\"https:\\\\\\/\\\\\\/x.com\\\\\\/#\\",\\"linkedin\\":\\"https:\\\\\\/\\\\\\/linkedin.com\\\\\\/#\\"}","header_cta_label":"Book a Consultation","header_cta_url":"\\/contact","footer_cta_label":"Start Your Tracking Setup","footer_cta_url":"\\/contact","admin_contact_notifications_enabled":true,"user_contact_auto_reply_enabled":true,"support_chat_enabled":true,"support_chat_title":"Need quick support?","support_chat_intro":"Send a direct message about your tracking issue and we will follow up by email.","support_chat_button_label":"Send support message","admin_contact_subject":"New website inquiry from {{ name }}","admin_contact_template":"<p>You have received a new inquiry on {{ site_name }}.<\\/p>\\n<p><strong>Name:<\\/strong> {{ name }}<\\/p>\\n<p><strong>Email:<\\/strong> {{ email }}<\\/p>\\n<p><strong>Phone:<\\/strong> {{ phone }}<\\/p>\\n<p><strong>Source:<\\/strong> {{ source_label }}<\\/p>\\n<p><strong>Page URL:<\\/strong> {{ page_url }}<\\/p>\\n<p><strong>Submitted:<\\/strong> {{ submitted_at }}<\\/p>\\n<p><strong>Message:<\\/strong><\\/p>\\n<p>{{ message }}<\\/p>","user_contact_subject":"Thanks for contacting {{ site_name }}","user_contact_template":"<p>Hello {{ name }},<\\/p>\\n<p>Thanks for reaching out to {{ site_name }}. Your message has been received and we will respond as soon as possible.<\\/p>\\n<p><strong>Source:<\\/strong> {{ source_label }}<\\/p>\\n<p><strong>Your message:<\\/strong><\\/p>\\n<p>{{ message }}<\\/p>\\n<p>You can reply directly to {{ contact_email }} if you need to share more details.<\\/p>","gtm_container_id":null,"ga_measurement_id":null}', '127.0.0.1', 'Symfony', '2026-03-16 18:26:47', '2026-03-16 18:26:47');

DROP TABLE IF EXISTS `blog_posts`;
CREATE TABLE `blog_posts` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `slug` VARCHAR(255) NOT NULL,
  `badge` VARCHAR(255) NULL,
  `reading_time` VARCHAR(255) NULL,
  `excerpt` TEXT NULL,
  `content` TEXT NULL,
  `featured_image_media_id` BIGINT UNSIGNED NULL,
  `sort_order` INT NOT NULL DEFAULT '0',
  `is_featured` TINYINT NOT NULL DEFAULT '0',
  `is_published` TINYINT NOT NULL DEFAULT '1',
  `published_at` DATETIME NULL,
  `seo_title` VARCHAR(255) NULL,
  `seo_description` TEXT NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `blog_posts_slug_unique` (`slug`),
  KEY `blog_posts_is_published_is_featured_published_at_index` (`is_published`, `is_featured`, `published_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `blog_posts` (`id`, `title`, `slug`, `badge`, `reading_time`, `excerpt`, `content`, `featured_image_media_id`, `sort_order`, `is_featured`, `is_published`, `published_at`, `seo_title`, `seo_description`, `created_at`, `updated_at`) VALUES
(1, 'How to audit a GA4 and GTM setup before scaling paid traffic', 'how-to-audit-a-ga4-and-gtm-setup-before-scaling-paid-traffic', 'Featured guide', '7 min read', 'A simple framework for checking events, conversions, tags, naming, and data quality before you make optimization decisions from broken reporting.', '<p>Start with the events that matter most to revenue and lead quality.</p><p>Then confirm that every conversion action is mapped consistently across GA4, Google Ads, and any supporting CRM or form tools.</p><p>Finally, review naming, triggers, and QA notes inside GTM so the setup stays maintainable as campaigns scale.</p>', 5, 0, 1, 1, '2026-03-11 18:26:47', 'How to Audit a GA4 and GTM Setup Before Scaling Paid Traffic', 'Use this checklist to validate GA4 and GTM before scaling paid traffic and making decisions from bad data.', '2026-03-16 18:26:47', '2026-03-16 18:26:47'),
(2, 'What to validate after a fresh GA4 implementation', 'what-to-validate-after-a-fresh-ga4-implementation', 'GA4', '5 min read', 'A quick checklist for event naming, conversion setup, enhanced measurement, filters, and reporting sanity checks.', '<p>Validate the events first so your reports reflect the actions that actually matter.</p><p>Then confirm conversions, filters, and reporting views before anyone uses the data for campaign decisions.</p>', NULL, 1, 0, 1, '2026-03-12 18:26:47', 'What to Validate After a Fresh GA4 Implementation', 'A quick GA4 post-launch checklist for events, conversions, filters, and reporting sanity checks.', '2026-03-16 18:26:47', '2026-03-16 18:26:47'),
(3, 'How to keep your GTM container organized as campaigns grow', 'how-to-keep-your-gtm-container-organized-as-campaigns-grow', 'GTM', '6 min read', 'A practical structure for folders, tag naming, triggers, variables, and QA notes so scaling does not create chaos.', '<p>Use folders, naming conventions, and documentation from the beginning.</p><p>A clean GTM workspace makes audits, updates, and handoffs much easier as the account becomes more complex.</p>', NULL, 2, 0, 1, '2026-03-13 18:26:47', 'How to Keep Your GTM Container Organized as Campaigns Grow', 'Structure your GTM container with folders, naming rules, and QA notes so it stays manageable as campaigns scale.', '2026-03-16 18:26:47', '2026-03-16 18:26:47'),
(4, 'What a useful Looker Studio dashboard should actually include', 'what-a-useful-looker-studio-dashboard-should-actually-include', 'Dashboards', '4 min read', 'Build reporting views that help teams act faster by focusing on trend context, conversion quality, and business-ready KPIs.', '<p>A useful dashboard should explain performance, not just display metrics.</p><p>Focus on KPIs, trend context, and the decisions each view is meant to support.</p>', NULL, 3, 0, 1, '2026-03-14 18:26:47', 'What a Useful Looker Studio Dashboard Should Include', 'Learn what makes a Looker Studio dashboard actionable for reporting, optimization, and stakeholder communication.', '2026-03-16 18:26:47', '2026-03-16 18:26:47'),
(5, 'When server-side tracking is worth the extra setup', 'when-server-side-tracking-is-worth-the-extra-setup', 'Server-Side', '8 min read', 'Learn when the extra implementation effort improves data quality, privacy compliance, and platform attribution enough to matter.', '<p>Server-side tracking is most useful when browser-side loss is affecting attribution and optimization.</p><p>The extra setup pays off when better data quality improves reporting confidence and ad platform feedback loops.</p>', NULL, 4, 0, 1, '2026-03-15 18:26:47', 'When Server-Side Tracking Is Worth the Extra Setup', 'See when server-side tracking improves attribution, privacy, and reporting enough to justify the added implementation work.', '2026-03-16 18:26:47', '2026-03-16 18:26:47');

DROP TABLE IF EXISTS `contacts`;
CREATE TABLE `contacts` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `email` VARCHAR(255) NOT NULL,
  `phone` VARCHAR(255) NULL,
  `message` TEXT NOT NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  `status` VARCHAR(255) NOT NULL DEFAULT 'new',
  `read_at` DATETIME NULL,
  `replied_at` DATETIME NULL,
  `notified_at` DATETIME NULL,
  `admin_notes` TEXT NULL,
  `source` VARCHAR(255) NULL,
  `page_url` VARCHAR(255) NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `media`;
CREATE TABLE `media` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `file_path` VARCHAR(255) NOT NULL,
  `type` VARCHAR(255) NULL,
  `alt_text` VARCHAR(255) NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  `sort_order` INT NOT NULL DEFAULT '0',
  `name` VARCHAR(255) NULL,
  `disk` VARCHAR(255) NOT NULL DEFAULT 'public',
  `mime_type` VARCHAR(255) NULL,
  `extension` VARCHAR(255) NULL,
  `size` INT NULL,
  `width` INT NULL,
  `height` INT NULL,
  `category` VARCHAR(255) NULL,
  `is_system` TINYINT NOT NULL DEFAULT '0',
  `uploaded_by` INT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `media` (`id`, `file_path`, `type`, `alt_text`, `created_at`, `updated_at`, `sort_order`, `name`, `disk`, `mime_type`, `extension`, `size`, `width`, `height`, `category`, `is_system`, `uploaded_by`) VALUES
(1, 'uploads/system/saleem-sial-logo.png', 'image', 'Saleem Sial Analytics logo', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 0, 'Saleem Sial Logo PNG', 'public', 'image/png', 'png', 5013, 560, 120, 'branding', 1, NULL),
(2, 'uploads/system/saleem-sial-logo.jpeg', 'image', 'Saleem Sial Analytics logo', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 1, 'Saleem Sial Logo', 'public', 'image/jpeg', 'jpeg', 9307, 300, 181, 'branding', 1, NULL),
(3, 'uploads/system/saleem-sial-favicon.png', 'image', 'Saleem Sial Analytics favicon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 2, 'Saleem Sial Favicon', 'public', 'image/png', 'png', 1206, 64, 64, 'branding', 1, NULL),
(4, 'uploads/system/default-favicon.ico', 'image', 'Saleem Sial Analytics favicon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 3, 'Default Favicon', 'public', 'application/x-empty', 'ico', 0, NULL, NULL, 'branding', 1, NULL),
(5, 'uploads/system/hero-analytics-dashboard.svg', 'image', 'Illustrated analytics dashboard preview', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 4, 'Analytics Dashboard Hero', 'public', 'image/svg+xml', 'svg', 3721, NULL, NULL, 'hero', 1, NULL),
(6, 'uploads/system/ga4.jpg', 'image', 'GA4 Service placeholder image', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 5, 'GA4 Service Image', 'public', 'image/jpeg', 'jpg', 104642, 1600, 965, 'service-image', 1, NULL),
(7, 'uploads/system/ga4-icon.png', 'image', 'GA4 Service icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 6, 'GA4 Service Icon', 'public', 'image/png', 'png', 915, 80, 80, 'service-icon', 1, NULL),
(8, 'uploads/system/gtm.jpg', 'image', 'GTM Service placeholder image', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 7, 'GTM Service Image', 'public', 'image/jpeg', 'jpg', 104642, 1600, 965, 'service-image', 1, NULL),
(9, 'uploads/system/gtm-icon.png', 'image', 'GTM Service icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 8, 'GTM Service Icon', 'public', 'image/png', 'png', 1227, 80, 80, 'service-icon', 1, NULL),
(10, 'uploads/system/looker.jpg', 'image', 'Looker Studio Service placeholder image', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 9, 'Looker Studio Service Image', 'public', 'image/jpeg', 'jpg', 104642, 1600, 965, 'service-image', 1, NULL),
(11, 'uploads/system/looker-icon.png', 'image', 'Looker Studio Service icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 10, 'Looker Studio Service Icon', 'public', 'image/png', 'png', 1435, 80, 80, 'service-icon', 1, NULL),
(12, 'uploads/system/google-ads.jpg', 'image', 'Google Ads Service placeholder image', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 11, 'Google Ads Service Image', 'public', 'image/jpeg', 'jpg', 104642, 1600, 965, 'service-image', 1, NULL),
(13, 'uploads/system/google-ads-icon.png', 'image', 'Google Ads Service icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 12, 'Google Ads Service Icon', 'public', 'image/png', 'png', 2616, 80, 80, 'service-icon', 1, NULL),
(14, 'uploads/system/meta.jpg', 'image', 'Meta Ads Service placeholder image', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 13, 'Meta Ads Service Image', 'public', 'image/jpeg', 'jpg', 104642, 1600, 965, 'service-image', 1, NULL),
(15, 'uploads/system/meta-icon.png', 'image', 'Meta Ads Service icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 14, 'Meta Ads Service Icon', 'public', 'image/png', 'png', 1556, 80, 80, 'service-icon', 1, NULL),
(16, 'uploads/system/tiktok.jpg', 'image', 'TikTok Ads Service placeholder image', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 15, 'TikTok Ads Service Image', 'public', 'image/jpeg', 'jpg', 104642, 1600, 965, 'service-image', 1, NULL),
(17, 'uploads/system/tiktok-icon.png', 'image', 'TikTok Ads Service icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 16, 'TikTok Ads Service Icon', 'public', 'image/png', 'png', 2194, 96, 96, 'service-icon', 1, NULL),
(18, 'uploads/system/server-side.jpg', 'image', 'Server Side Tracking Service placeholder image', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 17, 'Server Side Tracking Service Image', 'public', 'image/jpeg', 'jpg', 104642, 1600, 965, 'service-image', 1, NULL),
(19, 'uploads/system/server-side-icon.png', 'image', 'Server Side Tracking Service icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 18, 'Server Side Tracking Service Icon', 'public', 'image/png', 'png', 1010, 96, 96, 'service-icon', 1, NULL),
(20, 'uploads/system/trusted-1.png', 'image', 'Trusted partner logo 1', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 19, 'Trusted Logo 1', 'public', 'image/png', 'png', 3419, 226, 64, 'trusted-logo', 1, NULL),
(21, 'uploads/system/trusted-2.png', 'image', 'Trusted partner logo 2', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 20, 'Trusted Logo 2', 'public', 'image/png', 'png', 2072, 210, 64, 'trusted-logo', 1, NULL),
(22, 'uploads/system/trusted-3.png', 'image', 'Trusted partner logo 3', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 21, 'Trusted Logo 3', 'public', 'image/png', 'png', 3569, 210, 64, 'trusted-logo', 1, NULL),
(23, 'uploads/system/trusted-4.png', 'image', 'Trusted partner logo 4', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 22, 'Trusted Logo 4', 'public', 'image/png', 'png', 2876, 210, 64, 'trusted-logo', 1, NULL),
(24, 'uploads/system/trusted-5.png', 'image', 'Trusted partner logo 5', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 23, 'Trusted Logo 5', 'public', 'image/png', 'png', 3171, 210, 64, 'trusted-logo', 1, NULL),
(25, 'uploads/system/why-tracking-trending.png', 'image', 'Trend icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 24, 'Why Tracking Trend Icon', 'public', 'image/png', 'png', 2931, 118, 119, 'feature-icon', 1, NULL),
(26, 'uploads/system/why-tracking-cloud.png', 'image', 'Cloud icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 25, 'Why Tracking Cloud Icon', 'public', 'image/png', 'png', 3667, 119, 122, 'feature-icon', 1, NULL),
(27, 'uploads/system/why-tracking-task.png', 'image', 'Task icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 26, 'Why Tracking Task Icon', 'public', 'image/png', 'png', 2303, 112, 113, 'feature-icon', 1, NULL),
(28, 'uploads/system/why-tracking-speedometer.png', 'image', 'Speedometer icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 27, 'Why Tracking Speedometer Icon', 'public', 'image/png', 'png', 3484, 121, 121, 'feature-icon', 1, NULL),
(29, 'uploads/system/benefit-bar-chart.png', 'image', 'Bar chart icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 28, 'Bar chart Icon', 'public', 'image/png', 'png', 731, 96, 96, 'benefit-icon', 1, NULL),
(30, 'uploads/system/benefit-pie-chart.png', 'image', 'Pie chart icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 29, 'Pie chart Icon', 'public', 'image/png', 'png', 2195, 96, 96, 'benefit-icon', 1, NULL),
(31, 'uploads/system/benefit-sparkles.png', 'image', 'Sparkles icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 30, 'Sparkles Icon', 'public', 'image/png', 'png', 2194, 96, 96, 'benefit-icon', 1, NULL),
(32, 'uploads/system/benefit-workflows.png', 'image', 'Workflows icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 31, 'Workflows Icon', 'public', 'image/png', 'png', 1646, 128, 128, 'benefit-icon', 1, NULL),
(33, 'uploads/system/benefit-file.png', 'image', 'File icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 32, 'File Icon', 'public', 'image/png', 'png', 1010, 96, 96, 'benefit-icon', 1, NULL),
(34, 'uploads/system/benefit-circles.png', 'image', 'Circles icon', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 33, 'Circles Icon', 'public', 'image/png', 'png', 3011, 96, 96, 'benefit-icon', 1, NULL),
(35, 'uploads/system/case-study-1-before.svg', 'image', 'Before dashboard screenshot for lead generation case study', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 34, 'Case Study 1 Before Dashboard', 'public', 'image/svg+xml', 'svg', 1991, NULL, NULL, 'case-study', 1, NULL),
(36, 'uploads/system/case-study-1-after.svg', 'image', 'After dashboard screenshot for lead generation case study', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 35, 'Case Study 1 After Dashboard', 'public', 'image/svg+xml', 'svg', 1990, NULL, NULL, 'case-study', 1, NULL),
(37, 'uploads/system/case-study-2-before.svg', 'image', 'Before dashboard screenshot for paid media reporting case study', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 36, 'Case Study 2 Before Dashboard', 'public', 'image/svg+xml', 'svg', 1991, NULL, NULL, 'case-study', 1, NULL),
(38, 'uploads/system/case-study-2-after.svg', 'image', 'After dashboard screenshot for paid media reporting case study', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 37, 'Case Study 2 After Dashboard', 'public', 'image/svg+xml', 'svg', 1990, NULL, NULL, 'case-study', 1, NULL);

DROP TABLE IF EXISTS `media_usages`;
CREATE TABLE `media_usages` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `media_id` BIGINT UNSIGNED NOT NULL,
  `usable_type` VARCHAR(255) NOT NULL,
  `usable_id` BIGINT UNSIGNED NOT NULL,
  `field_key` VARCHAR(255) NOT NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `media_usages_unique_link` (`media_id`, `usable_type`, `usable_id`, `field_key`),
  KEY `media_usages_usable_type_usable_id_index` (`usable_type`, `usable_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `pages`;
CREATE TABLE `pages` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `slug` VARCHAR(255) NOT NULL,
  `content` TEXT NULL,
  `meta_title` VARCHAR(255) NULL,
  `meta_description` TEXT NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  `template` VARCHAR(255) NULL,
  `sections` TEXT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `pages_slug_unique` (`slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `pages` (`id`, `title`, `slug`, `content`, `meta_title`, `meta_description`, `created_at`, `updated_at`, `template`, `sections`) VALUES
(1, 'Home', 'home', '<p>Saleem Sial Analytics helps growth teams build trustworthy measurement across websites, ads, and reporting stacks.</p>', 'Saleem Sial Analytics | GA4, GTM and Performance Tracking', 'Saleem Sial Analytics helps businesses implement GA4, GTM, ad tracking, dashboards, and server-side measurement with reliable data.', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 'home', '{"hero":{"eyebrow":"Built for modern measurement","eyebrow_highlight":"Track with confidence","title_html":"<span class=\\"ssa-hero-title__prefix\\">Accurate tracking for every<\\/span><span class=\\"prespa-saas-animated-text\\" data-typed-words=\\"Analytics|Tracking|Reporting|Advertising|Meta Ads|TikTok Ads|Google Ads|Google Analytics 4\\">Analytics<\\/span>","description":"From GA4 and GTM to ad pixels, dashboards, and server-side tracking, Saleem Sial Analytics helps you measure what matters and act on data you can trust.","primary_cta_label":"Explore Services","primary_cta_url":"\\/services","secondary_cta_label":"Contact Saleem","secondary_cta_url":"\\/contact","image_media_id":5,"platforms":[{"label":"GA4","media_id":null},{"label":"GTM","media_id":null},{"label":"Looker Studio","media_id":null},{"label":"Google Ads","media_id":null},{"label":"Meta Ads","media_id":null},{"label":"TikTok Ads","media_id":null},{"label":"Server-Side","media_id":null}]},"trusted":{"title":"Trusted by marketing teams that need cleaner reporting and better conversion visibility.","logos":[{"label":"Trusted logo 1","media_id":20},{"label":"Trusted logo 2","media_id":21},{"label":"Trusted logo 3","media_id":22},{"label":"Trusted logo 4","media_id":23},{"label":"Trusted logo 5","media_id":24}]},"why_tracking":{"badge":"Why tracking matters","title":"Clear data creates better campaigns, better reporting, and better decisions.","description":"When attribution breaks, every marketing decision gets harder. A strong tracking foundation gives your team visibility into performance, lead quality, and return on ad spend.","cta_label":"About Saleem Sial","cta_url":"\\/about","items":[{"media_id":25,"title":"Know what actually converts","description":"Measure critical actions across landing pages, forms, checkout flows, and ad platforms without guesswork."},{"media_id":26,"title":"Reduce reporting noise","description":"Bring paid media, analytics, and CRM signals into one cleaner source of truth for faster reporting."},{"media_id":27,"title":"Scale without constant rework","description":"Build GTM containers, naming conventions, and event structures that stay organized as campaigns grow."},{"media_id":28,"title":"Stay accurate in a privacy-first web","description":"Use server-side tracking and better implementation patterns to reduce data loss and improve attribution quality."}]},"services_intro":{"badge":"Core tracking services","title":"Measurement systems tailored to the platforms you rely on.","description":"Every service below is managed from the database so it can later move directly into a full CMS workflow."},"pricing":{"badge":"Pricing & packages","title":"Competitor-aligned starter packages for setup, cleanup, and growth support.","description":"These example packages are positioned around common freelancer and boutique-consultant ranges for GA4, GTM, ads tracking, and reporting support.","audit_title":"Not sure which package fits? Start with a free audit request.","audit_description":"If you already have analytics or paid media running, request a free audit first and get a cleaner recommendation based on your current setup.","audit_label":"Request Free Audit","packages":[{"badge":"Starter","name":"Tracking Tune-Up","price":"From $149","timeline":"Typical delivery: 2-4 days","summary":"Ideal for fixing GA4 events, cleaning up conversions, or repairing a small GTM setup.","items":["GA4 or GTM cleanup for one website","Conversion checks and QA notes","Short Loom or written handoff"]},{"badge":"Most requested","featured":true,"name":"Cross-Channel Setup","price":"From $349","timeline":"Typical delivery: 4-7 days","summary":"A stronger package for GA4, GTM, Google Ads, and Meta or TikTok event mapping on active campaigns.","items":["GA4 + GTM implementation or rebuild","Ads platform conversion setup","Naming structure, testing, and reporting checks"]},{"badge":"Advanced","name":"Server-Side & Reporting Build","price":"From $699","timeline":"Typical delivery: 1-2 weeks","summary":"Best for privacy-aware measurement, multi-platform reporting, and more advanced attribution support.","items":["Server-side or advanced tracking architecture","Dashboard\\/reporting layer setup","Implementation plan for scale and governance"]}]},"security":{"badge":"Security & governance","title":"Cleaner tracking should also be safer, better documented, and easier to control.","description":"The implementation approach focuses on permission control, privacy-aware measurement, and workflows that reduce accidental changes later.","cta_label":"Request Free Audit","items":[{"media_id":33,"title":"Documented tagging changes","description":"Keep event naming, trigger logic, and reporting notes easier to review before new campaigns launch."},{"media_id":32,"title":"Permission-aware GTM workflows","description":"Reduce mistakes by structuring containers and publishing steps around clearer ownership."},{"media_id":34,"title":"Privacy-ready measurement","description":"Support browser restrictions with better consent-aware implementations and server-side options."},{"media_id":29,"title":"Safer reporting handoff","description":"Build dashboards and reporting layers that stakeholders can trust without direct tag edits."}]},"case_studies":{"badge":"Case studies","title":"Dashboard snapshots that show the difference between noisy data and a cleaner setup.","description":"Use before-and-after screenshots to explain how implementation changes improve clarity, attribution, and reporting confidence.","studies":[{"label":"Lead generation","title":"GA4 + GTM repair for a paid traffic funnel","summary":"The original reporting mixed duplicate events with missing form conversions. After the rebuild, campaign reporting clearly separated qualified leads from low-intent traffic.","result":"Result: cleaner form conversion visibility and faster weekly reporting.","before_media_id":35,"after_media_id":36},{"label":"Ecommerce tracking","title":"Cross-platform dashboard cleanup for ads and analytics","summary":"The first version forced the team to compare Meta, Google Ads, and GA4 manually. The new dashboard made spend, ROAS, and assisted conversions easier to explain in one place.","result":"Result: clearer paid media reporting and fewer stakeholder questions.","before_media_id":37,"after_media_id":38}]},"contact_options":{"badge":"Get in touch","title":"Request a free audit, ask about pricing, or message directly.","description":"Use whichever contact option fits your workflow best: contact form, email, WhatsApp, or support chat.","headline":"Choose the fastest route for your tracking question."},"benefits":{"badge":"Benefits","highlight":"Built for accurate reporting","title":"Why businesses choose Saleem Sial Analytics","description":"You get a setup that is easier to trust, easier to explain, and easier to scale.","items":[{"media_id":29,"title":"Reliable event data","description":"Capture the right user actions and send them to the right destinations with confidence."},{"media_id":30,"title":"Cross-platform reporting","description":"Connect ad platforms and analytics tools so performance can be reviewed in one place."},{"media_id":31,"title":"Smarter optimization","description":"Improve campaign decisions with cleaner conversion signals and reporting clarity."},{"media_id":32,"title":"Repeatable implementation","description":"Documented tagging, naming, and tracking structures that support long-term growth."},{"media_id":33,"title":"Faster stakeholder reporting","description":"Create dashboards and summaries that make performance easier to understand and act on."},{"media_id":34,"title":"Privacy-aware measurement","description":"Support modern browser restrictions with better architecture and server-side options."}]},"cta":{"title":"Ready to fix your tracking foundation?","description":"Let\'s build a cleaner measurement stack for your website, ads, and reporting workflow.","button_label":"Book a Tracking Consultation","button_url":"\\/contact"}}'),
(2, 'About', 'about', '<p>Saleem Sial Analytics specializes in implementation, measurement strategy, and reporting systems that help businesses understand real performance.</p>', 'About Saleem Sial Analytics', 'Learn how Saleem Sial Analytics helps teams build reliable tracking and reporting systems.', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 'about', '{"hero":{"eyebrow":"About Saleem Sial Analytics","title":"Measurement strategy built around clarity, trust, and growth.","description":"This practice focuses on helping brands and agencies build dependable tracking systems that support better decisions across analytics, media, and reporting."},"intro":{"title":"What we do","content":"We implement GA4, GTM, ad platform tracking, dashboards, and server-side setups so businesses can report with confidence and optimize based on cleaner data."},"mission":{"title":"Our mission","content":"To make modern measurement easier to understand and easier to manage by turning fragmented tracking setups into structured, scalable systems."},"expertise":{"title":"How we help","items":["Audit tracking setups and find gaps in implementation.","Build event, conversion, and pixel tracking for websites and campaigns.","Create reporting layers that turn data into action."]},"why_choose":{"title":"Why choose us","items":["A focused specialization in analytics and tracking.","Implementation that is built for future CMS and admin workflows.","Clean documentation and scalable structures that are easier to maintain later."]},"cta":{"title":"Need help improving your measurement stack?","button_label":"Contact Us","button_url":"\\/contact"}}'),
(3, 'Blog', 'blog', '<p>Insights and practical notes from Saleem Sial Analytics on measurement, reporting, and analytics implementation.</p>', 'Blog | Saleem Sial Analytics', 'Read Saleem Sial Analytics insights on GA4, GTM, dashboards, ad tracking, and modern measurement strategy.', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 'blog', '{"hero":{"eyebrow":"Blog & Insights","title":"Practical notes on cleaner tracking, reporting, and analytics decisions.","description":"Use this page to share implementation tips, audits, case studies, and strategy insights around GA4, GTM, dashboards, and ad tracking."},"featured":{"badge":"Featured guide","title":"How to audit a GA4 and GTM setup before scaling paid traffic","excerpt":"A simple framework for checking events, conversions, tags, naming, and data quality before you make optimization decisions from broken reporting.","reading_time":"7 min read","slug":"how-to-audit-a-ga4-and-gtm-setup-before-scaling-paid-traffic","content":"Start with the events that matter most to revenue and lead quality.\\n\\nThen confirm that every conversion action is mapped consistently across GA4, Google Ads, and any supporting CRM or form tools.\\n\\nFinally, review naming, triggers, and QA notes inside GTM so the setup stays maintainable as campaigns scale.","media_id":5},"posts_intro":{"badge":"Latest articles","title":"Topics you can publish and update from the CMS","description":"Use these cards as a starter structure for blog posts, case studies, technical explainers, or performance reporting guides."},"posts":[{"badge":"GA4","title":"What to validate after a fresh GA4 implementation","excerpt":"A quick checklist for event naming, conversion setup, enhanced measurement, filters, and reporting sanity checks.","reading_time":"5 min read","slug":"what-to-validate-after-a-fresh-ga4-implementation","content":"Validate the events first so your reports reflect the actions that actually matter.\\n\\nThen confirm conversions, filters, and reporting views before anyone uses the data for campaign decisions."},{"badge":"GTM","title":"How to keep your GTM container organized as campaigns grow","excerpt":"A practical structure for folders, tag naming, triggers, variables, and QA notes so scaling does not create chaos.","reading_time":"6 min read","slug":"how-to-keep-your-gtm-container-organized-as-campaigns-grow","content":"Use folders, naming conventions, and documentation from the beginning.\\n\\nA clean GTM workspace makes audits, updates, and handoffs much easier as the account becomes more complex."},{"badge":"Dashboards","title":"What a useful Looker Studio dashboard should actually include","excerpt":"Build reporting views that help teams act faster by focusing on trend context, conversion quality, and business-ready KPIs.","reading_time":"4 min read","slug":"what-a-useful-looker-studio-dashboard-should-actually-include","content":"A useful dashboard should explain performance, not just display metrics.\\n\\nFocus on KPIs, trend context, and the decisions each view is meant to support."},{"badge":"Server-Side","title":"When server-side tracking is worth the extra setup","excerpt":"Learn when the extra implementation effort improves data quality, privacy compliance, and platform attribution enough to matter.","reading_time":"8 min read","slug":"when-server-side-tracking-is-worth-the-extra-setup","content":"Server-side tracking is most useful when browser-side loss is affecting attribution and optimization.\\n\\nThe extra setup pays off when better data quality improves reporting confidence and ad platform feedback loops."}],"cta":{"title":"Need help turning insights into a working setup?","description":"Get support with GA4, GTM, dashboard reporting, and performance tracking that is built for long-term clarity.","button_label":"Contact Saleem","button_url":"\\/contact"}}');

DROP TABLE IF EXISTS `password_reset_tokens`;
CREATE TABLE `password_reset_tokens` (
  `email` VARCHAR(255) NOT NULL,
  `token` VARCHAR(255) NOT NULL,
  `created_at` DATETIME NULL,
  PRIMARY KEY (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `slug` VARCHAR(255) NOT NULL,
  `description` TEXT NULL,
  `is_system` TINYINT NOT NULL DEFAULT '0',
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  `access_level` VARCHAR(255) NOT NULL DEFAULT 'user',
  PRIMARY KEY (`id`),
  UNIQUE KEY `roles_slug_unique` (`slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `roles` (`id`, `name`, `slug`, `description`, `is_system`, `created_at`, `updated_at`, `access_level`) VALUES
(1, 'Administrator', 'admin', 'Full access to settings, media, users, roles, and content management.', 1, '2026-03-16 18:26:44', '2026-03-16 18:26:44', 'admin'),
(2, 'Editor', 'editor', 'Can manage pages, services, and inbound messages.', 1, '2026-03-16 18:26:44', '2026-03-16 18:26:44', 'editor'),
(3, 'User', 'user', 'Basic authenticated user with no admin panel access.', 1, '2026-03-16 18:26:44', '2026-03-16 18:26:44', 'user');

DROP TABLE IF EXISTS `services`;
CREATE TABLE `services` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `slug` VARCHAR(255) NOT NULL,
  `short_description` VARCHAR(255) NULL,
  `long_description` TEXT NULL,
  `hero_title` VARCHAR(255) NULL,
  `benefits` TEXT NULL,
  `image` VARCHAR(255) NULL,
  `icon` VARCHAR(255) NULL,
  `seo_title` VARCHAR(255) NULL,
  `seo_description` TEXT NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  `category` VARCHAR(255) NULL,
  `tags` TEXT NULL,
  `sort_order` INT NOT NULL DEFAULT '0',
  `image_media_id` BIGINT UNSIGNED NULL,
  `icon_media_id` BIGINT UNSIGNED NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `services_slug_unique` (`slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `settings`;
CREATE TABLE `settings` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `site_name` VARCHAR(255) NULL,
  `logo` VARCHAR(255) NULL,
  `favicon` VARCHAR(255) NULL,
  `contact_email` VARCHAR(255) NULL,
  `contact_phone` VARCHAR(255) NULL,
  `footer_text` TEXT NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  `tagline` VARCHAR(255) NULL,
  `social_links` TEXT NULL,
  `header_cta_label` VARCHAR(255) NULL,
  `header_cta_url` VARCHAR(255) NULL,
  `footer_cta_label` VARCHAR(255) NULL,
  `footer_cta_url` VARCHAR(255) NULL,
  `logo_media_id` BIGINT UNSIGNED NULL,
  `favicon_media_id` BIGINT UNSIGNED NULL,
  `admin_contact_notifications_enabled` TINYINT NOT NULL DEFAULT '1',
  `user_contact_auto_reply_enabled` TINYINT NOT NULL DEFAULT '1',
  `admin_contact_subject` VARCHAR(255) NULL,
  `admin_contact_template` TEXT NULL,
  `user_contact_subject` VARCHAR(255) NULL,
  `user_contact_template` TEXT NULL,
  `gtm_container_id` VARCHAR(255) NULL,
  `ga_measurement_id` VARCHAR(255) NULL,
  `support_chat_enabled` TINYINT NOT NULL DEFAULT '1',
  `support_chat_title` VARCHAR(255) NULL,
  `support_chat_intro` TEXT NULL,
  `support_chat_button_label` VARCHAR(255) NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `settings` (`id`, `site_name`, `logo`, `favicon`, `contact_email`, `contact_phone`, `footer_text`, `created_at`, `updated_at`, `tagline`, `social_links`, `header_cta_label`, `header_cta_url`, `footer_cta_label`, `footer_cta_url`, `logo_media_id`, `favicon_media_id`, `admin_contact_notifications_enabled`, `user_contact_auto_reply_enabled`, `admin_contact_subject`, `admin_contact_template`, `user_contact_subject`, `user_contact_template`, `gtm_container_id`, `ga_measurement_id`, `support_chat_enabled`, `support_chat_title`, `support_chat_intro`, `support_chat_button_label`) VALUES
(1, 'Saleem Sial Analytics', 'uploads/logos/saleem-sial-logo.png', 'uploads/placeholders/saleem-sial-favicon.png', 'hello@saleemsial.com', '+92 300 1234567', 'Saleem Sial Analytics builds clean, scalable tracking systems for advertisers, agencies, and growth teams.', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 'GA4, GTM and performance tracking specialist', '{"facebook":"https:\\/\\/facebook.com\\/#","instagram":"https:\\/\\/instagram.com\\/#","x":"https:\\/\\/x.com\\/#","linkedin":"https:\\/\\/linkedin.com\\/#"}', 'Book a Consultation', '/contact', 'Start Your Tracking Setup', '/contact', 1, 3, 1, 1, 'New website inquiry from {{ name }}', '<p>You have received a new inquiry on {{ site_name }}.</p>\n<p><strong>Name:</strong> {{ name }}</p>\n<p><strong>Email:</strong> {{ email }}</p>\n<p><strong>Phone:</strong> {{ phone }}</p>\n<p><strong>Source:</strong> {{ source_label }}</p>\n<p><strong>Page URL:</strong> {{ page_url }}</p>\n<p><strong>Submitted:</strong> {{ submitted_at }}</p>\n<p><strong>Message:</strong></p>\n<p>{{ message }}</p>', 'Thanks for contacting {{ site_name }}', '<p>Hello {{ name }},</p>\n<p>Thanks for reaching out to {{ site_name }}. Your message has been received and we will respond as soon as possible.</p>\n<p><strong>Source:</strong> {{ source_label }}</p>\n<p><strong>Your message:</strong></p>\n<p>{{ message }}</p>\n<p>You can reply directly to {{ contact_email }} if you need to share more details.</p>', NULL, NULL, 1, 'Need quick support?', 'Send a direct message about your tracking issue and we will follow up by email.', 'Send support message');

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `email` VARCHAR(255) NOT NULL,
  `email_verified_at` DATETIME NULL,
  `password` VARCHAR(255) NOT NULL,
  `remember_token` VARCHAR(255) NULL,
  `created_at` DATETIME NULL,
  `updated_at` DATETIME NULL,
  `role` VARCHAR(255) NOT NULL DEFAULT 'editor',
  `role_id` BIGINT UNSIGNED NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `users` (`id`, `name`, `email`, `email_verified_at`, `password`, `remember_token`, `created_at`, `updated_at`, `role`, `role_id`) VALUES
(1, 'Dr. Kip Boehm', 'lempi.koss@example.net', '2026-03-16 18:26:47', '$2y$04$J9h2/8q3vCzF5I2Xy3VAOO.qM4WSU5PH9UkuHMoZ91vujhk/iu4j2', '1yT0xYcYym', '2026-03-16 18:26:47', '2026-03-16 18:26:47', 'admin', 1);

-- Deferred foreign keys
ALTER TABLE `blog_posts` ADD CONSTRAINT `fk_blog_posts_0` FOREIGN KEY (`featured_image_media_id`) REFERENCES `media` (`id`) ON DELETE SET NULL;
ALTER TABLE `media` ADD CONSTRAINT `fk_media_0` FOREIGN KEY (`uploaded_by`) REFERENCES `users` (`id`) ON DELETE SET NULL;
ALTER TABLE `media_usages` ADD CONSTRAINT `fk_media_usages_0` FOREIGN KEY (`media_id`) REFERENCES `media` (`id`) ON DELETE CASCADE;
ALTER TABLE `services` ADD CONSTRAINT `fk_services_0` FOREIGN KEY (`icon_media_id`) REFERENCES `media` (`id`) ON DELETE SET NULL;
ALTER TABLE `services` ADD CONSTRAINT `fk_services_1` FOREIGN KEY (`image_media_id`) REFERENCES `media` (`id`) ON DELETE SET NULL;
ALTER TABLE `settings` ADD CONSTRAINT `fk_settings_0` FOREIGN KEY (`favicon_media_id`) REFERENCES `media` (`id`) ON DELETE SET NULL;
ALTER TABLE `settings` ADD CONSTRAINT `fk_settings_1` FOREIGN KEY (`logo_media_id`) REFERENCES `media` (`id`) ON DELETE SET NULL;
ALTER TABLE `users` ADD CONSTRAINT `fk_users_0` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE SET NULL;

SET FOREIGN_KEY_CHECKS=1;
