create-nextblock 0.12.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -5415,71 +5415,123 @@ ALTER TABLE public.products ADD COLUMN IF NOT EXISTS custom_canonical text;
|
|
|
5415
5415
|
|
|
5416
5416
|
|
|
5417
5417
|
-- >>> FROM: 00000000000006_home_live_demo_promo.sql <<<
|
|
5418
|
-
-- 00000000000006_home_sandbox_promo.sql
|
|
5419
|
-
-- Adds a "Live Demo" promo section to the English (slug 'home') and French
|
|
5420
|
-
-- (slug 'accueil') home pages that drives visitors to the public sandbox at
|
|
5421
|
-
-- https://cms.nextblock.dev -- production (nextblock.dev) never mentioned it before.
|
|
5418
|
+
-- 00000000000006_home_sandbox_promo.sql
|
|
5419
|
+
-- Adds a "Live Demo" promo section to the English (slug 'home') and French
|
|
5420
|
+
-- (slug 'accueil') home pages that drives visitors to the public sandbox at
|
|
5421
|
+
-- https://cms.nextblock.dev -- production (nextblock.dev) never mentioned it before.
|
|
5422
|
+
--
|
|
5423
|
+
-- The section is inserted right after the hero (order 1); existing home-page blocks
|
|
5424
|
+
-- shift down by one so relative order is preserved. Each block carries a sentinel
|
|
5425
|
+
-- comment (nb-sandbox-promo) inside its HTML so the sandbox reset route can strip it
|
|
5426
|
+
-- there: a CTA pointing at the sandbox is pointless *inside* the sandbox itself.
|
|
5427
|
+
--
|
|
5428
|
+
-- Forward-only and idempotent: the NOT EXISTS sentinel guard makes a re-run a no-op,
|
|
5429
|
+
-- and page lookups are by (language code, slug) so explicit IDs never collide with
|
|
5430
|
+
-- user-created blocks on a live database.
|
|
5431
|
+
|
|
5432
|
+
DO $body$
|
|
5433
|
+
DECLARE
|
|
5434
|
+
v_en_lang integer;
|
|
5435
|
+
v_fr_lang integer;
|
|
5436
|
+
v_en_page integer;
|
|
5437
|
+
v_fr_page integer;
|
|
5438
|
+
BEGIN
|
|
5439
|
+
SELECT id INTO v_en_lang FROM public.languages WHERE code = 'en' LIMIT 1;
|
|
5440
|
+
SELECT id INTO v_fr_lang FROM public.languages WHERE code = 'fr' LIMIT 1;
|
|
5441
|
+
|
|
5442
|
+
-- English home page
|
|
5443
|
+
SELECT id INTO v_en_page
|
|
5444
|
+
FROM public.pages
|
|
5445
|
+
WHERE slug = 'home' AND language_id = v_en_lang
|
|
5446
|
+
ORDER BY id
|
|
5447
|
+
LIMIT 1;
|
|
5448
|
+
|
|
5449
|
+
IF v_en_page IS NOT NULL AND NOT EXISTS (
|
|
5450
|
+
SELECT 1 FROM public.blocks
|
|
5451
|
+
WHERE page_id = v_en_page AND content::text LIKE '%nb-sandbox-promo%'
|
|
5452
|
+
) THEN
|
|
5453
|
+
UPDATE public.blocks
|
|
5454
|
+
SET "order" = "order" + 1
|
|
5455
|
+
WHERE page_id = v_en_page AND "order" >= 1;
|
|
5456
|
+
|
|
5457
|
+
INSERT INTO public.blocks (page_id, language_id, block_type, content, "order")
|
|
5458
|
+
VALUES (v_en_page, v_en_lang, 'section', $en$
|
|
5459
|
+
{"container_type":"container","background":{"type":"gradient","gradient":{"type":"linear","direction":"135deg","stops":[{"color":"#020817","position":0},{"color":"#0b1e3d","position":50},{"color":"#0e2a4d","position":100}]}},"responsive_columns":{"mobile":1,"tablet":1,"desktop":2},"column_gap":"xl","vertical_alignment":"center","padding":{"top":"xl","bottom":"xl"},"column_blocks":[[{"block_type":"text","content":{"html_content":"<!--nb-sandbox-promo--><p class='text-xs uppercase tracking-[0.25em] text-cyan-400 font-bold mb-4'>Live Demo · No Signup</p><h2 class='text-4xl md:text-5xl font-bold text-white mb-6 leading-tight'>Try the full CMS,<br/>live right now.</h2><p class='text-lg text-slate-300 max-w-xl leading-relaxed mb-8'>Don't just read about NextBlock™ — take the wheel. Our public sandbox is a complete, pre-loaded install where you can build pages with the block editor, manage bilingual content, and browse a working demo store. It resets every hour, so explore freely and break whatever you like.</p>"}},{"block_type":"text","content":{"html_content":"<div class='flex flex-col sm:flex-row gap-4'><a href='https://cms.nextblock.dev' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white bg-gradient-to-r from-blue-600 to-cyan-500 hover:from-blue-500 hover:to-cyan-400 shadow-lg shadow-blue-500/25 transition-all no-underline'>Explore the Live Demo →</a><a href='https://cms.nextblock.dev/sign-in' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white border border-white/20 hover:bg-white/10 backdrop-blur-sm transition-all no-underline'>Open the CMS Dashboard →</a></div><p class='text-xs text-slate-400 mt-4'>Demo login <span class='font-mono text-slate-300'>demo@nextblock.ca</span> / <span class='font-mono text-slate-300'>password</span> · Resets hourly</p>"}}],[{"block_type":"text","content":{"html_content":"<div class='rounded-3xl overflow-hidden border border-white/10 bg-white/5 backdrop-blur-xl shadow-2xl'><div class='flex items-center gap-2 px-4 py-3 border-b border-white/10 bg-white/5'><span class='w-3 h-3 rounded-full bg-red-400/70'></span><span class='w-3 h-3 rounded-full bg-yellow-400/70'></span><span class='w-3 h-3 rounded-full bg-green-400/70'></span><span class='ml-3 flex-1 truncate rounded-md bg-black/30 px-3 py-1 text-xs font-mono text-slate-300'>cms.nextblock.dev</span></div><div class='p-6 sm:p-8'><p class='text-sm text-slate-300 mb-5'>A living NextBlock™ install — everything here is real and clickable:</p><ul class='space-y-4 text-sm text-slate-200'><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Full block editor</strong> with slash commands & drag-and-drop.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Bilingual</strong> English / French content management.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>A complete demo storefront</strong> with live checkout.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Wipes clean every hour</strong> — always a fresh start.</span></li></ul></div></div>"}}]]}
|
|
5460
|
+
$en$::jsonb, 1);
|
|
5461
|
+
END IF;
|
|
5462
|
+
|
|
5463
|
+
-- French home page
|
|
5464
|
+
SELECT id INTO v_fr_page
|
|
5465
|
+
FROM public.pages
|
|
5466
|
+
WHERE slug = 'accueil' AND language_id = v_fr_lang
|
|
5467
|
+
ORDER BY id
|
|
5468
|
+
LIMIT 1;
|
|
5469
|
+
|
|
5470
|
+
IF v_fr_page IS NOT NULL AND NOT EXISTS (
|
|
5471
|
+
SELECT 1 FROM public.blocks
|
|
5472
|
+
WHERE page_id = v_fr_page AND content::text LIKE '%nb-sandbox-promo%'
|
|
5473
|
+
) THEN
|
|
5474
|
+
UPDATE public.blocks
|
|
5475
|
+
SET "order" = "order" + 1
|
|
5476
|
+
WHERE page_id = v_fr_page AND "order" >= 1;
|
|
5477
|
+
|
|
5478
|
+
INSERT INTO public.blocks (page_id, language_id, block_type, content, "order")
|
|
5479
|
+
VALUES (v_fr_page, v_fr_lang, 'section', $fr$
|
|
5480
|
+
{"container_type":"container","background":{"type":"gradient","gradient":{"type":"linear","direction":"135deg","stops":[{"color":"#020817","position":0},{"color":"#0b1e3d","position":50},{"color":"#0e2a4d","position":100}]}},"responsive_columns":{"mobile":1,"tablet":1,"desktop":2},"column_gap":"xl","vertical_alignment":"center","padding":{"top":"xl","bottom":"xl"},"column_blocks":[[{"block_type":"text","content":{"html_content":"<!--nb-sandbox-promo--><p class='text-xs uppercase tracking-[0.25em] text-cyan-400 font-bold mb-4'>Démo en direct · Sans inscription</p><h2 class='text-4xl md:text-5xl font-bold text-white mb-6 leading-tight'>Essayez le CMS complet,<br/>en direct dès maintenant.</h2><p class='text-lg text-slate-300 max-w-xl leading-relaxed mb-8'>Ne vous contentez pas de lire à propos de NextBlock™ — prenez les commandes. Notre bac à sable public est une installation complète et préchargée où vous pouvez créer des pages avec l'éditeur de blocs, gérer du contenu bilingue et parcourir une vraie boutique de démonstration. Il se réinitialise chaque heure : explorez librement et cassez tout ce que vous voulez.</p>"}},{"block_type":"text","content":{"html_content":"<div class='flex flex-col sm:flex-row gap-4'><a href='https://cms.nextblock.dev' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white bg-gradient-to-r from-blue-600 to-cyan-500 hover:from-blue-500 hover:to-cyan-400 shadow-lg shadow-blue-500/25 transition-all no-underline'>Découvrir la démo →</a><a href='https://cms.nextblock.dev/sign-in' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white border border-white/20 hover:bg-white/10 backdrop-blur-sm transition-all no-underline'>Ouvrir le tableau de bord →</a></div><p class='text-xs text-slate-400 mt-4'>Identifiants démo <span class='font-mono text-slate-300'>demo@nextblock.ca</span> / <span class='font-mono text-slate-300'>password</span> · Réinitialisé chaque heure</p>"}}],[{"block_type":"text","content":{"html_content":"<div class='rounded-3xl overflow-hidden border border-white/10 bg-white/5 backdrop-blur-xl shadow-2xl'><div class='flex items-center gap-2 px-4 py-3 border-b border-white/10 bg-white/5'><span class='w-3 h-3 rounded-full bg-red-400/70'></span><span class='w-3 h-3 rounded-full bg-yellow-400/70'></span><span class='w-3 h-3 rounded-full bg-green-400/70'></span><span class='ml-3 flex-1 truncate rounded-md bg-black/30 px-3 py-1 text-xs font-mono text-slate-300'>cms.nextblock.dev</span></div><div class='p-6 sm:p-8'><p class='text-sm text-slate-300 mb-5'>Une installation NextBlock™ bien vivante — tout ici est réel et cliquable :</p><ul class='space-y-4 text-sm text-slate-200'><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Éditeur de blocs complet</strong> : commandes slash et glisser-déposer.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Gestion bilingue</strong> du contenu français / anglais.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Une boutique de démonstration complète</strong> avec paiement réel.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Remis à zéro chaque heure</strong> — toujours un nouveau départ.</span></li></ul></div></div>"}}]]}
|
|
5481
|
+
$fr$::jsonb, 1);
|
|
5482
|
+
END IF;
|
|
5483
|
+
END
|
|
5484
|
+
$body$;
|
|
5485
|
+
|
|
5486
|
+
|
|
5487
|
+
-- >>> FROM: 00000000000007_home_live_demo_promo_copy_fix.sql <<<
|
|
5488
|
+
-- 00000000000007_home_live_demo_promo_copy_fix.sql
|
|
5489
|
+
-- Corrects the "Live Demo" promo that migration 006 seeded on the EN (slug 'home')
|
|
5490
|
+
-- and FR (slug 'accueil') home pages. 006 was already applied to production and the
|
|
5491
|
+
-- sandbox, so per the append-only rule this ships the corrections as a forward-only
|
|
5492
|
+
-- UPDATE instead of editing 006 (which would never re-run and would desync the file
|
|
5493
|
+
-- from what was actually applied).
|
|
5422
5494
|
--
|
|
5423
|
-
--
|
|
5424
|
-
--
|
|
5425
|
-
--
|
|
5426
|
-
--
|
|
5495
|
+
-- Fixes: reset cadence "hourly" -> "daily" (the reset cron in vercel.json is daily,
|
|
5496
|
+
-- 0 3 * * *, not hourly); FR "avec paiement reel" -> "un parcours de paiement complet"
|
|
5497
|
+
-- (sandbox checkout is simulated); FR anglicism "lire a propos de" -> "lire des
|
|
5498
|
+
-- articles sur"; and an accessible WCAG-AA primary CTA (solid blue-600, was white on
|
|
5499
|
+
-- a low-contrast cyan gradient).
|
|
5427
5500
|
--
|
|
5428
|
-
--
|
|
5429
|
-
--
|
|
5430
|
-
--
|
|
5501
|
+
-- Idempotent: re-running sets identical content. Targets exactly the promo blocks via
|
|
5502
|
+
-- the nb-sandbox-promo sentinel, scoped by language. On the sandbox the promo is still
|
|
5503
|
+
-- stripped afterward by removeSandboxPromoSections in the reset-sandbox route.
|
|
5504
|
+
--
|
|
5505
|
+
-- NOTE: keep the word "sandbox" OUT of this filename -- generate-sandbox-reset.ts
|
|
5506
|
+
-- excludes any migration whose filename contains "sandbox" from the reset bundle.
|
|
5431
5507
|
|
|
5432
5508
|
DO $body$
|
|
5433
5509
|
DECLARE
|
|
5434
5510
|
v_en_lang integer;
|
|
5435
5511
|
v_fr_lang integer;
|
|
5436
|
-
v_en_page integer;
|
|
5437
|
-
v_fr_page integer;
|
|
5438
5512
|
BEGIN
|
|
5439
5513
|
SELECT id INTO v_en_lang FROM public.languages WHERE code = 'en' LIMIT 1;
|
|
5440
5514
|
SELECT id INTO v_fr_lang FROM public.languages WHERE code = 'fr' LIMIT 1;
|
|
5441
5515
|
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
|
|
5446
|
-
|
|
5447
|
-
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5457
|
-
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
END IF;
|
|
5462
|
-
|
|
5463
|
-
-- French home page
|
|
5464
|
-
SELECT id INTO v_fr_page
|
|
5465
|
-
FROM public.pages
|
|
5466
|
-
WHERE slug = 'accueil' AND language_id = v_fr_lang
|
|
5467
|
-
ORDER BY id
|
|
5468
|
-
LIMIT 1;
|
|
5469
|
-
|
|
5470
|
-
IF v_fr_page IS NOT NULL AND NOT EXISTS (
|
|
5471
|
-
SELECT 1 FROM public.blocks
|
|
5472
|
-
WHERE page_id = v_fr_page AND content::text LIKE '%nb-sandbox-promo%'
|
|
5473
|
-
) THEN
|
|
5474
|
-
UPDATE public.blocks
|
|
5475
|
-
SET "order" = "order" + 1
|
|
5476
|
-
WHERE page_id = v_fr_page AND "order" >= 1;
|
|
5477
|
-
|
|
5478
|
-
INSERT INTO public.blocks (page_id, language_id, block_type, content, "order")
|
|
5479
|
-
VALUES (v_fr_page, v_fr_lang, 'section', $fr$
|
|
5480
|
-
{"container_type":"container","background":{"type":"gradient","gradient":{"type":"linear","direction":"135deg","stops":[{"color":"#020817","position":0},{"color":"#0b1e3d","position":50},{"color":"#0e2a4d","position":100}]}},"responsive_columns":{"mobile":1,"tablet":1,"desktop":2},"column_gap":"xl","vertical_alignment":"center","padding":{"top":"xl","bottom":"xl"},"column_blocks":[[{"block_type":"text","content":{"html_content":"<!--nb-sandbox-promo--><p class='text-xs uppercase tracking-[0.25em] text-cyan-400 font-bold mb-4'>Démo en direct · Sans inscription</p><h2 class='text-4xl md:text-5xl font-bold text-white mb-6 leading-tight'>Essayez le CMS complet,<br/>en direct dès maintenant.</h2><p class='text-lg text-slate-300 max-w-xl leading-relaxed mb-8'>Ne vous contentez pas de lire à propos de NextBlock™ — prenez les commandes. Notre bac à sable public est une installation complète et préchargée où vous pouvez créer des pages avec l'éditeur de blocs, gérer du contenu bilingue et parcourir une vraie boutique de démonstration. Il se réinitialise chaque heure : explorez librement et cassez tout ce que vous voulez.</p>"}},{"block_type":"text","content":{"html_content":"<div class='flex flex-col sm:flex-row gap-4'><a href='https://cms.nextblock.dev' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white bg-gradient-to-r from-blue-600 to-cyan-500 hover:from-blue-500 hover:to-cyan-400 shadow-lg shadow-blue-500/25 transition-all no-underline'>Découvrir la démo →</a><a href='https://cms.nextblock.dev/sign-in' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white border border-white/20 hover:bg-white/10 backdrop-blur-sm transition-all no-underline'>Ouvrir le tableau de bord →</a></div><p class='text-xs text-slate-400 mt-4'>Identifiants démo <span class='font-mono text-slate-300'>demo@nextblock.ca</span> / <span class='font-mono text-slate-300'>password</span> · Réinitialisé chaque heure</p>"}}],[{"block_type":"text","content":{"html_content":"<div class='rounded-3xl overflow-hidden border border-white/10 bg-white/5 backdrop-blur-xl shadow-2xl'><div class='flex items-center gap-2 px-4 py-3 border-b border-white/10 bg-white/5'><span class='w-3 h-3 rounded-full bg-red-400/70'></span><span class='w-3 h-3 rounded-full bg-yellow-400/70'></span><span class='w-3 h-3 rounded-full bg-green-400/70'></span><span class='ml-3 flex-1 truncate rounded-md bg-black/30 px-3 py-1 text-xs font-mono text-slate-300'>cms.nextblock.dev</span></div><div class='p-6 sm:p-8'><p class='text-sm text-slate-300 mb-5'>Une installation NextBlock™ bien vivante — tout ici est réel et cliquable :</p><ul class='space-y-4 text-sm text-slate-200'><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Éditeur de blocs complet</strong> : commandes slash et glisser-déposer.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Gestion bilingue</strong> du contenu français / anglais.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Une boutique de démonstration complète</strong> avec paiement réel.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Remis à zéro chaque heure</strong> — toujours un nouveau départ.</span></li></ul></div></div>"}}]]}
|
|
5481
|
-
$fr$::jsonb, 1);
|
|
5482
|
-
END IF;
|
|
5516
|
+
UPDATE public.blocks
|
|
5517
|
+
SET content = $en$
|
|
5518
|
+
{"container_type":"container","background":{"type":"gradient","gradient":{"type":"linear","direction":"135deg","stops":[{"color":"#020817","position":0},{"color":"#0b1e3d","position":50},{"color":"#0e2a4d","position":100}]}},"responsive_columns":{"mobile":1,"tablet":1,"desktop":2},"column_gap":"xl","vertical_alignment":"center","padding":{"top":"xl","bottom":"xl"},"column_blocks":[[{"block_type":"text","content":{"html_content":"<!--nb-sandbox-promo--><p class='text-xs uppercase tracking-[0.25em] text-cyan-400 font-bold mb-4'>Live Demo · No Signup</p><h2 class='text-4xl md:text-5xl font-bold text-white mb-6 leading-tight'>Try the full CMS,<br/>live right now.</h2><p class='text-lg text-slate-300 max-w-xl leading-relaxed mb-8'>Don't just read about NextBlock™ — take the wheel. Our public sandbox is a complete, pre-loaded install where you can build pages with the block editor, manage bilingual content, and browse a working demo store. It resets daily, so explore freely and break whatever you like.</p>"}},{"block_type":"text","content":{"html_content":"<div class='flex flex-col sm:flex-row gap-4'><a href='https://cms.nextblock.dev' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white bg-blue-600 hover:bg-blue-700 shadow-lg shadow-cyan-500/20 transition-all no-underline'>Explore the Live Demo →</a><a href='https://cms.nextblock.dev/sign-in' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white border border-white/20 hover:bg-white/10 backdrop-blur-sm transition-all no-underline'>Open the CMS Dashboard →</a></div><p class='text-xs text-slate-400 mt-4'>Demo login <span class='font-mono text-slate-300'>demo@nextblock.ca</span> / <span class='font-mono text-slate-300'>password</span> · Resets daily</p>"}}],[{"block_type":"text","content":{"html_content":"<div class='rounded-3xl overflow-hidden border border-white/10 bg-white/5 backdrop-blur-xl shadow-2xl'><div class='flex items-center gap-2 px-4 py-3 border-b border-white/10 bg-white/5'><span class='w-3 h-3 rounded-full bg-red-400/70'></span><span class='w-3 h-3 rounded-full bg-yellow-400/70'></span><span class='w-3 h-3 rounded-full bg-green-400/70'></span><span class='ml-3 flex-1 truncate rounded-md bg-black/30 px-3 py-1 text-xs font-mono text-slate-300'>cms.nextblock.dev</span></div><div class='p-6 sm:p-8'><p class='text-sm text-slate-300 mb-5'>A living NextBlock™ install — everything here is real and clickable:</p><ul class='space-y-4 text-sm text-slate-200'><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Full block editor</strong> with slash commands & drag-and-drop.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Bilingual</strong> English / French content management.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>A complete demo storefront</strong> with a full checkout flow.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Wipes clean daily</strong> — always a fresh start.</span></li></ul></div></div>"}}]]}
|
|
5519
|
+
$en$::jsonb,
|
|
5520
|
+
updated_at = now()
|
|
5521
|
+
WHERE block_type = 'section'
|
|
5522
|
+
AND page_id IS NOT NULL
|
|
5523
|
+
AND language_id = v_en_lang
|
|
5524
|
+
AND content::text LIKE '%nb-sandbox-promo%';
|
|
5525
|
+
|
|
5526
|
+
UPDATE public.blocks
|
|
5527
|
+
SET content = $fr$
|
|
5528
|
+
{"container_type":"container","background":{"type":"gradient","gradient":{"type":"linear","direction":"135deg","stops":[{"color":"#020817","position":0},{"color":"#0b1e3d","position":50},{"color":"#0e2a4d","position":100}]}},"responsive_columns":{"mobile":1,"tablet":1,"desktop":2},"column_gap":"xl","vertical_alignment":"center","padding":{"top":"xl","bottom":"xl"},"column_blocks":[[{"block_type":"text","content":{"html_content":"<!--nb-sandbox-promo--><p class='text-xs uppercase tracking-[0.25em] text-cyan-400 font-bold mb-4'>Démo en direct · Sans inscription</p><h2 class='text-4xl md:text-5xl font-bold text-white mb-6 leading-tight'>Essayez le CMS complet,<br/>en direct dès maintenant.</h2><p class='text-lg text-slate-300 max-w-xl leading-relaxed mb-8'>Ne vous contentez pas de lire des articles sur NextBlock™ — prenez les commandes. Notre bac à sable public est une installation complète et préchargée où vous pouvez créer des pages avec l'éditeur de blocs, gérer du contenu bilingue et parcourir une vraie boutique de démonstration. Il se réinitialise chaque jour : explorez librement et cassez tout ce que vous voulez.</p>"}},{"block_type":"text","content":{"html_content":"<div class='flex flex-col sm:flex-row gap-4'><a href='https://cms.nextblock.dev' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white bg-blue-600 hover:bg-blue-700 shadow-lg shadow-cyan-500/20 transition-all no-underline'>Découvrir la démo →</a><a href='https://cms.nextblock.dev/sign-in' target='_blank' rel='noopener noreferrer' class='inline-flex items-center justify-center gap-2 rounded-xl px-7 h-12 text-sm font-semibold text-white border border-white/20 hover:bg-white/10 backdrop-blur-sm transition-all no-underline'>Ouvrir le tableau de bord →</a></div><p class='text-xs text-slate-400 mt-4'>Identifiants démo <span class='font-mono text-slate-300'>demo@nextblock.ca</span> / <span class='font-mono text-slate-300'>password</span> · Réinitialisé chaque jour</p>"}}],[{"block_type":"text","content":{"html_content":"<div class='rounded-3xl overflow-hidden border border-white/10 bg-white/5 backdrop-blur-xl shadow-2xl'><div class='flex items-center gap-2 px-4 py-3 border-b border-white/10 bg-white/5'><span class='w-3 h-3 rounded-full bg-red-400/70'></span><span class='w-3 h-3 rounded-full bg-yellow-400/70'></span><span class='w-3 h-3 rounded-full bg-green-400/70'></span><span class='ml-3 flex-1 truncate rounded-md bg-black/30 px-3 py-1 text-xs font-mono text-slate-300'>cms.nextblock.dev</span></div><div class='p-6 sm:p-8'><p class='text-sm text-slate-300 mb-5'>Une installation NextBlock™ bien vivante — tout ici est réel et cliquable :</p><ul class='space-y-4 text-sm text-slate-200'><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Éditeur de blocs complet</strong> : commandes slash et glisser-déposer.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Gestion bilingue</strong> du contenu français / anglais.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Une boutique de démonstration complète</strong> avec un parcours de paiement complet.</span></li><li class='flex items-start gap-3'><span class='mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-500/15 text-cyan-300 text-xs'>✓</span><span><strong class='text-white'>Remis à zéro chaque jour</strong> — toujours un nouveau départ.</span></li></ul></div></div>"}}]]}
|
|
5529
|
+
$fr$::jsonb,
|
|
5530
|
+
updated_at = now()
|
|
5531
|
+
WHERE block_type = 'section'
|
|
5532
|
+
AND page_id IS NOT NULL
|
|
5533
|
+
AND language_id = v_fr_lang
|
|
5534
|
+
AND content::text LIKE '%nb-sandbox-promo%';
|
|
5483
5535
|
END
|
|
5484
5536
|
$body$;
|
|
5485
5537
|
|
|
@@ -5493,7 +5545,8 @@ $body$;
|
|
|
5493
5545
|
('00000000000003', 'baseline_seed'),
|
|
5494
5546
|
('00000000000004', 'default_logo_email_safe'),
|
|
5495
5547
|
('00000000000005', 'add_custom_canonical'),
|
|
5496
|
-
('00000000000006', 'home_live_demo_promo')
|
|
5548
|
+
('00000000000006', 'home_live_demo_promo'),
|
|
5549
|
+
('00000000000007', 'home_live_demo_promo_copy_fix')
|
|
5497
5550
|
ON CONFLICT (version) DO NOTHING;
|
|
5498
5551
|
|
|
5499
5552
|
-- Step E: Anchor preserved profiles
|