@nextblock-cms/db 0.21.3 → 0.22.0
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/README.md +47 -47
- package/package.json +1 -1
- package/supabase/functions/nextblock-migration-ingest/index.ts +8 -8
- package/supabase/migrations/02000_catchup_gen1.sql +5880 -5880
- package/supabase/migrations/02001_baseline_schema.sql +2734 -2734
- package/supabase/migrations/02002_baseline_constraints_and_indexes.sql +1262 -1262
- package/supabase/migrations/02003_baseline_security_and_grants.sql +1577 -1577
- package/supabase/migrations/02004_baseline_seed.sql +565 -565
- package/supabase/migrations/02005_home_live_demo_promo_cadence_15min.sql +53 -53
- package/supabase/migrations/02006_home_marketing_contrast.sql +56 -56
- package/supabase/migrations/02007_home_pillar_caption_contrast.sql +44 -44
- package/supabase/migrations/02008_home_fr_parity.sql +89 -89
- package/supabase/migrations/02009_fr_cortex_posts.sql +67 -67
- package/supabase/migrations/02010_shop_hero_redesign.sql +72 -72
- package/supabase/migrations/02011_drop_backdrop_blur_on_pages.sql +26 -26
- package/supabase/migrations/02012_drop_variant_backdrop_blur.sql +17 -17
- package/supabase/migrations/02013_advisor_rls_and_trigger_grants.sql +102 -102
- package/supabase/migrations/02014_package_activations_staff_read.sql +18 -18
- package/supabase/migrations/02018_install_paths_and_seed_copy_accuracy.sql +1820 -1820
- package/supabase/migrations/02019_open_handed_licensing_and_mcp_clients.sql +448 -448
- package/supabase/migrations/02020_commerce_product_accuracy.sql +93 -93
- package/supabase/migrations/02021_profiles_staff_read_and_role_guard.sql +362 -0
|
@@ -1,1820 +1,1820 @@
|
|
|
1
|
-
-- 02018: seeded content refresh, EN + FR -- the fifth install path (an AI coding agent),
|
|
2
|
-
-- `npm run dev` in the monorepo, and audited accuracy fixes across the seeded posts and the
|
|
3
|
-
-- home / articles pages. Copy and metadata only; no schema change.
|
|
4
|
-
--
|
|
5
|
-
-- * Install guide ('how-to-setup-nextblock' / 'comment-configurer-nextblock'): Option 5, "let
|
|
6
|
-
-- your AI coding agent install it" (`npx create-nextblock@latest my-site --non-interactive`,
|
|
7
|
-
-- the two browser steps, the MCP server, the Claude Code / Cursor / Codex plugin); the clone
|
|
8
|
-
-- starts with `npm run dev` (root alias of `npx nx serve nextblock` since 2026-08-21, the copy
|
|
9
|
-
-- still said the monorepo had none); the post-setup Cortex AI welcome screen; Cloudflare R2 is
|
|
10
|
-
-- optional; Commerce Pro activates from Administration -> Packages (the CLI `activate` command
|
|
11
|
-
-- overwrites working routes); the update FAQ points at `npm run update`; no "copilot".
|
|
12
|
-
-- * Updating guide ('how-updating-works' / 'comment-fonctionnent-les-mises-a-jour'): five install
|
|
13
|
-
-- paths, four update paths; `npm run update:check` (PowerShell strips a bare `--`, so
|
|
14
|
-
-- `npm run update -- --check` ran a full update); the first commit a new scaffold needs;
|
|
15
|
-
-- rollback commands that work (merge commits need `git revert -m 1`); backups; migrations do
|
|
16
|
-
-- fix seeded data.
|
|
17
|
-
-- * MCP guide ('cortex-ai-mcp-connection-guide' / 'guide-connexion-mcp-cortex-ai'): where the
|
|
18
|
-
-- trial starts, what the agent can publish (drafts are not the only path), 6 contract tools /
|
|
19
|
-
-- 50 typed tools, five client tabs, ports, a "starting from nothing?" pointer to Option 5.
|
|
20
|
-
-- * Cortex AI guide ('nextblock-cortex-ai-guide'): label 'Cortex AI', OpenRouter-only single
|
|
21
|
-
-- model setting, the two surfaces (editor + MCP server), the 30-day trial; and its French twin
|
|
22
|
-
-- 'guide-cortex-ai-nextblock' (below), which 02009 never managed to insert.
|
|
23
|
-
-- * Architecture and commerce posts, home and articles pages: premium modules are AGPL too,
|
|
24
|
-
-- @nextblock-cms/cortex, per-currency price overrides, Stripe Tax wording, daily FX sync, no ISR
|
|
25
|
-
-- claim, linked translations, the agent path on the home page, FR link/alt/meta fixes, and the
|
|
26
|
-
-- English home's duplicate block "order".
|
|
27
|
-
--
|
|
28
|
-
-- How: every fragment is queued with its post or page (slug + language; never blocks.id, ids
|
|
29
|
-
-- drift on every install) and applied by pg_temp.nb_02018_item, all or nothing per post/page:
|
|
30
|
-
-- only if every seeded fragment of that item is still present are its blocks rewritten, then
|
|
31
|
-
-- the same fragments in its revision snapshots, then its fields (row and snapshot meta, each
|
|
32
|
-
-- only while it still holds the seeded value). An item an operator edited, even by re-saving
|
|
33
|
-
-- it in the editor (which re-serialises the HTML), is left exactly as it is, never half
|
|
34
|
-
-- rewritten; a NOTICE names it. Items that point at the install guide's Option 5 (#ai-agent)
|
|
35
|
-
-- run only if that guide, in the same language, has the section. Patterns are single-line and
|
|
36
|
-
-- carriage returns are stripped from every replacement, so the stored copy is LF whatever line
|
|
37
|
-
-- endings this file arrives with. Idempotent: a second run finds nothing to replace.
|
|
38
|
-
--
|
|
39
|
-
-- NOTE: keep the word "sandbox" OUT of this filename -- generate-sandbox-reset.ts excludes any
|
|
40
|
-
-- migration whose filename contains "sandbox" from the reset bundle.
|
|
41
|
-
|
|
42
|
-
-- JSON-escapes a raw HTML fragment exactly as Postgres prints it inside content::text, so a
|
|
43
|
-
-- fragment written below as plain HTML matches the stored jsonb text form. Carriage returns are
|
|
44
|
-
-- dropped first: a Windows checkout can hand this file over with CRLF endings, and the stored
|
|
45
|
-
-- copy must be LF on every install.
|
|
46
|
-
CREATE OR REPLACE FUNCTION pg_temp.nb_02018_json_inner(src text)
|
|
47
|
-
RETURNS text
|
|
48
|
-
LANGUAGE sql
|
|
49
|
-
IMMUTABLE
|
|
50
|
-
AS $fn$
|
|
51
|
-
SELECT substr(to_jsonb(replace(src, chr(13), ''))::text, 2,
|
|
52
|
-
length(to_jsonb(replace(src, chr(13), ''))::text) - 2)
|
|
53
|
-
$fn$;
|
|
54
|
-
|
|
55
|
-
DROP TABLE IF EXISTS pg_temp.nb_02018_edits;
|
|
56
|
-
CREATE TEMP TABLE nb_02018_edits (
|
|
57
|
-
seq bigserial PRIMARY KEY,
|
|
58
|
-
kind text NOT NULL,
|
|
59
|
-
slug text NOT NULL,
|
|
60
|
-
lang text NOT NULL,
|
|
61
|
-
old_html text NOT NULL,
|
|
62
|
-
new_html text NOT NULL,
|
|
63
|
-
unless_html text
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
DROP TABLE IF EXISTS pg_temp.nb_02018_fields;
|
|
67
|
-
CREATE TEMP TABLE nb_02018_fields (
|
|
68
|
-
seq bigserial PRIMARY KEY,
|
|
69
|
-
kind text NOT NULL,
|
|
70
|
-
slug text NOT NULL,
|
|
71
|
-
lang text NOT NULL,
|
|
72
|
-
field text NOT NULL CHECK (field IN ('title', 'label', 'excerpt', 'subtitle', 'meta_title', 'meta_description')),
|
|
73
|
-
old_value text NOT NULL,
|
|
74
|
-
new_value text NOT NULL
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
-- Rewrites one fragment in every block and revision snapshot of a post or page, where it is
|
|
78
|
-
-- still present (and, for insertions, where the marker is absent).
|
|
79
|
-
CREATE OR REPLACE FUNCTION pg_temp.nb_02018_fragment(
|
|
80
|
-
p_kind text, p_slug text, p_lang text, p_old text, p_new text, p_unless text)
|
|
81
|
-
RETURNS void
|
|
82
|
-
LANGUAGE plpgsql
|
|
83
|
-
AS $fn$
|
|
84
|
-
DECLARE
|
|
85
|
-
v_old text := pg_temp.nb_02018_json_inner(p_old);
|
|
86
|
-
v_new text := pg_temp.nb_02018_json_inner(p_new);
|
|
87
|
-
v_unless text := CASE WHEN p_unless IS NULL THEN NULL ELSE pg_temp.nb_02018_json_inner(p_unless) END;
|
|
88
|
-
v_parent bigint;
|
|
89
|
-
BEGIN
|
|
90
|
-
IF p_kind = 'post' THEN
|
|
91
|
-
SELECT p.id INTO v_parent FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
92
|
-
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
93
|
-
UPDATE public.blocks SET content = replace(content::text, v_old, v_new)::jsonb, updated_at = now()
|
|
94
|
-
WHERE post_id = v_parent AND position(v_old IN content::text) > 0
|
|
95
|
-
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
96
|
-
UPDATE public.post_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
97
|
-
WHERE post_id = v_parent AND position(v_old IN content::text) > 0
|
|
98
|
-
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
99
|
-
ELSE
|
|
100
|
-
SELECT p.id INTO v_parent FROM public.pages AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
101
|
-
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
102
|
-
UPDATE public.blocks SET content = replace(content::text, v_old, v_new)::jsonb, updated_at = now()
|
|
103
|
-
WHERE page_id = v_parent AND position(v_old IN content::text) > 0
|
|
104
|
-
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
105
|
-
UPDATE public.page_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
106
|
-
WHERE page_id = v_parent AND position(v_old IN content::text) > 0
|
|
107
|
-
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
108
|
-
END IF;
|
|
109
|
-
END
|
|
110
|
-
$fn$;
|
|
111
|
-
|
|
112
|
-
-- Applies every queued edit of one post or page, all or nothing. The edits are replayed in
|
|
113
|
-
-- order against the item's blocks in memory; only if every one of them finds its seeded
|
|
114
|
-
-- fragment are the blocks written back, followed by the same fragments in the revision
|
|
115
|
-
-- snapshots and the queued fields (row + snapshot meta, each only while it still holds the
|
|
116
|
-
-- seeded value). An item an operator has edited, even by re-saving it in the editor (which
|
|
117
|
-
-- re-serialises the HTML), is left untouched as a whole, so it never ends up half old, half
|
|
118
|
-
-- new. A second run finds nothing to replace and is a no-op.
|
|
119
|
-
-- p_needs_agent_guide: the item points readers at the install guide's Option 5
|
|
120
|
-
-- (#ai-agent); it is rewritten only if that guide, in the same language, has the section.
|
|
121
|
-
CREATE OR REPLACE FUNCTION pg_temp.nb_02018_item(
|
|
122
|
-
p_kind text, p_slug text, p_lang text, p_needs_agent_guide boolean)
|
|
123
|
-
RETURNS boolean
|
|
124
|
-
LANGUAGE plpgsql
|
|
125
|
-
AS $fn$
|
|
126
|
-
DECLARE
|
|
127
|
-
v_parent bigint;
|
|
128
|
-
v_ids bigint[];
|
|
129
|
-
v_texts text[];
|
|
130
|
-
v_guide_slug text := CASE WHEN p_lang = 'fr' THEN 'comment-configurer-nextblock' ELSE 'how-to-setup-nextblock' END;
|
|
131
|
-
v_marker text := pg_temp.nb_02018_json_inner('<h2 id=''ai-agent''>');
|
|
132
|
-
e record;
|
|
133
|
-
f record;
|
|
134
|
-
i int;
|
|
135
|
-
v_hit boolean;
|
|
136
|
-
v_total int := 0;
|
|
137
|
-
v_missing int := 0;
|
|
138
|
-
v_old text;
|
|
139
|
-
v_new text;
|
|
140
|
-
v_unless text;
|
|
141
|
-
BEGIN
|
|
142
|
-
IF p_kind = 'post' THEN
|
|
143
|
-
SELECT p.id INTO v_parent FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
144
|
-
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
145
|
-
ELSE
|
|
146
|
-
SELECT p.id INTO v_parent FROM public.pages AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
147
|
-
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
148
|
-
END IF;
|
|
149
|
-
IF v_parent IS NULL THEN
|
|
150
|
-
RETURN false;
|
|
151
|
-
END IF;
|
|
152
|
-
|
|
153
|
-
IF p_needs_agent_guide AND NOT EXISTS (
|
|
154
|
-
SELECT 1 FROM public.blocks AS b
|
|
155
|
-
JOIN public.posts AS p ON p.id = b.post_id
|
|
156
|
-
JOIN public.languages AS l ON l.id = p.language_id
|
|
157
|
-
WHERE p.slug = v_guide_slug AND l.code = p_lang
|
|
158
|
-
AND position(v_marker IN b.content::text) > 0) THEN
|
|
159
|
-
RAISE NOTICE '02018: % % (%) left unchanged: the install guide has no Option 5 section.', p_kind, p_slug, p_lang;
|
|
160
|
-
RETURN false;
|
|
161
|
-
END IF;
|
|
162
|
-
|
|
163
|
-
SELECT array_agg(b.id ORDER BY b.id), array_agg(b.content::text ORDER BY b.id)
|
|
164
|
-
INTO v_ids, v_texts
|
|
165
|
-
FROM public.blocks AS b
|
|
166
|
-
WHERE (p_kind = 'post' AND b.post_id = v_parent) OR (p_kind = 'page' AND b.page_id = v_parent);
|
|
167
|
-
|
|
168
|
-
FOR e IN SELECT * FROM pg_temp.nb_02018_edits
|
|
169
|
-
WHERE kind = p_kind AND slug = p_slug AND lang = p_lang ORDER BY seq LOOP
|
|
170
|
-
v_total := v_total + 1;
|
|
171
|
-
v_hit := false;
|
|
172
|
-
v_old := pg_temp.nb_02018_json_inner(e.old_html);
|
|
173
|
-
v_new := pg_temp.nb_02018_json_inner(e.new_html);
|
|
174
|
-
v_unless := CASE WHEN e.unless_html IS NULL THEN NULL ELSE pg_temp.nb_02018_json_inner(e.unless_html) END;
|
|
175
|
-
FOR i IN 1 .. COALESCE(array_length(v_ids, 1), 0) LOOP
|
|
176
|
-
IF position(v_old IN v_texts[i]) > 0 AND (v_unless IS NULL OR position(v_unless IN v_texts[i]) = 0) THEN
|
|
177
|
-
v_texts[i] := replace(v_texts[i], v_old, v_new);
|
|
178
|
-
v_hit := true;
|
|
179
|
-
END IF;
|
|
180
|
-
END LOOP;
|
|
181
|
-
IF NOT v_hit THEN
|
|
182
|
-
v_missing := v_missing + 1;
|
|
183
|
-
END IF;
|
|
184
|
-
END LOOP;
|
|
185
|
-
|
|
186
|
-
IF v_total = 0 OR v_missing > 0 THEN
|
|
187
|
-
IF v_missing < v_total THEN
|
|
188
|
-
RAISE NOTICE '02018: % % (%) differs from the seeded copy (% of % fragments not found); left unchanged.',
|
|
189
|
-
p_kind, p_slug, p_lang, v_missing, v_total;
|
|
190
|
-
END IF;
|
|
191
|
-
RETURN false;
|
|
192
|
-
END IF;
|
|
193
|
-
|
|
194
|
-
FOR i IN 1 .. array_length(v_ids, 1) LOOP
|
|
195
|
-
UPDATE public.blocks SET content = v_texts[i]::jsonb, updated_at = now()
|
|
196
|
-
WHERE id = v_ids[i] AND content::text IS DISTINCT FROM v_texts[i];
|
|
197
|
-
END LOOP;
|
|
198
|
-
|
|
199
|
-
FOR e IN SELECT * FROM pg_temp.nb_02018_edits
|
|
200
|
-
WHERE kind = p_kind AND slug = p_slug AND lang = p_lang ORDER BY seq LOOP
|
|
201
|
-
v_old := pg_temp.nb_02018_json_inner(e.old_html);
|
|
202
|
-
v_new := pg_temp.nb_02018_json_inner(e.new_html);
|
|
203
|
-
v_unless := CASE WHEN e.unless_html IS NULL THEN NULL ELSE pg_temp.nb_02018_json_inner(e.unless_html) END;
|
|
204
|
-
IF p_kind = 'post' THEN
|
|
205
|
-
UPDATE public.post_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
206
|
-
WHERE post_id = v_parent AND position(v_old IN content::text) > 0
|
|
207
|
-
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
208
|
-
ELSE
|
|
209
|
-
UPDATE public.page_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
210
|
-
WHERE page_id = v_parent AND position(v_old IN content::text) > 0
|
|
211
|
-
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
212
|
-
END IF;
|
|
213
|
-
END LOOP;
|
|
214
|
-
|
|
215
|
-
FOR f IN SELECT * FROM pg_temp.nb_02018_fields
|
|
216
|
-
WHERE kind = p_kind AND slug = p_slug AND lang = p_lang ORDER BY seq LOOP
|
|
217
|
-
EXECUTE format('UPDATE public.%I SET %I = $1, updated_at = now() WHERE id = $2 AND %I = $3',
|
|
218
|
-
CASE WHEN p_kind = 'post' THEN 'posts' ELSE 'pages' END, f.field, f.field)
|
|
219
|
-
USING replace(f.new_value, chr(13), ''), v_parent, f.old_value;
|
|
220
|
-
EXECUTE format('UPDATE public.%I SET content = jsonb_set(content, $1, to_jsonb($2::text))
|
|
221
|
-
WHERE %I = $3 AND revision_type = ''snapshot'' AND content #>> $1 = $4',
|
|
222
|
-
CASE WHEN p_kind = 'post' THEN 'post_revisions' ELSE 'page_revisions' END,
|
|
223
|
-
CASE WHEN p_kind = 'post' THEN 'post_id' ELSE 'page_id' END)
|
|
224
|
-
USING ARRAY['meta', f.field], replace(f.new_value, chr(13), ''), v_parent, f.old_value;
|
|
225
|
-
END LOOP;
|
|
226
|
-
|
|
227
|
-
RETURN true;
|
|
228
|
-
END
|
|
229
|
-
$fn$;
|
|
230
|
-
|
|
231
|
-
-- ========================================================================================
|
|
232
|
-
-- architecture-commerce
|
|
233
|
-
-- ========================================================================================
|
|
234
|
-
|
|
235
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
236
|
-
$o$the hosted CMS, the open-source starter$o$,
|
|
237
|
-
$n$the CMS you deploy, the open-source starter$n$,
|
|
238
|
-
NULL);
|
|
239
|
-
|
|
240
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
241
|
-
$o$The <code>apps/create-nextblock</code> tool mirrors that setup$o$,
|
|
242
|
-
$n$The <code>apps/create-nextblock</code> tool (published on npm as <code>create-nextblock</code>) mirrors that setup$n$,
|
|
243
|
-
NULL);
|
|
244
|
-
|
|
245
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
246
|
-
$o$<li><strong>@nextblock-cms/ecommerce</strong> - The digital store package when activated</li>$o$,
|
|
247
|
-
$n$<li><strong>@nextblock-cms/ecommerce</strong> - The digital store package when activated</li>
|
|
248
|
-
<li><strong>@nextblock-cms/cortex</strong> - Cortex AI: AI inside the editor and the MCP server, when activated</li>$n$,
|
|
249
|
-
$u$@nextblock-cms/cortex$u$);
|
|
250
|
-
|
|
251
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
252
|
-
$o$Run <code>nx graph</code> to see$o$,
|
|
253
|
-
$n$In the monorepo clone, run <code>npx nx graph</code> to see$n$,
|
|
254
|
-
NULL);
|
|
255
|
-
|
|
256
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
257
|
-
$o$the source of truth for all blocks.$o$,
|
|
258
|
-
$n$the source of truth for the built-in blocks.$n$,
|
|
259
|
-
NULL);
|
|
260
|
-
|
|
261
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
262
|
-
$o$checkout forms, and product cards.</p>$o$,
|
|
263
|
-
$n$checkout forms, and product cards. Custom blocks you design in the CMS live in the database and go through the same block renderer.</p>$n$,
|
|
264
|
-
NULL);
|
|
265
|
-
|
|
266
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
267
|
-
$o$The core CMS is open-source under the AGPL license. Store modules remain source-available and turn on with verified licenses. This keeps the core lightweight while unlocking advanced tools when you need them.$o$,
|
|
268
|
-
$n$The core CMS is free and open source under the AGPL. The premium modules, Commerce Pro and Cortex AI, are public AGPL code too, and their features switch on with a license key. This keeps the core lightweight while unlocking advanced tools when you need them. Each module starts with a 30-day free trial, no credit card required.$n$,
|
|
269
|
-
NULL);
|
|
270
|
-
|
|
271
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
272
|
-
$o$you get a complete, working system from day one.</p>$o$,
|
|
273
|
-
$n$you get a complete, working system from day one. A coding agent such as Claude Code or Cursor can also scaffold the project for you, as <a href='/article/how-to-setup-nextblock#ai-agent'>the install guide</a> explains.</p>$n$,
|
|
274
|
-
NULL);
|
|
275
|
-
|
|
276
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
277
|
-
$o$le CMS hébergé, le projet open-source$o$,
|
|
278
|
-
$n$le CMS que vous déployez, le projet open-source$n$,
|
|
279
|
-
NULL);
|
|
280
|
-
|
|
281
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
282
|
-
$o$La commande <code>apps/create-nextblock</code> reprend$o$,
|
|
283
|
-
$n$L'outil <code>apps/create-nextblock</code> (publié sur npm sous le nom <code>create-nextblock</code>) reprend$n$,
|
|
284
|
-
NULL);
|
|
285
|
-
|
|
286
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
287
|
-
$o$<li><strong>@nextblock-cms/ecommerce</strong> - Le module de boutique en ligne une fois activé</li>$o$,
|
|
288
|
-
$n$<li><strong>@nextblock-cms/ecommerce</strong> - Le module de boutique en ligne une fois activé</li>
|
|
289
|
-
<li><strong>@nextblock-cms/cortex</strong> - Cortex AI : l'IA dans l'éditeur et le serveur MCP, une fois activé</li>$n$,
|
|
290
|
-
$u$@nextblock-cms/cortex$u$);
|
|
291
|
-
|
|
292
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
293
|
-
$o$La commande <code>nx graph</code> montre$o$,
|
|
294
|
-
$n$Dans le clone du monorepo, la commande <code>npx nx graph</code> montre$n$,
|
|
295
|
-
NULL);
|
|
296
|
-
|
|
297
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
298
|
-
$o$la source de vérité pour tous les blocs du CMS.$o$,
|
|
299
|
-
$n$la source de vérité pour les blocs intégrés du CMS.$n$,
|
|
300
|
-
NULL);
|
|
301
|
-
|
|
302
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
303
|
-
$o$les listes d'articles et les formulaires de paiement.</p>$o$,
|
|
304
|
-
$n$les listes d'articles et les formulaires de paiement. Les blocs personnalisés conçus dans le CMS sont stockés dans la base de données et passent par le même moteur de rendu.</p>$n$,
|
|
305
|
-
NULL);
|
|
306
|
-
|
|
307
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
308
|
-
$o$des menus flottants, des tableaux$o$,
|
|
309
|
-
$n$des menus flottants, des poignées de glisser-déposer, des tableaux$n$,
|
|
310
|
-
NULL);
|
|
311
|
-
|
|
312
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
313
|
-
$o$Le cœur de NextBlock est open-source sous licence AGPL. Les modules du store s'activent avec une clé de licence valide. Le socle reste léger tout en ouvrant des outils pro quand vous en avez besoin.$o$,
|
|
314
|
-
$n$Le cœur de NextBlock est gratuit et open source sous licence AGPL. Les modules premium, Commerce Pro et Cortex AI, sont eux aussi publiés sous AGPL, et leurs fonctions s'activent avec une clé de licence. Le socle reste léger tout en ouvrant des outils pro quand vous en avez besoin. Chaque module propose un essai gratuit de 30 jours, sans carte de crédit.$n$,
|
|
315
|
-
NULL);
|
|
316
|
-
|
|
317
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
318
|
-
$o$vous profitez d'une base solide et prête à l'emploi.</p>$o$,
|
|
319
|
-
$n$vous profitez d'une base solide et prête à l'emploi. Un agent de code, par exemple Claude Code ou Cursor, peut aussi créer le projet à votre place : le <a href='/article/comment-configurer-nextblock#ai-agent'>guide d'installation</a> explique comment.</p>$n$,
|
|
320
|
-
NULL);
|
|
321
|
-
|
|
322
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
323
|
-
$o$want their catalog and checkout in one place.</p>$o$,
|
|
324
|
-
$n$want their catalog and checkout in one place. NextBlock™ Commerce Pro comes with a 30-day free trial, no credit card required. Start it from <strong>Administration → Packages</strong> in the CMS.</p>$n$,
|
|
325
|
-
NULL);
|
|
326
|
-
|
|
327
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
328
|
-
$o$Live rate sync, price rounding, and market rules make selling worldwide simple.$o$,
|
|
329
|
-
$n$Automatic rate sync, rounding rules, and per-currency prices make selling worldwide simple.$n$,
|
|
330
|
-
NULL);
|
|
331
|
-
|
|
332
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
333
|
-
$o$Set exact prices for specific countries when needed.$o$,
|
|
334
|
-
$n$Set an exact price in any currency you do not auto-sync, instead of the converted one.$n$,
|
|
335
|
-
NULL);
|
|
336
|
-
|
|
337
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
338
|
-
$o$Fallback options ensure buyers always see a valid rate.$o$,
|
|
339
|
-
$n$When no state-specific zone matches, the country-wide zone applies, and checkout offers the cheapest valid rate.$n$,
|
|
340
|
-
NULL);
|
|
341
|
-
|
|
342
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
343
|
-
$o$Commerce is the first premium module on our roadmap. It fits naturally into the larger CMS platform.$o$,
|
|
344
|
-
$n$Commerce Pro was our first premium module, and Cortex AI followed. Both plug into the same CMS.$n$,
|
|
345
|
-
NULL);
|
|
346
|
-
|
|
347
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
348
|
-
$o$leur catalogue et leurs ventes au même endroit.</p>$o$,
|
|
349
|
-
$n$leur catalogue et leurs ventes au même endroit. NextBlock™ Commerce Pro propose un essai gratuit de 30 jours, sans carte de crédit. Lancez-le depuis <strong>Administration → Packages</strong> dans le CMS.</p>$n$,
|
|
350
|
-
NULL);
|
|
351
|
-
|
|
352
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
353
|
-
$o$Articles, commandes, livraison et factures s'intègrent$o$,
|
|
354
|
-
$n$Produits, commandes, livraison et factures s'intègrent$n$,
|
|
355
|
-
NULL);
|
|
356
|
-
|
|
357
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
358
|
-
$o$Taux de change en direct, prix ronds et règles locales facilitent les ventes.$o$,
|
|
359
|
-
$n$Taux de change synchronisés, règles d'arrondi et prix par devise facilitent les ventes.$n$,
|
|
360
|
-
NULL);
|
|
361
|
-
|
|
362
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
363
|
-
$o$Fixez des prix précis pour chaque pays si nécessaire.$o$,
|
|
364
|
-
$n$Fixez un prix précis dans toute devise non synchronisée automatiquement, au lieu du prix converti.$n$,
|
|
365
|
-
NULL);
|
|
366
|
-
|
|
367
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
368
|
-
$o$Un tarif de secours évite les blocages.$o$,
|
|
369
|
-
$n$Sans zone propre à la région, la zone du pays s'applique, et le tunnel d'achat propose le tarif valide le moins cher.$n$,
|
|
370
|
-
NULL);
|
|
371
|
-
|
|
372
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
373
|
-
$o$Le commerce est le premier module officiel de notre feuille de route. Il s'intègre au cœur du CMS.$o$,
|
|
374
|
-
$n$Commerce Pro a été notre premier module premium, puis Cortex AI a suivi. Les deux s'intègrent au cœur du CMS.$n$,
|
|
375
|
-
NULL);
|
|
376
|
-
|
|
377
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
378
|
-
$o$Les factures à imprimer reprennent les couleurs de votre marque.$o$,
|
|
379
|
-
$n$Les factures à imprimer reprennent le logo et les coordonnées de votre entreprise.$n$,
|
|
380
|
-
NULL);
|
|
381
|
-
|
|
382
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
383
|
-
$o$la liste des articles, du suivi des stocks$o$,
|
|
384
|
-
$n$la liste des produits, du suivi des stocks$n$,
|
|
385
|
-
NULL);
|
|
386
|
-
|
|
387
|
-
-- ========================================================================================
|
|
388
|
-
-- cortex-mcp
|
|
389
|
-
-- ========================================================================================
|
|
390
|
-
|
|
391
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
392
|
-
$o$Per-block translation and SEO checks as you type.$o$,
|
|
393
|
-
$n$Linked translations for every page and SEO checks as you type.$n$,
|
|
394
|
-
NULL);
|
|
395
|
-
|
|
396
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
397
|
-
$o$Server Components · edge cached.$o$,
|
|
398
|
-
$n$Server Components · cache cleared on publish.$n$,
|
|
399
|
-
NULL);
|
|
400
|
-
|
|
401
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
402
|
-
$o$renders those records with Server Components and caches the result at the edge.$o$,
|
|
403
|
-
$n$renders those records with Server Components, from a public content cache that clears the moment you publish.$n$,
|
|
404
|
-
NULL);
|
|
405
|
-
|
|
406
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
407
|
-
$o$with an open standard instead of a vendor plugin.$o$,
|
|
408
|
-
$n$over an open standard, no proprietary connector required.$n$,
|
|
409
|
-
NULL);
|
|
410
|
-
|
|
411
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
412
|
-
$o$The CMS is free forever. Cortex AI, which includes the MCP server$o$,
|
|
413
|
-
$n$The CMS is free forever and open source. Cortex AI, which includes the MCP server$n$,
|
|
414
|
-
NULL);
|
|
415
|
-
|
|
416
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
417
|
-
$o$>Nothing ships by accident.<$o$,
|
|
418
|
-
$n$>You stay in control.<$n$,
|
|
419
|
-
NULL);
|
|
420
|
-
|
|
421
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
422
|
-
$o$Every layout the agent writes lands as a draft. An editor reviews it and hits publish.$o$,
|
|
423
|
-
$n$Page rewrites land as Live Drafts, and new pages stay drafts unless you ask to publish. Your MCP client’s approval prompt and the token scope decide what the agent may change.$n$,
|
|
424
|
-
NULL);
|
|
425
|
-
|
|
426
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
427
|
-
$o$Your editors keep a visual CMS, your developers keep a clean Next.js 16 app, and nothing goes live until someone hits publish.$o$,
|
|
428
|
-
$n$Your editors keep a visual CMS, and your developers keep a clean Next.js 16 app. Agent edits to pages, posts, and products are saved as revisions you can restore.$n$,
|
|
429
|
-
NULL);
|
|
430
|
-
|
|
431
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
432
|
-
$o$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$o$,
|
|
433
|
-
$n$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>create_page_layout</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$n$,
|
|
434
|
-
NULL);
|
|
435
|
-
|
|
436
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
437
|
-
$o$5 contract tools · 29 typed tools$o$,
|
|
438
|
-
$n$6 contract tools · 50 typed tools$n$,
|
|
439
|
-
NULL);
|
|
440
|
-
|
|
441
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
442
|
-
$o$>Staged as a Live Draft.<$o$,
|
|
443
|
-
$n$>Rewrites staged as Live Drafts.<$n$,
|
|
444
|
-
NULL);
|
|
445
|
-
|
|
446
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
447
|
-
$o$Nothing goes live until publish$o$,
|
|
448
|
-
$n$Draft or publish, with revisions$n$,
|
|
449
|
-
NULL);
|
|
450
|
-
|
|
451
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
452
|
-
$o$The same 29 typed tools$o$,
|
|
453
|
-
$n$The same 50 typed tools$n$,
|
|
454
|
-
NULL);
|
|
455
|
-
|
|
456
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
457
|
-
$o$>Layouts stage as Live Drafts.<$o$,
|
|
458
|
-
$n$>Page rewrites stage as Live Drafts.<$n$,
|
|
459
|
-
NULL);
|
|
460
|
-
|
|
461
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
462
|
-
$o$Layout tools write drafts, so nothing reaches visitors until an editor publishes it.$o$,
|
|
463
|
-
$n$<code>generate_jsonb_layout</code> stages a Live Draft, and <code>create_page_layout</code> saves new pages as drafts unless told otherwise. Other write tools can publish or edit live content, so keep your MCP client’s tool-approval prompt on for them.$n$,
|
|
464
|
-
NULL);
|
|
465
|
-
|
|
466
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
467
|
-
$o$Five tool names form the public MCP contract.$o$,
|
|
468
|
-
$n$Six tool names form the public MCP contract.$n$,
|
|
469
|
-
NULL);
|
|
470
|
-
|
|
471
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
472
|
-
$o$with columns, primary keys, and read-only flags.</p></div>$o$,
|
|
473
|
-
$n$with columns, primary keys, and read-only flags.</p></div><div class='rounded-3xl border border-slate-200 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-white/5'><div class='flex items-center justify-between gap-3'><code class='rounded-lg bg-violet-50 px-2.5 py-1 text-sm text-violet-700 dark:bg-violet-500/15 dark:text-violet-200'>create_page_layout</code><span class='rounded-full border px-2.5 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] border-amber-300 text-amber-700 dark:border-amber-500/40 dark:text-amber-200'>write</span></div><p class='mt-3 mb-0 text-sm text-slate-600 dark:text-slate-300'>Creates a new page from a slug, a title, and validated blocks in one call. It stays a draft unless you ask to publish it.</p></div>$n$,
|
|
474
|
-
$u$>create_page_layout</code><span$u$);
|
|
475
|
-
|
|
476
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
477
|
-
$o$<div class='rounded-3xl border border-dashed border-slate-300 p-5 dark:border-white/20'>$o$,
|
|
478
|
-
$n$<div class='rounded-3xl border border-dashed border-slate-300 p-5 md:col-span-2 dark:border-white/20'>$n$,
|
|
479
|
-
NULL);
|
|
480
|
-
|
|
481
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
482
|
-
$o$And 24 more.$o$,
|
|
483
|
-
$n$And 44 more.$n$,
|
|
484
|
-
NULL);
|
|
485
|
-
|
|
486
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
487
|
-
$o$Three resources expose the database, block, and custom block schemas.</p>$o$,
|
|
488
|
-
$n$Three resources expose the database, block, and custom block schemas. Four prompts (build-site, build-page, clone-from-url, translate-content) script the common jobs.</p>$n$,
|
|
489
|
-
NULL);
|
|
490
|
-
|
|
491
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
492
|
-
$o$Open <strong>CMS Settings → Cortex AI</strong>, start the 30-day trial with no credit card, and switch on the MCP server access card.$o$,
|
|
493
|
-
$n$Start the 30-day trial, no credit card, from the welcome screen, the dashboard checklist, or <strong>Administration → Packages</strong>. The Cortex AI setup guide comes next. After activating from Packages, click <strong>Cortex AI</strong> in the sidebar to open it.$n$,
|
|
494
|
-
NULL);
|
|
495
|
-
|
|
496
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
497
|
-
$o$Pick the scope you need. Read-only is enough for planning and audits.$o$,
|
|
498
|
-
$n$In the guide, choose <strong>Use my own AI app (MCP)</strong>, then <strong>Enable MCP & continue</strong>. That switches the server on and mints a read + write token. For a read-only token, enough for planning and audits, untick <strong>Allow writes</strong> when you create one on the <strong>MCP server access</strong> card.$n$,
|
|
499
|
-
NULL);
|
|
500
|
-
|
|
501
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
502
|
-
$o$The card renders one snippet each for Claude Code, Cursor, VS Code, and Claude Desktop.$o$,
|
|
503
|
-
$n$A tab per client holds values ready to copy: Claude Code (terminal), Claude Code in VS Code, Claude Desktop, Cursor, and VS Code (Copilot).$n$,
|
|
504
|
-
NULL);
|
|
505
|
-
|
|
506
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
507
|
-
$o$<h3>Localhost Configuration Without a Token</h3>$o$,
|
|
508
|
-
$n$<div class='rounded-3xl border border-emerald-200 bg-emerald-50/80 p-6 my-8 dark:border-emerald-500/20 dark:bg-emerald-500/10'><p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-emerald-700 dark:text-emerald-200'>Starting from nothing?</p><p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Ask your coding agent to build a site with NextBlock. In Claude Code, first add the plugin that teaches it the steps: <code>/plugin marketplace add nextblock-cms/nextblock</code>, then <code>/plugin install nextblock@nextblock</code>. The agent runs <code>npx create-nextblock@latest my-site --non-interactive</code>, which writes <code>.mcp.json</code> and <code>.cursor/mcp.json</code> with its token. You only create your admin account and start the free 30-day Cortex AI trial in the browser. Then reopen the agent in the project folder so it loads the connection. <a href='/article/how-to-setup-nextblock#ai-agent'>See the agent install steps</a>.</p></div><h3>Localhost Configuration Without a Token</h3>$n$,
|
|
509
|
-
$u$Starting from nothing?$u$);
|
|
510
|
-
|
|
511
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
512
|
-
$o$turn on <strong>Trust localhost without a token</strong> in the same settings card.$o$,
|
|
513
|
-
$n$keep <strong>Trust localhost without a token</strong> checked on the <strong>MCP server access</strong> card (the default).$n$,
|
|
514
|
-
NULL);
|
|
515
|
-
|
|
516
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
517
|
-
$o$Standalone installs run on port 3000, and the monorepo dev server runs on port 4200.$o$,
|
|
518
|
-
$n$In a project scaffolded with create-nextblock, <code>npm run dev</code> serves port 3000. In the monorepo clone, <code>npm run dev</code> (it runs <code>nx serve nextblock</code>) serves port 4200. The local Docker stack also answers on port 3000 by default. It runs a production build, so localhost trust does not apply and every client needs a token. The agent install already writes one into <code>.mcp.json</code> and <code>.cursor/mcp.json</code>.$n$,
|
|
519
|
-
NULL);
|
|
520
|
-
|
|
521
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
522
|
-
$o$The agent calls the schema tool, then the layout tool, and your CMS shows a new Live Draft ready for review.$o$,
|
|
523
|
-
$n$The agent reads the schema, then creates the page as a draft with <code>create_page_layout</code>, ready for review in your CMS.$n$,
|
|
524
|
-
NULL);
|
|
525
|
-
|
|
526
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
527
|
-
$o$not HTML strings and not source files.$o$,
|
|
528
|
-
$n$not source files.$n$,
|
|
529
|
-
NULL);
|
|
530
|
-
|
|
531
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
532
|
-
$o$Traduction bloc par bloc et vérifications SEO pendant que vous écrivez.$o$,
|
|
533
|
-
$n$Traductions liées pour chaque page et vérifications SEO pendant que vous écrivez.$n$,
|
|
534
|
-
NULL);
|
|
535
|
-
|
|
536
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
537
|
-
$o$Server Components · cache en périphérie.$o$,
|
|
538
|
-
$n$Server Components · cache vidé à chaque publication.$n$,
|
|
539
|
-
NULL);
|
|
540
|
-
|
|
541
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
542
|
-
$o$rend ces enregistrements avec des Server Components et met le résultat en cache en périphérie.$o$,
|
|
543
|
-
$n$rend ces enregistrements avec des Server Components, à partir d'un cache de contenu public vidé à chaque publication.$n$,
|
|
544
|
-
NULL);
|
|
545
|
-
|
|
546
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
547
|
-
$o$avec un standard ouvert plutôt qu'un plugin propriétaire.$o$,
|
|
548
|
-
$n$avec un standard ouvert, sans connecteur propriétaire.$n$,
|
|
549
|
-
NULL);
|
|
550
|
-
|
|
551
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
552
|
-
$o$Le CMS est gratuit pour toujours. Cortex AI, qui inclut le serveur MCP$o$,
|
|
553
|
-
$n$Le CMS est gratuit pour toujours et open source. Cortex AI, qui inclut le serveur MCP$n$,
|
|
554
|
-
NULL);
|
|
555
|
-
|
|
556
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
557
|
-
$o$>Rien ne part par accident.<$o$,
|
|
558
|
-
$n$>Vous gardez la main.<$n$,
|
|
559
|
-
NULL);
|
|
560
|
-
|
|
561
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
562
|
-
$o$Chaque mise en page écrite par l'agent arrive sous forme de brouillon. Un éditeur la révise et clique sur Publier.$o$,
|
|
563
|
-
$n$Les réécritures de page arrivent en brouillon en direct, et les nouvelles pages restent en brouillon sauf si vous demandez de les publier. L'invite d'approbation de votre client MCP et la portée du jeton décident de ce que l'agent peut modifier.$n$,
|
|
564
|
-
NULL);
|
|
565
|
-
|
|
566
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
567
|
-
$o$Vos éditeurs gardent un CMS visuel, vos développeurs gardent une application Next.js 16 propre, et rien n'est mis en ligne tant que quelqu'un ne clique pas sur Publier.$o$,
|
|
568
|
-
$n$Vos éditeurs gardent un CMS visuel, et vos développeurs gardent une application Next.js 16 propre. Les modifications de l'agent sur les pages, les articles et les produits sont enregistrées comme des révisions que vous pouvez restaurer.$n$,
|
|
569
|
-
NULL);
|
|
570
|
-
|
|
571
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
572
|
-
$o$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$o$,
|
|
573
|
-
$n$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>create_page_layout</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$n$,
|
|
574
|
-
NULL);
|
|
575
|
-
|
|
576
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
577
|
-
$o$5 outils de contrat · 29 outils typés$o$,
|
|
578
|
-
$n$6 outils de contrat · 50 outils typés$n$,
|
|
579
|
-
NULL);
|
|
580
|
-
|
|
581
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
582
|
-
$o$>Mis en attente comme brouillon en direct.<$o$,
|
|
583
|
-
$n$>Réécritures mises en attente comme brouillon en direct.<$n$,
|
|
584
|
-
NULL);
|
|
585
|
-
|
|
586
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
587
|
-
$o$Rien n'est en ligne avant la publication$o$,
|
|
588
|
-
$n$Brouillon ou publication, avec révisions$n$,
|
|
589
|
-
NULL);
|
|
590
|
-
|
|
591
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
592
|
-
$o$Les mêmes 29 outils typés$o$,
|
|
593
|
-
$n$Les mêmes 50 outils typés$n$,
|
|
594
|
-
NULL);
|
|
595
|
-
|
|
596
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
597
|
-
$o$>Les mises en page attendent en brouillon en direct.<$o$,
|
|
598
|
-
$n$>Les réécritures de page attendent en brouillon en direct.<$n$,
|
|
599
|
-
NULL);
|
|
600
|
-
|
|
601
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
602
|
-
$o$Les outils de mise en page écrivent des brouillons : rien n'atteint les visiteurs tant qu'un éditeur ne publie pas.$o$,
|
|
603
|
-
$n$<code>generate_jsonb_layout</code> prépare un brouillon en direct, et <code>create_page_layout</code> enregistre les nouvelles pages en brouillon sauf indication contraire. D'autres outils d'écriture peuvent publier ou modifier du contenu en ligne : gardez activée l'invite d'approbation des outils de votre client MCP.$n$,
|
|
604
|
-
NULL);
|
|
605
|
-
|
|
606
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
607
|
-
$o$Cinq noms d'outils forment le contrat MCP public.$o$,
|
|
608
|
-
$n$Six noms d'outils forment le contrat MCP public.$n$,
|
|
609
|
-
NULL);
|
|
610
|
-
|
|
611
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
612
|
-
$o$avec colonnes, clés primaires et indicateurs de lecture seule.</p></div>$o$,
|
|
613
|
-
$n$avec colonnes, clés primaires et indicateurs de lecture seule.</p></div><div class='rounded-3xl border border-slate-200 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-white/5'><div class='flex items-center justify-between gap-3'><code class='rounded-lg bg-violet-50 px-2.5 py-1 text-sm text-violet-700 dark:bg-violet-500/15 dark:text-violet-200'>create_page_layout</code><span class='rounded-full border px-2.5 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] border-amber-300 text-amber-700 dark:border-amber-500/40 dark:text-amber-200'>écriture</span></div><p class='mt-3 mb-0 text-sm text-slate-600 dark:text-slate-300'>Crée une nouvelle page à partir d'un slug, d'un titre et de blocs validés, en un seul appel. Elle reste en brouillon, sauf si vous demandez de la publier.</p></div>$n$,
|
|
614
|
-
$u$>create_page_layout</code><span$u$);
|
|
615
|
-
|
|
616
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
617
|
-
$o$<div class='rounded-3xl border border-dashed border-slate-300 p-5 dark:border-white/20'>$o$,
|
|
618
|
-
$n$<div class='rounded-3xl border border-dashed border-slate-300 p-5 md:col-span-2 dark:border-white/20'>$n$,
|
|
619
|
-
NULL);
|
|
620
|
-
|
|
621
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
622
|
-
$o$Et 24 autres.$o$,
|
|
623
|
-
$n$Et 44 autres.$n$,
|
|
624
|
-
NULL);
|
|
625
|
-
|
|
626
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
627
|
-
$o$Trois ressources exposent les schémas de la base de données, des blocs et des blocs personnalisés.</p>$o$,
|
|
628
|
-
$n$Trois ressources exposent les schémas de la base de données, des blocs et des blocs personnalisés. Quatre prompts (build-site, build-page, clone-from-url, translate-content) automatisent les tâches courantes.</p>$n$,
|
|
629
|
-
NULL);
|
|
630
|
-
|
|
631
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
632
|
-
$o$Ouvrez <strong>Réglages du CMS → Cortex AI</strong>, lancez l'essai de 30 jours sans carte de crédit et activez la carte d'accès au serveur MCP.$o$,
|
|
633
|
-
$n$Lancez l'essai de 30 jours, sans carte de crédit, depuis l'écran d'accueil, la checklist de démarrage du tableau de bord ou <strong>Administration → Packages</strong>. Le guide de configuration de Cortex AI s'affiche ensuite. Après une activation depuis Packages, cliquez sur <strong>Cortex AI</strong> dans la barre latérale pour l'ouvrir.$n$,
|
|
634
|
-
NULL);
|
|
635
|
-
|
|
636
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
637
|
-
$o$Choisissez la portée dont vous avez besoin. La lecture seule suffit pour la planification et les audits.$o$,
|
|
638
|
-
$n$Dans le guide, choisissez <strong>Use my own AI app (MCP)</strong>, puis <strong>Enable MCP & continue</strong>. Le serveur s'active et un jeton lecture + écriture est créé. Pour un jeton en lecture seule, suffisant pour la planification et les audits, décochez <strong>Allow writes</strong> en le créant dans la carte <strong>MCP server access</strong>.$n$,
|
|
639
|
-
NULL);
|
|
640
|
-
|
|
641
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
642
|
-
$o$La carte affiche un extrait pour chacun : Claude Code, Cursor, VS Code et Claude Desktop.$o$,
|
|
643
|
-
$n$Un onglet par client offre des valeurs prêtes à copier : Claude Code (terminal), Claude Code dans VS Code, Claude Desktop, Cursor et VS Code (Copilot).$n$,
|
|
644
|
-
NULL);
|
|
645
|
-
|
|
646
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
647
|
-
$o$<h3>Configuration localhost sans jeton</h3>$o$,
|
|
648
|
-
$n$<div class='rounded-3xl border border-emerald-200 bg-emerald-50/80 p-6 my-8 dark:border-emerald-500/20 dark:bg-emerald-500/10'><p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-emerald-700 dark:text-emerald-200'>Vous partez de zéro ?</p><p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Demandez à votre agent de code de créer un site avec NextBlock. Dans Claude Code, ajoutez d'abord le plugin qui lui apprend la marche à suivre : <code>/plugin marketplace add nextblock-cms/nextblock</code>, puis <code>/plugin install nextblock@nextblock</code>. L'agent lance <code>npx create-nextblock@latest mon-site --non-interactive</code>, qui écrit <code>.mcp.json</code> et <code>.cursor/mcp.json</code> avec son jeton. Il ne vous reste qu'à créer votre compte administrateur et à lancer l'essai gratuit de 30 jours de Cortex AI dans le navigateur. Rouvrez ensuite l'agent dans le dossier du projet pour qu'il charge la connexion. <a href='/article/comment-configurer-nextblock#ai-agent'>Voir les étapes de l'installation par agent</a>.</p></div><h3>Configuration localhost sans jeton</h3>$n$,
|
|
649
|
-
$u$Vous partez de zéro ?$u$);
|
|
650
|
-
|
|
651
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
652
|
-
$o$activez <strong>Faire confiance à localhost sans jeton</strong> dans la même carte de réglages.$o$,
|
|
653
|
-
$n$laissez cochée l'option <strong>Trust localhost without a token</strong> (faire confiance à localhost sans jeton), activée par défaut dans la carte <strong>MCP server access</strong>.$n$,
|
|
654
|
-
NULL);
|
|
655
|
-
|
|
656
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
657
|
-
$o$Les installations autonomes tournent sur le port 3000, et le serveur de développement du monorepo sur le port 4200.$o$,
|
|
658
|
-
$n$Dans un projet créé avec create-nextblock, <code>npm run dev</code> utilise le port 3000. Dans le clone du monorepo, <code>npm run dev</code> (qui lance <code>nx serve nextblock</code>) utilise le port 4200. La pile Docker locale répond aussi sur le port 3000 par défaut. Elle exécute un build de production : la confiance localhost ne s'y applique pas, et chaque client doit fournir un jeton. L'installation par agent en écrit déjà un dans <code>.mcp.json</code> et <code>.cursor/mcp.json</code>.$n$,
|
|
659
|
-
NULL);
|
|
660
|
-
|
|
661
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
662
|
-
$o$L'agent appelle l'outil de schéma, puis l'outil de mise en page, et votre CMS affiche un nouveau brouillon en direct prêt pour la révision.$o$,
|
|
663
|
-
$n$L'agent lit le schéma, puis crée la page en brouillon avec <code>create_page_layout</code>, prête à être relue dans votre CMS.$n$,
|
|
664
|
-
NULL);
|
|
665
|
-
|
|
666
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
667
|
-
$o$pas des chaînes HTML ni des fichiers source.$o$,
|
|
668
|
-
$n$pas des fichiers source.$n$,
|
|
669
|
-
NULL);
|
|
670
|
-
|
|
671
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
672
|
-
$o$>Model routing</p>$o$,
|
|
673
|
-
$n$>Model choice</p>$n$,
|
|
674
|
-
NULL);
|
|
675
|
-
|
|
676
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
677
|
-
$o$Route your prompts through OpenRouter or your own provider to balance speed and price.$o$,
|
|
678
|
-
$n$Plug in your own OpenRouter key and pick one model for the whole site: free models with automatic fallback, or a paid model you choose.$n$,
|
|
679
|
-
NULL);
|
|
680
|
-
|
|
681
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
682
|
-
$o$<h2>Model Routing and Cost Control</h2>$o$,
|
|
683
|
-
$n$<h2>Model Choice and Cost Control</h2>$n$,
|
|
684
|
-
NULL);
|
|
685
|
-
|
|
686
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
687
|
-
$o$Cortex AI gives you full control over your models. You can pick fast models for quick drafts and stronger models for technical articles. You manage your API keys on the server, so your writers can focus on good content.$o$,
|
|
688
|
-
$n$Cortex AI runs on OpenRouter, and you pick one model for the whole site in the Cortex AI settings. Free models are the default, with automatic fallback when one is busy. They still need an OpenRouter key, but a free OpenRouter account is enough. To pick a paid model, save your key in the CMS. You manage that key on the server, so your writers can focus on good content.$n$,
|
|
689
|
-
NULL);
|
|
690
|
-
|
|
691
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
692
|
-
$o$<li>Use quick models for rewrites, titles, and summaries.</li>$o$,
|
|
693
|
-
$n$<li>Start on free models at no model cost.</li>$n$,
|
|
694
|
-
NULL);
|
|
695
|
-
|
|
696
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
697
|
-
$o$<li>Use top models for long guides and difficult translations.</li>$o$,
|
|
698
|
-
$n$<li>Switch the site to a stronger paid model whenever you need more quality.</li>$n$,
|
|
699
|
-
NULL);
|
|
700
|
-
|
|
701
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
702
|
-
$o$<li>Keep provider keys safe in your private server settings.</li>$o$,
|
|
703
|
-
$n$<li>Keep your OpenRouter key encrypted in the CMS settings.</li>$n$,
|
|
704
|
-
NULL);
|
|
705
|
-
|
|
706
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
707
|
-
$o$<p>Cortex AI turns your CMS into a faster creative workshop.$o$,
|
|
708
|
-
$n$<h2>Two Ways to Use Cortex AI</h2>
|
|
709
|
-
<p>Cortex AI works in two places. <strong>AI inside the editor</strong> drafts, rewrites, and translates blocks with your own OpenRouter key, free models included. <strong>The MCP server</strong> lets your own AI app, such as Claude Code or Cursor, build pages on the plan you already pay for. <a href='/article/cortex-ai-mcp-connection-guide'>Connect your AI app over MCP</a>.</p>
|
|
710
|
-
<p>The NextBlock CMS is free and open source under the AGPL. Both surfaces are part of Cortex AI, which starts with a 30-day free trial and needs no credit card.</p>
|
|
711
|
-
|
|
712
|
-
<p>Cortex AI turns your CMS into a faster creative workshop.$n$,
|
|
713
|
-
$u$<h2>Two Ways to Use Cortex AI</h2>$u$);
|
|
714
|
-
|
|
715
|
-
-- ========================================================================================
|
|
716
|
-
-- home-articles
|
|
717
|
-
-- ========================================================================================
|
|
718
|
-
|
|
719
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
720
|
-
$o$then start the free Cortex AI trial in CMS Settings.$o$,
|
|
721
|
-
$n$then start the free Cortex AI trial from the welcome screen or Administration → Packages.$n$,
|
|
722
|
-
NULL);
|
|
723
|
-
|
|
724
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
725
|
-
$o$Ask for a landing page. The agent calls generate_jsonb_layout and the result lands as a Live Draft made of validated blocks.$o$,
|
|
726
|
-
$n$Ask for a new page. The agent calls create_page_layout and the page is saved as a draft made of validated blocks.$n$,
|
|
727
|
-
NULL);
|
|
728
|
-
|
|
729
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
730
|
-
$o$One click deploys to Vercel, and you are prompting your own site in ten minutes.$o$,
|
|
731
|
-
$n$One click deploys to Vercel, and you are prompting your own site in ten minutes. You can also let Claude Code, Cursor, or Codex build it for you.$n$,
|
|
732
|
-
$u$let Claude Code, Cursor, or Codex build it$u$);
|
|
733
|
-
|
|
734
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
735
|
-
$o$Per-block translation and SEO graded as you type.$o$,
|
|
736
|
-
$n$Linked translations for every page and SEO graded as you type.$n$,
|
|
737
|
-
NULL);
|
|
738
|
-
|
|
739
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
740
|
-
$o$>Cortex AI runs on the Claude, ChatGPT, Cursor, or Gemini subscription you already pay for. The license$o$,
|
|
741
|
-
$n$>Over MCP, Cortex AI runs on the Claude, ChatGPT, Cursor, or Gemini subscription you already pay for. Inside the editor, it uses your own OpenRouter key, free models included. The license$n$,
|
|
742
|
-
NULL);
|
|
743
|
-
|
|
744
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
745
|
-
$o$mx-auto mb-10'>Three steps take you from a fresh deploy to published pages, in about ten minutes.</p>$o$,
|
|
746
|
-
$n$mx-auto mb-4'>Three steps take you from a fresh deploy to published pages, in about ten minutes.</p><p class='text-base text-slate-400 text-center max-w-2xl mx-auto mb-10'>Rather let an agent do the install? Ask Claude Code or Cursor to build your site with NextBlock. The agent runs <code class='rounded bg-white/10 px-1.5 py-0.5 font-mono text-xs text-cyan-200'>npx create-nextblock@latest my-site --non-interactive</code>, which starts the site on Docker by default and writes the MCP config the agent needs. You create your admin account and start the free Cortex AI trial in the browser, then the agent builds your pages over MCP. <a href='/article/how-to-setup-nextblock#ai-agent' class='font-semibold text-cyan-300 underline hover:text-white'>Read the agent install guide</a>.</p>$n$,
|
|
747
|
-
NULL);
|
|
748
|
-
|
|
749
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
750
|
-
$o$Slash commands, drag and drop, and inline AI on every block.$o$,
|
|
751
|
-
$n$Slash commands, drag and drop, and inline Cortex AI in every text block.$n$,
|
|
752
|
-
NULL);
|
|
753
|
-
|
|
754
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
755
|
-
$o$Server Components, ISR, and edge caching out of the box.$o$,
|
|
756
|
-
$n$Server Components, a public content cache that clears the moment you publish, and long-lived CDN caching for images.$n$,
|
|
757
|
-
NULL);
|
|
758
|
-
|
|
759
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
760
|
-
$o$Real-time FX rates, rounding modes$o$,
|
|
761
|
-
$n$Daily FX rate sync, rounding modes$n$,
|
|
762
|
-
NULL);
|
|
763
|
-
|
|
764
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
765
|
-
$o$The license buys the connection, never the tokens, and nothing goes live until an editor publishes it.$o$,
|
|
766
|
-
$n$The license buys the connection, never the tokens. A read-only MCP token never even sees the write tools, and page edits are saved as revisions you can restore.$n$,
|
|
767
|
-
NULL);
|
|
768
|
-
|
|
769
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
770
|
-
$o$A community marketplace gives developers room to publish$o$,
|
|
771
|
-
$n$A planned community marketplace will give developers room to publish$n$,
|
|
772
|
-
NULL);
|
|
773
|
-
|
|
774
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
775
|
-
$o$puis lancez l'essai gratuit de Cortex AI dans les réglages du CMS.$o$,
|
|
776
|
-
$n$puis lancez l'essai gratuit de Cortex AI depuis l'écran d'accueil ou Administration → Packages.$n$,
|
|
777
|
-
NULL);
|
|
778
|
-
|
|
779
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
780
|
-
$o$Demandez une page d'accueil. L'agent appelle generate_jsonb_layout et le résultat arrive sous forme de brouillon en direct composé de blocs validés.$o$,
|
|
781
|
-
$n$Demandez une nouvelle page. L'agent appelle create_page_layout et la page est enregistrée en brouillon, composée de blocs validés.$n$,
|
|
782
|
-
NULL);
|
|
783
|
-
|
|
784
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
785
|
-
$o$Un clic déploie sur Vercel, et vous promptez votre propre site en dix minutes.$o$,
|
|
786
|
-
$n$Un clic déploie sur Vercel, et vous promptez votre propre site en dix minutes. Vous pouvez aussi laisser Claude Code, Cursor ou Codex le bâtir pour vous.$n$,
|
|
787
|
-
$u$laisser Claude Code, Cursor ou Codex le bâtir$u$);
|
|
788
|
-
|
|
789
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
790
|
-
$o$Traduction bloc par bloc et SEO noté pendant que vous écrivez.$o$,
|
|
791
|
-
$n$Traductions liées pour chaque page et SEO noté pendant que vous écrivez.$n$,
|
|
792
|
-
NULL);
|
|
793
|
-
|
|
794
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
795
|
-
$o$>Cortex AI fonctionne avec l'abonnement Claude, ChatGPT, Cursor ou Gemini que vous payez déjà. La licence$o$,
|
|
796
|
-
$n$>Via MCP, Cortex AI fonctionne avec l'abonnement Claude, ChatGPT, Cursor ou Gemini que vous payez déjà. Dans l'éditeur, l'IA utilise votre propre clé OpenRouter, modèles gratuits compris. La licence$n$,
|
|
797
|
-
NULL);
|
|
798
|
-
|
|
799
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
800
|
-
$o$mx-auto mb-10'>Trois étapes vous mènent d'un déploiement neuf à des pages publiées, en une dizaine de minutes.</p>$o$,
|
|
801
|
-
$n$mx-auto mb-4'>Trois étapes vous mènent d'un déploiement neuf à des pages publiées, en une dizaine de minutes.</p><p class='text-base text-slate-400 text-center max-w-2xl mx-auto mb-10'>Vous préférez confier l'installation à un agent ? Demandez à Claude Code ou à Cursor de créer votre site avec NextBlock. L'agent lance <code class='rounded bg-white/10 px-1.5 py-0.5 font-mono text-xs text-cyan-200'>npx create-nextblock@latest mon-site --non-interactive</code>, qui démarre le site sur Docker par défaut et écrit la configuration MCP dont l'agent a besoin. Vous créez votre compte administrateur et lancez l'essai gratuit de Cortex AI dans le navigateur, puis l'agent bâtit vos pages via MCP. <a href='/article/comment-configurer-nextblock#ai-agent' class='font-semibold text-cyan-300 underline hover:text-white'>Lire le guide d'installation par agent</a>.</p>$n$,
|
|
802
|
-
NULL);
|
|
803
|
-
|
|
804
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
805
|
-
$o$Commandes slash, glisser-déposer et IA intégrée sur chaque bloc.$o$,
|
|
806
|
-
$n$Commandes slash, glisser-déposer et Cortex AI directement dans chaque bloc de texte.$n$,
|
|
807
|
-
NULL);
|
|
808
|
-
|
|
809
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
810
|
-
$o$Server Components, ISR et cache en périphérie, prêts à l'emploi.$o$,
|
|
811
|
-
$n$Server Components, cache de contenu public vidé à chaque publication et cache CDN longue durée pour les images.$n$,
|
|
812
|
-
NULL);
|
|
813
|
-
|
|
814
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
815
|
-
$o$https://nextblock.dev/product/nextblock-commerce-pro-commerce-license$o$,
|
|
816
|
-
$n$https://nextblock.dev/product/nextblock-commerce-pro-commerce-license-fr$n$,
|
|
817
|
-
$u$commerce-license-fr$u$);
|
|
818
|
-
|
|
819
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
820
|
-
$o$Taux de change en temps réel, modes d'arrondi$o$,
|
|
821
|
-
$n$Taux de change synchronisés chaque jour, modes d'arrondi$n$,
|
|
822
|
-
NULL);
|
|
823
|
-
|
|
824
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
825
|
-
$o$La licence achète la connexion, jamais les jetons, et rien n'est mis en ligne tant qu'un éditeur ne l'a pas publié.$o$,
|
|
826
|
-
$n$La licence achète la connexion, jamais les jetons. Un jeton MCP en lecture seule ne voit même pas les outils d'écriture, et les modifications de pages sont enregistrées sous forme de révisions que vous pouvez restaurer.$n$,
|
|
827
|
-
NULL);
|
|
828
|
-
|
|
829
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
830
|
-
$o$alt='Tableau de roadmap montrant la direction de l'ecosysteme NextBlock™ et des modules premium'$o$,
|
|
831
|
-
$n$alt='Feuille de route montrant la direction de l’écosystème NextBlock™ et des modules premium'$n$,
|
|
832
|
-
NULL);
|
|
833
|
-
|
|
834
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
835
|
-
$o$Un espace partagé permet aux développeurs$o$,
|
|
836
|
-
$n$Un futur espace partagé permettra aux développeurs$n$,
|
|
837
|
-
NULL);
|
|
838
|
-
|
|
839
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'en',
|
|
840
|
-
$o$alt='Developer working with the Nextblock stack'$o$,
|
|
841
|
-
$n$alt='Developer working with the NextBlock stack'$n$,
|
|
842
|
-
NULL);
|
|
843
|
-
|
|
844
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'en',
|
|
845
|
-
$o$Walkthroughs for one-click Vercel deploys, local Docker environments, and custom cloud stacks.$o$,
|
|
846
|
-
$n$Walkthroughs for a one-click Vercel deploy, the npm create nextblock CLI (local Docker, or your own Supabase project with optional Cloudflare R2), and a git clone. You can also let Claude Code, Cursor, or Codex install NextBlock and build the site for you.$n$,
|
|
847
|
-
NULL);
|
|
848
|
-
|
|
849
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
850
|
-
$o$Cortex AI offre un essai de 30 jours sans carte bancaire.$o$,
|
|
851
|
-
$n$Cortex AI offre un essai gratuit de 30 jours, sans carte de crédit.$n$,
|
|
852
|
-
NULL);
|
|
853
|
-
|
|
854
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
855
|
-
$o$Le journal Nextblock$o$,
|
|
856
|
-
$n$Le journal NextBlock$n$,
|
|
857
|
-
NULL);
|
|
858
|
-
|
|
859
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
860
|
-
$o$alt='Développeur travaillant avec la stack Nextblock'$o$,
|
|
861
|
-
$n$alt='Développeur travaillant avec la stack NextBlock'$n$,
|
|
862
|
-
NULL);
|
|
863
|
-
|
|
864
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
865
|
-
$o$Des guides pas à pas pour un déploiement Vercel en un clic, un Docker local ou votre propre cloud.$o$,
|
|
866
|
-
$n$Des guides pas à pas pour un déploiement Vercel en un clic, le CLI npm create nextblock (Docker local, ou votre propre projet Supabase avec Cloudflare R2 facultatif) et un clone du dépôt. Vous pouvez aussi laisser Claude Code, Cursor ou Codex installer NextBlock et bâtir le site pour vous.$n$,
|
|
867
|
-
NULL);
|
|
868
|
-
|
|
869
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
870
|
-
$o$href='/article/cortex-ai-mcp-connection-guide'$o$,
|
|
871
|
-
$n$href='/article/guide-connexion-mcp-cortex-ai'$n$,
|
|
872
|
-
NULL);
|
|
873
|
-
|
|
874
|
-
-- ========================================================================================
|
|
875
|
-
-- install-guide
|
|
876
|
-
-- ========================================================================================
|
|
877
|
-
|
|
878
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
879
|
-
$o$Below are four ways to get running, <strong>ordered from the simplest to the most hands-on</strong>: the first is a single click, the last is the full source for people who want to help build NextBlock.$o$,
|
|
880
|
-
$n$Below are five ways to get running. The first four are <strong>ordered from the simplest to the most hands-on</strong>: the first is a single click, the fourth is the full source for people who want to help build NextBlock. The fifth hands the whole job to the AI coding agent you already use.$n$,
|
|
881
|
-
NULL);
|
|
882
|
-
|
|
883
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
884
|
-
$o$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → Supabase + R2</h2>$o$,
|
|
885
|
-
$n$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → your own Supabase</h2>$n$,
|
|
886
|
-
NULL);
|
|
887
|
-
|
|
888
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
889
|
-
$o$Scaffold a standalone app on your own managed Supabase project and Cloudflare R2, ready to deploy anywhere.$o$,
|
|
890
|
-
$n$Scaffold a standalone app on your own managed Supabase project (Cloudflare R2 optional), ready to deploy anywhere.$n$,
|
|
891
|
-
NULL);
|
|
892
|
-
|
|
893
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
894
|
-
$o$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Run the complete monorepo — the CMS, every package, and the docs. For people who want to help build NextBlock (Docker works here too).</p>$o$,
|
|
895
|
-
$n$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Run the complete monorepo — the CMS, every package, and the docs. For people who want to help build NextBlock (Docker works here too).</p>
|
|
896
|
-
</a>
|
|
897
|
-
<a href='#ai-agent' class='block rounded-[1.75rem] border border-rose-200 bg-rose-50/70 p-6 no-underline transition-shadow hover:shadow-lg md:col-span-2 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
898
|
-
<div class='flex items-center justify-between mb-4'>
|
|
899
|
-
<span class='flex h-9 w-9 items-center justify-center rounded-full bg-rose-600 text-sm font-bold text-white'>5</span>
|
|
900
|
-
<span class='rounded-full border border-rose-300 px-3 py-1 text-[0.65rem] font-semibold uppercase tracking-[0.2em] text-rose-700 dark:border-rose-500/20 dark:text-rose-200'>New</span>
|
|
901
|
-
</div>
|
|
902
|
-
<p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Hands-off · your AI coding agent</p>
|
|
903
|
-
<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>Ask your coding agent to build it</h2>
|
|
904
|
-
<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Ask Claude Code, Cursor, or Codex for a website. It installs NextBlock, you create your admin in the browser, and it builds the pages over MCP.</p>$n$,
|
|
905
|
-
$u$<a href='#ai-agent' class=$u$);
|
|
906
|
-
|
|
907
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
908
|
-
$o$Most people should start with <a href='#one-click-vercel'>Vercel</a>.</p>$o$,
|
|
909
|
-
$n$Most people should start with <a href='#one-click-vercel'>Vercel</a>. Already working with an AI coding agent? Jump to <a href='#ai-agent'>Option 5</a>.</p>$n$,
|
|
910
|
-
NULL);
|
|
911
|
-
|
|
912
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
913
|
-
$o$It is confirmed instantly — no verification email — and you land in the CMS dashboard.</li>$o$,
|
|
914
|
-
$n$It is confirmed instantly — no verification email — and you land on a welcome screen that offers the free 30-day Cortex AI trial. Choose <em>Not now, take me to my CMS</em> to go straight to the dashboard.</li>$n$,
|
|
915
|
-
NULL);
|
|
916
|
-
|
|
917
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
918
|
-
$o$the only thing left is creating your administrator (confirmed instantly, no email required). You land in the CMS dashboard.</li>$o$,
|
|
919
|
-
$n$the only thing left is creating your administrator (confirmed instantly, no email required). You then land on the same welcome screen and its Cortex AI trial offer.</li>$n$,
|
|
920
|
-
NULL);
|
|
921
|
-
|
|
922
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
923
|
-
$o$Docker mode is offered only in the interactive prompt — don’t pass <code>--yes</code>, which forces the managed-cloud path below.$o$,
|
|
924
|
-
$n$Don’t pass <code>--yes</code> here: it skips the prompt and takes the managed-cloud path below. The agent-oriented <code>--non-interactive</code> flag in <a href='#ai-agent'>Option 5</a> is different: it boots this Docker stack by default.$n$,
|
|
925
|
-
NULL);
|
|
926
|
-
|
|
927
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
928
|
-
$o$<h2 id='npm-cloud'>Option 3: npm create nextblock → Your Own Supabase + Cloudflare</h2>$o$,
|
|
929
|
-
$n$<h2 id='npm-cloud'>Option 3: npm create nextblock → Your Own Supabase Cloud</h2>$n$,
|
|
930
|
-
NULL);
|
|
931
|
-
|
|
932
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
933
|
-
$o$Best for building your own site on managed cloud. Needs a Supabase project and an R2 bucket.$o$,
|
|
934
|
-
$n$Best for building your own site on managed cloud. Needs a Supabase project; a Cloudflare R2 bucket is optional.$n$,
|
|
935
|
-
NULL);
|
|
936
|
-
|
|
937
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
938
|
-
$o$pointed at a Supabase project and Cloudflare R2 bucket you control, and it deploys anywhere Next.js runs.$o$,
|
|
939
|
-
$n$pointed at a Supabase project you control (plus an optional Cloudflare R2 bucket for media), and it deploys anywhere Next.js runs.$n$,
|
|
940
|
-
NULL);
|
|
941
|
-
|
|
942
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
943
|
-
$o$, create a free project at <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>, and set up a <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> bucket for your images and files.</p>$o$,
|
|
944
|
-
$n$ and create a free project at <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>. A <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> bucket for images and files is optional but recommended, because its free tier is larger. Without one, media is stored in your project’s Supabase Storage.</p>$n$,
|
|
945
|
-
NULL);
|
|
946
|
-
|
|
947
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
948
|
-
$o$At the first prompt, choose <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em> and name your project.$o$,
|
|
949
|
-
$n$At the first prompt, choose <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em>; the project takes the folder name you passed (<code>my-site</code>).$n$,
|
|
950
|
-
NULL);
|
|
951
|
-
|
|
952
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
953
|
-
$o$<li><strong>Add Cloudflare R2</strong> — enter your R2 account ID, bucket name, access key ID, secret access key, and the bucket’s public URL for serving images and files.</li>$o$,
|
|
954
|
-
$n$<li><strong>Media storage (optional)</strong> — to use Cloudflare R2, enter your R2 account ID, bucket name, access key ID, secret access key, and the bucket’s public URL. Leave the fields blank to keep media in your project’s Supabase Storage.</li>$n$,
|
|
955
|
-
NULL);
|
|
956
|
-
|
|
957
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
958
|
-
$o$creates your confirmed admin account, and signs you in. Restart <code>npm run dev</code> once afterwards so the fresh environment is baked into the app.</li>$o$,
|
|
959
|
-
$n$creates your confirmed admin account, and signs you in. No restart is needed unless you serve media from a custom domain.</li>$n$,
|
|
960
|
-
NULL);
|
|
961
|
-
|
|
962
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
963
|
-
$o$Need a store? One command adds products, checkout, orders, and coupons — license-gated and ready when you are: <code>npx create-nextblock activate ecommerce</code>$o$,
|
|
964
|
-
$n$Need a store? <strong>NextBlock™ Commerce Pro</strong> — products, checkout, orders, and coupons — already ships in every install. Start its free 30-day trial (no credit card) or enter a license key in the CMS under <strong>Administration → Packages</strong>.$n$,
|
|
965
|
-
NULL);
|
|
966
|
-
|
|
967
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
968
|
-
$o$npx nx serve nextblock</code></pre>$o$,
|
|
969
|
-
$n$npm run dev</code></pre>$n$,
|
|
970
|
-
NULL);
|
|
971
|
-
|
|
972
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
973
|
-
$o$<p>Open <code>http://localhost:4200</code> — a fresh install redirects every page to <code>/setup</code>$o$,
|
|
974
|
-
$n$<p><code>npm run dev</code> starts the CMS through Nx (it runs <code>npx nx serve nextblock</code> for you). Open <code>http://localhost:4200</code> — a fresh install redirects every page to <code>/setup</code>$n$,
|
|
975
|
-
NULL);
|
|
976
|
-
|
|
977
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
978
|
-
$o$Note the monorepo has no <code>npm run dev</code> — use <code>npx nx serve nextblock</code> (port 4200) for the cloud path.$o$,
|
|
979
|
-
$n$For the cloud path instead, <code>npm run dev</code> starts the app on <code>http://localhost:4200</code>.$n$,
|
|
980
|
-
NULL);
|
|
981
|
-
|
|
982
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
983
|
-
$o$<h2 id='after-install'>After You Install: Your First 10 Minutes</h2>$o$,
|
|
984
|
-
$n$<h2 id='ai-agent'>Option 5: Let Your AI Coding Agent Install It</h2>
|
|
985
|
-
<p class='mt-2 mb-6 flex flex-wrap items-center gap-x-3 gap-y-2 text-sm'><span class='inline-flex items-center gap-2 rounded-full border border-rose-200 bg-rose-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-rose-700 dark:border-rose-500/20 dark:bg-rose-500/10 dark:text-rose-200'>Step 5 · Hands-off</span><span class='text-slate-500 dark:text-slate-400'>Best if you already work with Claude Code, Cursor, or Codex. Needs Node.js and Docker Desktop.</span></p>
|
|
986
|
-
<p>You can skip every step above and simply ask. A coding agent that runs commands on your computer can install NextBlock, connect itself to the CMS, and build your pages from a plain-language brief. Try this: “Build me a landing page for my bakery with NextBlock.” Behind the scenes, the agent runs the installer’s hands-free mode:</p>
|
|
987
|
-
<pre><code>npx create-nextblock@latest my-site --non-interactive</code></pre>
|
|
988
|
-
<ol class='space-y-2'>
|
|
989
|
-
<li><strong>The agent installs the site.</strong> The installer scaffolds the project, boots the local Docker stack, and writes the MCP connection files the agent needs.</li>
|
|
990
|
-
<li><strong>You do two things in the browser.</strong> Open the setup link the agent gives you (usually <code>http://localhost:3000/setup</code>) and create your administrator account. Then start the free 30-day Cortex AI trial on the welcome screen, with no credit card. Your name, email, and password never pass through the agent.</li>
|
|
991
|
-
<li><strong>The agent builds your pages.</strong> Once the site reports ready, reopen the agent in the new project folder so it loads that connection. It then creates pages, menus, and images through the <a href='/article/cortex-ai-mcp-connection-guide'>NextBlock MCP server</a>, and you keep editing everything in the CMS.</li>
|
|
992
|
-
</ol>
|
|
993
|
-
<div class='rounded-3xl border border-rose-200 bg-rose-50/70 p-6 my-8 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
994
|
-
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Recommended · add the NextBlock plugin</p>
|
|
995
|
-
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>With the plugin, your agent knows the whole routine and suggests NextBlock when you ask it for a website. In Claude Code, run <code>/plugin marketplace add nextblock-cms/nextblock</code>, then <code>/plugin install nextblock@nextblock</code>.</p>
|
|
996
|
-
<p class='mt-4 mb-0 text-sm text-slate-700 dark:text-slate-200'>In Cursor, add it from the NextBlock GitHub repository under <strong>Customize → Plugins</strong>. For Codex and other agents, paste <a href='https://github.com/nextblock-cms/nextblock/blob/master/plugins/AGENTS.snippet.md' target='_blank' rel='noopener'>this snippet</a> into your <code>AGENTS.md</code>. No plugin? Name NextBlock in your request, and point the agent to <code>nextblock.dev/llms.txt</code> if it needs the steps.</p>
|
|
997
|
-
</div>
|
|
998
|
-
<p>You need Node.js 22.12+, a coding agent, and Docker Desktop running. No Docker? Ask for <code>--mode cloud</code>. The agent scaffolds the project and starts it with <code>npm run dev</code>, and you connect your own Supabase project in the setup wizard, as in Option 3. The MCP server is part of Cortex AI, which is why the trial comes first. The CMS itself stays free either way.</p>
|
|
999
|
-
|
|
1000
|
-
<h2 id='after-install'>After You Install: Your First 10 Minutes</h2>$n$,
|
|
1001
|
-
$u$<h2 id='ai-agent'>$u$);
|
|
1002
|
-
|
|
1003
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1004
|
-
$o$Every path drops you at <code>/cms/dashboard</code>, signed in as the first administrator. A built-in onboarding checklist walks you through the rest:$o$,
|
|
1005
|
-
$n$Every path signs you in as the first administrator and opens a welcome screen that offers the free 30-day Cortex AI trial (no credit card). Start it, or choose <em>Not now, take me to my CMS</em> to go to <code>/cms/dashboard</code>. A built-in onboarding checklist walks you through the rest:$n$,
|
|
1006
|
-
NULL);
|
|
1007
|
-
|
|
1008
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1009
|
-
$o$<li><strong>Add your branding</strong> — upload your logo and set the site title.</li>$o$,
|
|
1010
|
-
$n$<li><strong>Build your site with Cortex AI</strong> — answer a few questions, and Cortex replaces the sample content with your own pages, menus, and branding (free 30-day trial, no credit card).</li>
|
|
1011
|
-
<li><strong>Add your branding</strong> — upload your logo and set the site title.</li>$n$,
|
|
1012
|
-
$u$<li><strong>Build your site with Cortex AI</strong>$u$);
|
|
1013
|
-
|
|
1014
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1015
|
-
$o$and (on Vercel) turn on automatic updates.</li>$o$,
|
|
1016
|
-
$n$and (on a Vercel one-click deploy or a GitHub fork) turn on automatic updates.</li>$n$,
|
|
1017
|
-
NULL);
|
|
1018
|
-
|
|
1019
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1020
|
-
$o$or meet your AI copilot in the <a href='/article/nextblock-cortex-ai-guide'>Cortex AI guide</a>.$o$,
|
|
1021
|
-
$n$or put Cortex AI to work with the <a href='/article/nextblock-cortex-ai-guide'>Cortex AI guide</a> and the <a href='/article/cortex-ai-mcp-connection-guide'>MCP connection guide</a>.$n$,
|
|
1022
|
-
NULL);
|
|
1023
|
-
|
|
1024
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1025
|
-
$o$For the managed-cloud path: Node.js 22.12+ plus a Supabase project and a Cloudflare R2 bucket.$o$,
|
|
1026
|
-
$n$For the managed-cloud path: Node.js 22.12+ plus a Supabase project (a Cloudflare R2 bucket is optional).$n$,
|
|
1027
|
-
NULL);
|
|
1028
|
-
|
|
1029
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1030
|
-
$o$(add Docker Desktop if you want to run the local stack).</p>$o$,
|
|
1031
|
-
$n$(add Docker Desktop if you want to run the local stack). For your coding agent: Node.js 22.12+ and Docker Desktop, or a Supabase project with <code>--mode cloud</code>.</p>$n$,
|
|
1032
|
-
NULL);
|
|
1033
|
-
|
|
1034
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1035
|
-
$o$Premium packages such as e-commerce and Cortex AI are optional and activate with a license key.$o$,
|
|
1036
|
-
$n$The premium packages, Commerce Pro and Cortex AI, are optional: each starts with a free 30-day trial (no credit card) and then needs a license key.$n$,
|
|
1037
|
-
NULL);
|
|
1038
|
-
|
|
1039
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1040
|
-
$o$<h3>How do I update NextBlock?</h3>$o$,
|
|
1041
|
-
$n$<h3>Can an AI agent install and build my site?</h3>
|
|
1042
|
-
<p>Yes. Claude Code, Cursor, Codex, and other coding agents can run the installer for you, then build every page over the MCP server. You only create your admin account and start the Cortex AI trial. See <a href='#ai-agent'>Option 5</a>.</p>
|
|
1043
|
-
<h3>How do I update NextBlock?</h3>$n$,
|
|
1044
|
-
$u$<h3>Can an AI agent install and build my site?</h3>$u$);
|
|
1045
|
-
|
|
1046
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1047
|
-
$o$On a cloned repository, <code>git pull</code>, run <code>npm run db:migrate</code>, then restart (on production builds, pending migrations apply automatically). With Docker, pull the latest code and run <code>npm run docker:up</code>.$o$,
|
|
1048
|
-
$n$Everywhere else, one command updates the code, the dependencies, and the database schema: <code>npm run update</code>. On Docker, follow it with <code>npm run docker:up</code>. <a href='/article/how-updating-works'>How Updating NextBlock Works</a> covers every path.$n$,
|
|
1049
|
-
NULL);
|
|
1050
|
-
|
|
1051
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1052
|
-
$o$Voici quatre façons de démarrer, <strong>classées de la plus simple à la plus technique</strong> : la première tient en un clic, la dernière donne le code source complet pour celles et ceux qui veulent participer à NextBlock.$o$,
|
|
1053
|
-
$n$Voici cinq façons de démarrer. Les quatre premières sont <strong>classées de la plus simple à la plus technique</strong> : la première tient en un clic, la quatrième donne le code source complet pour celles et ceux qui veulent participer à NextBlock. La cinquième confie tout le travail à l'agent de code IA que vous utilisez déjà.$n$,
|
|
1054
|
-
NULL);
|
|
1055
|
-
|
|
1056
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1057
|
-
$o$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → Supabase + R2</h2>$o$,
|
|
1058
|
-
$n$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → votre propre Supabase</h2>$n$,
|
|
1059
|
-
NULL);
|
|
1060
|
-
|
|
1061
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1062
|
-
$o$Générez une app autonome sur votre propre projet Supabase géré et Cloudflare R2, prête à déployer partout.$o$,
|
|
1063
|
-
$n$Générez une app autonome sur votre propre projet Supabase géré (Cloudflare R2 facultatif), prête à déployer partout.$n$,
|
|
1064
|
-
NULL);
|
|
1065
|
-
|
|
1066
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1067
|
-
$o$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Faites tourner le monorepo complet — le CMS, tous les packages et la documentation. Pour celles et ceux qui veulent aider à construire NextBlock (Docker fonctionne ici aussi).</p>$o$,
|
|
1068
|
-
$n$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Faites tourner le monorepo complet — le CMS, tous les packages et la documentation. Pour celles et ceux qui veulent aider à construire NextBlock (Docker fonctionne ici aussi).</p>
|
|
1069
|
-
</a>
|
|
1070
|
-
<a href='#ai-agent' class='block rounded-[1.75rem] border border-rose-200 bg-rose-50/70 p-6 no-underline transition-shadow hover:shadow-lg md:col-span-2 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
1071
|
-
<div class='flex items-center justify-between mb-4'>
|
|
1072
|
-
<span class='flex h-9 w-9 items-center justify-center rounded-full bg-rose-600 text-sm font-bold text-white'>5</span>
|
|
1073
|
-
<span class='rounded-full border border-rose-300 px-3 py-1 text-[0.65rem] font-semibold uppercase tracking-[0.2em] text-rose-700 dark:border-rose-500/20 dark:text-rose-200'>Nouveau</span>
|
|
1074
|
-
</div>
|
|
1075
|
-
<p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Sans effort · votre agent de code IA</p>
|
|
1076
|
-
<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>Demandez à votre agent de le construire</h2>
|
|
1077
|
-
<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Demandez un site web à Claude Code, Cursor ou Codex. Il installe NextBlock, vous créez votre admin dans le navigateur, et il construit les pages via MCP.</p>$n$,
|
|
1078
|
-
$u$<a href='#ai-agent' class=$u$);
|
|
1079
|
-
|
|
1080
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1081
|
-
$o$La plupart des gens devraient commencer par <a href='#one-click-vercel'>Vercel</a>.</p>$o$,
|
|
1082
|
-
$n$La plupart des gens devraient commencer par <a href='#one-click-vercel'>Vercel</a>. Vous travaillez déjà avec un agent de code IA ? Passez directement à l'<a href='#ai-agent'>option 5</a>.</p>$n$,
|
|
1083
|
-
NULL);
|
|
1084
|
-
|
|
1085
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1086
|
-
$o$Il est confirmé instantanément — aucun email de vérification — et vous arrivez dans le tableau de bord du CMS.</li>$o$,
|
|
1087
|
-
$n$Il est confirmé instantanément — aucun email de vérification — et vous arrivez sur un écran d'accueil qui propose l'essai gratuit de 30 jours de Cortex AI. Choisissez <em>Not now, take me to my CMS</em> pour aller directement au tableau de bord.</li>$n$,
|
|
1088
|
-
NULL);
|
|
1089
|
-
|
|
1090
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1091
|
-
$o$il ne reste qu'à créer votre administrateur (confirmé instantanément, sans email). Vous arrivez dans le tableau de bord du CMS.</li>$o$,
|
|
1092
|
-
$n$il ne reste qu'à créer votre administrateur (confirmé instantanément, sans email). Vous arrivez ensuite sur le même écran d'accueil et son offre d'essai de Cortex AI.</li>$n$,
|
|
1093
|
-
NULL);
|
|
1094
|
-
|
|
1095
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1096
|
-
$o$Le mode Docker n'est proposé que dans le prompt interactif — ne passez pas <code>--yes</code>, qui force le mode cloud géré ci-dessous.$o$,
|
|
1097
|
-
$n$Ne passez pas <code>--yes</code> ici : il saute le prompt et prend le mode cloud géré ci-dessous. L'option <code>--non-interactive</code> de l'<a href='#ai-agent'>option 5</a>, pensée pour les agents, est différente : elle démarre cette pile Docker par défaut.$n$,
|
|
1098
|
-
NULL);
|
|
1099
|
-
|
|
1100
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1101
|
-
$o$<h2 id='npm-cloud'>Option 3 : npm create nextblock → votre propre Supabase + Cloudflare</h2>$o$,
|
|
1102
|
-
$n$<h2 id='npm-cloud'>Option 3 : npm create nextblock → votre propre Supabase</h2>$n$,
|
|
1103
|
-
NULL);
|
|
1104
|
-
|
|
1105
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1106
|
-
$o$Idéal pour construire votre propre site sur du cloud géré. Nécessite un projet Supabase et un bucket R2.$o$,
|
|
1107
|
-
$n$Idéal pour construire votre propre site sur du cloud géré. Nécessite un projet Supabase ; un bucket Cloudflare R2 est facultatif.$n$,
|
|
1108
|
-
NULL);
|
|
1109
|
-
|
|
1110
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1111
|
-
$o$reliée à un projet Supabase et un bucket Cloudflare R2 que vous contrôlez, et elle se déploie partout où Next.js tourne.$o$,
|
|
1112
|
-
$n$reliée à un projet Supabase que vous contrôlez (plus un bucket Cloudflare R2 facultatif pour les médias), et elle se déploie partout où Next.js tourne.$n$,
|
|
1113
|
-
NULL);
|
|
1114
|
-
|
|
1115
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1116
|
-
$o$, créez un projet gratuit sur <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>, et configurez un bucket <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> pour vos images et fichiers.</p>$o$,
|
|
1117
|
-
$n$ et créez un projet gratuit sur <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>. Un bucket <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> pour vos images et fichiers est facultatif mais recommandé, car son offre gratuite est plus généreuse. Sans lui, les médias sont stockés dans le Supabase Storage de votre projet.</p>$n$,
|
|
1118
|
-
NULL);
|
|
1119
|
-
|
|
1120
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1121
|
-
$o$Au premier prompt, choisissez <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em> et nommez votre projet.$o$,
|
|
1122
|
-
$n$Au premier prompt, choisissez <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em> ; le projet prend le nom du dossier indiqué (<code>mon-site</code>).$n$,
|
|
1123
|
-
NULL);
|
|
1124
|
-
|
|
1125
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1126
|
-
$o$<li><strong>Ajoutez Cloudflare R2</strong> — saisissez votre identifiant de compte R2, le nom du bucket, la clé d'accès (access key ID), la clé secrète et l'URL publique du bucket pour servir vos images et fichiers.</li>$o$,
|
|
1127
|
-
$n$<li><strong>Stockage des médias (facultatif)</strong> — pour utiliser Cloudflare R2, saisissez votre identifiant de compte R2, le nom du bucket, la clé d'accès (access key ID), la clé secrète et l'URL publique du bucket. Laissez les champs vides pour garder les médias dans le Supabase Storage de votre projet.</li>$n$,
|
|
1128
|
-
NULL);
|
|
1129
|
-
|
|
1130
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1131
|
-
$o$crée votre compte admin confirmé et vous connecte. Redémarrez ensuite <code>npm run dev</code> une fois pour que le nouvel environnement soit intégré à l'application.</li>$o$,
|
|
1132
|
-
$n$crée votre compte admin confirmé et vous connecte. Aucun redémarrage n'est nécessaire, sauf si vous servez les médias depuis un domaine personnalisé.</li>$n$,
|
|
1133
|
-
NULL);
|
|
1134
|
-
|
|
1135
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1136
|
-
$o$Besoin d'une boutique ? Une seule commande ajoute produits, paiement, commandes et coupons — activés par clé de licence, prêts quand vous l'êtes : <code>npx create-nextblock activate ecommerce</code>$o$,
|
|
1137
|
-
$n$Besoin d'une boutique ? <strong>NextBlock™ Commerce Pro</strong> — produits, paiement, commandes et coupons — est déjà inclus dans chaque installation. Lancez son essai gratuit de 30 jours (sans carte de crédit) ou saisissez une clé de licence dans le CMS, sous <strong>Administration → Packages</strong>.$n$,
|
|
1138
|
-
NULL);
|
|
1139
|
-
|
|
1140
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1141
|
-
$o$npx nx serve nextblock</code></pre>$o$,
|
|
1142
|
-
$n$npm run dev</code></pre>$n$,
|
|
1143
|
-
NULL);
|
|
1144
|
-
|
|
1145
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1146
|
-
$o$<p>Ouvrez <code>http://localhost:4200</code> — une nouvelle installation redirige chaque page vers <code>/setup</code>$o$,
|
|
1147
|
-
$n$<p><code>npm run dev</code> démarre le CMS via Nx (il lance <code>npx nx serve nextblock</code> pour vous). Ouvrez <code>http://localhost:4200</code> — une nouvelle installation redirige chaque page vers <code>/setup</code>$n$,
|
|
1148
|
-
NULL);
|
|
1149
|
-
|
|
1150
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1151
|
-
$o$Notez que le monorepo n'a pas de <code>npm run dev</code> — utilisez <code>npx nx serve nextblock</code> (port 4200) pour le chemin cloud.$o$,
|
|
1152
|
-
$n$Pour le chemin cloud, <code>npm run dev</code> lance plutôt l'application sur <code>http://localhost:4200</code>.$n$,
|
|
1153
|
-
NULL);
|
|
1154
|
-
|
|
1155
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1156
|
-
$o$<h2 id='after-install'>Après l'installation : vos 10 premières minutes</h2>$o$,
|
|
1157
|
-
$n$<h2 id='ai-agent'>Option 5 : Confiez l'installation à votre agent de code IA</h2>
|
|
1158
|
-
<p class='mt-2 mb-6 flex flex-wrap items-center gap-x-3 gap-y-2 text-sm'><span class='inline-flex items-center gap-2 rounded-full border border-rose-200 bg-rose-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-rose-700 dark:border-rose-500/20 dark:bg-rose-500/10 dark:text-rose-200'>Étape 5 · Sans effort</span><span class='text-slate-500 dark:text-slate-400'>Idéal si vous travaillez déjà avec Claude Code, Cursor ou Codex. Nécessite Node.js et Docker Desktop.</span></p>
|
|
1159
|
-
<p>Vous pouvez sauter toutes les étapes ci-dessus et simplement demander. Un agent de code qui exécute des commandes sur votre ordinateur peut installer NextBlock, se connecter au CMS et construire vos pages à partir d'une simple description. Essayez : « Crée-moi une page d'accueil pour ma boulangerie avec NextBlock. » En coulisses, l'agent lance l'installateur en mode sans intervention :</p>
|
|
1160
|
-
<pre><code>npx create-nextblock@latest mon-site --non-interactive</code></pre>
|
|
1161
|
-
<ol class='space-y-2'>
|
|
1162
|
-
<li><strong>L'agent installe le site.</strong> L'installateur crée le projet, démarre la pile Docker locale et écrit les fichiers de connexion MCP dont l'agent a besoin.</li>
|
|
1163
|
-
<li><strong>Vous faites deux choses dans le navigateur.</strong> Ouvrez le lien de configuration que l'agent vous donne (en général <code>http://localhost:3000/setup</code>) et créez votre compte administrateur. Démarrez ensuite l'essai gratuit de 30 jours de Cortex AI sur l'écran d'accueil, sans carte de crédit. Votre nom, votre email et votre mot de passe ne passent jamais par l'agent.</li>
|
|
1164
|
-
<li><strong>L'agent construit vos pages.</strong> Quand le site se déclare prêt, rouvrez l'agent dans le dossier du nouveau projet pour qu'il charge cette connexion. Il crée alors pages, menus et images via le <a href='/article/guide-connexion-mcp-cortex-ai'>serveur MCP de NextBlock</a>, et vous continuez à tout modifier dans le CMS.</li>
|
|
1165
|
-
</ol>
|
|
1166
|
-
<div class='rounded-3xl border border-rose-200 bg-rose-50/70 p-6 my-8 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
1167
|
-
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Recommandé · ajoutez le plugin NextBlock</p>
|
|
1168
|
-
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Avec le plugin, votre agent connaît toute la marche à suivre et propose NextBlock quand vous lui demandez un site web. Dans Claude Code, lancez <code>/plugin marketplace add nextblock-cms/nextblock</code>, puis <code>/plugin install nextblock@nextblock</code>.</p>
|
|
1169
|
-
<p class='mt-4 mb-0 text-sm text-slate-700 dark:text-slate-200'>Dans Cursor, ajoutez-le depuis le dépôt GitHub de NextBlock sous <strong>Customize → Plugins</strong>. Pour Codex et les autres agents, collez <a href='https://github.com/nextblock-cms/nextblock/blob/master/plugins/AGENTS.snippet.md' target='_blank' rel='noopener'>cet extrait</a> dans votre <code>AGENTS.md</code>. Pas de plugin ? Nommez NextBlock dans votre demande et, au besoin, indiquez à l'agent <code>nextblock.dev/llms.txt</code>, qui décrit la marche à suivre.</p>
|
|
1170
|
-
</div>
|
|
1171
|
-
<p>Il vous faut Node.js 22.12+, un agent de code et Docker Desktop en marche. Pas de Docker ? Demandez l'option <code>--mode cloud</code>. L'agent crée le projet et le démarre avec <code>npm run dev</code>, puis vous connectez votre propre projet Supabase dans l'assistant, comme à l'option 3. Le serveur MCP fait partie de Cortex AI, d'où l'essai en premier. Le CMS lui-même reste gratuit dans tous les cas.</p>
|
|
1172
|
-
|
|
1173
|
-
<h2 id='after-install'>Après l'installation : vos 10 premières minutes</h2>$n$,
|
|
1174
|
-
$u$<h2 id='ai-agent'>$u$);
|
|
1175
|
-
|
|
1176
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1177
|
-
$o$Chaque chemin vous dépose sur <code>/cms/dashboard</code>, connecté en tant que premier administrateur. Une checklist de démarrage intégrée vous guide pour la suite :$o$,
|
|
1178
|
-
$n$Chaque chemin vous connecte en tant que premier administrateur et ouvre un écran d'accueil qui propose l'essai gratuit de 30 jours de Cortex AI (sans carte de crédit). Démarrez-le, ou choisissez <em>Not now, take me to my CMS</em> pour aller sur <code>/cms/dashboard</code>. Une checklist de démarrage intégrée vous guide pour la suite :$n$,
|
|
1179
|
-
NULL);
|
|
1180
|
-
|
|
1181
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1182
|
-
$o$<li><strong>Ajoutez votre identité visuelle</strong> — téléversez votre logo et définissez le titre du site.</li>$o$,
|
|
1183
|
-
$n$<li><strong>Construisez votre site avec Cortex AI</strong> — répondez à quelques questions, et Cortex remplace le contenu d'exemple par vos propres pages, menus et identité visuelle (essai gratuit de 30 jours, sans carte de crédit).</li>
|
|
1184
|
-
<li><strong>Ajoutez votre identité visuelle</strong> — téléversez votre logo et définissez le titre du site.</li>$n$,
|
|
1185
|
-
$u$<li><strong>Construisez votre site avec Cortex AI</strong>$u$);
|
|
1186
|
-
|
|
1187
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1188
|
-
$o$et (sur Vercel) les mises à jour automatiques.</li>$o$,
|
|
1189
|
-
$n$et (sur un déploiement Vercel en un clic ou un fork GitHub) les mises à jour automatiques.</li>$n$,
|
|
1190
|
-
NULL);
|
|
1191
|
-
|
|
1192
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1193
|
-
$o$, ou ajoutez une boutique avec le <a href='/article/guide-commerce-nextblock'>guide Commerce</a>.</p>$o$,
|
|
1194
|
-
$n$, ajoutez une boutique avec le <a href='/article/guide-commerce-nextblock'>guide Commerce</a>, ou mettez Cortex AI au travail avec le <a href='/article/guide-connexion-mcp-cortex-ai'>guide de connexion MCP</a>.</p>$n$,
|
|
1195
|
-
NULL);
|
|
1196
|
-
|
|
1197
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1198
|
-
$o$Pour le mode cloud géré : Node.js 22.12+ ainsi qu'un projet Supabase et un bucket Cloudflare R2.$o$,
|
|
1199
|
-
$n$Pour le mode cloud géré : Node.js 22.12+ ainsi qu'un projet Supabase (un bucket Cloudflare R2 est facultatif).$n$,
|
|
1200
|
-
NULL);
|
|
1201
|
-
|
|
1202
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1203
|
-
$o$(ajoutez Docker Desktop si vous voulez faire tourner la pile locale).</p>$o$,
|
|
1204
|
-
$n$(ajoutez Docker Desktop si vous voulez faire tourner la pile locale). Pour votre agent de code : Node.js 22.12+ et Docker Desktop, ou un projet Supabase avec <code>--mode cloud</code>.</p>$n$,
|
|
1205
|
-
NULL);
|
|
1206
|
-
|
|
1207
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1208
|
-
$o$Les packages premium comme l'e-commerce et Cortex AI sont optionnels et s'activent avec une clé de licence.$o$,
|
|
1209
|
-
$n$Les packages premium, Commerce Pro et Cortex AI, sont optionnels : chacun démarre par un essai gratuit de 30 jours (sans carte de crédit), puis s'active avec une clé de licence.$n$,
|
|
1210
|
-
NULL);
|
|
1211
|
-
|
|
1212
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1213
|
-
$o$<h3>Comment mettre à jour NextBlock ?</h3>$o$,
|
|
1214
|
-
$n$<h3>Un agent IA peut-il installer et construire mon site ?</h3>
|
|
1215
|
-
<p>Oui. Claude Code, Cursor, Codex et d'autres agents de code peuvent lancer l'installateur pour vous, puis construire chaque page via le serveur MCP. Il vous reste seulement à créer votre compte administrateur et à démarrer l'essai de Cortex AI. Voir l'<a href='#ai-agent'>option 5</a>.</p>
|
|
1216
|
-
<h3>Comment mettre à jour NextBlock ?</h3>$n$,
|
|
1217
|
-
$u$<h3>Un agent IA peut-il installer et construire mon site ?</h3>$u$);
|
|
1218
|
-
|
|
1219
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1220
|
-
$o$Sur un dépôt cloné, <code>git pull</code>, lancez <code>npm run db:migrate</code>, puis redémarrez (lors des builds de production, les migrations en attente s'appliquent automatiquement). Avec Docker, récupérez le dernier code et lancez <code>npm run docker:up</code>.$o$,
|
|
1221
|
-
$n$Partout ailleurs, une seule commande met à jour le code, les dépendances et le schéma de base de données : <code>npm run update</code>. Avec Docker, enchaînez avec <code>npm run docker:up</code>. Le <a href='/article/comment-fonctionnent-les-mises-a-jour'>guide des mises à jour</a> détaille chaque cas de figure.$n$,
|
|
1222
|
-
NULL);
|
|
1223
|
-
|
|
1224
|
-
-- ========================================================================================
|
|
1225
|
-
-- updating-guide
|
|
1226
|
-
-- ========================================================================================
|
|
1227
|
-
|
|
1228
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1229
|
-
$o$used to mean knowing which of the four install paths you were on.$o$,
|
|
1230
|
-
$n$used to mean knowing which install path you were on.$n$,
|
|
1231
|
-
NULL);
|
|
1232
|
-
|
|
1233
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1234
|
-
$o$If you would rather look before you leap, <code>npm run update -- --check</code> reports exactly what would change and touches nothing.$o$,
|
|
1235
|
-
$n$If you would rather look before you leap, <code>npm run update:check</code> lists what would change and touches nothing.$n$,
|
|
1236
|
-
NULL);
|
|
1237
|
-
|
|
1238
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1239
|
-
$o$<h2 id='the-four-paths'>The four install paths, and how each one gets updates</h2>$o$,
|
|
1240
|
-
$n$<h2 id='the-four-paths'>Five ways to install, four ways to update</h2>$n$,
|
|
1241
|
-
NULL);
|
|
1242
|
-
|
|
1243
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1244
|
-
$o$These map one-to-one onto the four options in <a href='/article/how-to-setup-nextblock'>the install guide</a>.$o$,
|
|
1245
|
-
$n$The first four options in <a href='/article/how-to-setup-nextblock'>the install guide</a> map one-to-one onto the paths below. The fifth, where an AI coding agent builds the site, updates like path 2 or 3.$n$,
|
|
1246
|
-
NULL);
|
|
1247
|
-
|
|
1248
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1249
|
-
$o$dark:text-blue-200'>Fully automatic</p>$o$,
|
|
1250
|
-
$n$dark:text-blue-200'>Automatic after setup</p>$n$,
|
|
1251
|
-
NULL);
|
|
1252
|
-
|
|
1253
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1254
|
-
$o$A daily workflow merges upstream into your repository and Vercel redeploys. You do nothing.$o$,
|
|
1255
|
-
$n$One-time setup: <strong>Connect GitHub</strong> in the dashboard, or enable Actions on a manual fork. Then a daily workflow merges upstream and Vercel redeploys.$n$,
|
|
1256
|
-
NULL);
|
|
1257
|
-
|
|
1258
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1259
|
-
$o$<h2 id='vercel'>1. One-click Vercel and GitHub forks — hands-off</h2>$o$,
|
|
1260
|
-
$n$<div class='rounded-3xl border border-slate-200 bg-slate-50 p-6 my-8 dark:border-white/10 dark:bg-white/5'>
|
|
1261
|
-
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-slate-600 dark:text-slate-300'>Installed by an AI coding agent?</p>
|
|
1262
|
-
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Then you have an ordinary <code>npm create nextblock</code> project. The agent runs <code>npx create-nextblock@latest my-site --non-interactive</code>, which scaffolds the same standalone app. It runs in Docker by default, so it updates like <a href='#docker'>path 2</a>. With <code>--mode cloud</code> it uses managed Supabase and updates like <a href='#cloud'>path 3</a>. If the agent runs the update for you, have it use <code>node tools/update.mjs --yes</code>. Its shell is not an interactive terminal, so without that flag the updater declines. More on this route in <a href='/article/how-to-setup-nextblock#ai-agent'>the install guide</a>.</p>
|
|
1263
|
-
</div>
|
|
1264
|
-
|
|
1265
|
-
<h2 id='vercel'>1. One-click Vercel and GitHub forks — hands-off</h2>$n$,
|
|
1266
|
-
$u$Installed by an AI coding agent?$u$);
|
|
1267
|
-
|
|
1268
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1269
|
-
$o$When you deployed, NextBlock created a repository you own;$o$,
|
|
1270
|
-
$n$When you deployed, Vercel created a repository you own;$n$,
|
|
1271
|
-
NULL);
|
|
1272
|
-
|
|
1273
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1274
|
-
$o$triggered by hand from your repository’s <strong>Actions</strong> tab.</p>$o$,
|
|
1275
|
-
$n$triggered by hand from your repository’s <strong>Actions</strong> tab. A manual GitHub fork already carries the workflow, but GitHub disables Actions on forks. Enable them once from the fork’s <strong>Actions</strong> tab.</p>$n$,
|
|
1276
|
-
NULL);
|
|
1277
|
-
|
|
1278
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1279
|
-
$o$anything replaced is kept under <code>.nextblock-backup/</code>.</p>$o$,
|
|
1280
|
-
$n$anything replaced is kept under <code>.nextblock-backup/</code>.</p>
|
|
1281
|
-
<p>A new project needs that first commit. The <code>create-nextblock</code> CLI runs <code>git init</code> but commits nothing, in Docker mode too and when an AI agent runs it. So commit once before your first update: <code>git add -A</code>, then <code>git commit -m initial</code>. The generated <code>.gitignore</code> already keeps your <code>.env</code> files and the agent’s MCP configs out of git.</p>$n$,
|
|
1282
|
-
$u$git commit -m initial$u$);
|
|
1283
|
-
|
|
1284
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1285
|
-
$o$<pre><code>npm run update</code></pre>$o$,
|
|
1286
|
-
$n$<pre><code>npm run update
|
|
1287
|
-
npm run dev</code></pre>$n$,
|
|
1288
|
-
NULL);
|
|
1289
|
-
|
|
1290
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1291
|
-
$o$points you at <code>git pull --rebase</code> rather than guessing.</p>$o$,
|
|
1292
|
-
$n$points you at <code>git pull --rebase</code> rather than guessing. When it finishes, restart the dev server with <code>npm run dev</code> (port 4200).</p>$n$,
|
|
1293
|
-
NULL);
|
|
1294
|
-
|
|
1295
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1296
|
-
$o$<td class='py-3 pr-4'><code>npm run update -- --check</code></td>$o$,
|
|
1297
|
-
$n$<td class='py-3 pr-4'><code>npm run update:check</code></td>$n$,
|
|
1298
|
-
NULL);
|
|
1299
|
-
|
|
1300
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1301
|
-
$o$<h2 id='database'>What happens to your database</h2>$o$,
|
|
1302
|
-
$n$<p class='text-sm'>On <strong>PowerShell</strong>, a bare <code>--</code> is stripped, so the flagged forms above run as a plain <code>npm run update</code>, with its confirmation prompts. npm keeps the flag for itself: it warns <code>Unknown cli config</code> for <code>--check</code>, <code>--db-only</code> and <code>--skip-db</code>, but <code>--yes</code> and <code>--force</code> are npm options too, so it takes them without that warning. To preview, use <code>npm run update:check</code>. For the other options, call the script directly. For example, in a project made with <code>npm create nextblock</code>, run <code>node tools/update.mjs --db-only</code>; in the monorepo, <code>node apps/nextblock/tools/update.mjs --db-only</code>. Command Prompt (<code>cmd.exe</code>) and macOS or Linux shells are not affected.</p>
|
|
1303
|
-
|
|
1304
|
-
<h2 id='database'>What happens to your database</h2>$n$,
|
|
1305
|
-
$u$node apps/nextblock/tools/update.mjs --db-only$u$);
|
|
1306
|
-
|
|
1307
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1308
|
-
$o$<p>Migrations change <em>structure</em> — tables, columns, indexes, permissions. Your pages, posts, products, media and users are yours; the update never deletes or rewrites them.</p>$o$,
|
|
1309
|
-
$n$<p>Migrations mostly change <em>structure</em> — tables, columns, indexes, permissions. A few also fix data. They refresh the demo content, theme colours and interface strings NextBlock seeded, usually only where these still match what NextBlock shipped. Rarely, one applies a narrow mechanical fix across all content. Examples: moving YouTube embeds to youtube-nocookie, or removing a CSS class that slowed the first paint. No migration deletes your pages, posts, products, media or users.</p>$n$,
|
|
1310
|
-
NULL);
|
|
1311
|
-
|
|
1312
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1313
|
-
$o$Before a big jump on a production site, take a database snapshot — Supabase does daily backups on paid plans, and you can trigger one on demand from the Supabase dashboard. Then run <code>npm run update -- --check</code> to see the pending list before you commit to it.$o$,
|
|
1314
|
-
$n$Before a big jump on a production site, take a database snapshot. Supabase keeps daily backups on paid plans, which you restore from <strong>Database → Backups</strong> in its dashboard. For a copy of your own, use <code>pg_dump</code> with your database connection string. With the Supabase CLI, <code>supabase db dump</code> saves only the schema; run <code>supabase db dump --data-only</code> as well for the rows. On Docker, run <code>pg_dump</code> inside the <code>db</code> container. Then run <code>npm run update:check</code> to preview the update before you commit to it.$n$,
|
|
1315
|
-
NULL);
|
|
1316
|
-
|
|
1317
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1318
|
-
$o$Review it with <code>git diff</code>, and undo the whole thing with <code>git reset --hard HEAD</code>. Nothing is ever deleted, so files you added yourself are never removed.$o$,
|
|
1319
|
-
$n$Review it with <code>git status</code>, which lists the files it added, and <code>git diff</code>. To back the code out, run <code>git reset --hard HEAD</code> and <code>git clean -fd</code>, then <code>npm install</code> to restore your dependencies. <code>git clean</code> removes the files the update added, plus any untracked file you created since; preview it with <code>git clean -nd</code>. Migrations that already ran stay applied: restore your snapshot if you need the old schema. The update itself never deletes a file, so files you added yourself are never removed.$n$,
|
|
1320
|
-
NULL);
|
|
1321
|
-
|
|
1322
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1323
|
-
$o$<li><strong>Git-backed installs:</strong> the update is an ordinary commit. <code>git log</code> shows it and <code>git revert</code> undoes it.</li>$o$,
|
|
1324
|
-
$n$<li><strong>Git-backed installs:</strong> the daily workflow lands each update as a merge commit. <code>git log</code> shows it and <code>git revert -m 1 <merge-commit></code> undoes it. Git then treats those upstream changes as already merged, so later syncs will not bring them back until you revert that revert. Ran <code>npm run update</code> yourself, on a clone or a local copy of your fork? Right after it, <code>git reset --hard ORIG_HEAD</code> takes the code back and <code>npm install</code> restores the previous dependencies. Migrations already applied stay applied.</li>$n$,
|
|
1325
|
-
NULL);
|
|
1326
|
-
|
|
1327
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1328
|
-
$o$and <code>git reset --hard HEAD</code> backs the whole update out.$o$,
|
|
1329
|
-
$n$and <code>git reset --hard HEAD</code>, <code>git clean -fd</code> and <code>npm install</code> back the whole update out.$n$,
|
|
1330
|
-
NULL);
|
|
1331
|
-
|
|
1332
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1333
|
-
$o$or walk away with <code>git reset --hard HEAD</code>; either way the database was never touched.$o$,
|
|
1334
|
-
$n$or walk away with <code>git reset --hard HEAD</code>, <code>git clean -fd</code> and <code>npm install</code>; either way the database was never touched. Skip the last two and the new migration files stay on disk, where a later update or rebuild can apply them.$n$,
|
|
1335
|
-
NULL);
|
|
1336
|
-
|
|
1337
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1338
|
-
$o$Customisations in your own files, in the CMS, or in <code>.env</code> are never touched at all.$o$,
|
|
1339
|
-
$n$Customisations in your own files or in <code>.env</code> are never touched at all.$n$,
|
|
1340
|
-
NULL);
|
|
1341
|
-
|
|
1342
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1343
|
-
$o$Administrators can also just run <code>npm run update -- --check</code> at any time.$o$,
|
|
1344
|
-
$n$Projects made with <code>npm create nextblock</code> get this banner, including sites built by an AI agent. One-click deploys and forks on Vercel do not, because the daily workflow merges updates for them. Administrators can also just run <code>npm run update:check</code> at any time.$n$,
|
|
1345
|
-
NULL);
|
|
1346
|
-
|
|
1347
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1348
|
-
$o$The update touches application code, dependencies and schema structure only.</p>$o$,
|
|
1349
|
-
$n$The update changes application code, dependencies and the database schema. A few migrations also make targeted data fixes, mostly to the demo content, translations and theme colours NextBlock seeded (see <a href='#database'>What happens to your database</a>). None of them deletes your content.</p>$n$,
|
|
1350
|
-
NULL);
|
|
1351
|
-
|
|
1352
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1353
|
-
$o$it exits non-zero if the schema step fails so a pipeline can catch it.</p>$o$,
|
|
1354
|
-
$n$it exits non-zero if the schema step fails so a pipeline can catch it. Setting <code>CI=true</code> also skips the prompts, in any shell.</p>$n$,
|
|
1355
|
-
NULL);
|
|
1356
|
-
|
|
1357
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1358
|
-
$o$<p>No. That path is fully automatic. The command exists for when you want an update <em>now</em> rather than at midnight, or when you are working on a local clone.</p>$o$,
|
|
1359
|
-
$n$<p>No command. Once the dashboard’s <strong>Connect GitHub</strong> step is green, that path is fully automatic. To update <em>now</em> rather than at midnight, open your repository’s <strong>Actions</strong> tab and click <strong>Run workflow</strong> under <strong>NextBlock Upstream Sync</strong>. Or run the command on a local clone and push.</p>$n$,
|
|
1360
|
-
NULL);
|
|
1361
|
-
|
|
1362
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1363
|
-
$o$savoir laquelle des quatre méthodes d'installation vous aviez utilisée.$o$,
|
|
1364
|
-
$n$savoir quelle méthode d'installation vous aviez utilisée.$n$,
|
|
1365
|
-
NULL);
|
|
1366
|
-
|
|
1367
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1368
|
-
$o$<code>npm run update -- --check</code> indique exactement ce qui changerait sans rien modifier.$o$,
|
|
1369
|
-
$n$<code>npm run update:check</code> indique ce qui changerait sans rien modifier.$n$,
|
|
1370
|
-
NULL);
|
|
1371
|
-
|
|
1372
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1373
|
-
$o$<h2 id='the-four-paths'>Les quatre installations et leurs mises à jour</h2>$o$,
|
|
1374
|
-
$n$<h2 id='the-four-paths'>Cinq façons d'installer, quatre façons de mettre à jour</h2>$n$,
|
|
1375
|
-
NULL);
|
|
1376
|
-
|
|
1377
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1378
|
-
$o$Elles correspondent une à une aux quatre options du <a href='/article/comment-configurer-nextblock'>guide d'installation</a>.$o$,
|
|
1379
|
-
$n$Les quatre premières options du <a href='/article/comment-configurer-nextblock'>guide d'installation</a> correspondent une à une aux chemins ci-dessous. La cinquième, où un agent de code IA crée le site, se met à jour comme le chemin 2 ou 3.$n$,
|
|
1380
|
-
NULL);
|
|
1381
|
-
|
|
1382
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1383
|
-
$o$dark:text-blue-200'>Entièrement automatique</p>$o$,
|
|
1384
|
-
$n$dark:text-blue-200'>Automatique après configuration</p>$n$,
|
|
1385
|
-
NULL);
|
|
1386
|
-
|
|
1387
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1388
|
-
$o$Un workflow quotidien fusionne les nouveautés dans votre dépôt et Vercel redéploie. Vous n'avez rien à faire.$o$,
|
|
1389
|
-
$n$Configuration unique : <strong>Connect GitHub</strong> dans le tableau de bord, ou activation des Actions sur un fork manuel. Ensuite, un workflow quotidien fusionne les nouveautés et Vercel redéploie.$n$,
|
|
1390
|
-
NULL);
|
|
1391
|
-
|
|
1392
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1393
|
-
$o$<h2 id='vercel'>1. Vercel en un clic et forks GitHub — sans intervention</h2>$o$,
|
|
1394
|
-
$n$<div class='rounded-3xl border border-slate-200 bg-slate-50 p-6 my-8 dark:border-white/10 dark:bg-white/5'>
|
|
1395
|
-
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-slate-600 dark:text-slate-300'>Installé par un agent de code IA ?</p>
|
|
1396
|
-
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Vous avez alors un projet <code>npm create nextblock</code> ordinaire. L'agent lance <code>npx create-nextblock@latest mon-site --non-interactive</code>, qui génère la même application autonome. Par défaut, elle tourne sous Docker et se met à jour comme le <a href='#docker'>chemin 2</a>. Avec <code>--mode cloud</code>, elle utilise Supabase géré et se met à jour comme le <a href='#cloud'>chemin 3</a>. Si l'agent lance la mise à jour pour vous, demandez-lui d'utiliser <code>node tools/update.mjs --yes</code>. Son terminal n'est pas interactif : sans cette option, la commande refuse de continuer. Plus de détails dans le <a href='/article/comment-configurer-nextblock#ai-agent'>guide d'installation</a>.</p>
|
|
1397
|
-
</div>
|
|
1398
|
-
|
|
1399
|
-
<h2 id='vercel'>1. Vercel en un clic et forks GitHub — sans intervention</h2>$n$,
|
|
1400
|
-
$u$Installé par un agent de code IA ?$u$);
|
|
1401
|
-
|
|
1402
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1403
|
-
$o$Lors du déploiement, NextBlock a créé un dépôt qui vous appartient ;$o$,
|
|
1404
|
-
$n$Lors du déploiement, Vercel a créé un dépôt qui vous appartient ;$n$,
|
|
1405
|
-
NULL);
|
|
1406
|
-
|
|
1407
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1408
|
-
$o$à la demande depuis l'onglet <strong>Actions</strong> de votre dépôt.</p>$o$,
|
|
1409
|
-
$n$à la demande depuis l'onglet <strong>Actions</strong> de votre dépôt. Un fork GitHub manuel contient déjà le workflow, mais GitHub y désactive les Actions. Activez-les une fois depuis l'onglet <strong>Actions</strong> du fork.</p>$n$,
|
|
1410
|
-
NULL);
|
|
1411
|
-
|
|
1412
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1413
|
-
$o$les commits automatisés sur un dépôt privé.</p>$o$,
|
|
1414
|
-
$n$les commits automatisés sur un dépôt privé. La fusion arriverait alors sans être déployée.</p>$n$,
|
|
1415
|
-
NULL);
|
|
1416
|
-
|
|
1417
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1418
|
-
$o$tout ce qui est remplacé est conservé sous <code>.nextblock-backup/</code>.</p>$o$,
|
|
1419
|
-
$n$tout ce qui est remplacé est conservé sous <code>.nextblock-backup/</code>.</p>
|
|
1420
|
-
<p>Un nouveau projet a besoin de ce premier commit. Le CLI <code>create-nextblock</code> lance <code>git init</code> mais ne crée aucun commit, y compris en mode Docker et lorsqu'un agent IA l'exécute. Validez donc une fois avant votre première mise à jour : <code>git add -A</code>, puis <code>git commit -m initial</code>. Le <code>.gitignore</code> généré exclut déjà vos fichiers <code>.env</code> et les configurations MCP de l'agent.</p>$n$,
|
|
1421
|
-
$u$git commit -m initial$u$);
|
|
1422
|
-
|
|
1423
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1424
|
-
$o$<pre><code>npm run update</code></pre>$o$,
|
|
1425
|
-
$n$<pre><code>npm run update
|
|
1426
|
-
npm run dev</code></pre>$n$,
|
|
1427
|
-
NULL);
|
|
1428
|
-
|
|
1429
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1430
|
-
$o$vous oriente vers <code>git pull --rebase</code> plutôt que de deviner.</p>$o$,
|
|
1431
|
-
$n$vous oriente vers <code>git pull --rebase</code> plutôt que de deviner. Une fois la mise à jour terminée, relancez le serveur de développement avec <code>npm run dev</code> (port 4200).</p>$n$,
|
|
1432
|
-
NULL);
|
|
1433
|
-
|
|
1434
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1435
|
-
$o$<td class='py-3 pr-4'><code>npm run update -- --check</code></td>$o$,
|
|
1436
|
-
$n$<td class='py-3 pr-4'><code>npm run update:check</code></td>$n$,
|
|
1437
|
-
NULL);
|
|
1438
|
-
|
|
1439
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1440
|
-
$o$<h2 id='database'>Ce qui arrive à votre base de données</h2>$o$,
|
|
1441
|
-
$n$<p class='text-sm'>Sous <strong>PowerShell</strong>, un <code>--</code> isolé est supprimé : les formes avec option ci-dessus s'exécutent alors comme un simple <code>npm run update</code>, avec ses confirmations. npm garde l'option pour lui : il affiche l'avertissement <code>Unknown cli config</code> pour <code>--check</code>, <code>--db-only</code> et <code>--skip-db</code>, mais <code>--yes</code> et <code>--force</code> sont aussi des options de npm, qu'il prend sans cet avertissement. Pour un aperçu, utilisez <code>npm run update:check</code>. Pour les autres options, appelez le script directement. Par exemple, dans un projet créé avec <code>npm create nextblock</code>, lancez <code>node tools/update.mjs --db-only</code> ; dans le monorepo, <code>node apps/nextblock/tools/update.mjs --db-only</code>. L'invite de commandes (<code>cmd.exe</code>) et les terminaux macOS et Linux ne sont pas concernés.</p>
|
|
1442
|
-
|
|
1443
|
-
<h2 id='database'>Ce qui arrive à votre base de données</h2>$n$,
|
|
1444
|
-
$u$node apps/nextblock/tools/update.mjs --db-only$u$);
|
|
1445
|
-
|
|
1446
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1447
|
-
$o$Les évolutions du schéma sont <strong>uniquement additives</strong>.$o$,
|
|
1448
|
-
$n$Les évolutions du schéma vont <strong>uniquement vers l'avant</strong>.$n$,
|
|
1449
|
-
NULL);
|
|
1450
|
-
|
|
1451
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1452
|
-
$o$<p>Les migrations modifient la <em>structure</em> — tables, colonnes, index, permissions. Vos pages, articles, produits, médias et utilisateurs vous appartiennent : la mise à jour ne les supprime ni ne les réécrit.</p>$o$,
|
|
1453
|
-
$n$<p>Les migrations modifient surtout la <em>structure</em> — tables, colonnes, index, permissions. Quelques-unes corrigent aussi des données. Elles rafraîchissent le contenu de démonstration, les couleurs de thème et les textes d'interface fournis par NextBlock, en général seulement là où ils sont encore tels que livrés. Plus rarement, une migration applique une correction mécanique ciblée à tout le contenu. Par exemple : passer les vidéos YouTube intégrées sur youtube-nocookie, ou retirer une classe CSS qui ralentissait le premier affichage. Aucune migration ne supprime vos pages, articles, produits, médias ou utilisateurs.</p>$n$,
|
|
1454
|
-
NULL);
|
|
1455
|
-
|
|
1456
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1457
|
-
$o$Avant un grand saut sur un site en production, prenez une sauvegarde de la base — Supabase en réalise quotidiennement sur les offres payantes, et vous pouvez en déclencher une à la demande depuis son tableau de bord. Lancez ensuite <code>npm run update -- --check</code> pour voir la liste des migrations en attente.$o$,
|
|
1458
|
-
$n$Avant un grand saut sur un site en production, prenez une sauvegarde de la base. Supabase en conserve une par jour sur les offres payantes, à restaurer depuis <strong>Database → Backups</strong> dans son tableau de bord. Pour votre propre copie, utilisez <code>pg_dump</code> avec la chaîne de connexion de votre base. Avec le CLI Supabase, <code>supabase db dump</code> ne sauvegarde que le schéma : lancez aussi <code>supabase db dump --data-only</code> pour les données. Sous Docker, lancez <code>pg_dump</code> dans le conteneur <code>db</code>. Lancez ensuite <code>npm run update:check</code> pour prévisualiser la mise à jour avant de vous lancer.$n$,
|
|
1459
|
-
NULL);
|
|
1460
|
-
|
|
1461
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1462
|
-
$o$Examinez-la avec <code>git diff</code>, et annulez tout avec <code>git reset --hard HEAD</code>. Rien n'est jamais supprimé : les fichiers que vous avez ajoutés ne disparaissent jamais.$o$,
|
|
1463
|
-
$n$Examinez-la avec <code>git status</code>, qui liste les fichiers ajoutés, et <code>git diff</code>. Pour annuler le code, lancez <code>git reset --hard HEAD</code> et <code>git clean -fd</code>, puis <code>npm install</code> pour rétablir vos dépendances. <code>git clean</code> supprime les fichiers ajoutés par la mise à jour, ainsi que tout fichier non suivi créé depuis : vérifiez d'abord avec <code>git clean -nd</code>. Les migrations déjà appliquées le restent : restaurez votre sauvegarde si vous avez besoin de l'ancien schéma. La mise à jour elle-même ne supprime jamais de fichier : ceux que vous avez ajoutés ne disparaissent jamais.$n$,
|
|
1464
|
-
NULL);
|
|
1465
|
-
|
|
1466
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1467
|
-
$o$<li><strong>Installations basées sur git :</strong> la mise à jour est un commit ordinaire. <code>git log</code> l'affiche et <code>git revert</code> l'annule.</li>$o$,
|
|
1468
|
-
$n$<li><strong>Installations basées sur git :</strong> le workflow quotidien applique chaque mise à jour sous forme de commit de fusion. <code>git log</code> l'affiche et <code>git revert -m 1 <commit-de-fusion></code> l'annule. Git considère alors ces changements comme déjà fusionnés. Les synchronisations suivantes ne les réappliqueront donc pas tant que vous n'aurez pas annulé ce revert. Vous avez lancé <code>npm run update</code> vous-même, sur un clone ou une copie locale de votre fork ? Juste après, <code>git reset --hard ORIG_HEAD</code> ramène le code en arrière et <code>npm install</code> rétablit les dépendances précédentes. Les migrations déjà appliquées le restent.</li>$n$,
|
|
1469
|
-
NULL);
|
|
1470
|
-
|
|
1471
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1472
|
-
$o$et <code>git reset --hard HEAD</code> annule toute la mise à jour.$o$,
|
|
1473
|
-
$n$et <code>git reset --hard HEAD</code>, <code>git clean -fd</code> puis <code>npm install</code> annulent toute la mise à jour.$n$,
|
|
1474
|
-
NULL);
|
|
1475
|
-
|
|
1476
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1477
|
-
$o$ou abandonnez avec <code>git reset --hard HEAD</code> : dans les deux cas la base n'a jamais été touchée.$o$,
|
|
1478
|
-
$n$ou abandonnez avec <code>git reset --hard HEAD</code>, <code>git clean -fd</code> puis <code>npm install</code> : dans les deux cas la base n'a jamais été touchée. Sans ces deux dernières commandes, les nouveaux fichiers de migration restent sur le disque, et une prochaine mise à jour ou reconstruction peut les appliquer.$n$,
|
|
1479
|
-
NULL);
|
|
1480
|
-
|
|
1481
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1482
|
-
$o$Les personnalisations dans vos propres fichiers, dans le CMS ou dans <code>.env</code> ne sont jamais touchées.$o$,
|
|
1483
|
-
$n$Les personnalisations dans vos propres fichiers ou dans <code>.env</code> ne sont jamais touchées.$n$,
|
|
1484
|
-
NULL);
|
|
1485
|
-
|
|
1486
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1487
|
-
$o$Les administrateurs peuvent aussi lancer <code>npm run update -- --check</code> à tout moment.$o$,
|
|
1488
|
-
$n$Les projets créés avec <code>npm create nextblock</code> affichent cette bannière, y compris ceux créés par un agent IA. Les déploiements en un clic et les forks sur Vercel ne l'affichent pas : le workflow quotidien fusionne les mises à jour pour eux. Les administrateurs peuvent aussi lancer <code>npm run update:check</code> à tout moment.$n$,
|
|
1489
|
-
NULL);
|
|
1490
|
-
|
|
1491
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1492
|
-
$o$La mise à jour ne touche que le code, les dépendances et la structure du schéma.</p>$o$,
|
|
1493
|
-
$n$La mise à jour modifie le code, les dépendances et le schéma de la base. Quelques migrations apportent aussi des corrections ciblées aux données, surtout au contenu de démonstration, aux traductions et aux couleurs de thème fournis par NextBlock (voir <a href='#database'>Ce qui arrive à votre base de données</a>). Aucune ne supprime votre contenu.</p>$n$,
|
|
1494
|
-
NULL);
|
|
1495
|
-
|
|
1496
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1497
|
-
$o$pour qu'un pipeline puisse le détecter.</p>$o$,
|
|
1498
|
-
$n$pour qu'un pipeline puisse le détecter. Définir <code>CI=true</code> désactive aussi les confirmations, quel que soit le terminal.</p>$n$,
|
|
1499
|
-
NULL);
|
|
1500
|
-
|
|
1501
|
-
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1502
|
-
$o$<p>Non. Ce chemin est entièrement automatique. La commande existe pour mettre à jour <em>tout de suite</em> plutôt qu'à minuit, ou lorsque vous travaillez sur un clone local.</p>$o$,
|
|
1503
|
-
$n$<p>Aucune commande. Une fois l'étape <strong>Connect GitHub</strong> du tableau de bord validée, ce chemin est entièrement automatique. Pour mettre à jour <em>tout de suite</em> plutôt qu'à minuit, ouvrez l'onglet <strong>Actions</strong> de votre dépôt et cliquez sur <strong>Run workflow</strong> sous <strong>NextBlock Upstream Sync</strong>. Vous pouvez aussi lancer la commande sur un clone local, puis pousser le résultat.</p>$n$,
|
|
1504
|
-
NULL);
|
|
1505
|
-
|
|
1506
|
-
-- ========================================================================================
|
|
1507
|
-
-- Post and page fields (applied with their item, each only while it holds the seeded value)
|
|
1508
|
-
-- ========================================================================================
|
|
1509
|
-
|
|
1510
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-nextblock-fonctionne', 'fr', 'subtitle',
|
|
1511
|
-
$o$Une visite guidee du monorepo, du registre de blocs, de l editeur et de l architecture open-core de NextBlock.$o$,
|
|
1512
|
-
$n$Une visite guidée du monorepo, du registre de blocs, de l'éditeur et de l'architecture open-core de NextBlock.$n$);
|
|
1513
|
-
|
|
1514
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-nextblock-fonctionne', 'fr', 'excerpt',
|
|
1515
|
-
$o$Sous le capot du monorepo, du registre de blocs et de l editeur qui propulsent NextBlock.$o$,
|
|
1516
|
-
$n$Sous le capot du monorepo, du registre de blocs et de l'éditeur qui propulsent NextBlock.$n$);
|
|
1517
|
-
|
|
1518
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'title',
|
|
1519
|
-
$o$NextBlock™ Commerce: Multi-Currency, Tax Sync & Beyond$o$,
|
|
1520
|
-
$n$NextBlock™ Commerce: Multi-Currency, Automatic Tax & Beyond$n$);
|
|
1521
|
-
|
|
1522
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'subtitle',
|
|
1523
|
-
$o$A closer look at the commerce module, from multi-currency and tax sync to shipping, inventory, and provider-aware checkout.$o$,
|
|
1524
|
-
$n$A closer look at the commerce module, from multi-currency pricing and automatic Stripe Tax to shipping, inventory, and provider-aware checkout.$n$);
|
|
1525
|
-
|
|
1526
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'meta_title',
|
|
1527
|
-
$o$The Complete NextBlock™ Commerce Guide | Headless Store$o$,
|
|
1528
|
-
$n$The Complete NextBlock™ Commerce Guide | Next.js Store$n$);
|
|
1529
|
-
|
|
1530
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'meta_description',
|
|
1531
|
-
$o$Build global e-commerce with NextBlock: manage products, configure multi-currency pricing, and accept payments with headless Stripe checkout.$o$,
|
|
1532
|
-
$n$Build a global store with NextBlock: products, multi-currency pricing, Stripe Tax, shipping zones, and Stripe or Freemius checkout.$n$);
|
|
1533
|
-
|
|
1534
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-commerce-nextblock', 'fr', 'meta_description',
|
|
1535
|
-
$o$Développez votre boutique avec NextBlock : gestion de produits, tarifs multi-devises et tunnel de paiement headless avec Stripe Checkout.$o$,
|
|
1536
|
-
$n$Développez votre boutique avec NextBlock : produits, tarifs multi-devises, Stripe Tax, zones de livraison et paiement Stripe ou Freemius.$n$);
|
|
1537
|
-
|
|
1538
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-commerce-nextblock', 'fr', 'subtitle',
|
|
1539
|
-
$o$Un apercu du module commerce : multi-devises, sync taxes, expedition, inventaire et paiements connectes.$o$,
|
|
1540
|
-
$n$Un aperçu du module commerce : multi-devises, taxes automatiques avec Stripe Tax, expédition, inventaire et paiements connectés.$n$);
|
|
1541
|
-
|
|
1542
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-commerce-nextblock', 'fr', 'excerpt',
|
|
1543
|
-
$o$Architecture boutique, parcours de paiement et fonctions commerce premium au coeur de NextBlock.$o$,
|
|
1544
|
-
$n$Architecture boutique, parcours de paiement et fonctions commerce premium au cœur de NextBlock.$n$);
|
|
1545
|
-
|
|
1546
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr', 'meta_description',
|
|
1547
|
-
$o$Apprenez à connecter Claude à NextBlock CMS avec le Model Context Protocol. Enregistrez /api/mcp dans Claude Code ou Cursor pour inspecter les schémas et bâtir des mises en page.$o$,
|
|
1548
|
-
$n$Connectez Claude à NextBlock CMS via le Model Context Protocol. Enregistrez /api/mcp dans Claude Code ou Cursor pour lire les schémas et bâtir des pages.$n$);
|
|
1549
|
-
|
|
1550
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'label',
|
|
1551
|
-
$o$AI Copilot$o$,
|
|
1552
|
-
$n$Cortex AI$n$);
|
|
1553
|
-
|
|
1554
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'subtitle',
|
|
1555
|
-
$o$See how Cortex AI brings structured generation, provider choice, and safer content workflows directly into the NextBlock editor.$o$,
|
|
1556
|
-
$n$See how Cortex AI brings structured generation, model choice, and safer content workflows directly into the NextBlock editor.$n$);
|
|
1557
|
-
|
|
1558
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'excerpt',
|
|
1559
|
-
$o$A practical guide to Cortex AI, the block-aware assistant for model routing, BYOK controls, and faster editorial production inside NextBlock.$o$,
|
|
1560
|
-
$n$A practical guide to Cortex AI: block-aware AI in the NextBlock editor with your own OpenRouter key, plus an MCP server for your AI app.$n$);
|
|
1561
|
-
|
|
1562
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'meta_description',
|
|
1563
|
-
$o$Learn how NextBlock Cortex AI helps teams generate, refine, and translate structured block content with model routing and BYOK controls.$o$,
|
|
1564
|
-
$n$Learn how NextBlock Cortex AI helps teams generate, refine, and translate block content with your own OpenRouter key, or over MCP from your AI app.$n$);
|
|
1565
|
-
|
|
1566
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'accueil', 'fr', 'meta_title',
|
|
1567
|
-
$o$NextBlock CMS$o$,
|
|
1568
|
-
$n$NextBlock : CMS constructeur de sites web par l'IA$n$);
|
|
1569
|
-
|
|
1570
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'accueil', 'fr', 'meta_description',
|
|
1571
|
-
$o$NextBlock™ est le CMS Next.js open source pensé pour les développeurs, qui allie des scores Lighthouse de 100 % à un puissant éditeur visuel par blocs.$o$,
|
|
1572
|
-
$n$Créez vite vos sites web avec le CMS constructeur par l'IA, relié à votre abonnement IA via MCP. Vos prompts deviennent des pages Next.js 16 en production.$n$);
|
|
1573
|
-
|
|
1574
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'articles', 'en', 'meta_description',
|
|
1575
|
-
$o$Read technical deep dives, tutorials, and release notes on Next.js 16, Supabase, and modern visual web publishing from the NextBlock team.$o$,
|
|
1576
|
-
$n$Read technical deep dives and step-by-step guides on installing, updating, and extending NextBlock with Next.js 16, Supabase, Cortex AI, and MCP.$n$);
|
|
1577
|
-
|
|
1578
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'articles', 'fr', 'meta_description',
|
|
1579
|
-
$o$Découvrez des guides techniques, des tutoriels et des analyses sur Next.js 16, Supabase et l’édition de blocs moderne avec l’équipe NextBlock.$o$,
|
|
1580
|
-
$n$Découvrez des analyses techniques et des guides pas à pas pour installer, mettre à jour et étendre NextBlock avec Next.js 16, Supabase, Cortex AI et MCP.$n$);
|
|
1581
|
-
|
|
1582
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'subtitle',
|
|
1583
|
-
$o$Four ways to launch NextBlock: a one-click Vercel deploy, npm create nextblock, git clone with the browser setup wizard, or a fully local Docker stack.$o$,
|
|
1584
|
-
$n$Five ways to launch NextBlock: a one-click Vercel deploy, npm create nextblock, git clone with the browser setup wizard, a fully local Docker stack, or your AI coding agent.$n$);
|
|
1585
|
-
|
|
1586
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'excerpt',
|
|
1587
|
-
$o$Every way to install NextBlock — one-click cloud deploy, CLI scaffold, git clone, or self-hosted Docker — with copy-paste steps for each.$o$,
|
|
1588
|
-
$n$Every way to install NextBlock — one-click cloud deploy, CLI scaffold, git clone, self-hosted Docker, or your AI coding agent — with copy-paste steps for each.$n$);
|
|
1589
|
-
|
|
1590
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'meta_title',
|
|
1591
|
-
$o$How to Install NextBlock CMS — Vercel, CLI, Git or Docker$o$,
|
|
1592
|
-
$n$Install NextBlock CMS: Vercel, CLI, Git, Docker or AI Agent$n$);
|
|
1593
|
-
|
|
1594
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'meta_description',
|
|
1595
|
-
$o$Install NextBlock in minutes — one-click Vercel deploy, npm create nextblock, git clone, or self-hosted Docker. No config files, no manual SQL.$o$,
|
|
1596
|
-
$n$Install NextBlock in minutes: one-click Vercel deploy, npm create nextblock, git clone, self-hosted Docker, or your AI coding agent. No manual SQL.$n$);
|
|
1597
|
-
|
|
1598
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'subtitle',
|
|
1599
|
-
$o$Quatre façons de lancer NextBlock : déploiement Vercel en un clic, npm create nextblock, git clone avec l'assistant dans le navigateur, ou une pile Docker 100 % locale.$o$,
|
|
1600
|
-
$n$Cinq façons de lancer NextBlock : déploiement Vercel en un clic, npm create nextblock, git clone avec l'assistant dans le navigateur, une pile Docker 100 % locale ou votre agent de code IA.$n$);
|
|
1601
|
-
|
|
1602
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'excerpt',
|
|
1603
|
-
$o$Toutes les façons d'installer NextBlock — cloud en un clic, CLI, git clone ou Docker auto-hébergé — avec les étapes à copier-coller.$o$,
|
|
1604
|
-
$n$Toutes les façons d'installer NextBlock — cloud en un clic, CLI, git clone, Docker auto-hébergé ou votre agent de code IA — avec les étapes à copier-coller.$n$);
|
|
1605
|
-
|
|
1606
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'meta_title',
|
|
1607
|
-
$o$Installer NextBlock — Vercel, CLI, Git ou Docker$o$,
|
|
1608
|
-
$n$Installer NextBlock : Vercel, CLI, Git, Docker ou agent IA$n$);
|
|
1609
|
-
|
|
1610
|
-
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'meta_description',
|
|
1611
|
-
$o$Installez NextBlock en quelques minutes : déploiement Vercel en un clic, npm create nextblock, git clone ou Docker auto-hébergé. Sans config ni SQL.$o$,
|
|
1612
|
-
$n$Installez NextBlock en quelques minutes : Vercel en un clic, npm create nextblock, git clone, Docker auto-hébergé ou votre agent IA. Sans SQL manuel.$n$);
|
|
1613
|
-
|
|
1614
|
-
-- ========================================================================================
|
|
1615
|
-
-- Apply, item by item. Install guides first: items that point at Option 5 require it.
|
|
1616
|
-
-- ========================================================================================
|
|
1617
|
-
|
|
1618
|
-
DO $nb_02018_items$
|
|
1619
|
-
BEGIN
|
|
1620
|
-
PERFORM pg_temp.nb_02018_item('post', 'how-to-setup-nextblock', 'en', false);
|
|
1621
|
-
PERFORM pg_temp.nb_02018_item('post', 'comment-configurer-nextblock', 'fr', false);
|
|
1622
|
-
PERFORM pg_temp.nb_02018_item('post', 'how-nextblock-works', 'en', true);
|
|
1623
|
-
PERFORM pg_temp.nb_02018_item('post', 'comment-nextblock-fonctionne', 'fr', true);
|
|
1624
|
-
PERFORM pg_temp.nb_02018_item('post', 'nextblock-commerce-guide', 'en', false);
|
|
1625
|
-
PERFORM pg_temp.nb_02018_item('post', 'guide-commerce-nextblock', 'fr', false);
|
|
1626
|
-
PERFORM pg_temp.nb_02018_item('post', 'cortex-ai-mcp-connection-guide', 'en', true);
|
|
1627
|
-
PERFORM pg_temp.nb_02018_item('post', 'guide-connexion-mcp-cortex-ai', 'fr', true);
|
|
1628
|
-
PERFORM pg_temp.nb_02018_item('post', 'nextblock-cortex-ai-guide', 'en', false);
|
|
1629
|
-
PERFORM pg_temp.nb_02018_item('page', 'home', 'en', true);
|
|
1630
|
-
PERFORM pg_temp.nb_02018_item('page', 'accueil', 'fr', true);
|
|
1631
|
-
PERFORM pg_temp.nb_02018_item('page', 'articles', 'en', false);
|
|
1632
|
-
PERFORM pg_temp.nb_02018_item('page', 'articles', 'fr', false);
|
|
1633
|
-
PERFORM pg_temp.nb_02018_item('post', 'how-updating-works', 'en', true);
|
|
1634
|
-
PERFORM pg_temp.nb_02018_item('post', 'comment-fonctionnent-les-mises-a-jour', 'fr', true);
|
|
1635
|
-
END
|
|
1636
|
-
$nb_02018_items$;
|
|
1637
|
-
|
|
1638
|
-
-- ==========================================================================================
|
|
1639
|
-
-- French Cortex AI guide ('guide-cortex-ai-nextblock'), the insert 02009 meant to make.
|
|
1640
|
-
-- 02009 keyed it on translation group dbe2a06f-…, but the seeded English post
|
|
1641
|
-
-- 'nextblock-cortex-ai-guide' lives in group 669489e7-…, so its guard never matched and the
|
|
1642
|
-
-- French twin exists nowhere. The English row is resolved here by slug + language, and the
|
|
1643
|
-
-- French row takes its translation group, feature image, status and publish date, so it is
|
|
1644
|
-
-- exactly as visible as the English original (a drafted or archived English guide yields a
|
|
1645
|
-
-- drafted or archived French twin). Inserted once: skipped when that group already has a
|
|
1646
|
-
-- French row or the French slug is taken.
|
|
1647
|
-
-- ==========================================================================================
|
|
1648
|
-
|
|
1649
|
-
DO $nb_02018_fr_cortex$
|
|
1650
|
-
DECLARE
|
|
1651
|
-
v_fr bigint;
|
|
1652
|
-
v_en record;
|
|
1653
|
-
v_post bigint;
|
|
1654
|
-
BEGIN
|
|
1655
|
-
SELECT id INTO v_fr FROM public.languages WHERE code = 'fr' LIMIT 1;
|
|
1656
|
-
SELECT p.id, p.translation_group_id, p.feature_image_id, p.published_at, p.status
|
|
1657
|
-
INTO v_en
|
|
1658
|
-
FROM public.posts AS p
|
|
1659
|
-
JOIN public.languages AS l ON l.id = p.language_id
|
|
1660
|
-
WHERE p.slug = 'nextblock-cortex-ai-guide' AND l.code = 'en'
|
|
1661
|
-
ORDER BY p.id
|
|
1662
|
-
LIMIT 1;
|
|
1663
|
-
|
|
1664
|
-
IF v_fr IS NULL OR v_en.id IS NULL OR v_en.translation_group_id IS NULL THEN
|
|
1665
|
-
RAISE NOTICE '02018: no French language or no English Cortex AI guide; French guide not inserted.';
|
|
1666
|
-
RETURN;
|
|
1667
|
-
END IF;
|
|
1668
|
-
|
|
1669
|
-
IF EXISTS (SELECT 1 FROM public.posts WHERE translation_group_id = v_en.translation_group_id AND language_id = v_fr)
|
|
1670
|
-
OR EXISTS (SELECT 1 FROM public.posts WHERE slug = 'guide-cortex-ai-nextblock' AND language_id = v_fr) THEN
|
|
1671
|
-
RETURN;
|
|
1672
|
-
END IF;
|
|
1673
|
-
|
|
1674
|
-
-- The seed inserts explicit ids; make sure the identity sequences are past them. Only ever
|
|
1675
|
-
-- move a sequence forward: rewinding would hand a deleted row's id to this insert (and to
|
|
1676
|
-
-- every later CMS insert), and could collide with a concurrent insert on a live site.
|
|
1677
|
-
PERFORM setval('public.posts_id_seq',
|
|
1678
|
-
GREATEST(COALESCE((SELECT MAX(id) FROM public.posts), 1), (SELECT last_value FROM public.posts_id_seq)), true);
|
|
1679
|
-
PERFORM setval('public.blocks_id_seq',
|
|
1680
|
-
GREATEST(COALESCE((SELECT MAX(id) FROM public.blocks), 1), (SELECT last_value FROM public.blocks_id_seq)), true);
|
|
1681
|
-
|
|
1682
|
-
INSERT INTO public.posts
|
|
1683
|
-
(language_id, author_id, title, slug, label, excerpt, subtitle, status, published_at,
|
|
1684
|
-
meta_title, meta_description, feature_image_id, version, translation_group_id)
|
|
1685
|
-
VALUES
|
|
1686
|
-
(v_fr, NULL, $o$Guide NextBlock Cortex AI$o$, 'guide-cortex-ai-nextblock', $o$Cortex AI$o$,
|
|
1687
|
-
$o$Un guide pratique de Cortex AI : l'IA qui comprend vos blocs, dans l'éditeur NextBlock, avec votre propre clé OpenRouter, plus un serveur MCP pour votre application IA.$o$,
|
|
1688
|
-
$o$Découvrez comment Cortex AI apporte la génération structurée, le choix du modèle et des flux de contenu plus sûrs directement dans l'éditeur NextBlock.$o$,
|
|
1689
|
-
v_en.status, v_en.published_at,
|
|
1690
|
-
$o$Guide NextBlock Cortex AI$o$,
|
|
1691
|
-
$o$Découvrez comment NextBlock Cortex AI aide les équipes à générer, affiner et traduire du contenu par blocs, avec votre clé OpenRouter ou via MCP.$o$,
|
|
1692
|
-
v_en.feature_image_id, 1, v_en.translation_group_id)
|
|
1693
|
-
RETURNING id INTO v_post;
|
|
1694
|
-
|
|
1695
|
-
INSERT INTO public.blocks (post_id, language_id, block_type, content, "order")
|
|
1696
|
-
VALUES (v_post, v_fr, 'text', jsonb_build_object('html_content', replace($h$
|
|
1697
|
-
<p class='text-lg leading-8 text-slate-700 dark:text-slate-300'>NextBlock Cortex AI est l'outil de contenu intelligent conçu pour les pages web modernes. Il comprend les blocs de page, les mises en page de sections et les règles éditoriales, pour que vous créiez un meilleur contenu, plus vite.</p>
|
|
1698
|
-
|
|
1699
|
-
<div class='grid gap-4 md:grid-cols-3 my-10'>
|
|
1700
|
-
<div class='rounded-3xl border border-violet-200/70 bg-violet-50/80 p-6 dark:border-violet-500/20 dark:bg-violet-500/10'>
|
|
1701
|
-
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-violet-700 dark:text-violet-200'>Choix du modèle</p>
|
|
1702
|
-
<h2 class='mt-3 text-xl font-semibold text-slate-900 dark:text-white'>Choisissez le bon modèle</h2>
|
|
1703
|
-
<p class='mt-3 text-sm text-slate-600 dark:text-slate-300'>Branchez votre propre clé OpenRouter et choisissez un seul modèle pour tout le site : des modèles gratuits avec bascule automatique, ou le modèle payant de votre choix.</p>
|
|
1704
|
-
</div>
|
|
1705
|
-
<div class='rounded-3xl border border-sky-200/70 bg-sky-50/80 p-6 dark:border-sky-500/20 dark:bg-sky-500/10'>
|
|
1706
|
-
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-sky-700 dark:text-sky-200'>Contrôle BYOK</p>
|
|
1707
|
-
<h2 class='mt-3 text-xl font-semibold text-slate-900 dark:text-white'>Utilisez vos propres clés</h2>
|
|
1708
|
-
<p class='mt-3 text-sm text-slate-600 dark:text-slate-300'>Gardez les clés des fournisseurs en sécurité sur votre serveur tout en offrant aux éditeurs un écran de rédaction IA tout simple.</p>
|
|
1709
|
-
</div>
|
|
1710
|
-
<div class='rounded-3xl border border-emerald-200/70 bg-emerald-50/80 p-6 dark:border-emerald-500/20 dark:bg-emerald-500/10'>
|
|
1711
|
-
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-emerald-700 dark:text-emerald-200'>Sortie typée</p>
|
|
1712
|
-
<h2 class='mt-3 text-xl font-semibold text-slate-900 dark:text-white'>Générez des blocs valides</h2>
|
|
1713
|
-
<p class='mt-3 text-sm text-slate-600 dark:text-slate-300'>Des schémas typés garantissent que le contenu IA s'insère directement dans vos pages sous forme de blocs propres et fonctionnels.</p>
|
|
1714
|
-
</div>
|
|
1715
|
-
</div>
|
|
1716
|
-
|
|
1717
|
-
<h2>Pourquoi Cortex AI a sa place dans l'éditeur</h2>
|
|
1718
|
-
<p>Les outils de clavardage génériques peuvent rédiger du texte, mais ils ne font pas la différence entre une bannière héros, une grille de cartes et un article de blogue. Cortex AI vit directement dans votre écran d'édition. Il crée du contenu qui s'ajuste aux blocs de votre site en ligne.</p>
|
|
1719
|
-
<p>L'IA devient ainsi vraiment utile au quotidien. Vous pouvez ébaucher une nouvelle section d'accueil, peaufiner un résumé, enrichir une fiche produit ou traduire un article complet en toute simplicité.</p>
|
|
1720
|
-
|
|
1721
|
-
<div class='rounded-[2rem] border border-slate-200/80 bg-slate-50/90 p-6 my-10 dark:border-white/10 dark:bg-slate-900/70'>
|
|
1722
|
-
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-violet-700 dark:text-violet-200'>Flux éditorial</p>
|
|
1723
|
-
<div class='grid gap-5 md:grid-cols-2 mt-5'>
|
|
1724
|
-
<div class='rounded-2xl border border-slate-200 bg-white p-5 dark:border-white/10 dark:bg-slate-950/50'>
|
|
1725
|
-
<h3 class='mt-0 text-xl text-slate-900 dark:text-white'>Des premiers jets plus rapides</h3>
|
|
1726
|
-
<p class='text-sm text-slate-600 dark:text-slate-300'>Partez d'un prompt et obtenez une section, un brouillon d'article ou une histoire de produit qui respecte votre ton.</p>
|
|
1727
|
-
</div>
|
|
1728
|
-
<div class='rounded-2xl border border-slate-200 bg-white p-5 dark:border-white/10 dark:bg-slate-950/50'>
|
|
1729
|
-
<h3 class='mt-0 text-xl text-slate-900 dark:text-white'>Des révisions plus nettes</h3>
|
|
1730
|
-
<p class='text-sm text-slate-600 dark:text-slate-300'>Demandez un texte plus court, plus clair ou traduit, sans quitter votre écran d'édition.</p>
|
|
1731
|
-
</div>
|
|
1732
|
-
</div>
|
|
1733
|
-
</div>
|
|
1734
|
-
|
|
1735
|
-
<h2>Choix du modèle et contrôle des coûts</h2>
|
|
1736
|
-
<p>Cortex AI fonctionne avec OpenRouter, et vous choisissez un seul modèle pour tout le site dans les réglages de Cortex AI. Les modèles gratuits sont proposés par défaut, avec une bascule automatique quand l'un d'eux est occupé. Ils demandent quand même une clé OpenRouter, mais un compte OpenRouter gratuit suffit. Pour choisir un modèle payant, enregistrez votre clé dans le CMS. Vous gérez cette clé sur le serveur, pour que vos rédacteurs se concentrent sur le contenu.</p>
|
|
1737
|
-
<ul class='list-disc pl-6 space-y-2 text-sm'>
|
|
1738
|
-
<li>Commencez avec les modèles gratuits, sans frais de modèle.</li>
|
|
1739
|
-
<li>Passez tout le site à un modèle payant plus puissant quand vous visez plus de qualité.</li>
|
|
1740
|
-
<li>Gardez votre clé OpenRouter chiffrée dans les réglages du CMS.</li>
|
|
1741
|
-
<li>Maîtrisez les coûts sans changer l'affichage des pages pour les visiteurs.</li>
|
|
1742
|
-
</ul>
|
|
1743
|
-
|
|
1744
|
-
<h2>Une génération pensée pour vos blocs</h2>
|
|
1745
|
-
<p>Cortex AI fait plus qu'écrire du texte brut. Il crée du contenu structuré qui correspond directement aux composants NextBlock. Vous obtenez des textes de section, des titres, des boutons et des blocs traduits prêts à l'emploi. Vous passez moins de temps à remettre en forme des textes approximatifs venus d'outils externes.</p>
|
|
1746
|
-
<p>Comme le contenu généré respecte vos règles de blocs, tout reste cohérent et rapide sur le web.</p>
|
|
1747
|
-
|
|
1748
|
-
<h2>Des flux d'équipe plus sûrs</h2>
|
|
1749
|
-
<p>L'IA donne le meilleur d'elle-même quand les humains gardent le contrôle. Avec Cortex AI, les éditeurs révisent chaque brouillon avant publication. Les développeurs gèrent les clés des modèles, et le CMS conserve toutes les versions dans votre historique habituel.</p>
|
|
1750
|
-
|
|
1751
|
-
<h2>Un flux de lancement concret</h2>
|
|
1752
|
-
<ol class='list-decimal pl-6 space-y-2 text-sm'>
|
|
1753
|
-
<li>Ébauchez un article, une section d'accueil ou une histoire de produit à partir d'un prompt clair.</li>
|
|
1754
|
-
<li>Affinez le texte pour qu'il colle à votre public et au ton de votre marque.</li>
|
|
1755
|
-
<li>Créez une version traduite ou un résumé plus court pour les cartes sociales et les balises de recherche.</li>
|
|
1756
|
-
<li>Révisez le contenu dans l'éditeur, publiez, puis suivez vos révisions au fil du temps.</li>
|
|
1757
|
-
</ol>
|
|
1758
|
-
|
|
1759
|
-
<h2>Deux façons d'utiliser Cortex AI</h2>
|
|
1760
|
-
<p>Cortex AI travaille à deux endroits. <strong>L'IA dans l'éditeur</strong> ébauche, réécrit et traduit vos blocs avec votre propre clé OpenRouter, modèles gratuits compris. <strong>Le serveur MCP</strong> permet à votre propre application IA, comme Claude Code ou Cursor, de bâtir vos pages avec l'abonnement que vous payez déjà. <a href='/article/guide-connexion-mcp-cortex-ai'>Connectez votre application IA via MCP</a>.</p>
|
|
1761
|
-
<p>Le CMS NextBlock est gratuit et open source, sous licence AGPL. Ces deux usages font partie de Cortex AI, qui commence par un essai gratuit de 30 jours, sans carte de crédit.</p>
|
|
1762
|
-
|
|
1763
|
-
<p>Cortex AI transforme votre CMS en atelier créatif plus rapide. Il ne remplace pas le goût humain, mais il vous aide à transformer de bonnes idées en pages finies en un temps record.</p>$h$, chr(13), '')), 0);
|
|
1764
|
-
END
|
|
1765
|
-
$nb_02018_fr_cortex$;
|
|
1766
|
-
|
|
1767
|
-
-- French install guide -> French Cortex AI guide. Linked only once that guide exists and is
|
|
1768
|
-
-- published (inserted above, or an operator's own translation in the same group under its own
|
|
1769
|
-
-- slug), and only where the install guide was rewritten above.
|
|
1770
|
-
DO $nb_02018_fr_cortex_link$
|
|
1771
|
-
DECLARE
|
|
1772
|
-
v_group uuid;
|
|
1773
|
-
v_slug text;
|
|
1774
|
-
BEGIN
|
|
1775
|
-
SELECT p.translation_group_id INTO v_group
|
|
1776
|
-
FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
1777
|
-
WHERE p.slug = 'nextblock-cortex-ai-guide' AND l.code = 'en'
|
|
1778
|
-
ORDER BY p.id LIMIT 1;
|
|
1779
|
-
|
|
1780
|
-
SELECT p.slug INTO v_slug
|
|
1781
|
-
FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
1782
|
-
WHERE l.code = 'fr' AND p.status = 'published'
|
|
1783
|
-
AND ((v_group IS NOT NULL AND p.translation_group_id = v_group) OR p.slug = 'guide-cortex-ai-nextblock')
|
|
1784
|
-
ORDER BY (p.translation_group_id IS NOT DISTINCT FROM v_group) DESC, p.id
|
|
1785
|
-
LIMIT 1;
|
|
1786
|
-
|
|
1787
|
-
IF v_slug IS NULL THEN
|
|
1788
|
-
RETURN;
|
|
1789
|
-
END IF;
|
|
1790
|
-
|
|
1791
|
-
PERFORM pg_temp.nb_02018_fragment('post', 'comment-configurer-nextblock', 'fr',
|
|
1792
|
-
$o$, ou mettez Cortex AI au travail avec le <a href='/article/guide-connexion-mcp-cortex-ai'>guide de connexion MCP</a>.</p>$o$,
|
|
1793
|
-
format($n$, ou mettez Cortex AI au travail avec le <a href='/article/%s'>guide Cortex AI</a> et le <a href='/article/guide-connexion-mcp-cortex-ai'>guide de connexion MCP</a>.</p>$n$, v_slug),
|
|
1794
|
-
$u$guide Cortex AI</a> et le <a href='/article/guide-connexion-mcp-cortex-ai'>$u$);
|
|
1795
|
-
END
|
|
1796
|
-
$nb_02018_fr_cortex_link$;
|
|
1797
|
-
|
|
1798
|
-
-- ==========================================================================================
|
|
1799
|
-
-- English home: the 'More Than a CMS' community section and the 'Have Questions?' CTA both
|
|
1800
|
-
-- carry "order" = 7 (the French home uses 7 and 8), and the public query orders by "order"
|
|
1801
|
-
-- alone, so which one renders first is undefined. Move the CTA after the community section,
|
|
1802
|
-
-- as in French. Matched by page + content signature; skipped once order 8 is taken.
|
|
1803
|
-
-- ==========================================================================================
|
|
1804
|
-
|
|
1805
|
-
UPDATE public.blocks AS b
|
|
1806
|
-
SET "order" = 8,
|
|
1807
|
-
updated_at = now()
|
|
1808
|
-
FROM public.pages AS p
|
|
1809
|
-
JOIN public.languages AS l ON l.id = p.language_id
|
|
1810
|
-
WHERE b.page_id = p.id AND p.slug = 'home' AND l.code = 'en'
|
|
1811
|
-
AND b.block_type = 'section' AND b."order" = 7
|
|
1812
|
-
AND b.content::text LIKE '%Have Questions?%'
|
|
1813
|
-
AND EXISTS (SELECT 1 FROM public.blocks AS o WHERE o.page_id = p.id AND o.id <> b.id AND o."order" = 7)
|
|
1814
|
-
AND NOT EXISTS (SELECT 1 FROM public.blocks AS o WHERE o.page_id = p.id AND o."order" = 8);
|
|
1815
|
-
|
|
1816
|
-
DROP FUNCTION IF EXISTS pg_temp.nb_02018_item(text, text, text, boolean);
|
|
1817
|
-
DROP FUNCTION IF EXISTS pg_temp.nb_02018_fragment(text, text, text, text, text, text);
|
|
1818
|
-
DROP FUNCTION IF EXISTS pg_temp.nb_02018_json_inner(text);
|
|
1819
|
-
DROP TABLE IF EXISTS pg_temp.nb_02018_edits;
|
|
1820
|
-
DROP TABLE IF EXISTS pg_temp.nb_02018_fields;
|
|
1
|
+
-- 02018: seeded content refresh, EN + FR -- the fifth install path (an AI coding agent),
|
|
2
|
+
-- `npm run dev` in the monorepo, and audited accuracy fixes across the seeded posts and the
|
|
3
|
+
-- home / articles pages. Copy and metadata only; no schema change.
|
|
4
|
+
--
|
|
5
|
+
-- * Install guide ('how-to-setup-nextblock' / 'comment-configurer-nextblock'): Option 5, "let
|
|
6
|
+
-- your AI coding agent install it" (`npx create-nextblock@latest my-site --non-interactive`,
|
|
7
|
+
-- the two browser steps, the MCP server, the Claude Code / Cursor / Codex plugin); the clone
|
|
8
|
+
-- starts with `npm run dev` (root alias of `npx nx serve nextblock` since 2026-08-21, the copy
|
|
9
|
+
-- still said the monorepo had none); the post-setup Cortex AI welcome screen; Cloudflare R2 is
|
|
10
|
+
-- optional; Commerce Pro activates from Administration -> Packages (the CLI `activate` command
|
|
11
|
+
-- overwrites working routes); the update FAQ points at `npm run update`; no "copilot".
|
|
12
|
+
-- * Updating guide ('how-updating-works' / 'comment-fonctionnent-les-mises-a-jour'): five install
|
|
13
|
+
-- paths, four update paths; `npm run update:check` (PowerShell strips a bare `--`, so
|
|
14
|
+
-- `npm run update -- --check` ran a full update); the first commit a new scaffold needs;
|
|
15
|
+
-- rollback commands that work (merge commits need `git revert -m 1`); backups; migrations do
|
|
16
|
+
-- fix seeded data.
|
|
17
|
+
-- * MCP guide ('cortex-ai-mcp-connection-guide' / 'guide-connexion-mcp-cortex-ai'): where the
|
|
18
|
+
-- trial starts, what the agent can publish (drafts are not the only path), 6 contract tools /
|
|
19
|
+
-- 50 typed tools, five client tabs, ports, a "starting from nothing?" pointer to Option 5.
|
|
20
|
+
-- * Cortex AI guide ('nextblock-cortex-ai-guide'): label 'Cortex AI', OpenRouter-only single
|
|
21
|
+
-- model setting, the two surfaces (editor + MCP server), the 30-day trial; and its French twin
|
|
22
|
+
-- 'guide-cortex-ai-nextblock' (below), which 02009 never managed to insert.
|
|
23
|
+
-- * Architecture and commerce posts, home and articles pages: premium modules are AGPL too,
|
|
24
|
+
-- @nextblock-cms/cortex, per-currency price overrides, Stripe Tax wording, daily FX sync, no ISR
|
|
25
|
+
-- claim, linked translations, the agent path on the home page, FR link/alt/meta fixes, and the
|
|
26
|
+
-- English home's duplicate block "order".
|
|
27
|
+
--
|
|
28
|
+
-- How: every fragment is queued with its post or page (slug + language; never blocks.id, ids
|
|
29
|
+
-- drift on every install) and applied by pg_temp.nb_02018_item, all or nothing per post/page:
|
|
30
|
+
-- only if every seeded fragment of that item is still present are its blocks rewritten, then
|
|
31
|
+
-- the same fragments in its revision snapshots, then its fields (row and snapshot meta, each
|
|
32
|
+
-- only while it still holds the seeded value). An item an operator edited, even by re-saving
|
|
33
|
+
-- it in the editor (which re-serialises the HTML), is left exactly as it is, never half
|
|
34
|
+
-- rewritten; a NOTICE names it. Items that point at the install guide's Option 5 (#ai-agent)
|
|
35
|
+
-- run only if that guide, in the same language, has the section. Patterns are single-line and
|
|
36
|
+
-- carriage returns are stripped from every replacement, so the stored copy is LF whatever line
|
|
37
|
+
-- endings this file arrives with. Idempotent: a second run finds nothing to replace.
|
|
38
|
+
--
|
|
39
|
+
-- NOTE: keep the word "sandbox" OUT of this filename -- generate-sandbox-reset.ts excludes any
|
|
40
|
+
-- migration whose filename contains "sandbox" from the reset bundle.
|
|
41
|
+
|
|
42
|
+
-- JSON-escapes a raw HTML fragment exactly as Postgres prints it inside content::text, so a
|
|
43
|
+
-- fragment written below as plain HTML matches the stored jsonb text form. Carriage returns are
|
|
44
|
+
-- dropped first: a Windows checkout can hand this file over with CRLF endings, and the stored
|
|
45
|
+
-- copy must be LF on every install.
|
|
46
|
+
CREATE OR REPLACE FUNCTION pg_temp.nb_02018_json_inner(src text)
|
|
47
|
+
RETURNS text
|
|
48
|
+
LANGUAGE sql
|
|
49
|
+
IMMUTABLE
|
|
50
|
+
AS $fn$
|
|
51
|
+
SELECT substr(to_jsonb(replace(src, chr(13), ''))::text, 2,
|
|
52
|
+
length(to_jsonb(replace(src, chr(13), ''))::text) - 2)
|
|
53
|
+
$fn$;
|
|
54
|
+
|
|
55
|
+
DROP TABLE IF EXISTS pg_temp.nb_02018_edits;
|
|
56
|
+
CREATE TEMP TABLE nb_02018_edits (
|
|
57
|
+
seq bigserial PRIMARY KEY,
|
|
58
|
+
kind text NOT NULL,
|
|
59
|
+
slug text NOT NULL,
|
|
60
|
+
lang text NOT NULL,
|
|
61
|
+
old_html text NOT NULL,
|
|
62
|
+
new_html text NOT NULL,
|
|
63
|
+
unless_html text
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
DROP TABLE IF EXISTS pg_temp.nb_02018_fields;
|
|
67
|
+
CREATE TEMP TABLE nb_02018_fields (
|
|
68
|
+
seq bigserial PRIMARY KEY,
|
|
69
|
+
kind text NOT NULL,
|
|
70
|
+
slug text NOT NULL,
|
|
71
|
+
lang text NOT NULL,
|
|
72
|
+
field text NOT NULL CHECK (field IN ('title', 'label', 'excerpt', 'subtitle', 'meta_title', 'meta_description')),
|
|
73
|
+
old_value text NOT NULL,
|
|
74
|
+
new_value text NOT NULL
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
-- Rewrites one fragment in every block and revision snapshot of a post or page, where it is
|
|
78
|
+
-- still present (and, for insertions, where the marker is absent).
|
|
79
|
+
CREATE OR REPLACE FUNCTION pg_temp.nb_02018_fragment(
|
|
80
|
+
p_kind text, p_slug text, p_lang text, p_old text, p_new text, p_unless text)
|
|
81
|
+
RETURNS void
|
|
82
|
+
LANGUAGE plpgsql
|
|
83
|
+
AS $fn$
|
|
84
|
+
DECLARE
|
|
85
|
+
v_old text := pg_temp.nb_02018_json_inner(p_old);
|
|
86
|
+
v_new text := pg_temp.nb_02018_json_inner(p_new);
|
|
87
|
+
v_unless text := CASE WHEN p_unless IS NULL THEN NULL ELSE pg_temp.nb_02018_json_inner(p_unless) END;
|
|
88
|
+
v_parent bigint;
|
|
89
|
+
BEGIN
|
|
90
|
+
IF p_kind = 'post' THEN
|
|
91
|
+
SELECT p.id INTO v_parent FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
92
|
+
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
93
|
+
UPDATE public.blocks SET content = replace(content::text, v_old, v_new)::jsonb, updated_at = now()
|
|
94
|
+
WHERE post_id = v_parent AND position(v_old IN content::text) > 0
|
|
95
|
+
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
96
|
+
UPDATE public.post_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
97
|
+
WHERE post_id = v_parent AND position(v_old IN content::text) > 0
|
|
98
|
+
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
99
|
+
ELSE
|
|
100
|
+
SELECT p.id INTO v_parent FROM public.pages AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
101
|
+
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
102
|
+
UPDATE public.blocks SET content = replace(content::text, v_old, v_new)::jsonb, updated_at = now()
|
|
103
|
+
WHERE page_id = v_parent AND position(v_old IN content::text) > 0
|
|
104
|
+
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
105
|
+
UPDATE public.page_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
106
|
+
WHERE page_id = v_parent AND position(v_old IN content::text) > 0
|
|
107
|
+
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
108
|
+
END IF;
|
|
109
|
+
END
|
|
110
|
+
$fn$;
|
|
111
|
+
|
|
112
|
+
-- Applies every queued edit of one post or page, all or nothing. The edits are replayed in
|
|
113
|
+
-- order against the item's blocks in memory; only if every one of them finds its seeded
|
|
114
|
+
-- fragment are the blocks written back, followed by the same fragments in the revision
|
|
115
|
+
-- snapshots and the queued fields (row + snapshot meta, each only while it still holds the
|
|
116
|
+
-- seeded value). An item an operator has edited, even by re-saving it in the editor (which
|
|
117
|
+
-- re-serialises the HTML), is left untouched as a whole, so it never ends up half old, half
|
|
118
|
+
-- new. A second run finds nothing to replace and is a no-op.
|
|
119
|
+
-- p_needs_agent_guide: the item points readers at the install guide's Option 5
|
|
120
|
+
-- (#ai-agent); it is rewritten only if that guide, in the same language, has the section.
|
|
121
|
+
CREATE OR REPLACE FUNCTION pg_temp.nb_02018_item(
|
|
122
|
+
p_kind text, p_slug text, p_lang text, p_needs_agent_guide boolean)
|
|
123
|
+
RETURNS boolean
|
|
124
|
+
LANGUAGE plpgsql
|
|
125
|
+
AS $fn$
|
|
126
|
+
DECLARE
|
|
127
|
+
v_parent bigint;
|
|
128
|
+
v_ids bigint[];
|
|
129
|
+
v_texts text[];
|
|
130
|
+
v_guide_slug text := CASE WHEN p_lang = 'fr' THEN 'comment-configurer-nextblock' ELSE 'how-to-setup-nextblock' END;
|
|
131
|
+
v_marker text := pg_temp.nb_02018_json_inner('<h2 id=''ai-agent''>');
|
|
132
|
+
e record;
|
|
133
|
+
f record;
|
|
134
|
+
i int;
|
|
135
|
+
v_hit boolean;
|
|
136
|
+
v_total int := 0;
|
|
137
|
+
v_missing int := 0;
|
|
138
|
+
v_old text;
|
|
139
|
+
v_new text;
|
|
140
|
+
v_unless text;
|
|
141
|
+
BEGIN
|
|
142
|
+
IF p_kind = 'post' THEN
|
|
143
|
+
SELECT p.id INTO v_parent FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
144
|
+
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
145
|
+
ELSE
|
|
146
|
+
SELECT p.id INTO v_parent FROM public.pages AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
147
|
+
WHERE p.slug = p_slug AND l.code = p_lang ORDER BY p.id LIMIT 1;
|
|
148
|
+
END IF;
|
|
149
|
+
IF v_parent IS NULL THEN
|
|
150
|
+
RETURN false;
|
|
151
|
+
END IF;
|
|
152
|
+
|
|
153
|
+
IF p_needs_agent_guide AND NOT EXISTS (
|
|
154
|
+
SELECT 1 FROM public.blocks AS b
|
|
155
|
+
JOIN public.posts AS p ON p.id = b.post_id
|
|
156
|
+
JOIN public.languages AS l ON l.id = p.language_id
|
|
157
|
+
WHERE p.slug = v_guide_slug AND l.code = p_lang
|
|
158
|
+
AND position(v_marker IN b.content::text) > 0) THEN
|
|
159
|
+
RAISE NOTICE '02018: % % (%) left unchanged: the install guide has no Option 5 section.', p_kind, p_slug, p_lang;
|
|
160
|
+
RETURN false;
|
|
161
|
+
END IF;
|
|
162
|
+
|
|
163
|
+
SELECT array_agg(b.id ORDER BY b.id), array_agg(b.content::text ORDER BY b.id)
|
|
164
|
+
INTO v_ids, v_texts
|
|
165
|
+
FROM public.blocks AS b
|
|
166
|
+
WHERE (p_kind = 'post' AND b.post_id = v_parent) OR (p_kind = 'page' AND b.page_id = v_parent);
|
|
167
|
+
|
|
168
|
+
FOR e IN SELECT * FROM pg_temp.nb_02018_edits
|
|
169
|
+
WHERE kind = p_kind AND slug = p_slug AND lang = p_lang ORDER BY seq LOOP
|
|
170
|
+
v_total := v_total + 1;
|
|
171
|
+
v_hit := false;
|
|
172
|
+
v_old := pg_temp.nb_02018_json_inner(e.old_html);
|
|
173
|
+
v_new := pg_temp.nb_02018_json_inner(e.new_html);
|
|
174
|
+
v_unless := CASE WHEN e.unless_html IS NULL THEN NULL ELSE pg_temp.nb_02018_json_inner(e.unless_html) END;
|
|
175
|
+
FOR i IN 1 .. COALESCE(array_length(v_ids, 1), 0) LOOP
|
|
176
|
+
IF position(v_old IN v_texts[i]) > 0 AND (v_unless IS NULL OR position(v_unless IN v_texts[i]) = 0) THEN
|
|
177
|
+
v_texts[i] := replace(v_texts[i], v_old, v_new);
|
|
178
|
+
v_hit := true;
|
|
179
|
+
END IF;
|
|
180
|
+
END LOOP;
|
|
181
|
+
IF NOT v_hit THEN
|
|
182
|
+
v_missing := v_missing + 1;
|
|
183
|
+
END IF;
|
|
184
|
+
END LOOP;
|
|
185
|
+
|
|
186
|
+
IF v_total = 0 OR v_missing > 0 THEN
|
|
187
|
+
IF v_missing < v_total THEN
|
|
188
|
+
RAISE NOTICE '02018: % % (%) differs from the seeded copy (% of % fragments not found); left unchanged.',
|
|
189
|
+
p_kind, p_slug, p_lang, v_missing, v_total;
|
|
190
|
+
END IF;
|
|
191
|
+
RETURN false;
|
|
192
|
+
END IF;
|
|
193
|
+
|
|
194
|
+
FOR i IN 1 .. array_length(v_ids, 1) LOOP
|
|
195
|
+
UPDATE public.blocks SET content = v_texts[i]::jsonb, updated_at = now()
|
|
196
|
+
WHERE id = v_ids[i] AND content::text IS DISTINCT FROM v_texts[i];
|
|
197
|
+
END LOOP;
|
|
198
|
+
|
|
199
|
+
FOR e IN SELECT * FROM pg_temp.nb_02018_edits
|
|
200
|
+
WHERE kind = p_kind AND slug = p_slug AND lang = p_lang ORDER BY seq LOOP
|
|
201
|
+
v_old := pg_temp.nb_02018_json_inner(e.old_html);
|
|
202
|
+
v_new := pg_temp.nb_02018_json_inner(e.new_html);
|
|
203
|
+
v_unless := CASE WHEN e.unless_html IS NULL THEN NULL ELSE pg_temp.nb_02018_json_inner(e.unless_html) END;
|
|
204
|
+
IF p_kind = 'post' THEN
|
|
205
|
+
UPDATE public.post_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
206
|
+
WHERE post_id = v_parent AND position(v_old IN content::text) > 0
|
|
207
|
+
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
208
|
+
ELSE
|
|
209
|
+
UPDATE public.page_revisions SET content = replace(content::text, v_old, v_new)::jsonb
|
|
210
|
+
WHERE page_id = v_parent AND position(v_old IN content::text) > 0
|
|
211
|
+
AND (v_unless IS NULL OR position(v_unless IN content::text) = 0);
|
|
212
|
+
END IF;
|
|
213
|
+
END LOOP;
|
|
214
|
+
|
|
215
|
+
FOR f IN SELECT * FROM pg_temp.nb_02018_fields
|
|
216
|
+
WHERE kind = p_kind AND slug = p_slug AND lang = p_lang ORDER BY seq LOOP
|
|
217
|
+
EXECUTE format('UPDATE public.%I SET %I = $1, updated_at = now() WHERE id = $2 AND %I = $3',
|
|
218
|
+
CASE WHEN p_kind = 'post' THEN 'posts' ELSE 'pages' END, f.field, f.field)
|
|
219
|
+
USING replace(f.new_value, chr(13), ''), v_parent, f.old_value;
|
|
220
|
+
EXECUTE format('UPDATE public.%I SET content = jsonb_set(content, $1, to_jsonb($2::text))
|
|
221
|
+
WHERE %I = $3 AND revision_type = ''snapshot'' AND content #>> $1 = $4',
|
|
222
|
+
CASE WHEN p_kind = 'post' THEN 'post_revisions' ELSE 'page_revisions' END,
|
|
223
|
+
CASE WHEN p_kind = 'post' THEN 'post_id' ELSE 'page_id' END)
|
|
224
|
+
USING ARRAY['meta', f.field], replace(f.new_value, chr(13), ''), v_parent, f.old_value;
|
|
225
|
+
END LOOP;
|
|
226
|
+
|
|
227
|
+
RETURN true;
|
|
228
|
+
END
|
|
229
|
+
$fn$;
|
|
230
|
+
|
|
231
|
+
-- ========================================================================================
|
|
232
|
+
-- architecture-commerce
|
|
233
|
+
-- ========================================================================================
|
|
234
|
+
|
|
235
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
236
|
+
$o$the hosted CMS, the open-source starter$o$,
|
|
237
|
+
$n$the CMS you deploy, the open-source starter$n$,
|
|
238
|
+
NULL);
|
|
239
|
+
|
|
240
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
241
|
+
$o$The <code>apps/create-nextblock</code> tool mirrors that setup$o$,
|
|
242
|
+
$n$The <code>apps/create-nextblock</code> tool (published on npm as <code>create-nextblock</code>) mirrors that setup$n$,
|
|
243
|
+
NULL);
|
|
244
|
+
|
|
245
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
246
|
+
$o$<li><strong>@nextblock-cms/ecommerce</strong> - The digital store package when activated</li>$o$,
|
|
247
|
+
$n$<li><strong>@nextblock-cms/ecommerce</strong> - The digital store package when activated</li>
|
|
248
|
+
<li><strong>@nextblock-cms/cortex</strong> - Cortex AI: AI inside the editor and the MCP server, when activated</li>$n$,
|
|
249
|
+
$u$@nextblock-cms/cortex$u$);
|
|
250
|
+
|
|
251
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
252
|
+
$o$Run <code>nx graph</code> to see$o$,
|
|
253
|
+
$n$In the monorepo clone, run <code>npx nx graph</code> to see$n$,
|
|
254
|
+
NULL);
|
|
255
|
+
|
|
256
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
257
|
+
$o$the source of truth for all blocks.$o$,
|
|
258
|
+
$n$the source of truth for the built-in blocks.$n$,
|
|
259
|
+
NULL);
|
|
260
|
+
|
|
261
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
262
|
+
$o$checkout forms, and product cards.</p>$o$,
|
|
263
|
+
$n$checkout forms, and product cards. Custom blocks you design in the CMS live in the database and go through the same block renderer.</p>$n$,
|
|
264
|
+
NULL);
|
|
265
|
+
|
|
266
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
267
|
+
$o$The core CMS is open-source under the AGPL license. Store modules remain source-available and turn on with verified licenses. This keeps the core lightweight while unlocking advanced tools when you need them.$o$,
|
|
268
|
+
$n$The core CMS is free and open source under the AGPL. The premium modules, Commerce Pro and Cortex AI, are public AGPL code too, and their features switch on with a license key. This keeps the core lightweight while unlocking advanced tools when you need them. Each module starts with a 30-day free trial, no credit card required.$n$,
|
|
269
|
+
NULL);
|
|
270
|
+
|
|
271
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-nextblock-works', 'en',
|
|
272
|
+
$o$you get a complete, working system from day one.</p>$o$,
|
|
273
|
+
$n$you get a complete, working system from day one. A coding agent such as Claude Code or Cursor can also scaffold the project for you, as <a href='/article/how-to-setup-nextblock#ai-agent'>the install guide</a> explains.</p>$n$,
|
|
274
|
+
NULL);
|
|
275
|
+
|
|
276
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
277
|
+
$o$le CMS hébergé, le projet open-source$o$,
|
|
278
|
+
$n$le CMS que vous déployez, le projet open-source$n$,
|
|
279
|
+
NULL);
|
|
280
|
+
|
|
281
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
282
|
+
$o$La commande <code>apps/create-nextblock</code> reprend$o$,
|
|
283
|
+
$n$L'outil <code>apps/create-nextblock</code> (publié sur npm sous le nom <code>create-nextblock</code>) reprend$n$,
|
|
284
|
+
NULL);
|
|
285
|
+
|
|
286
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
287
|
+
$o$<li><strong>@nextblock-cms/ecommerce</strong> - Le module de boutique en ligne une fois activé</li>$o$,
|
|
288
|
+
$n$<li><strong>@nextblock-cms/ecommerce</strong> - Le module de boutique en ligne une fois activé</li>
|
|
289
|
+
<li><strong>@nextblock-cms/cortex</strong> - Cortex AI : l'IA dans l'éditeur et le serveur MCP, une fois activé</li>$n$,
|
|
290
|
+
$u$@nextblock-cms/cortex$u$);
|
|
291
|
+
|
|
292
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
293
|
+
$o$La commande <code>nx graph</code> montre$o$,
|
|
294
|
+
$n$Dans le clone du monorepo, la commande <code>npx nx graph</code> montre$n$,
|
|
295
|
+
NULL);
|
|
296
|
+
|
|
297
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
298
|
+
$o$la source de vérité pour tous les blocs du CMS.$o$,
|
|
299
|
+
$n$la source de vérité pour les blocs intégrés du CMS.$n$,
|
|
300
|
+
NULL);
|
|
301
|
+
|
|
302
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
303
|
+
$o$les listes d'articles et les formulaires de paiement.</p>$o$,
|
|
304
|
+
$n$les listes d'articles et les formulaires de paiement. Les blocs personnalisés conçus dans le CMS sont stockés dans la base de données et passent par le même moteur de rendu.</p>$n$,
|
|
305
|
+
NULL);
|
|
306
|
+
|
|
307
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
308
|
+
$o$des menus flottants, des tableaux$o$,
|
|
309
|
+
$n$des menus flottants, des poignées de glisser-déposer, des tableaux$n$,
|
|
310
|
+
NULL);
|
|
311
|
+
|
|
312
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
313
|
+
$o$Le cœur de NextBlock est open-source sous licence AGPL. Les modules du store s'activent avec une clé de licence valide. Le socle reste léger tout en ouvrant des outils pro quand vous en avez besoin.$o$,
|
|
314
|
+
$n$Le cœur de NextBlock est gratuit et open source sous licence AGPL. Les modules premium, Commerce Pro et Cortex AI, sont eux aussi publiés sous AGPL, et leurs fonctions s'activent avec une clé de licence. Le socle reste léger tout en ouvrant des outils pro quand vous en avez besoin. Chaque module propose un essai gratuit de 30 jours, sans carte de crédit.$n$,
|
|
315
|
+
NULL);
|
|
316
|
+
|
|
317
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-nextblock-fonctionne', 'fr',
|
|
318
|
+
$o$vous profitez d'une base solide et prête à l'emploi.</p>$o$,
|
|
319
|
+
$n$vous profitez d'une base solide et prête à l'emploi. Un agent de code, par exemple Claude Code ou Cursor, peut aussi créer le projet à votre place : le <a href='/article/comment-configurer-nextblock#ai-agent'>guide d'installation</a> explique comment.</p>$n$,
|
|
320
|
+
NULL);
|
|
321
|
+
|
|
322
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
323
|
+
$o$want their catalog and checkout in one place.</p>$o$,
|
|
324
|
+
$n$want their catalog and checkout in one place. NextBlock™ Commerce Pro comes with a 30-day free trial, no credit card required. Start it from <strong>Administration → Packages</strong> in the CMS.</p>$n$,
|
|
325
|
+
NULL);
|
|
326
|
+
|
|
327
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
328
|
+
$o$Live rate sync, price rounding, and market rules make selling worldwide simple.$o$,
|
|
329
|
+
$n$Automatic rate sync, rounding rules, and per-currency prices make selling worldwide simple.$n$,
|
|
330
|
+
NULL);
|
|
331
|
+
|
|
332
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
333
|
+
$o$Set exact prices for specific countries when needed.$o$,
|
|
334
|
+
$n$Set an exact price in any currency you do not auto-sync, instead of the converted one.$n$,
|
|
335
|
+
NULL);
|
|
336
|
+
|
|
337
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
338
|
+
$o$Fallback options ensure buyers always see a valid rate.$o$,
|
|
339
|
+
$n$When no state-specific zone matches, the country-wide zone applies, and checkout offers the cheapest valid rate.$n$,
|
|
340
|
+
NULL);
|
|
341
|
+
|
|
342
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-commerce-guide', 'en',
|
|
343
|
+
$o$Commerce is the first premium module on our roadmap. It fits naturally into the larger CMS platform.$o$,
|
|
344
|
+
$n$Commerce Pro was our first premium module, and Cortex AI followed. Both plug into the same CMS.$n$,
|
|
345
|
+
NULL);
|
|
346
|
+
|
|
347
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
348
|
+
$o$leur catalogue et leurs ventes au même endroit.</p>$o$,
|
|
349
|
+
$n$leur catalogue et leurs ventes au même endroit. NextBlock™ Commerce Pro propose un essai gratuit de 30 jours, sans carte de crédit. Lancez-le depuis <strong>Administration → Packages</strong> dans le CMS.</p>$n$,
|
|
350
|
+
NULL);
|
|
351
|
+
|
|
352
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
353
|
+
$o$Articles, commandes, livraison et factures s'intègrent$o$,
|
|
354
|
+
$n$Produits, commandes, livraison et factures s'intègrent$n$,
|
|
355
|
+
NULL);
|
|
356
|
+
|
|
357
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
358
|
+
$o$Taux de change en direct, prix ronds et règles locales facilitent les ventes.$o$,
|
|
359
|
+
$n$Taux de change synchronisés, règles d'arrondi et prix par devise facilitent les ventes.$n$,
|
|
360
|
+
NULL);
|
|
361
|
+
|
|
362
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
363
|
+
$o$Fixez des prix précis pour chaque pays si nécessaire.$o$,
|
|
364
|
+
$n$Fixez un prix précis dans toute devise non synchronisée automatiquement, au lieu du prix converti.$n$,
|
|
365
|
+
NULL);
|
|
366
|
+
|
|
367
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
368
|
+
$o$Un tarif de secours évite les blocages.$o$,
|
|
369
|
+
$n$Sans zone propre à la région, la zone du pays s'applique, et le tunnel d'achat propose le tarif valide le moins cher.$n$,
|
|
370
|
+
NULL);
|
|
371
|
+
|
|
372
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
373
|
+
$o$Le commerce est le premier module officiel de notre feuille de route. Il s'intègre au cœur du CMS.$o$,
|
|
374
|
+
$n$Commerce Pro a été notre premier module premium, puis Cortex AI a suivi. Les deux s'intègrent au cœur du CMS.$n$,
|
|
375
|
+
NULL);
|
|
376
|
+
|
|
377
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
378
|
+
$o$Les factures à imprimer reprennent les couleurs de votre marque.$o$,
|
|
379
|
+
$n$Les factures à imprimer reprennent le logo et les coordonnées de votre entreprise.$n$,
|
|
380
|
+
NULL);
|
|
381
|
+
|
|
382
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-commerce-nextblock', 'fr',
|
|
383
|
+
$o$la liste des articles, du suivi des stocks$o$,
|
|
384
|
+
$n$la liste des produits, du suivi des stocks$n$,
|
|
385
|
+
NULL);
|
|
386
|
+
|
|
387
|
+
-- ========================================================================================
|
|
388
|
+
-- cortex-mcp
|
|
389
|
+
-- ========================================================================================
|
|
390
|
+
|
|
391
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
392
|
+
$o$Per-block translation and SEO checks as you type.$o$,
|
|
393
|
+
$n$Linked translations for every page and SEO checks as you type.$n$,
|
|
394
|
+
NULL);
|
|
395
|
+
|
|
396
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
397
|
+
$o$Server Components · edge cached.$o$,
|
|
398
|
+
$n$Server Components · cache cleared on publish.$n$,
|
|
399
|
+
NULL);
|
|
400
|
+
|
|
401
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
402
|
+
$o$renders those records with Server Components and caches the result at the edge.$o$,
|
|
403
|
+
$n$renders those records with Server Components, from a public content cache that clears the moment you publish.$n$,
|
|
404
|
+
NULL);
|
|
405
|
+
|
|
406
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
407
|
+
$o$with an open standard instead of a vendor plugin.$o$,
|
|
408
|
+
$n$over an open standard, no proprietary connector required.$n$,
|
|
409
|
+
NULL);
|
|
410
|
+
|
|
411
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
412
|
+
$o$The CMS is free forever. Cortex AI, which includes the MCP server$o$,
|
|
413
|
+
$n$The CMS is free forever and open source. Cortex AI, which includes the MCP server$n$,
|
|
414
|
+
NULL);
|
|
415
|
+
|
|
416
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
417
|
+
$o$>Nothing ships by accident.<$o$,
|
|
418
|
+
$n$>You stay in control.<$n$,
|
|
419
|
+
NULL);
|
|
420
|
+
|
|
421
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
422
|
+
$o$Every layout the agent writes lands as a draft. An editor reviews it and hits publish.$o$,
|
|
423
|
+
$n$Page rewrites land as Live Drafts, and new pages stay drafts unless you ask to publish. Your MCP client’s approval prompt and the token scope decide what the agent may change.$n$,
|
|
424
|
+
NULL);
|
|
425
|
+
|
|
426
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
427
|
+
$o$Your editors keep a visual CMS, your developers keep a clean Next.js 16 app, and nothing goes live until someone hits publish.$o$,
|
|
428
|
+
$n$Your editors keep a visual CMS, and your developers keep a clean Next.js 16 app. Agent edits to pages, posts, and products are saved as revisions you can restore.$n$,
|
|
429
|
+
NULL);
|
|
430
|
+
|
|
431
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
432
|
+
$o$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$o$,
|
|
433
|
+
$n$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>create_page_layout</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$n$,
|
|
434
|
+
NULL);
|
|
435
|
+
|
|
436
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
437
|
+
$o$5 contract tools · 29 typed tools$o$,
|
|
438
|
+
$n$6 contract tools · 50 typed tools$n$,
|
|
439
|
+
NULL);
|
|
440
|
+
|
|
441
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
442
|
+
$o$>Staged as a Live Draft.<$o$,
|
|
443
|
+
$n$>Rewrites staged as Live Drafts.<$n$,
|
|
444
|
+
NULL);
|
|
445
|
+
|
|
446
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
447
|
+
$o$Nothing goes live until publish$o$,
|
|
448
|
+
$n$Draft or publish, with revisions$n$,
|
|
449
|
+
NULL);
|
|
450
|
+
|
|
451
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
452
|
+
$o$The same 29 typed tools$o$,
|
|
453
|
+
$n$The same 50 typed tools$n$,
|
|
454
|
+
NULL);
|
|
455
|
+
|
|
456
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
457
|
+
$o$>Layouts stage as Live Drafts.<$o$,
|
|
458
|
+
$n$>Page rewrites stage as Live Drafts.<$n$,
|
|
459
|
+
NULL);
|
|
460
|
+
|
|
461
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
462
|
+
$o$Layout tools write drafts, so nothing reaches visitors until an editor publishes it.$o$,
|
|
463
|
+
$n$<code>generate_jsonb_layout</code> stages a Live Draft, and <code>create_page_layout</code> saves new pages as drafts unless told otherwise. Other write tools can publish or edit live content, so keep your MCP client’s tool-approval prompt on for them.$n$,
|
|
464
|
+
NULL);
|
|
465
|
+
|
|
466
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
467
|
+
$o$Five tool names form the public MCP contract.$o$,
|
|
468
|
+
$n$Six tool names form the public MCP contract.$n$,
|
|
469
|
+
NULL);
|
|
470
|
+
|
|
471
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
472
|
+
$o$with columns, primary keys, and read-only flags.</p></div>$o$,
|
|
473
|
+
$n$with columns, primary keys, and read-only flags.</p></div><div class='rounded-3xl border border-slate-200 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-white/5'><div class='flex items-center justify-between gap-3'><code class='rounded-lg bg-violet-50 px-2.5 py-1 text-sm text-violet-700 dark:bg-violet-500/15 dark:text-violet-200'>create_page_layout</code><span class='rounded-full border px-2.5 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] border-amber-300 text-amber-700 dark:border-amber-500/40 dark:text-amber-200'>write</span></div><p class='mt-3 mb-0 text-sm text-slate-600 dark:text-slate-300'>Creates a new page from a slug, a title, and validated blocks in one call. It stays a draft unless you ask to publish it.</p></div>$n$,
|
|
474
|
+
$u$>create_page_layout</code><span$u$);
|
|
475
|
+
|
|
476
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
477
|
+
$o$<div class='rounded-3xl border border-dashed border-slate-300 p-5 dark:border-white/20'>$o$,
|
|
478
|
+
$n$<div class='rounded-3xl border border-dashed border-slate-300 p-5 md:col-span-2 dark:border-white/20'>$n$,
|
|
479
|
+
NULL);
|
|
480
|
+
|
|
481
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
482
|
+
$o$And 24 more.$o$,
|
|
483
|
+
$n$And 44 more.$n$,
|
|
484
|
+
NULL);
|
|
485
|
+
|
|
486
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
487
|
+
$o$Three resources expose the database, block, and custom block schemas.</p>$o$,
|
|
488
|
+
$n$Three resources expose the database, block, and custom block schemas. Four prompts (build-site, build-page, clone-from-url, translate-content) script the common jobs.</p>$n$,
|
|
489
|
+
NULL);
|
|
490
|
+
|
|
491
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
492
|
+
$o$Open <strong>CMS Settings → Cortex AI</strong>, start the 30-day trial with no credit card, and switch on the MCP server access card.$o$,
|
|
493
|
+
$n$Start the 30-day trial, no credit card, from the welcome screen, the dashboard checklist, or <strong>Administration → Packages</strong>. The Cortex AI setup guide comes next. After activating from Packages, click <strong>Cortex AI</strong> in the sidebar to open it.$n$,
|
|
494
|
+
NULL);
|
|
495
|
+
|
|
496
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
497
|
+
$o$Pick the scope you need. Read-only is enough for planning and audits.$o$,
|
|
498
|
+
$n$In the guide, choose <strong>Use my own AI app (MCP)</strong>, then <strong>Enable MCP & continue</strong>. That switches the server on and mints a read + write token. For a read-only token, enough for planning and audits, untick <strong>Allow writes</strong> when you create one on the <strong>MCP server access</strong> card.$n$,
|
|
499
|
+
NULL);
|
|
500
|
+
|
|
501
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
502
|
+
$o$The card renders one snippet each for Claude Code, Cursor, VS Code, and Claude Desktop.$o$,
|
|
503
|
+
$n$A tab per client holds values ready to copy: Claude Code (terminal), Claude Code in VS Code, Claude Desktop, Cursor, and VS Code (Copilot).$n$,
|
|
504
|
+
NULL);
|
|
505
|
+
|
|
506
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
507
|
+
$o$<h3>Localhost Configuration Without a Token</h3>$o$,
|
|
508
|
+
$n$<div class='rounded-3xl border border-emerald-200 bg-emerald-50/80 p-6 my-8 dark:border-emerald-500/20 dark:bg-emerald-500/10'><p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-emerald-700 dark:text-emerald-200'>Starting from nothing?</p><p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Ask your coding agent to build a site with NextBlock. In Claude Code, first add the plugin that teaches it the steps: <code>/plugin marketplace add nextblock-cms/nextblock</code>, then <code>/plugin install nextblock@nextblock</code>. The agent runs <code>npx create-nextblock@latest my-site --non-interactive</code>, which writes <code>.mcp.json</code> and <code>.cursor/mcp.json</code> with its token. You only create your admin account and start the free 30-day Cortex AI trial in the browser. Then reopen the agent in the project folder so it loads the connection. <a href='/article/how-to-setup-nextblock#ai-agent'>See the agent install steps</a>.</p></div><h3>Localhost Configuration Without a Token</h3>$n$,
|
|
509
|
+
$u$Starting from nothing?$u$);
|
|
510
|
+
|
|
511
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
512
|
+
$o$turn on <strong>Trust localhost without a token</strong> in the same settings card.$o$,
|
|
513
|
+
$n$keep <strong>Trust localhost without a token</strong> checked on the <strong>MCP server access</strong> card (the default).$n$,
|
|
514
|
+
NULL);
|
|
515
|
+
|
|
516
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
517
|
+
$o$Standalone installs run on port 3000, and the monorepo dev server runs on port 4200.$o$,
|
|
518
|
+
$n$In a project scaffolded with create-nextblock, <code>npm run dev</code> serves port 3000. In the monorepo clone, <code>npm run dev</code> (it runs <code>nx serve nextblock</code>) serves port 4200. The local Docker stack also answers on port 3000 by default. It runs a production build, so localhost trust does not apply and every client needs a token. The agent install already writes one into <code>.mcp.json</code> and <code>.cursor/mcp.json</code>.$n$,
|
|
519
|
+
NULL);
|
|
520
|
+
|
|
521
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
522
|
+
$o$The agent calls the schema tool, then the layout tool, and your CMS shows a new Live Draft ready for review.$o$,
|
|
523
|
+
$n$The agent reads the schema, then creates the page as a draft with <code>create_page_layout</code>, ready for review in your CMS.$n$,
|
|
524
|
+
NULL);
|
|
525
|
+
|
|
526
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'cortex-ai-mcp-connection-guide', 'en',
|
|
527
|
+
$o$not HTML strings and not source files.$o$,
|
|
528
|
+
$n$not source files.$n$,
|
|
529
|
+
NULL);
|
|
530
|
+
|
|
531
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
532
|
+
$o$Traduction bloc par bloc et vérifications SEO pendant que vous écrivez.$o$,
|
|
533
|
+
$n$Traductions liées pour chaque page et vérifications SEO pendant que vous écrivez.$n$,
|
|
534
|
+
NULL);
|
|
535
|
+
|
|
536
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
537
|
+
$o$Server Components · cache en périphérie.$o$,
|
|
538
|
+
$n$Server Components · cache vidé à chaque publication.$n$,
|
|
539
|
+
NULL);
|
|
540
|
+
|
|
541
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
542
|
+
$o$rend ces enregistrements avec des Server Components et met le résultat en cache en périphérie.$o$,
|
|
543
|
+
$n$rend ces enregistrements avec des Server Components, à partir d'un cache de contenu public vidé à chaque publication.$n$,
|
|
544
|
+
NULL);
|
|
545
|
+
|
|
546
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
547
|
+
$o$avec un standard ouvert plutôt qu'un plugin propriétaire.$o$,
|
|
548
|
+
$n$avec un standard ouvert, sans connecteur propriétaire.$n$,
|
|
549
|
+
NULL);
|
|
550
|
+
|
|
551
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
552
|
+
$o$Le CMS est gratuit pour toujours. Cortex AI, qui inclut le serveur MCP$o$,
|
|
553
|
+
$n$Le CMS est gratuit pour toujours et open source. Cortex AI, qui inclut le serveur MCP$n$,
|
|
554
|
+
NULL);
|
|
555
|
+
|
|
556
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
557
|
+
$o$>Rien ne part par accident.<$o$,
|
|
558
|
+
$n$>Vous gardez la main.<$n$,
|
|
559
|
+
NULL);
|
|
560
|
+
|
|
561
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
562
|
+
$o$Chaque mise en page écrite par l'agent arrive sous forme de brouillon. Un éditeur la révise et clique sur Publier.$o$,
|
|
563
|
+
$n$Les réécritures de page arrivent en brouillon en direct, et les nouvelles pages restent en brouillon sauf si vous demandez de les publier. L'invite d'approbation de votre client MCP et la portée du jeton décident de ce que l'agent peut modifier.$n$,
|
|
564
|
+
NULL);
|
|
565
|
+
|
|
566
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
567
|
+
$o$Vos éditeurs gardent un CMS visuel, vos développeurs gardent une application Next.js 16 propre, et rien n'est mis en ligne tant que quelqu'un ne clique pas sur Publier.$o$,
|
|
568
|
+
$n$Vos éditeurs gardent un CMS visuel, et vos développeurs gardent une application Next.js 16 propre. Les modifications de l'agent sur les pages, les articles et les produits sont enregistrées comme des révisions que vous pouvez restaurer.$n$,
|
|
569
|
+
NULL);
|
|
570
|
+
|
|
571
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
572
|
+
$o$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$o$,
|
|
573
|
+
$n$get_database_schema</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>create_page_layout</code><code class='block rounded-md bg-white/5 px-3 py-1.5 font-mono text-xs text-violet-100'>generate_jsonb_layout</code>$n$,
|
|
574
|
+
NULL);
|
|
575
|
+
|
|
576
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
577
|
+
$o$5 outils de contrat · 29 outils typés$o$,
|
|
578
|
+
$n$6 outils de contrat · 50 outils typés$n$,
|
|
579
|
+
NULL);
|
|
580
|
+
|
|
581
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
582
|
+
$o$>Mis en attente comme brouillon en direct.<$o$,
|
|
583
|
+
$n$>Réécritures mises en attente comme brouillon en direct.<$n$,
|
|
584
|
+
NULL);
|
|
585
|
+
|
|
586
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
587
|
+
$o$Rien n'est en ligne avant la publication$o$,
|
|
588
|
+
$n$Brouillon ou publication, avec révisions$n$,
|
|
589
|
+
NULL);
|
|
590
|
+
|
|
591
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
592
|
+
$o$Les mêmes 29 outils typés$o$,
|
|
593
|
+
$n$Les mêmes 50 outils typés$n$,
|
|
594
|
+
NULL);
|
|
595
|
+
|
|
596
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
597
|
+
$o$>Les mises en page attendent en brouillon en direct.<$o$,
|
|
598
|
+
$n$>Les réécritures de page attendent en brouillon en direct.<$n$,
|
|
599
|
+
NULL);
|
|
600
|
+
|
|
601
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
602
|
+
$o$Les outils de mise en page écrivent des brouillons : rien n'atteint les visiteurs tant qu'un éditeur ne publie pas.$o$,
|
|
603
|
+
$n$<code>generate_jsonb_layout</code> prépare un brouillon en direct, et <code>create_page_layout</code> enregistre les nouvelles pages en brouillon sauf indication contraire. D'autres outils d'écriture peuvent publier ou modifier du contenu en ligne : gardez activée l'invite d'approbation des outils de votre client MCP.$n$,
|
|
604
|
+
NULL);
|
|
605
|
+
|
|
606
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
607
|
+
$o$Cinq noms d'outils forment le contrat MCP public.$o$,
|
|
608
|
+
$n$Six noms d'outils forment le contrat MCP public.$n$,
|
|
609
|
+
NULL);
|
|
610
|
+
|
|
611
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
612
|
+
$o$avec colonnes, clés primaires et indicateurs de lecture seule.</p></div>$o$,
|
|
613
|
+
$n$avec colonnes, clés primaires et indicateurs de lecture seule.</p></div><div class='rounded-3xl border border-slate-200 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-white/5'><div class='flex items-center justify-between gap-3'><code class='rounded-lg bg-violet-50 px-2.5 py-1 text-sm text-violet-700 dark:bg-violet-500/15 dark:text-violet-200'>create_page_layout</code><span class='rounded-full border px-2.5 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] border-amber-300 text-amber-700 dark:border-amber-500/40 dark:text-amber-200'>écriture</span></div><p class='mt-3 mb-0 text-sm text-slate-600 dark:text-slate-300'>Crée une nouvelle page à partir d'un slug, d'un titre et de blocs validés, en un seul appel. Elle reste en brouillon, sauf si vous demandez de la publier.</p></div>$n$,
|
|
614
|
+
$u$>create_page_layout</code><span$u$);
|
|
615
|
+
|
|
616
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
617
|
+
$o$<div class='rounded-3xl border border-dashed border-slate-300 p-5 dark:border-white/20'>$o$,
|
|
618
|
+
$n$<div class='rounded-3xl border border-dashed border-slate-300 p-5 md:col-span-2 dark:border-white/20'>$n$,
|
|
619
|
+
NULL);
|
|
620
|
+
|
|
621
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
622
|
+
$o$Et 24 autres.$o$,
|
|
623
|
+
$n$Et 44 autres.$n$,
|
|
624
|
+
NULL);
|
|
625
|
+
|
|
626
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
627
|
+
$o$Trois ressources exposent les schémas de la base de données, des blocs et des blocs personnalisés.</p>$o$,
|
|
628
|
+
$n$Trois ressources exposent les schémas de la base de données, des blocs et des blocs personnalisés. Quatre prompts (build-site, build-page, clone-from-url, translate-content) automatisent les tâches courantes.</p>$n$,
|
|
629
|
+
NULL);
|
|
630
|
+
|
|
631
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
632
|
+
$o$Ouvrez <strong>Réglages du CMS → Cortex AI</strong>, lancez l'essai de 30 jours sans carte de crédit et activez la carte d'accès au serveur MCP.$o$,
|
|
633
|
+
$n$Lancez l'essai de 30 jours, sans carte de crédit, depuis l'écran d'accueil, la checklist de démarrage du tableau de bord ou <strong>Administration → Packages</strong>. Le guide de configuration de Cortex AI s'affiche ensuite. Après une activation depuis Packages, cliquez sur <strong>Cortex AI</strong> dans la barre latérale pour l'ouvrir.$n$,
|
|
634
|
+
NULL);
|
|
635
|
+
|
|
636
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
637
|
+
$o$Choisissez la portée dont vous avez besoin. La lecture seule suffit pour la planification et les audits.$o$,
|
|
638
|
+
$n$Dans le guide, choisissez <strong>Use my own AI app (MCP)</strong>, puis <strong>Enable MCP & continue</strong>. Le serveur s'active et un jeton lecture + écriture est créé. Pour un jeton en lecture seule, suffisant pour la planification et les audits, décochez <strong>Allow writes</strong> en le créant dans la carte <strong>MCP server access</strong>.$n$,
|
|
639
|
+
NULL);
|
|
640
|
+
|
|
641
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
642
|
+
$o$La carte affiche un extrait pour chacun : Claude Code, Cursor, VS Code et Claude Desktop.$o$,
|
|
643
|
+
$n$Un onglet par client offre des valeurs prêtes à copier : Claude Code (terminal), Claude Code dans VS Code, Claude Desktop, Cursor et VS Code (Copilot).$n$,
|
|
644
|
+
NULL);
|
|
645
|
+
|
|
646
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
647
|
+
$o$<h3>Configuration localhost sans jeton</h3>$o$,
|
|
648
|
+
$n$<div class='rounded-3xl border border-emerald-200 bg-emerald-50/80 p-6 my-8 dark:border-emerald-500/20 dark:bg-emerald-500/10'><p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-emerald-700 dark:text-emerald-200'>Vous partez de zéro ?</p><p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Demandez à votre agent de code de créer un site avec NextBlock. Dans Claude Code, ajoutez d'abord le plugin qui lui apprend la marche à suivre : <code>/plugin marketplace add nextblock-cms/nextblock</code>, puis <code>/plugin install nextblock@nextblock</code>. L'agent lance <code>npx create-nextblock@latest mon-site --non-interactive</code>, qui écrit <code>.mcp.json</code> et <code>.cursor/mcp.json</code> avec son jeton. Il ne vous reste qu'à créer votre compte administrateur et à lancer l'essai gratuit de 30 jours de Cortex AI dans le navigateur. Rouvrez ensuite l'agent dans le dossier du projet pour qu'il charge la connexion. <a href='/article/comment-configurer-nextblock#ai-agent'>Voir les étapes de l'installation par agent</a>.</p></div><h3>Configuration localhost sans jeton</h3>$n$,
|
|
649
|
+
$u$Vous partez de zéro ?$u$);
|
|
650
|
+
|
|
651
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
652
|
+
$o$activez <strong>Faire confiance à localhost sans jeton</strong> dans la même carte de réglages.$o$,
|
|
653
|
+
$n$laissez cochée l'option <strong>Trust localhost without a token</strong> (faire confiance à localhost sans jeton), activée par défaut dans la carte <strong>MCP server access</strong>.$n$,
|
|
654
|
+
NULL);
|
|
655
|
+
|
|
656
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
657
|
+
$o$Les installations autonomes tournent sur le port 3000, et le serveur de développement du monorepo sur le port 4200.$o$,
|
|
658
|
+
$n$Dans un projet créé avec create-nextblock, <code>npm run dev</code> utilise le port 3000. Dans le clone du monorepo, <code>npm run dev</code> (qui lance <code>nx serve nextblock</code>) utilise le port 4200. La pile Docker locale répond aussi sur le port 3000 par défaut. Elle exécute un build de production : la confiance localhost ne s'y applique pas, et chaque client doit fournir un jeton. L'installation par agent en écrit déjà un dans <code>.mcp.json</code> et <code>.cursor/mcp.json</code>.$n$,
|
|
659
|
+
NULL);
|
|
660
|
+
|
|
661
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
662
|
+
$o$L'agent appelle l'outil de schéma, puis l'outil de mise en page, et votre CMS affiche un nouveau brouillon en direct prêt pour la révision.$o$,
|
|
663
|
+
$n$L'agent lit le schéma, puis crée la page en brouillon avec <code>create_page_layout</code>, prête à être relue dans votre CMS.$n$,
|
|
664
|
+
NULL);
|
|
665
|
+
|
|
666
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr',
|
|
667
|
+
$o$pas des chaînes HTML ni des fichiers source.$o$,
|
|
668
|
+
$n$pas des fichiers source.$n$,
|
|
669
|
+
NULL);
|
|
670
|
+
|
|
671
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
672
|
+
$o$>Model routing</p>$o$,
|
|
673
|
+
$n$>Model choice</p>$n$,
|
|
674
|
+
NULL);
|
|
675
|
+
|
|
676
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
677
|
+
$o$Route your prompts through OpenRouter or your own provider to balance speed and price.$o$,
|
|
678
|
+
$n$Plug in your own OpenRouter key and pick one model for the whole site: free models with automatic fallback, or a paid model you choose.$n$,
|
|
679
|
+
NULL);
|
|
680
|
+
|
|
681
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
682
|
+
$o$<h2>Model Routing and Cost Control</h2>$o$,
|
|
683
|
+
$n$<h2>Model Choice and Cost Control</h2>$n$,
|
|
684
|
+
NULL);
|
|
685
|
+
|
|
686
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
687
|
+
$o$Cortex AI gives you full control over your models. You can pick fast models for quick drafts and stronger models for technical articles. You manage your API keys on the server, so your writers can focus on good content.$o$,
|
|
688
|
+
$n$Cortex AI runs on OpenRouter, and you pick one model for the whole site in the Cortex AI settings. Free models are the default, with automatic fallback when one is busy. They still need an OpenRouter key, but a free OpenRouter account is enough. To pick a paid model, save your key in the CMS. You manage that key on the server, so your writers can focus on good content.$n$,
|
|
689
|
+
NULL);
|
|
690
|
+
|
|
691
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
692
|
+
$o$<li>Use quick models for rewrites, titles, and summaries.</li>$o$,
|
|
693
|
+
$n$<li>Start on free models at no model cost.</li>$n$,
|
|
694
|
+
NULL);
|
|
695
|
+
|
|
696
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
697
|
+
$o$<li>Use top models for long guides and difficult translations.</li>$o$,
|
|
698
|
+
$n$<li>Switch the site to a stronger paid model whenever you need more quality.</li>$n$,
|
|
699
|
+
NULL);
|
|
700
|
+
|
|
701
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
702
|
+
$o$<li>Keep provider keys safe in your private server settings.</li>$o$,
|
|
703
|
+
$n$<li>Keep your OpenRouter key encrypted in the CMS settings.</li>$n$,
|
|
704
|
+
NULL);
|
|
705
|
+
|
|
706
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'nextblock-cortex-ai-guide', 'en',
|
|
707
|
+
$o$<p>Cortex AI turns your CMS into a faster creative workshop.$o$,
|
|
708
|
+
$n$<h2>Two Ways to Use Cortex AI</h2>
|
|
709
|
+
<p>Cortex AI works in two places. <strong>AI inside the editor</strong> drafts, rewrites, and translates blocks with your own OpenRouter key, free models included. <strong>The MCP server</strong> lets your own AI app, such as Claude Code or Cursor, build pages on the plan you already pay for. <a href='/article/cortex-ai-mcp-connection-guide'>Connect your AI app over MCP</a>.</p>
|
|
710
|
+
<p>The NextBlock CMS is free and open source under the AGPL. Both surfaces are part of Cortex AI, which starts with a 30-day free trial and needs no credit card.</p>
|
|
711
|
+
|
|
712
|
+
<p>Cortex AI turns your CMS into a faster creative workshop.$n$,
|
|
713
|
+
$u$<h2>Two Ways to Use Cortex AI</h2>$u$);
|
|
714
|
+
|
|
715
|
+
-- ========================================================================================
|
|
716
|
+
-- home-articles
|
|
717
|
+
-- ========================================================================================
|
|
718
|
+
|
|
719
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
720
|
+
$o$then start the free Cortex AI trial in CMS Settings.$o$,
|
|
721
|
+
$n$then start the free Cortex AI trial from the welcome screen or Administration → Packages.$n$,
|
|
722
|
+
NULL);
|
|
723
|
+
|
|
724
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
725
|
+
$o$Ask for a landing page. The agent calls generate_jsonb_layout and the result lands as a Live Draft made of validated blocks.$o$,
|
|
726
|
+
$n$Ask for a new page. The agent calls create_page_layout and the page is saved as a draft made of validated blocks.$n$,
|
|
727
|
+
NULL);
|
|
728
|
+
|
|
729
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
730
|
+
$o$One click deploys to Vercel, and you are prompting your own site in ten minutes.$o$,
|
|
731
|
+
$n$One click deploys to Vercel, and you are prompting your own site in ten minutes. You can also let Claude Code, Cursor, or Codex build it for you.$n$,
|
|
732
|
+
$u$let Claude Code, Cursor, or Codex build it$u$);
|
|
733
|
+
|
|
734
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
735
|
+
$o$Per-block translation and SEO graded as you type.$o$,
|
|
736
|
+
$n$Linked translations for every page and SEO graded as you type.$n$,
|
|
737
|
+
NULL);
|
|
738
|
+
|
|
739
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
740
|
+
$o$>Cortex AI runs on the Claude, ChatGPT, Cursor, or Gemini subscription you already pay for. The license$o$,
|
|
741
|
+
$n$>Over MCP, Cortex AI runs on the Claude, ChatGPT, Cursor, or Gemini subscription you already pay for. Inside the editor, it uses your own OpenRouter key, free models included. The license$n$,
|
|
742
|
+
NULL);
|
|
743
|
+
|
|
744
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
745
|
+
$o$mx-auto mb-10'>Three steps take you from a fresh deploy to published pages, in about ten minutes.</p>$o$,
|
|
746
|
+
$n$mx-auto mb-4'>Three steps take you from a fresh deploy to published pages, in about ten minutes.</p><p class='text-base text-slate-400 text-center max-w-2xl mx-auto mb-10'>Rather let an agent do the install? Ask Claude Code or Cursor to build your site with NextBlock. The agent runs <code class='rounded bg-white/10 px-1.5 py-0.5 font-mono text-xs text-cyan-200'>npx create-nextblock@latest my-site --non-interactive</code>, which starts the site on Docker by default and writes the MCP config the agent needs. You create your admin account and start the free Cortex AI trial in the browser, then the agent builds your pages over MCP. <a href='/article/how-to-setup-nextblock#ai-agent' class='font-semibold text-cyan-300 underline hover:text-white'>Read the agent install guide</a>.</p>$n$,
|
|
747
|
+
NULL);
|
|
748
|
+
|
|
749
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
750
|
+
$o$Slash commands, drag and drop, and inline AI on every block.$o$,
|
|
751
|
+
$n$Slash commands, drag and drop, and inline Cortex AI in every text block.$n$,
|
|
752
|
+
NULL);
|
|
753
|
+
|
|
754
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
755
|
+
$o$Server Components, ISR, and edge caching out of the box.$o$,
|
|
756
|
+
$n$Server Components, a public content cache that clears the moment you publish, and long-lived CDN caching for images.$n$,
|
|
757
|
+
NULL);
|
|
758
|
+
|
|
759
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
760
|
+
$o$Real-time FX rates, rounding modes$o$,
|
|
761
|
+
$n$Daily FX rate sync, rounding modes$n$,
|
|
762
|
+
NULL);
|
|
763
|
+
|
|
764
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
765
|
+
$o$The license buys the connection, never the tokens, and nothing goes live until an editor publishes it.$o$,
|
|
766
|
+
$n$The license buys the connection, never the tokens. A read-only MCP token never even sees the write tools, and page edits are saved as revisions you can restore.$n$,
|
|
767
|
+
NULL);
|
|
768
|
+
|
|
769
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'home', 'en',
|
|
770
|
+
$o$A community marketplace gives developers room to publish$o$,
|
|
771
|
+
$n$A planned community marketplace will give developers room to publish$n$,
|
|
772
|
+
NULL);
|
|
773
|
+
|
|
774
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
775
|
+
$o$puis lancez l'essai gratuit de Cortex AI dans les réglages du CMS.$o$,
|
|
776
|
+
$n$puis lancez l'essai gratuit de Cortex AI depuis l'écran d'accueil ou Administration → Packages.$n$,
|
|
777
|
+
NULL);
|
|
778
|
+
|
|
779
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
780
|
+
$o$Demandez une page d'accueil. L'agent appelle generate_jsonb_layout et le résultat arrive sous forme de brouillon en direct composé de blocs validés.$o$,
|
|
781
|
+
$n$Demandez une nouvelle page. L'agent appelle create_page_layout et la page est enregistrée en brouillon, composée de blocs validés.$n$,
|
|
782
|
+
NULL);
|
|
783
|
+
|
|
784
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
785
|
+
$o$Un clic déploie sur Vercel, et vous promptez votre propre site en dix minutes.$o$,
|
|
786
|
+
$n$Un clic déploie sur Vercel, et vous promptez votre propre site en dix minutes. Vous pouvez aussi laisser Claude Code, Cursor ou Codex le bâtir pour vous.$n$,
|
|
787
|
+
$u$laisser Claude Code, Cursor ou Codex le bâtir$u$);
|
|
788
|
+
|
|
789
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
790
|
+
$o$Traduction bloc par bloc et SEO noté pendant que vous écrivez.$o$,
|
|
791
|
+
$n$Traductions liées pour chaque page et SEO noté pendant que vous écrivez.$n$,
|
|
792
|
+
NULL);
|
|
793
|
+
|
|
794
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
795
|
+
$o$>Cortex AI fonctionne avec l'abonnement Claude, ChatGPT, Cursor ou Gemini que vous payez déjà. La licence$o$,
|
|
796
|
+
$n$>Via MCP, Cortex AI fonctionne avec l'abonnement Claude, ChatGPT, Cursor ou Gemini que vous payez déjà. Dans l'éditeur, l'IA utilise votre propre clé OpenRouter, modèles gratuits compris. La licence$n$,
|
|
797
|
+
NULL);
|
|
798
|
+
|
|
799
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
800
|
+
$o$mx-auto mb-10'>Trois étapes vous mènent d'un déploiement neuf à des pages publiées, en une dizaine de minutes.</p>$o$,
|
|
801
|
+
$n$mx-auto mb-4'>Trois étapes vous mènent d'un déploiement neuf à des pages publiées, en une dizaine de minutes.</p><p class='text-base text-slate-400 text-center max-w-2xl mx-auto mb-10'>Vous préférez confier l'installation à un agent ? Demandez à Claude Code ou à Cursor de créer votre site avec NextBlock. L'agent lance <code class='rounded bg-white/10 px-1.5 py-0.5 font-mono text-xs text-cyan-200'>npx create-nextblock@latest mon-site --non-interactive</code>, qui démarre le site sur Docker par défaut et écrit la configuration MCP dont l'agent a besoin. Vous créez votre compte administrateur et lancez l'essai gratuit de Cortex AI dans le navigateur, puis l'agent bâtit vos pages via MCP. <a href='/article/comment-configurer-nextblock#ai-agent' class='font-semibold text-cyan-300 underline hover:text-white'>Lire le guide d'installation par agent</a>.</p>$n$,
|
|
802
|
+
NULL);
|
|
803
|
+
|
|
804
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
805
|
+
$o$Commandes slash, glisser-déposer et IA intégrée sur chaque bloc.$o$,
|
|
806
|
+
$n$Commandes slash, glisser-déposer et Cortex AI directement dans chaque bloc de texte.$n$,
|
|
807
|
+
NULL);
|
|
808
|
+
|
|
809
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
810
|
+
$o$Server Components, ISR et cache en périphérie, prêts à l'emploi.$o$,
|
|
811
|
+
$n$Server Components, cache de contenu public vidé à chaque publication et cache CDN longue durée pour les images.$n$,
|
|
812
|
+
NULL);
|
|
813
|
+
|
|
814
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
815
|
+
$o$https://nextblock.dev/product/nextblock-commerce-pro-commerce-license$o$,
|
|
816
|
+
$n$https://nextblock.dev/product/nextblock-commerce-pro-commerce-license-fr$n$,
|
|
817
|
+
$u$commerce-license-fr$u$);
|
|
818
|
+
|
|
819
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
820
|
+
$o$Taux de change en temps réel, modes d'arrondi$o$,
|
|
821
|
+
$n$Taux de change synchronisés chaque jour, modes d'arrondi$n$,
|
|
822
|
+
NULL);
|
|
823
|
+
|
|
824
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
825
|
+
$o$La licence achète la connexion, jamais les jetons, et rien n'est mis en ligne tant qu'un éditeur ne l'a pas publié.$o$,
|
|
826
|
+
$n$La licence achète la connexion, jamais les jetons. Un jeton MCP en lecture seule ne voit même pas les outils d'écriture, et les modifications de pages sont enregistrées sous forme de révisions que vous pouvez restaurer.$n$,
|
|
827
|
+
NULL);
|
|
828
|
+
|
|
829
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
830
|
+
$o$alt='Tableau de roadmap montrant la direction de l'ecosysteme NextBlock™ et des modules premium'$o$,
|
|
831
|
+
$n$alt='Feuille de route montrant la direction de l’écosystème NextBlock™ et des modules premium'$n$,
|
|
832
|
+
NULL);
|
|
833
|
+
|
|
834
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'accueil', 'fr',
|
|
835
|
+
$o$Un espace partagé permet aux développeurs$o$,
|
|
836
|
+
$n$Un futur espace partagé permettra aux développeurs$n$,
|
|
837
|
+
NULL);
|
|
838
|
+
|
|
839
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'en',
|
|
840
|
+
$o$alt='Developer working with the Nextblock stack'$o$,
|
|
841
|
+
$n$alt='Developer working with the NextBlock stack'$n$,
|
|
842
|
+
NULL);
|
|
843
|
+
|
|
844
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'en',
|
|
845
|
+
$o$Walkthroughs for one-click Vercel deploys, local Docker environments, and custom cloud stacks.$o$,
|
|
846
|
+
$n$Walkthroughs for a one-click Vercel deploy, the npm create nextblock CLI (local Docker, or your own Supabase project with optional Cloudflare R2), and a git clone. You can also let Claude Code, Cursor, or Codex install NextBlock and build the site for you.$n$,
|
|
847
|
+
NULL);
|
|
848
|
+
|
|
849
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
850
|
+
$o$Cortex AI offre un essai de 30 jours sans carte bancaire.$o$,
|
|
851
|
+
$n$Cortex AI offre un essai gratuit de 30 jours, sans carte de crédit.$n$,
|
|
852
|
+
NULL);
|
|
853
|
+
|
|
854
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
855
|
+
$o$Le journal Nextblock$o$,
|
|
856
|
+
$n$Le journal NextBlock$n$,
|
|
857
|
+
NULL);
|
|
858
|
+
|
|
859
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
860
|
+
$o$alt='Développeur travaillant avec la stack Nextblock'$o$,
|
|
861
|
+
$n$alt='Développeur travaillant avec la stack NextBlock'$n$,
|
|
862
|
+
NULL);
|
|
863
|
+
|
|
864
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
865
|
+
$o$Des guides pas à pas pour un déploiement Vercel en un clic, un Docker local ou votre propre cloud.$o$,
|
|
866
|
+
$n$Des guides pas à pas pour un déploiement Vercel en un clic, le CLI npm create nextblock (Docker local, ou votre propre projet Supabase avec Cloudflare R2 facultatif) et un clone du dépôt. Vous pouvez aussi laisser Claude Code, Cursor ou Codex installer NextBlock et bâtir le site pour vous.$n$,
|
|
867
|
+
NULL);
|
|
868
|
+
|
|
869
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('page', 'articles', 'fr',
|
|
870
|
+
$o$href='/article/cortex-ai-mcp-connection-guide'$o$,
|
|
871
|
+
$n$href='/article/guide-connexion-mcp-cortex-ai'$n$,
|
|
872
|
+
NULL);
|
|
873
|
+
|
|
874
|
+
-- ========================================================================================
|
|
875
|
+
-- install-guide
|
|
876
|
+
-- ========================================================================================
|
|
877
|
+
|
|
878
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
879
|
+
$o$Below are four ways to get running, <strong>ordered from the simplest to the most hands-on</strong>: the first is a single click, the last is the full source for people who want to help build NextBlock.$o$,
|
|
880
|
+
$n$Below are five ways to get running. The first four are <strong>ordered from the simplest to the most hands-on</strong>: the first is a single click, the fourth is the full source for people who want to help build NextBlock. The fifth hands the whole job to the AI coding agent you already use.$n$,
|
|
881
|
+
NULL);
|
|
882
|
+
|
|
883
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
884
|
+
$o$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → Supabase + R2</h2>$o$,
|
|
885
|
+
$n$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → your own Supabase</h2>$n$,
|
|
886
|
+
NULL);
|
|
887
|
+
|
|
888
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
889
|
+
$o$Scaffold a standalone app on your own managed Supabase project and Cloudflare R2, ready to deploy anywhere.$o$,
|
|
890
|
+
$n$Scaffold a standalone app on your own managed Supabase project (Cloudflare R2 optional), ready to deploy anywhere.$n$,
|
|
891
|
+
NULL);
|
|
892
|
+
|
|
893
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
894
|
+
$o$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Run the complete monorepo — the CMS, every package, and the docs. For people who want to help build NextBlock (Docker works here too).</p>$o$,
|
|
895
|
+
$n$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Run the complete monorepo — the CMS, every package, and the docs. For people who want to help build NextBlock (Docker works here too).</p>
|
|
896
|
+
</a>
|
|
897
|
+
<a href='#ai-agent' class='block rounded-[1.75rem] border border-rose-200 bg-rose-50/70 p-6 no-underline transition-shadow hover:shadow-lg md:col-span-2 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
898
|
+
<div class='flex items-center justify-between mb-4'>
|
|
899
|
+
<span class='flex h-9 w-9 items-center justify-center rounded-full bg-rose-600 text-sm font-bold text-white'>5</span>
|
|
900
|
+
<span class='rounded-full border border-rose-300 px-3 py-1 text-[0.65rem] font-semibold uppercase tracking-[0.2em] text-rose-700 dark:border-rose-500/20 dark:text-rose-200'>New</span>
|
|
901
|
+
</div>
|
|
902
|
+
<p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Hands-off · your AI coding agent</p>
|
|
903
|
+
<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>Ask your coding agent to build it</h2>
|
|
904
|
+
<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Ask Claude Code, Cursor, or Codex for a website. It installs NextBlock, you create your admin in the browser, and it builds the pages over MCP.</p>$n$,
|
|
905
|
+
$u$<a href='#ai-agent' class=$u$);
|
|
906
|
+
|
|
907
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
908
|
+
$o$Most people should start with <a href='#one-click-vercel'>Vercel</a>.</p>$o$,
|
|
909
|
+
$n$Most people should start with <a href='#one-click-vercel'>Vercel</a>. Already working with an AI coding agent? Jump to <a href='#ai-agent'>Option 5</a>.</p>$n$,
|
|
910
|
+
NULL);
|
|
911
|
+
|
|
912
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
913
|
+
$o$It is confirmed instantly — no verification email — and you land in the CMS dashboard.</li>$o$,
|
|
914
|
+
$n$It is confirmed instantly — no verification email — and you land on a welcome screen that offers the free 30-day Cortex AI trial. Choose <em>Not now, take me to my CMS</em> to go straight to the dashboard.</li>$n$,
|
|
915
|
+
NULL);
|
|
916
|
+
|
|
917
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
918
|
+
$o$the only thing left is creating your administrator (confirmed instantly, no email required). You land in the CMS dashboard.</li>$o$,
|
|
919
|
+
$n$the only thing left is creating your administrator (confirmed instantly, no email required). You then land on the same welcome screen and its Cortex AI trial offer.</li>$n$,
|
|
920
|
+
NULL);
|
|
921
|
+
|
|
922
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
923
|
+
$o$Docker mode is offered only in the interactive prompt — don’t pass <code>--yes</code>, which forces the managed-cloud path below.$o$,
|
|
924
|
+
$n$Don’t pass <code>--yes</code> here: it skips the prompt and takes the managed-cloud path below. The agent-oriented <code>--non-interactive</code> flag in <a href='#ai-agent'>Option 5</a> is different: it boots this Docker stack by default.$n$,
|
|
925
|
+
NULL);
|
|
926
|
+
|
|
927
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
928
|
+
$o$<h2 id='npm-cloud'>Option 3: npm create nextblock → Your Own Supabase + Cloudflare</h2>$o$,
|
|
929
|
+
$n$<h2 id='npm-cloud'>Option 3: npm create nextblock → Your Own Supabase Cloud</h2>$n$,
|
|
930
|
+
NULL);
|
|
931
|
+
|
|
932
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
933
|
+
$o$Best for building your own site on managed cloud. Needs a Supabase project and an R2 bucket.$o$,
|
|
934
|
+
$n$Best for building your own site on managed cloud. Needs a Supabase project; a Cloudflare R2 bucket is optional.$n$,
|
|
935
|
+
NULL);
|
|
936
|
+
|
|
937
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
938
|
+
$o$pointed at a Supabase project and Cloudflare R2 bucket you control, and it deploys anywhere Next.js runs.$o$,
|
|
939
|
+
$n$pointed at a Supabase project you control (plus an optional Cloudflare R2 bucket for media), and it deploys anywhere Next.js runs.$n$,
|
|
940
|
+
NULL);
|
|
941
|
+
|
|
942
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
943
|
+
$o$, create a free project at <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>, and set up a <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> bucket for your images and files.</p>$o$,
|
|
944
|
+
$n$ and create a free project at <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>. A <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> bucket for images and files is optional but recommended, because its free tier is larger. Without one, media is stored in your project’s Supabase Storage.</p>$n$,
|
|
945
|
+
NULL);
|
|
946
|
+
|
|
947
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
948
|
+
$o$At the first prompt, choose <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em> and name your project.$o$,
|
|
949
|
+
$n$At the first prompt, choose <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em>; the project takes the folder name you passed (<code>my-site</code>).$n$,
|
|
950
|
+
NULL);
|
|
951
|
+
|
|
952
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
953
|
+
$o$<li><strong>Add Cloudflare R2</strong> — enter your R2 account ID, bucket name, access key ID, secret access key, and the bucket’s public URL for serving images and files.</li>$o$,
|
|
954
|
+
$n$<li><strong>Media storage (optional)</strong> — to use Cloudflare R2, enter your R2 account ID, bucket name, access key ID, secret access key, and the bucket’s public URL. Leave the fields blank to keep media in your project’s Supabase Storage.</li>$n$,
|
|
955
|
+
NULL);
|
|
956
|
+
|
|
957
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
958
|
+
$o$creates your confirmed admin account, and signs you in. Restart <code>npm run dev</code> once afterwards so the fresh environment is baked into the app.</li>$o$,
|
|
959
|
+
$n$creates your confirmed admin account, and signs you in. No restart is needed unless you serve media from a custom domain.</li>$n$,
|
|
960
|
+
NULL);
|
|
961
|
+
|
|
962
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
963
|
+
$o$Need a store? One command adds products, checkout, orders, and coupons — license-gated and ready when you are: <code>npx create-nextblock activate ecommerce</code>$o$,
|
|
964
|
+
$n$Need a store? <strong>NextBlock™ Commerce Pro</strong> — products, checkout, orders, and coupons — already ships in every install. Start its free 30-day trial (no credit card) or enter a license key in the CMS under <strong>Administration → Packages</strong>.$n$,
|
|
965
|
+
NULL);
|
|
966
|
+
|
|
967
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
968
|
+
$o$npx nx serve nextblock</code></pre>$o$,
|
|
969
|
+
$n$npm run dev</code></pre>$n$,
|
|
970
|
+
NULL);
|
|
971
|
+
|
|
972
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
973
|
+
$o$<p>Open <code>http://localhost:4200</code> — a fresh install redirects every page to <code>/setup</code>$o$,
|
|
974
|
+
$n$<p><code>npm run dev</code> starts the CMS through Nx (it runs <code>npx nx serve nextblock</code> for you). Open <code>http://localhost:4200</code> — a fresh install redirects every page to <code>/setup</code>$n$,
|
|
975
|
+
NULL);
|
|
976
|
+
|
|
977
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
978
|
+
$o$Note the monorepo has no <code>npm run dev</code> — use <code>npx nx serve nextblock</code> (port 4200) for the cloud path.$o$,
|
|
979
|
+
$n$For the cloud path instead, <code>npm run dev</code> starts the app on <code>http://localhost:4200</code>.$n$,
|
|
980
|
+
NULL);
|
|
981
|
+
|
|
982
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
983
|
+
$o$<h2 id='after-install'>After You Install: Your First 10 Minutes</h2>$o$,
|
|
984
|
+
$n$<h2 id='ai-agent'>Option 5: Let Your AI Coding Agent Install It</h2>
|
|
985
|
+
<p class='mt-2 mb-6 flex flex-wrap items-center gap-x-3 gap-y-2 text-sm'><span class='inline-flex items-center gap-2 rounded-full border border-rose-200 bg-rose-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-rose-700 dark:border-rose-500/20 dark:bg-rose-500/10 dark:text-rose-200'>Step 5 · Hands-off</span><span class='text-slate-500 dark:text-slate-400'>Best if you already work with Claude Code, Cursor, or Codex. Needs Node.js and Docker Desktop.</span></p>
|
|
986
|
+
<p>You can skip every step above and simply ask. A coding agent that runs commands on your computer can install NextBlock, connect itself to the CMS, and build your pages from a plain-language brief. Try this: “Build me a landing page for my bakery with NextBlock.” Behind the scenes, the agent runs the installer’s hands-free mode:</p>
|
|
987
|
+
<pre><code>npx create-nextblock@latest my-site --non-interactive</code></pre>
|
|
988
|
+
<ol class='space-y-2'>
|
|
989
|
+
<li><strong>The agent installs the site.</strong> The installer scaffolds the project, boots the local Docker stack, and writes the MCP connection files the agent needs.</li>
|
|
990
|
+
<li><strong>You do two things in the browser.</strong> Open the setup link the agent gives you (usually <code>http://localhost:3000/setup</code>) and create your administrator account. Then start the free 30-day Cortex AI trial on the welcome screen, with no credit card. Your name, email, and password never pass through the agent.</li>
|
|
991
|
+
<li><strong>The agent builds your pages.</strong> Once the site reports ready, reopen the agent in the new project folder so it loads that connection. It then creates pages, menus, and images through the <a href='/article/cortex-ai-mcp-connection-guide'>NextBlock MCP server</a>, and you keep editing everything in the CMS.</li>
|
|
992
|
+
</ol>
|
|
993
|
+
<div class='rounded-3xl border border-rose-200 bg-rose-50/70 p-6 my-8 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
994
|
+
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Recommended · add the NextBlock plugin</p>
|
|
995
|
+
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>With the plugin, your agent knows the whole routine and suggests NextBlock when you ask it for a website. In Claude Code, run <code>/plugin marketplace add nextblock-cms/nextblock</code>, then <code>/plugin install nextblock@nextblock</code>.</p>
|
|
996
|
+
<p class='mt-4 mb-0 text-sm text-slate-700 dark:text-slate-200'>In Cursor, add it from the NextBlock GitHub repository under <strong>Customize → Plugins</strong>. For Codex and other agents, paste <a href='https://github.com/nextblock-cms/nextblock/blob/master/plugins/AGENTS.snippet.md' target='_blank' rel='noopener'>this snippet</a> into your <code>AGENTS.md</code>. No plugin? Name NextBlock in your request, and point the agent to <code>nextblock.dev/llms.txt</code> if it needs the steps.</p>
|
|
997
|
+
</div>
|
|
998
|
+
<p>You need Node.js 22.12+, a coding agent, and Docker Desktop running. No Docker? Ask for <code>--mode cloud</code>. The agent scaffolds the project and starts it with <code>npm run dev</code>, and you connect your own Supabase project in the setup wizard, as in Option 3. The MCP server is part of Cortex AI, which is why the trial comes first. The CMS itself stays free either way.</p>
|
|
999
|
+
|
|
1000
|
+
<h2 id='after-install'>After You Install: Your First 10 Minutes</h2>$n$,
|
|
1001
|
+
$u$<h2 id='ai-agent'>$u$);
|
|
1002
|
+
|
|
1003
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1004
|
+
$o$Every path drops you at <code>/cms/dashboard</code>, signed in as the first administrator. A built-in onboarding checklist walks you through the rest:$o$,
|
|
1005
|
+
$n$Every path signs you in as the first administrator and opens a welcome screen that offers the free 30-day Cortex AI trial (no credit card). Start it, or choose <em>Not now, take me to my CMS</em> to go to <code>/cms/dashboard</code>. A built-in onboarding checklist walks you through the rest:$n$,
|
|
1006
|
+
NULL);
|
|
1007
|
+
|
|
1008
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1009
|
+
$o$<li><strong>Add your branding</strong> — upload your logo and set the site title.</li>$o$,
|
|
1010
|
+
$n$<li><strong>Build your site with Cortex AI</strong> — answer a few questions, and Cortex replaces the sample content with your own pages, menus, and branding (free 30-day trial, no credit card).</li>
|
|
1011
|
+
<li><strong>Add your branding</strong> — upload your logo and set the site title.</li>$n$,
|
|
1012
|
+
$u$<li><strong>Build your site with Cortex AI</strong>$u$);
|
|
1013
|
+
|
|
1014
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1015
|
+
$o$and (on Vercel) turn on automatic updates.</li>$o$,
|
|
1016
|
+
$n$and (on a Vercel one-click deploy or a GitHub fork) turn on automatic updates.</li>$n$,
|
|
1017
|
+
NULL);
|
|
1018
|
+
|
|
1019
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1020
|
+
$o$or meet your AI copilot in the <a href='/article/nextblock-cortex-ai-guide'>Cortex AI guide</a>.$o$,
|
|
1021
|
+
$n$or put Cortex AI to work with the <a href='/article/nextblock-cortex-ai-guide'>Cortex AI guide</a> and the <a href='/article/cortex-ai-mcp-connection-guide'>MCP connection guide</a>.$n$,
|
|
1022
|
+
NULL);
|
|
1023
|
+
|
|
1024
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1025
|
+
$o$For the managed-cloud path: Node.js 22.12+ plus a Supabase project and a Cloudflare R2 bucket.$o$,
|
|
1026
|
+
$n$For the managed-cloud path: Node.js 22.12+ plus a Supabase project (a Cloudflare R2 bucket is optional).$n$,
|
|
1027
|
+
NULL);
|
|
1028
|
+
|
|
1029
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1030
|
+
$o$(add Docker Desktop if you want to run the local stack).</p>$o$,
|
|
1031
|
+
$n$(add Docker Desktop if you want to run the local stack). For your coding agent: Node.js 22.12+ and Docker Desktop, or a Supabase project with <code>--mode cloud</code>.</p>$n$,
|
|
1032
|
+
NULL);
|
|
1033
|
+
|
|
1034
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1035
|
+
$o$Premium packages such as e-commerce and Cortex AI are optional and activate with a license key.$o$,
|
|
1036
|
+
$n$The premium packages, Commerce Pro and Cortex AI, are optional: each starts with a free 30-day trial (no credit card) and then needs a license key.$n$,
|
|
1037
|
+
NULL);
|
|
1038
|
+
|
|
1039
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1040
|
+
$o$<h3>How do I update NextBlock?</h3>$o$,
|
|
1041
|
+
$n$<h3>Can an AI agent install and build my site?</h3>
|
|
1042
|
+
<p>Yes. Claude Code, Cursor, Codex, and other coding agents can run the installer for you, then build every page over the MCP server. You only create your admin account and start the Cortex AI trial. See <a href='#ai-agent'>Option 5</a>.</p>
|
|
1043
|
+
<h3>How do I update NextBlock?</h3>$n$,
|
|
1044
|
+
$u$<h3>Can an AI agent install and build my site?</h3>$u$);
|
|
1045
|
+
|
|
1046
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-to-setup-nextblock', 'en',
|
|
1047
|
+
$o$On a cloned repository, <code>git pull</code>, run <code>npm run db:migrate</code>, then restart (on production builds, pending migrations apply automatically). With Docker, pull the latest code and run <code>npm run docker:up</code>.$o$,
|
|
1048
|
+
$n$Everywhere else, one command updates the code, the dependencies, and the database schema: <code>npm run update</code>. On Docker, follow it with <code>npm run docker:up</code>. <a href='/article/how-updating-works'>How Updating NextBlock Works</a> covers every path.$n$,
|
|
1049
|
+
NULL);
|
|
1050
|
+
|
|
1051
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1052
|
+
$o$Voici quatre façons de démarrer, <strong>classées de la plus simple à la plus technique</strong> : la première tient en un clic, la dernière donne le code source complet pour celles et ceux qui veulent participer à NextBlock.$o$,
|
|
1053
|
+
$n$Voici cinq façons de démarrer. Les quatre premières sont <strong>classées de la plus simple à la plus technique</strong> : la première tient en un clic, la quatrième donne le code source complet pour celles et ceux qui veulent participer à NextBlock. La cinquième confie tout le travail à l'agent de code IA que vous utilisez déjà.$n$,
|
|
1054
|
+
NULL);
|
|
1055
|
+
|
|
1056
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1057
|
+
$o$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → Supabase + R2</h2>$o$,
|
|
1058
|
+
$n$<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>npm create nextblock → votre propre Supabase</h2>$n$,
|
|
1059
|
+
NULL);
|
|
1060
|
+
|
|
1061
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1062
|
+
$o$Générez une app autonome sur votre propre projet Supabase géré et Cloudflare R2, prête à déployer partout.$o$,
|
|
1063
|
+
$n$Générez une app autonome sur votre propre projet Supabase géré (Cloudflare R2 facultatif), prête à déployer partout.$n$,
|
|
1064
|
+
NULL);
|
|
1065
|
+
|
|
1066
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1067
|
+
$o$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Faites tourner le monorepo complet — le CMS, tous les packages et la documentation. Pour celles et ceux qui veulent aider à construire NextBlock (Docker fonctionne ici aussi).</p>$o$,
|
|
1068
|
+
$n$<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Faites tourner le monorepo complet — le CMS, tous les packages et la documentation. Pour celles et ceux qui veulent aider à construire NextBlock (Docker fonctionne ici aussi).</p>
|
|
1069
|
+
</a>
|
|
1070
|
+
<a href='#ai-agent' class='block rounded-[1.75rem] border border-rose-200 bg-rose-50/70 p-6 no-underline transition-shadow hover:shadow-lg md:col-span-2 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
1071
|
+
<div class='flex items-center justify-between mb-4'>
|
|
1072
|
+
<span class='flex h-9 w-9 items-center justify-center rounded-full bg-rose-600 text-sm font-bold text-white'>5</span>
|
|
1073
|
+
<span class='rounded-full border border-rose-300 px-3 py-1 text-[0.65rem] font-semibold uppercase tracking-[0.2em] text-rose-700 dark:border-rose-500/20 dark:text-rose-200'>Nouveau</span>
|
|
1074
|
+
</div>
|
|
1075
|
+
<p class='mt-0 mb-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Sans effort · votre agent de code IA</p>
|
|
1076
|
+
<h2 class='mt-2 mb-2 text-xl font-semibold text-slate-900 dark:text-white'>Demandez à votre agent de le construire</h2>
|
|
1077
|
+
<p class='mb-0 text-sm leading-6 text-slate-600 dark:text-slate-300'>Demandez un site web à Claude Code, Cursor ou Codex. Il installe NextBlock, vous créez votre admin dans le navigateur, et il construit les pages via MCP.</p>$n$,
|
|
1078
|
+
$u$<a href='#ai-agent' class=$u$);
|
|
1079
|
+
|
|
1080
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1081
|
+
$o$La plupart des gens devraient commencer par <a href='#one-click-vercel'>Vercel</a>.</p>$o$,
|
|
1082
|
+
$n$La plupart des gens devraient commencer par <a href='#one-click-vercel'>Vercel</a>. Vous travaillez déjà avec un agent de code IA ? Passez directement à l'<a href='#ai-agent'>option 5</a>.</p>$n$,
|
|
1083
|
+
NULL);
|
|
1084
|
+
|
|
1085
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1086
|
+
$o$Il est confirmé instantanément — aucun email de vérification — et vous arrivez dans le tableau de bord du CMS.</li>$o$,
|
|
1087
|
+
$n$Il est confirmé instantanément — aucun email de vérification — et vous arrivez sur un écran d'accueil qui propose l'essai gratuit de 30 jours de Cortex AI. Choisissez <em>Not now, take me to my CMS</em> pour aller directement au tableau de bord.</li>$n$,
|
|
1088
|
+
NULL);
|
|
1089
|
+
|
|
1090
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1091
|
+
$o$il ne reste qu'à créer votre administrateur (confirmé instantanément, sans email). Vous arrivez dans le tableau de bord du CMS.</li>$o$,
|
|
1092
|
+
$n$il ne reste qu'à créer votre administrateur (confirmé instantanément, sans email). Vous arrivez ensuite sur le même écran d'accueil et son offre d'essai de Cortex AI.</li>$n$,
|
|
1093
|
+
NULL);
|
|
1094
|
+
|
|
1095
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1096
|
+
$o$Le mode Docker n'est proposé que dans le prompt interactif — ne passez pas <code>--yes</code>, qui force le mode cloud géré ci-dessous.$o$,
|
|
1097
|
+
$n$Ne passez pas <code>--yes</code> ici : il saute le prompt et prend le mode cloud géré ci-dessous. L'option <code>--non-interactive</code> de l'<a href='#ai-agent'>option 5</a>, pensée pour les agents, est différente : elle démarre cette pile Docker par défaut.$n$,
|
|
1098
|
+
NULL);
|
|
1099
|
+
|
|
1100
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1101
|
+
$o$<h2 id='npm-cloud'>Option 3 : npm create nextblock → votre propre Supabase + Cloudflare</h2>$o$,
|
|
1102
|
+
$n$<h2 id='npm-cloud'>Option 3 : npm create nextblock → votre propre Supabase</h2>$n$,
|
|
1103
|
+
NULL);
|
|
1104
|
+
|
|
1105
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1106
|
+
$o$Idéal pour construire votre propre site sur du cloud géré. Nécessite un projet Supabase et un bucket R2.$o$,
|
|
1107
|
+
$n$Idéal pour construire votre propre site sur du cloud géré. Nécessite un projet Supabase ; un bucket Cloudflare R2 est facultatif.$n$,
|
|
1108
|
+
NULL);
|
|
1109
|
+
|
|
1110
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1111
|
+
$o$reliée à un projet Supabase et un bucket Cloudflare R2 que vous contrôlez, et elle se déploie partout où Next.js tourne.$o$,
|
|
1112
|
+
$n$reliée à un projet Supabase que vous contrôlez (plus un bucket Cloudflare R2 facultatif pour les médias), et elle se déploie partout où Next.js tourne.$n$,
|
|
1113
|
+
NULL);
|
|
1114
|
+
|
|
1115
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1116
|
+
$o$, créez un projet gratuit sur <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>, et configurez un bucket <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> pour vos images et fichiers.</p>$o$,
|
|
1117
|
+
$n$ et créez un projet gratuit sur <a href='https://supabase.com' target='_blank' rel='noopener'>supabase.com</a>. Un bucket <a href='https://developers.cloudflare.com/r2/' target='_blank' rel='noopener'>Cloudflare R2</a> pour vos images et fichiers est facultatif mais recommandé, car son offre gratuite est plus généreuse. Sans lui, les médias sont stockés dans le Supabase Storage de votre projet.</p>$n$,
|
|
1118
|
+
NULL);
|
|
1119
|
+
|
|
1120
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1121
|
+
$o$Au premier prompt, choisissez <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em> et nommez votre projet.$o$,
|
|
1122
|
+
$n$Au premier prompt, choisissez <em>Managed Cloud Mode (Vercel + Supabase Cloud)</em> ; le projet prend le nom du dossier indiqué (<code>mon-site</code>).$n$,
|
|
1123
|
+
NULL);
|
|
1124
|
+
|
|
1125
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1126
|
+
$o$<li><strong>Ajoutez Cloudflare R2</strong> — saisissez votre identifiant de compte R2, le nom du bucket, la clé d'accès (access key ID), la clé secrète et l'URL publique du bucket pour servir vos images et fichiers.</li>$o$,
|
|
1127
|
+
$n$<li><strong>Stockage des médias (facultatif)</strong> — pour utiliser Cloudflare R2, saisissez votre identifiant de compte R2, le nom du bucket, la clé d'accès (access key ID), la clé secrète et l'URL publique du bucket. Laissez les champs vides pour garder les médias dans le Supabase Storage de votre projet.</li>$n$,
|
|
1128
|
+
NULL);
|
|
1129
|
+
|
|
1130
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1131
|
+
$o$crée votre compte admin confirmé et vous connecte. Redémarrez ensuite <code>npm run dev</code> une fois pour que le nouvel environnement soit intégré à l'application.</li>$o$,
|
|
1132
|
+
$n$crée votre compte admin confirmé et vous connecte. Aucun redémarrage n'est nécessaire, sauf si vous servez les médias depuis un domaine personnalisé.</li>$n$,
|
|
1133
|
+
NULL);
|
|
1134
|
+
|
|
1135
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1136
|
+
$o$Besoin d'une boutique ? Une seule commande ajoute produits, paiement, commandes et coupons — activés par clé de licence, prêts quand vous l'êtes : <code>npx create-nextblock activate ecommerce</code>$o$,
|
|
1137
|
+
$n$Besoin d'une boutique ? <strong>NextBlock™ Commerce Pro</strong> — produits, paiement, commandes et coupons — est déjà inclus dans chaque installation. Lancez son essai gratuit de 30 jours (sans carte de crédit) ou saisissez une clé de licence dans le CMS, sous <strong>Administration → Packages</strong>.$n$,
|
|
1138
|
+
NULL);
|
|
1139
|
+
|
|
1140
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1141
|
+
$o$npx nx serve nextblock</code></pre>$o$,
|
|
1142
|
+
$n$npm run dev</code></pre>$n$,
|
|
1143
|
+
NULL);
|
|
1144
|
+
|
|
1145
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1146
|
+
$o$<p>Ouvrez <code>http://localhost:4200</code> — une nouvelle installation redirige chaque page vers <code>/setup</code>$o$,
|
|
1147
|
+
$n$<p><code>npm run dev</code> démarre le CMS via Nx (il lance <code>npx nx serve nextblock</code> pour vous). Ouvrez <code>http://localhost:4200</code> — une nouvelle installation redirige chaque page vers <code>/setup</code>$n$,
|
|
1148
|
+
NULL);
|
|
1149
|
+
|
|
1150
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1151
|
+
$o$Notez que le monorepo n'a pas de <code>npm run dev</code> — utilisez <code>npx nx serve nextblock</code> (port 4200) pour le chemin cloud.$o$,
|
|
1152
|
+
$n$Pour le chemin cloud, <code>npm run dev</code> lance plutôt l'application sur <code>http://localhost:4200</code>.$n$,
|
|
1153
|
+
NULL);
|
|
1154
|
+
|
|
1155
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1156
|
+
$o$<h2 id='after-install'>Après l'installation : vos 10 premières minutes</h2>$o$,
|
|
1157
|
+
$n$<h2 id='ai-agent'>Option 5 : Confiez l'installation à votre agent de code IA</h2>
|
|
1158
|
+
<p class='mt-2 mb-6 flex flex-wrap items-center gap-x-3 gap-y-2 text-sm'><span class='inline-flex items-center gap-2 rounded-full border border-rose-200 bg-rose-50 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-rose-700 dark:border-rose-500/20 dark:bg-rose-500/10 dark:text-rose-200'>Étape 5 · Sans effort</span><span class='text-slate-500 dark:text-slate-400'>Idéal si vous travaillez déjà avec Claude Code, Cursor ou Codex. Nécessite Node.js et Docker Desktop.</span></p>
|
|
1159
|
+
<p>Vous pouvez sauter toutes les étapes ci-dessus et simplement demander. Un agent de code qui exécute des commandes sur votre ordinateur peut installer NextBlock, se connecter au CMS et construire vos pages à partir d'une simple description. Essayez : « Crée-moi une page d'accueil pour ma boulangerie avec NextBlock. » En coulisses, l'agent lance l'installateur en mode sans intervention :</p>
|
|
1160
|
+
<pre><code>npx create-nextblock@latest mon-site --non-interactive</code></pre>
|
|
1161
|
+
<ol class='space-y-2'>
|
|
1162
|
+
<li><strong>L'agent installe le site.</strong> L'installateur crée le projet, démarre la pile Docker locale et écrit les fichiers de connexion MCP dont l'agent a besoin.</li>
|
|
1163
|
+
<li><strong>Vous faites deux choses dans le navigateur.</strong> Ouvrez le lien de configuration que l'agent vous donne (en général <code>http://localhost:3000/setup</code>) et créez votre compte administrateur. Démarrez ensuite l'essai gratuit de 30 jours de Cortex AI sur l'écran d'accueil, sans carte de crédit. Votre nom, votre email et votre mot de passe ne passent jamais par l'agent.</li>
|
|
1164
|
+
<li><strong>L'agent construit vos pages.</strong> Quand le site se déclare prêt, rouvrez l'agent dans le dossier du nouveau projet pour qu'il charge cette connexion. Il crée alors pages, menus et images via le <a href='/article/guide-connexion-mcp-cortex-ai'>serveur MCP de NextBlock</a>, et vous continuez à tout modifier dans le CMS.</li>
|
|
1165
|
+
</ol>
|
|
1166
|
+
<div class='rounded-3xl border border-rose-200 bg-rose-50/70 p-6 my-8 dark:border-rose-500/20 dark:bg-rose-500/10'>
|
|
1167
|
+
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-rose-700 dark:text-rose-200'>Recommandé · ajoutez le plugin NextBlock</p>
|
|
1168
|
+
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Avec le plugin, votre agent connaît toute la marche à suivre et propose NextBlock quand vous lui demandez un site web. Dans Claude Code, lancez <code>/plugin marketplace add nextblock-cms/nextblock</code>, puis <code>/plugin install nextblock@nextblock</code>.</p>
|
|
1169
|
+
<p class='mt-4 mb-0 text-sm text-slate-700 dark:text-slate-200'>Dans Cursor, ajoutez-le depuis le dépôt GitHub de NextBlock sous <strong>Customize → Plugins</strong>. Pour Codex et les autres agents, collez <a href='https://github.com/nextblock-cms/nextblock/blob/master/plugins/AGENTS.snippet.md' target='_blank' rel='noopener'>cet extrait</a> dans votre <code>AGENTS.md</code>. Pas de plugin ? Nommez NextBlock dans votre demande et, au besoin, indiquez à l'agent <code>nextblock.dev/llms.txt</code>, qui décrit la marche à suivre.</p>
|
|
1170
|
+
</div>
|
|
1171
|
+
<p>Il vous faut Node.js 22.12+, un agent de code et Docker Desktop en marche. Pas de Docker ? Demandez l'option <code>--mode cloud</code>. L'agent crée le projet et le démarre avec <code>npm run dev</code>, puis vous connectez votre propre projet Supabase dans l'assistant, comme à l'option 3. Le serveur MCP fait partie de Cortex AI, d'où l'essai en premier. Le CMS lui-même reste gratuit dans tous les cas.</p>
|
|
1172
|
+
|
|
1173
|
+
<h2 id='after-install'>Après l'installation : vos 10 premières minutes</h2>$n$,
|
|
1174
|
+
$u$<h2 id='ai-agent'>$u$);
|
|
1175
|
+
|
|
1176
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1177
|
+
$o$Chaque chemin vous dépose sur <code>/cms/dashboard</code>, connecté en tant que premier administrateur. Une checklist de démarrage intégrée vous guide pour la suite :$o$,
|
|
1178
|
+
$n$Chaque chemin vous connecte en tant que premier administrateur et ouvre un écran d'accueil qui propose l'essai gratuit de 30 jours de Cortex AI (sans carte de crédit). Démarrez-le, ou choisissez <em>Not now, take me to my CMS</em> pour aller sur <code>/cms/dashboard</code>. Une checklist de démarrage intégrée vous guide pour la suite :$n$,
|
|
1179
|
+
NULL);
|
|
1180
|
+
|
|
1181
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1182
|
+
$o$<li><strong>Ajoutez votre identité visuelle</strong> — téléversez votre logo et définissez le titre du site.</li>$o$,
|
|
1183
|
+
$n$<li><strong>Construisez votre site avec Cortex AI</strong> — répondez à quelques questions, et Cortex remplace le contenu d'exemple par vos propres pages, menus et identité visuelle (essai gratuit de 30 jours, sans carte de crédit).</li>
|
|
1184
|
+
<li><strong>Ajoutez votre identité visuelle</strong> — téléversez votre logo et définissez le titre du site.</li>$n$,
|
|
1185
|
+
$u$<li><strong>Construisez votre site avec Cortex AI</strong>$u$);
|
|
1186
|
+
|
|
1187
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1188
|
+
$o$et (sur Vercel) les mises à jour automatiques.</li>$o$,
|
|
1189
|
+
$n$et (sur un déploiement Vercel en un clic ou un fork GitHub) les mises à jour automatiques.</li>$n$,
|
|
1190
|
+
NULL);
|
|
1191
|
+
|
|
1192
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1193
|
+
$o$, ou ajoutez une boutique avec le <a href='/article/guide-commerce-nextblock'>guide Commerce</a>.</p>$o$,
|
|
1194
|
+
$n$, ajoutez une boutique avec le <a href='/article/guide-commerce-nextblock'>guide Commerce</a>, ou mettez Cortex AI au travail avec le <a href='/article/guide-connexion-mcp-cortex-ai'>guide de connexion MCP</a>.</p>$n$,
|
|
1195
|
+
NULL);
|
|
1196
|
+
|
|
1197
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1198
|
+
$o$Pour le mode cloud géré : Node.js 22.12+ ainsi qu'un projet Supabase et un bucket Cloudflare R2.$o$,
|
|
1199
|
+
$n$Pour le mode cloud géré : Node.js 22.12+ ainsi qu'un projet Supabase (un bucket Cloudflare R2 est facultatif).$n$,
|
|
1200
|
+
NULL);
|
|
1201
|
+
|
|
1202
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1203
|
+
$o$(ajoutez Docker Desktop si vous voulez faire tourner la pile locale).</p>$o$,
|
|
1204
|
+
$n$(ajoutez Docker Desktop si vous voulez faire tourner la pile locale). Pour votre agent de code : Node.js 22.12+ et Docker Desktop, ou un projet Supabase avec <code>--mode cloud</code>.</p>$n$,
|
|
1205
|
+
NULL);
|
|
1206
|
+
|
|
1207
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1208
|
+
$o$Les packages premium comme l'e-commerce et Cortex AI sont optionnels et s'activent avec une clé de licence.$o$,
|
|
1209
|
+
$n$Les packages premium, Commerce Pro et Cortex AI, sont optionnels : chacun démarre par un essai gratuit de 30 jours (sans carte de crédit), puis s'active avec une clé de licence.$n$,
|
|
1210
|
+
NULL);
|
|
1211
|
+
|
|
1212
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1213
|
+
$o$<h3>Comment mettre à jour NextBlock ?</h3>$o$,
|
|
1214
|
+
$n$<h3>Un agent IA peut-il installer et construire mon site ?</h3>
|
|
1215
|
+
<p>Oui. Claude Code, Cursor, Codex et d'autres agents de code peuvent lancer l'installateur pour vous, puis construire chaque page via le serveur MCP. Il vous reste seulement à créer votre compte administrateur et à démarrer l'essai de Cortex AI. Voir l'<a href='#ai-agent'>option 5</a>.</p>
|
|
1216
|
+
<h3>Comment mettre à jour NextBlock ?</h3>$n$,
|
|
1217
|
+
$u$<h3>Un agent IA peut-il installer et construire mon site ?</h3>$u$);
|
|
1218
|
+
|
|
1219
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-configurer-nextblock', 'fr',
|
|
1220
|
+
$o$Sur un dépôt cloné, <code>git pull</code>, lancez <code>npm run db:migrate</code>, puis redémarrez (lors des builds de production, les migrations en attente s'appliquent automatiquement). Avec Docker, récupérez le dernier code et lancez <code>npm run docker:up</code>.$o$,
|
|
1221
|
+
$n$Partout ailleurs, une seule commande met à jour le code, les dépendances et le schéma de base de données : <code>npm run update</code>. Avec Docker, enchaînez avec <code>npm run docker:up</code>. Le <a href='/article/comment-fonctionnent-les-mises-a-jour'>guide des mises à jour</a> détaille chaque cas de figure.$n$,
|
|
1222
|
+
NULL);
|
|
1223
|
+
|
|
1224
|
+
-- ========================================================================================
|
|
1225
|
+
-- updating-guide
|
|
1226
|
+
-- ========================================================================================
|
|
1227
|
+
|
|
1228
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1229
|
+
$o$used to mean knowing which of the four install paths you were on.$o$,
|
|
1230
|
+
$n$used to mean knowing which install path you were on.$n$,
|
|
1231
|
+
NULL);
|
|
1232
|
+
|
|
1233
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1234
|
+
$o$If you would rather look before you leap, <code>npm run update -- --check</code> reports exactly what would change and touches nothing.$o$,
|
|
1235
|
+
$n$If you would rather look before you leap, <code>npm run update:check</code> lists what would change and touches nothing.$n$,
|
|
1236
|
+
NULL);
|
|
1237
|
+
|
|
1238
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1239
|
+
$o$<h2 id='the-four-paths'>The four install paths, and how each one gets updates</h2>$o$,
|
|
1240
|
+
$n$<h2 id='the-four-paths'>Five ways to install, four ways to update</h2>$n$,
|
|
1241
|
+
NULL);
|
|
1242
|
+
|
|
1243
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1244
|
+
$o$These map one-to-one onto the four options in <a href='/article/how-to-setup-nextblock'>the install guide</a>.$o$,
|
|
1245
|
+
$n$The first four options in <a href='/article/how-to-setup-nextblock'>the install guide</a> map one-to-one onto the paths below. The fifth, where an AI coding agent builds the site, updates like path 2 or 3.$n$,
|
|
1246
|
+
NULL);
|
|
1247
|
+
|
|
1248
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1249
|
+
$o$dark:text-blue-200'>Fully automatic</p>$o$,
|
|
1250
|
+
$n$dark:text-blue-200'>Automatic after setup</p>$n$,
|
|
1251
|
+
NULL);
|
|
1252
|
+
|
|
1253
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1254
|
+
$o$A daily workflow merges upstream into your repository and Vercel redeploys. You do nothing.$o$,
|
|
1255
|
+
$n$One-time setup: <strong>Connect GitHub</strong> in the dashboard, or enable Actions on a manual fork. Then a daily workflow merges upstream and Vercel redeploys.$n$,
|
|
1256
|
+
NULL);
|
|
1257
|
+
|
|
1258
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1259
|
+
$o$<h2 id='vercel'>1. One-click Vercel and GitHub forks — hands-off</h2>$o$,
|
|
1260
|
+
$n$<div class='rounded-3xl border border-slate-200 bg-slate-50 p-6 my-8 dark:border-white/10 dark:bg-white/5'>
|
|
1261
|
+
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-slate-600 dark:text-slate-300'>Installed by an AI coding agent?</p>
|
|
1262
|
+
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Then you have an ordinary <code>npm create nextblock</code> project. The agent runs <code>npx create-nextblock@latest my-site --non-interactive</code>, which scaffolds the same standalone app. It runs in Docker by default, so it updates like <a href='#docker'>path 2</a>. With <code>--mode cloud</code> it uses managed Supabase and updates like <a href='#cloud'>path 3</a>. If the agent runs the update for you, have it use <code>node tools/update.mjs --yes</code>. Its shell is not an interactive terminal, so without that flag the updater declines. More on this route in <a href='/article/how-to-setup-nextblock#ai-agent'>the install guide</a>.</p>
|
|
1263
|
+
</div>
|
|
1264
|
+
|
|
1265
|
+
<h2 id='vercel'>1. One-click Vercel and GitHub forks — hands-off</h2>$n$,
|
|
1266
|
+
$u$Installed by an AI coding agent?$u$);
|
|
1267
|
+
|
|
1268
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1269
|
+
$o$When you deployed, NextBlock created a repository you own;$o$,
|
|
1270
|
+
$n$When you deployed, Vercel created a repository you own;$n$,
|
|
1271
|
+
NULL);
|
|
1272
|
+
|
|
1273
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1274
|
+
$o$triggered by hand from your repository’s <strong>Actions</strong> tab.</p>$o$,
|
|
1275
|
+
$n$triggered by hand from your repository’s <strong>Actions</strong> tab. A manual GitHub fork already carries the workflow, but GitHub disables Actions on forks. Enable them once from the fork’s <strong>Actions</strong> tab.</p>$n$,
|
|
1276
|
+
NULL);
|
|
1277
|
+
|
|
1278
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1279
|
+
$o$anything replaced is kept under <code>.nextblock-backup/</code>.</p>$o$,
|
|
1280
|
+
$n$anything replaced is kept under <code>.nextblock-backup/</code>.</p>
|
|
1281
|
+
<p>A new project needs that first commit. The <code>create-nextblock</code> CLI runs <code>git init</code> but commits nothing, in Docker mode too and when an AI agent runs it. So commit once before your first update: <code>git add -A</code>, then <code>git commit -m initial</code>. The generated <code>.gitignore</code> already keeps your <code>.env</code> files and the agent’s MCP configs out of git.</p>$n$,
|
|
1282
|
+
$u$git commit -m initial$u$);
|
|
1283
|
+
|
|
1284
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1285
|
+
$o$<pre><code>npm run update</code></pre>$o$,
|
|
1286
|
+
$n$<pre><code>npm run update
|
|
1287
|
+
npm run dev</code></pre>$n$,
|
|
1288
|
+
NULL);
|
|
1289
|
+
|
|
1290
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1291
|
+
$o$points you at <code>git pull --rebase</code> rather than guessing.</p>$o$,
|
|
1292
|
+
$n$points you at <code>git pull --rebase</code> rather than guessing. When it finishes, restart the dev server with <code>npm run dev</code> (port 4200).</p>$n$,
|
|
1293
|
+
NULL);
|
|
1294
|
+
|
|
1295
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1296
|
+
$o$<td class='py-3 pr-4'><code>npm run update -- --check</code></td>$o$,
|
|
1297
|
+
$n$<td class='py-3 pr-4'><code>npm run update:check</code></td>$n$,
|
|
1298
|
+
NULL);
|
|
1299
|
+
|
|
1300
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1301
|
+
$o$<h2 id='database'>What happens to your database</h2>$o$,
|
|
1302
|
+
$n$<p class='text-sm'>On <strong>PowerShell</strong>, a bare <code>--</code> is stripped, so the flagged forms above run as a plain <code>npm run update</code>, with its confirmation prompts. npm keeps the flag for itself: it warns <code>Unknown cli config</code> for <code>--check</code>, <code>--db-only</code> and <code>--skip-db</code>, but <code>--yes</code> and <code>--force</code> are npm options too, so it takes them without that warning. To preview, use <code>npm run update:check</code>. For the other options, call the script directly. For example, in a project made with <code>npm create nextblock</code>, run <code>node tools/update.mjs --db-only</code>; in the monorepo, <code>node apps/nextblock/tools/update.mjs --db-only</code>. Command Prompt (<code>cmd.exe</code>) and macOS or Linux shells are not affected.</p>
|
|
1303
|
+
|
|
1304
|
+
<h2 id='database'>What happens to your database</h2>$n$,
|
|
1305
|
+
$u$node apps/nextblock/tools/update.mjs --db-only$u$);
|
|
1306
|
+
|
|
1307
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1308
|
+
$o$<p>Migrations change <em>structure</em> — tables, columns, indexes, permissions. Your pages, posts, products, media and users are yours; the update never deletes or rewrites them.</p>$o$,
|
|
1309
|
+
$n$<p>Migrations mostly change <em>structure</em> — tables, columns, indexes, permissions. A few also fix data. They refresh the demo content, theme colours and interface strings NextBlock seeded, usually only where these still match what NextBlock shipped. Rarely, one applies a narrow mechanical fix across all content. Examples: moving YouTube embeds to youtube-nocookie, or removing a CSS class that slowed the first paint. No migration deletes your pages, posts, products, media or users.</p>$n$,
|
|
1310
|
+
NULL);
|
|
1311
|
+
|
|
1312
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1313
|
+
$o$Before a big jump on a production site, take a database snapshot — Supabase does daily backups on paid plans, and you can trigger one on demand from the Supabase dashboard. Then run <code>npm run update -- --check</code> to see the pending list before you commit to it.$o$,
|
|
1314
|
+
$n$Before a big jump on a production site, take a database snapshot. Supabase keeps daily backups on paid plans, which you restore from <strong>Database → Backups</strong> in its dashboard. For a copy of your own, use <code>pg_dump</code> with your database connection string. With the Supabase CLI, <code>supabase db dump</code> saves only the schema; run <code>supabase db dump --data-only</code> as well for the rows. On Docker, run <code>pg_dump</code> inside the <code>db</code> container. Then run <code>npm run update:check</code> to preview the update before you commit to it.$n$,
|
|
1315
|
+
NULL);
|
|
1316
|
+
|
|
1317
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1318
|
+
$o$Review it with <code>git diff</code>, and undo the whole thing with <code>git reset --hard HEAD</code>. Nothing is ever deleted, so files you added yourself are never removed.$o$,
|
|
1319
|
+
$n$Review it with <code>git status</code>, which lists the files it added, and <code>git diff</code>. To back the code out, run <code>git reset --hard HEAD</code> and <code>git clean -fd</code>, then <code>npm install</code> to restore your dependencies. <code>git clean</code> removes the files the update added, plus any untracked file you created since; preview it with <code>git clean -nd</code>. Migrations that already ran stay applied: restore your snapshot if you need the old schema. The update itself never deletes a file, so files you added yourself are never removed.$n$,
|
|
1320
|
+
NULL);
|
|
1321
|
+
|
|
1322
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1323
|
+
$o$<li><strong>Git-backed installs:</strong> the update is an ordinary commit. <code>git log</code> shows it and <code>git revert</code> undoes it.</li>$o$,
|
|
1324
|
+
$n$<li><strong>Git-backed installs:</strong> the daily workflow lands each update as a merge commit. <code>git log</code> shows it and <code>git revert -m 1 <merge-commit></code> undoes it. Git then treats those upstream changes as already merged, so later syncs will not bring them back until you revert that revert. Ran <code>npm run update</code> yourself, on a clone or a local copy of your fork? Right after it, <code>git reset --hard ORIG_HEAD</code> takes the code back and <code>npm install</code> restores the previous dependencies. Migrations already applied stay applied.</li>$n$,
|
|
1325
|
+
NULL);
|
|
1326
|
+
|
|
1327
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1328
|
+
$o$and <code>git reset --hard HEAD</code> backs the whole update out.$o$,
|
|
1329
|
+
$n$and <code>git reset --hard HEAD</code>, <code>git clean -fd</code> and <code>npm install</code> back the whole update out.$n$,
|
|
1330
|
+
NULL);
|
|
1331
|
+
|
|
1332
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1333
|
+
$o$or walk away with <code>git reset --hard HEAD</code>; either way the database was never touched.$o$,
|
|
1334
|
+
$n$or walk away with <code>git reset --hard HEAD</code>, <code>git clean -fd</code> and <code>npm install</code>; either way the database was never touched. Skip the last two and the new migration files stay on disk, where a later update or rebuild can apply them.$n$,
|
|
1335
|
+
NULL);
|
|
1336
|
+
|
|
1337
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1338
|
+
$o$Customisations in your own files, in the CMS, or in <code>.env</code> are never touched at all.$o$,
|
|
1339
|
+
$n$Customisations in your own files or in <code>.env</code> are never touched at all.$n$,
|
|
1340
|
+
NULL);
|
|
1341
|
+
|
|
1342
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1343
|
+
$o$Administrators can also just run <code>npm run update -- --check</code> at any time.$o$,
|
|
1344
|
+
$n$Projects made with <code>npm create nextblock</code> get this banner, including sites built by an AI agent. One-click deploys and forks on Vercel do not, because the daily workflow merges updates for them. Administrators can also just run <code>npm run update:check</code> at any time.$n$,
|
|
1345
|
+
NULL);
|
|
1346
|
+
|
|
1347
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1348
|
+
$o$The update touches application code, dependencies and schema structure only.</p>$o$,
|
|
1349
|
+
$n$The update changes application code, dependencies and the database schema. A few migrations also make targeted data fixes, mostly to the demo content, translations and theme colours NextBlock seeded (see <a href='#database'>What happens to your database</a>). None of them deletes your content.</p>$n$,
|
|
1350
|
+
NULL);
|
|
1351
|
+
|
|
1352
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1353
|
+
$o$it exits non-zero if the schema step fails so a pipeline can catch it.</p>$o$,
|
|
1354
|
+
$n$it exits non-zero if the schema step fails so a pipeline can catch it. Setting <code>CI=true</code> also skips the prompts, in any shell.</p>$n$,
|
|
1355
|
+
NULL);
|
|
1356
|
+
|
|
1357
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'how-updating-works', 'en',
|
|
1358
|
+
$o$<p>No. That path is fully automatic. The command exists for when you want an update <em>now</em> rather than at midnight, or when you are working on a local clone.</p>$o$,
|
|
1359
|
+
$n$<p>No command. Once the dashboard’s <strong>Connect GitHub</strong> step is green, that path is fully automatic. To update <em>now</em> rather than at midnight, open your repository’s <strong>Actions</strong> tab and click <strong>Run workflow</strong> under <strong>NextBlock Upstream Sync</strong>. Or run the command on a local clone and push.</p>$n$,
|
|
1360
|
+
NULL);
|
|
1361
|
+
|
|
1362
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1363
|
+
$o$savoir laquelle des quatre méthodes d'installation vous aviez utilisée.$o$,
|
|
1364
|
+
$n$savoir quelle méthode d'installation vous aviez utilisée.$n$,
|
|
1365
|
+
NULL);
|
|
1366
|
+
|
|
1367
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1368
|
+
$o$<code>npm run update -- --check</code> indique exactement ce qui changerait sans rien modifier.$o$,
|
|
1369
|
+
$n$<code>npm run update:check</code> indique ce qui changerait sans rien modifier.$n$,
|
|
1370
|
+
NULL);
|
|
1371
|
+
|
|
1372
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1373
|
+
$o$<h2 id='the-four-paths'>Les quatre installations et leurs mises à jour</h2>$o$,
|
|
1374
|
+
$n$<h2 id='the-four-paths'>Cinq façons d'installer, quatre façons de mettre à jour</h2>$n$,
|
|
1375
|
+
NULL);
|
|
1376
|
+
|
|
1377
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1378
|
+
$o$Elles correspondent une à une aux quatre options du <a href='/article/comment-configurer-nextblock'>guide d'installation</a>.$o$,
|
|
1379
|
+
$n$Les quatre premières options du <a href='/article/comment-configurer-nextblock'>guide d'installation</a> correspondent une à une aux chemins ci-dessous. La cinquième, où un agent de code IA crée le site, se met à jour comme le chemin 2 ou 3.$n$,
|
|
1380
|
+
NULL);
|
|
1381
|
+
|
|
1382
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1383
|
+
$o$dark:text-blue-200'>Entièrement automatique</p>$o$,
|
|
1384
|
+
$n$dark:text-blue-200'>Automatique après configuration</p>$n$,
|
|
1385
|
+
NULL);
|
|
1386
|
+
|
|
1387
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1388
|
+
$o$Un workflow quotidien fusionne les nouveautés dans votre dépôt et Vercel redéploie. Vous n'avez rien à faire.$o$,
|
|
1389
|
+
$n$Configuration unique : <strong>Connect GitHub</strong> dans le tableau de bord, ou activation des Actions sur un fork manuel. Ensuite, un workflow quotidien fusionne les nouveautés et Vercel redéploie.$n$,
|
|
1390
|
+
NULL);
|
|
1391
|
+
|
|
1392
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1393
|
+
$o$<h2 id='vercel'>1. Vercel en un clic et forks GitHub — sans intervention</h2>$o$,
|
|
1394
|
+
$n$<div class='rounded-3xl border border-slate-200 bg-slate-50 p-6 my-8 dark:border-white/10 dark:bg-white/5'>
|
|
1395
|
+
<p class='mt-0 text-xs font-semibold uppercase tracking-[0.22em] text-slate-600 dark:text-slate-300'>Installé par un agent de code IA ?</p>
|
|
1396
|
+
<p class='mt-3 mb-0 text-sm text-slate-700 dark:text-slate-200'>Vous avez alors un projet <code>npm create nextblock</code> ordinaire. L'agent lance <code>npx create-nextblock@latest mon-site --non-interactive</code>, qui génère la même application autonome. Par défaut, elle tourne sous Docker et se met à jour comme le <a href='#docker'>chemin 2</a>. Avec <code>--mode cloud</code>, elle utilise Supabase géré et se met à jour comme le <a href='#cloud'>chemin 3</a>. Si l'agent lance la mise à jour pour vous, demandez-lui d'utiliser <code>node tools/update.mjs --yes</code>. Son terminal n'est pas interactif : sans cette option, la commande refuse de continuer. Plus de détails dans le <a href='/article/comment-configurer-nextblock#ai-agent'>guide d'installation</a>.</p>
|
|
1397
|
+
</div>
|
|
1398
|
+
|
|
1399
|
+
<h2 id='vercel'>1. Vercel en un clic et forks GitHub — sans intervention</h2>$n$,
|
|
1400
|
+
$u$Installé par un agent de code IA ?$u$);
|
|
1401
|
+
|
|
1402
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1403
|
+
$o$Lors du déploiement, NextBlock a créé un dépôt qui vous appartient ;$o$,
|
|
1404
|
+
$n$Lors du déploiement, Vercel a créé un dépôt qui vous appartient ;$n$,
|
|
1405
|
+
NULL);
|
|
1406
|
+
|
|
1407
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1408
|
+
$o$à la demande depuis l'onglet <strong>Actions</strong> de votre dépôt.</p>$o$,
|
|
1409
|
+
$n$à la demande depuis l'onglet <strong>Actions</strong> de votre dépôt. Un fork GitHub manuel contient déjà le workflow, mais GitHub y désactive les Actions. Activez-les une fois depuis l'onglet <strong>Actions</strong> du fork.</p>$n$,
|
|
1410
|
+
NULL);
|
|
1411
|
+
|
|
1412
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1413
|
+
$o$les commits automatisés sur un dépôt privé.</p>$o$,
|
|
1414
|
+
$n$les commits automatisés sur un dépôt privé. La fusion arriverait alors sans être déployée.</p>$n$,
|
|
1415
|
+
NULL);
|
|
1416
|
+
|
|
1417
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1418
|
+
$o$tout ce qui est remplacé est conservé sous <code>.nextblock-backup/</code>.</p>$o$,
|
|
1419
|
+
$n$tout ce qui est remplacé est conservé sous <code>.nextblock-backup/</code>.</p>
|
|
1420
|
+
<p>Un nouveau projet a besoin de ce premier commit. Le CLI <code>create-nextblock</code> lance <code>git init</code> mais ne crée aucun commit, y compris en mode Docker et lorsqu'un agent IA l'exécute. Validez donc une fois avant votre première mise à jour : <code>git add -A</code>, puis <code>git commit -m initial</code>. Le <code>.gitignore</code> généré exclut déjà vos fichiers <code>.env</code> et les configurations MCP de l'agent.</p>$n$,
|
|
1421
|
+
$u$git commit -m initial$u$);
|
|
1422
|
+
|
|
1423
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1424
|
+
$o$<pre><code>npm run update</code></pre>$o$,
|
|
1425
|
+
$n$<pre><code>npm run update
|
|
1426
|
+
npm run dev</code></pre>$n$,
|
|
1427
|
+
NULL);
|
|
1428
|
+
|
|
1429
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1430
|
+
$o$vous oriente vers <code>git pull --rebase</code> plutôt que de deviner.</p>$o$,
|
|
1431
|
+
$n$vous oriente vers <code>git pull --rebase</code> plutôt que de deviner. Une fois la mise à jour terminée, relancez le serveur de développement avec <code>npm run dev</code> (port 4200).</p>$n$,
|
|
1432
|
+
NULL);
|
|
1433
|
+
|
|
1434
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1435
|
+
$o$<td class='py-3 pr-4'><code>npm run update -- --check</code></td>$o$,
|
|
1436
|
+
$n$<td class='py-3 pr-4'><code>npm run update:check</code></td>$n$,
|
|
1437
|
+
NULL);
|
|
1438
|
+
|
|
1439
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1440
|
+
$o$<h2 id='database'>Ce qui arrive à votre base de données</h2>$o$,
|
|
1441
|
+
$n$<p class='text-sm'>Sous <strong>PowerShell</strong>, un <code>--</code> isolé est supprimé : les formes avec option ci-dessus s'exécutent alors comme un simple <code>npm run update</code>, avec ses confirmations. npm garde l'option pour lui : il affiche l'avertissement <code>Unknown cli config</code> pour <code>--check</code>, <code>--db-only</code> et <code>--skip-db</code>, mais <code>--yes</code> et <code>--force</code> sont aussi des options de npm, qu'il prend sans cet avertissement. Pour un aperçu, utilisez <code>npm run update:check</code>. Pour les autres options, appelez le script directement. Par exemple, dans un projet créé avec <code>npm create nextblock</code>, lancez <code>node tools/update.mjs --db-only</code> ; dans le monorepo, <code>node apps/nextblock/tools/update.mjs --db-only</code>. L'invite de commandes (<code>cmd.exe</code>) et les terminaux macOS et Linux ne sont pas concernés.</p>
|
|
1442
|
+
|
|
1443
|
+
<h2 id='database'>Ce qui arrive à votre base de données</h2>$n$,
|
|
1444
|
+
$u$node apps/nextblock/tools/update.mjs --db-only$u$);
|
|
1445
|
+
|
|
1446
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1447
|
+
$o$Les évolutions du schéma sont <strong>uniquement additives</strong>.$o$,
|
|
1448
|
+
$n$Les évolutions du schéma vont <strong>uniquement vers l'avant</strong>.$n$,
|
|
1449
|
+
NULL);
|
|
1450
|
+
|
|
1451
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1452
|
+
$o$<p>Les migrations modifient la <em>structure</em> — tables, colonnes, index, permissions. Vos pages, articles, produits, médias et utilisateurs vous appartiennent : la mise à jour ne les supprime ni ne les réécrit.</p>$o$,
|
|
1453
|
+
$n$<p>Les migrations modifient surtout la <em>structure</em> — tables, colonnes, index, permissions. Quelques-unes corrigent aussi des données. Elles rafraîchissent le contenu de démonstration, les couleurs de thème et les textes d'interface fournis par NextBlock, en général seulement là où ils sont encore tels que livrés. Plus rarement, une migration applique une correction mécanique ciblée à tout le contenu. Par exemple : passer les vidéos YouTube intégrées sur youtube-nocookie, ou retirer une classe CSS qui ralentissait le premier affichage. Aucune migration ne supprime vos pages, articles, produits, médias ou utilisateurs.</p>$n$,
|
|
1454
|
+
NULL);
|
|
1455
|
+
|
|
1456
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1457
|
+
$o$Avant un grand saut sur un site en production, prenez une sauvegarde de la base — Supabase en réalise quotidiennement sur les offres payantes, et vous pouvez en déclencher une à la demande depuis son tableau de bord. Lancez ensuite <code>npm run update -- --check</code> pour voir la liste des migrations en attente.$o$,
|
|
1458
|
+
$n$Avant un grand saut sur un site en production, prenez une sauvegarde de la base. Supabase en conserve une par jour sur les offres payantes, à restaurer depuis <strong>Database → Backups</strong> dans son tableau de bord. Pour votre propre copie, utilisez <code>pg_dump</code> avec la chaîne de connexion de votre base. Avec le CLI Supabase, <code>supabase db dump</code> ne sauvegarde que le schéma : lancez aussi <code>supabase db dump --data-only</code> pour les données. Sous Docker, lancez <code>pg_dump</code> dans le conteneur <code>db</code>. Lancez ensuite <code>npm run update:check</code> pour prévisualiser la mise à jour avant de vous lancer.$n$,
|
|
1459
|
+
NULL);
|
|
1460
|
+
|
|
1461
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1462
|
+
$o$Examinez-la avec <code>git diff</code>, et annulez tout avec <code>git reset --hard HEAD</code>. Rien n'est jamais supprimé : les fichiers que vous avez ajoutés ne disparaissent jamais.$o$,
|
|
1463
|
+
$n$Examinez-la avec <code>git status</code>, qui liste les fichiers ajoutés, et <code>git diff</code>. Pour annuler le code, lancez <code>git reset --hard HEAD</code> et <code>git clean -fd</code>, puis <code>npm install</code> pour rétablir vos dépendances. <code>git clean</code> supprime les fichiers ajoutés par la mise à jour, ainsi que tout fichier non suivi créé depuis : vérifiez d'abord avec <code>git clean -nd</code>. Les migrations déjà appliquées le restent : restaurez votre sauvegarde si vous avez besoin de l'ancien schéma. La mise à jour elle-même ne supprime jamais de fichier : ceux que vous avez ajoutés ne disparaissent jamais.$n$,
|
|
1464
|
+
NULL);
|
|
1465
|
+
|
|
1466
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1467
|
+
$o$<li><strong>Installations basées sur git :</strong> la mise à jour est un commit ordinaire. <code>git log</code> l'affiche et <code>git revert</code> l'annule.</li>$o$,
|
|
1468
|
+
$n$<li><strong>Installations basées sur git :</strong> le workflow quotidien applique chaque mise à jour sous forme de commit de fusion. <code>git log</code> l'affiche et <code>git revert -m 1 <commit-de-fusion></code> l'annule. Git considère alors ces changements comme déjà fusionnés. Les synchronisations suivantes ne les réappliqueront donc pas tant que vous n'aurez pas annulé ce revert. Vous avez lancé <code>npm run update</code> vous-même, sur un clone ou une copie locale de votre fork ? Juste après, <code>git reset --hard ORIG_HEAD</code> ramène le code en arrière et <code>npm install</code> rétablit les dépendances précédentes. Les migrations déjà appliquées le restent.</li>$n$,
|
|
1469
|
+
NULL);
|
|
1470
|
+
|
|
1471
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1472
|
+
$o$et <code>git reset --hard HEAD</code> annule toute la mise à jour.$o$,
|
|
1473
|
+
$n$et <code>git reset --hard HEAD</code>, <code>git clean -fd</code> puis <code>npm install</code> annulent toute la mise à jour.$n$,
|
|
1474
|
+
NULL);
|
|
1475
|
+
|
|
1476
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1477
|
+
$o$ou abandonnez avec <code>git reset --hard HEAD</code> : dans les deux cas la base n'a jamais été touchée.$o$,
|
|
1478
|
+
$n$ou abandonnez avec <code>git reset --hard HEAD</code>, <code>git clean -fd</code> puis <code>npm install</code> : dans les deux cas la base n'a jamais été touchée. Sans ces deux dernières commandes, les nouveaux fichiers de migration restent sur le disque, et une prochaine mise à jour ou reconstruction peut les appliquer.$n$,
|
|
1479
|
+
NULL);
|
|
1480
|
+
|
|
1481
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1482
|
+
$o$Les personnalisations dans vos propres fichiers, dans le CMS ou dans <code>.env</code> ne sont jamais touchées.$o$,
|
|
1483
|
+
$n$Les personnalisations dans vos propres fichiers ou dans <code>.env</code> ne sont jamais touchées.$n$,
|
|
1484
|
+
NULL);
|
|
1485
|
+
|
|
1486
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1487
|
+
$o$Les administrateurs peuvent aussi lancer <code>npm run update -- --check</code> à tout moment.$o$,
|
|
1488
|
+
$n$Les projets créés avec <code>npm create nextblock</code> affichent cette bannière, y compris ceux créés par un agent IA. Les déploiements en un clic et les forks sur Vercel ne l'affichent pas : le workflow quotidien fusionne les mises à jour pour eux. Les administrateurs peuvent aussi lancer <code>npm run update:check</code> à tout moment.$n$,
|
|
1489
|
+
NULL);
|
|
1490
|
+
|
|
1491
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1492
|
+
$o$La mise à jour ne touche que le code, les dépendances et la structure du schéma.</p>$o$,
|
|
1493
|
+
$n$La mise à jour modifie le code, les dépendances et le schéma de la base. Quelques migrations apportent aussi des corrections ciblées aux données, surtout au contenu de démonstration, aux traductions et aux couleurs de thème fournis par NextBlock (voir <a href='#database'>Ce qui arrive à votre base de données</a>). Aucune ne supprime votre contenu.</p>$n$,
|
|
1494
|
+
NULL);
|
|
1495
|
+
|
|
1496
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1497
|
+
$o$pour qu'un pipeline puisse le détecter.</p>$o$,
|
|
1498
|
+
$n$pour qu'un pipeline puisse le détecter. Définir <code>CI=true</code> désactive aussi les confirmations, quel que soit le terminal.</p>$n$,
|
|
1499
|
+
NULL);
|
|
1500
|
+
|
|
1501
|
+
INSERT INTO pg_temp.nb_02018_edits (kind, slug, lang, old_html, new_html, unless_html) VALUES ('post', 'comment-fonctionnent-les-mises-a-jour', 'fr',
|
|
1502
|
+
$o$<p>Non. Ce chemin est entièrement automatique. La commande existe pour mettre à jour <em>tout de suite</em> plutôt qu'à minuit, ou lorsque vous travaillez sur un clone local.</p>$o$,
|
|
1503
|
+
$n$<p>Aucune commande. Une fois l'étape <strong>Connect GitHub</strong> du tableau de bord validée, ce chemin est entièrement automatique. Pour mettre à jour <em>tout de suite</em> plutôt qu'à minuit, ouvrez l'onglet <strong>Actions</strong> de votre dépôt et cliquez sur <strong>Run workflow</strong> sous <strong>NextBlock Upstream Sync</strong>. Vous pouvez aussi lancer la commande sur un clone local, puis pousser le résultat.</p>$n$,
|
|
1504
|
+
NULL);
|
|
1505
|
+
|
|
1506
|
+
-- ========================================================================================
|
|
1507
|
+
-- Post and page fields (applied with their item, each only while it holds the seeded value)
|
|
1508
|
+
-- ========================================================================================
|
|
1509
|
+
|
|
1510
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-nextblock-fonctionne', 'fr', 'subtitle',
|
|
1511
|
+
$o$Une visite guidee du monorepo, du registre de blocs, de l editeur et de l architecture open-core de NextBlock.$o$,
|
|
1512
|
+
$n$Une visite guidée du monorepo, du registre de blocs, de l'éditeur et de l'architecture open-core de NextBlock.$n$);
|
|
1513
|
+
|
|
1514
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-nextblock-fonctionne', 'fr', 'excerpt',
|
|
1515
|
+
$o$Sous le capot du monorepo, du registre de blocs et de l editeur qui propulsent NextBlock.$o$,
|
|
1516
|
+
$n$Sous le capot du monorepo, du registre de blocs et de l'éditeur qui propulsent NextBlock.$n$);
|
|
1517
|
+
|
|
1518
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'title',
|
|
1519
|
+
$o$NextBlock™ Commerce: Multi-Currency, Tax Sync & Beyond$o$,
|
|
1520
|
+
$n$NextBlock™ Commerce: Multi-Currency, Automatic Tax & Beyond$n$);
|
|
1521
|
+
|
|
1522
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'subtitle',
|
|
1523
|
+
$o$A closer look at the commerce module, from multi-currency and tax sync to shipping, inventory, and provider-aware checkout.$o$,
|
|
1524
|
+
$n$A closer look at the commerce module, from multi-currency pricing and automatic Stripe Tax to shipping, inventory, and provider-aware checkout.$n$);
|
|
1525
|
+
|
|
1526
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'meta_title',
|
|
1527
|
+
$o$The Complete NextBlock™ Commerce Guide | Headless Store$o$,
|
|
1528
|
+
$n$The Complete NextBlock™ Commerce Guide | Next.js Store$n$);
|
|
1529
|
+
|
|
1530
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-commerce-guide', 'en', 'meta_description',
|
|
1531
|
+
$o$Build global e-commerce with NextBlock: manage products, configure multi-currency pricing, and accept payments with headless Stripe checkout.$o$,
|
|
1532
|
+
$n$Build a global store with NextBlock: products, multi-currency pricing, Stripe Tax, shipping zones, and Stripe or Freemius checkout.$n$);
|
|
1533
|
+
|
|
1534
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-commerce-nextblock', 'fr', 'meta_description',
|
|
1535
|
+
$o$Développez votre boutique avec NextBlock : gestion de produits, tarifs multi-devises et tunnel de paiement headless avec Stripe Checkout.$o$,
|
|
1536
|
+
$n$Développez votre boutique avec NextBlock : produits, tarifs multi-devises, Stripe Tax, zones de livraison et paiement Stripe ou Freemius.$n$);
|
|
1537
|
+
|
|
1538
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-commerce-nextblock', 'fr', 'subtitle',
|
|
1539
|
+
$o$Un apercu du module commerce : multi-devises, sync taxes, expedition, inventaire et paiements connectes.$o$,
|
|
1540
|
+
$n$Un aperçu du module commerce : multi-devises, taxes automatiques avec Stripe Tax, expédition, inventaire et paiements connectés.$n$);
|
|
1541
|
+
|
|
1542
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-commerce-nextblock', 'fr', 'excerpt',
|
|
1543
|
+
$o$Architecture boutique, parcours de paiement et fonctions commerce premium au coeur de NextBlock.$o$,
|
|
1544
|
+
$n$Architecture boutique, parcours de paiement et fonctions commerce premium au cœur de NextBlock.$n$);
|
|
1545
|
+
|
|
1546
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'guide-connexion-mcp-cortex-ai', 'fr', 'meta_description',
|
|
1547
|
+
$o$Apprenez à connecter Claude à NextBlock CMS avec le Model Context Protocol. Enregistrez /api/mcp dans Claude Code ou Cursor pour inspecter les schémas et bâtir des mises en page.$o$,
|
|
1548
|
+
$n$Connectez Claude à NextBlock CMS via le Model Context Protocol. Enregistrez /api/mcp dans Claude Code ou Cursor pour lire les schémas et bâtir des pages.$n$);
|
|
1549
|
+
|
|
1550
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'label',
|
|
1551
|
+
$o$AI Copilot$o$,
|
|
1552
|
+
$n$Cortex AI$n$);
|
|
1553
|
+
|
|
1554
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'subtitle',
|
|
1555
|
+
$o$See how Cortex AI brings structured generation, provider choice, and safer content workflows directly into the NextBlock editor.$o$,
|
|
1556
|
+
$n$See how Cortex AI brings structured generation, model choice, and safer content workflows directly into the NextBlock editor.$n$);
|
|
1557
|
+
|
|
1558
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'excerpt',
|
|
1559
|
+
$o$A practical guide to Cortex AI, the block-aware assistant for model routing, BYOK controls, and faster editorial production inside NextBlock.$o$,
|
|
1560
|
+
$n$A practical guide to Cortex AI: block-aware AI in the NextBlock editor with your own OpenRouter key, plus an MCP server for your AI app.$n$);
|
|
1561
|
+
|
|
1562
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'nextblock-cortex-ai-guide', 'en', 'meta_description',
|
|
1563
|
+
$o$Learn how NextBlock Cortex AI helps teams generate, refine, and translate structured block content with model routing and BYOK controls.$o$,
|
|
1564
|
+
$n$Learn how NextBlock Cortex AI helps teams generate, refine, and translate block content with your own OpenRouter key, or over MCP from your AI app.$n$);
|
|
1565
|
+
|
|
1566
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'accueil', 'fr', 'meta_title',
|
|
1567
|
+
$o$NextBlock CMS$o$,
|
|
1568
|
+
$n$NextBlock : CMS constructeur de sites web par l'IA$n$);
|
|
1569
|
+
|
|
1570
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'accueil', 'fr', 'meta_description',
|
|
1571
|
+
$o$NextBlock™ est le CMS Next.js open source pensé pour les développeurs, qui allie des scores Lighthouse de 100 % à un puissant éditeur visuel par blocs.$o$,
|
|
1572
|
+
$n$Créez vite vos sites web avec le CMS constructeur par l'IA, relié à votre abonnement IA via MCP. Vos prompts deviennent des pages Next.js 16 en production.$n$);
|
|
1573
|
+
|
|
1574
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'articles', 'en', 'meta_description',
|
|
1575
|
+
$o$Read technical deep dives, tutorials, and release notes on Next.js 16, Supabase, and modern visual web publishing from the NextBlock team.$o$,
|
|
1576
|
+
$n$Read technical deep dives and step-by-step guides on installing, updating, and extending NextBlock with Next.js 16, Supabase, Cortex AI, and MCP.$n$);
|
|
1577
|
+
|
|
1578
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('page', 'articles', 'fr', 'meta_description',
|
|
1579
|
+
$o$Découvrez des guides techniques, des tutoriels et des analyses sur Next.js 16, Supabase et l’édition de blocs moderne avec l’équipe NextBlock.$o$,
|
|
1580
|
+
$n$Découvrez des analyses techniques et des guides pas à pas pour installer, mettre à jour et étendre NextBlock avec Next.js 16, Supabase, Cortex AI et MCP.$n$);
|
|
1581
|
+
|
|
1582
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'subtitle',
|
|
1583
|
+
$o$Four ways to launch NextBlock: a one-click Vercel deploy, npm create nextblock, git clone with the browser setup wizard, or a fully local Docker stack.$o$,
|
|
1584
|
+
$n$Five ways to launch NextBlock: a one-click Vercel deploy, npm create nextblock, git clone with the browser setup wizard, a fully local Docker stack, or your AI coding agent.$n$);
|
|
1585
|
+
|
|
1586
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'excerpt',
|
|
1587
|
+
$o$Every way to install NextBlock — one-click cloud deploy, CLI scaffold, git clone, or self-hosted Docker — with copy-paste steps for each.$o$,
|
|
1588
|
+
$n$Every way to install NextBlock — one-click cloud deploy, CLI scaffold, git clone, self-hosted Docker, or your AI coding agent — with copy-paste steps for each.$n$);
|
|
1589
|
+
|
|
1590
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'meta_title',
|
|
1591
|
+
$o$How to Install NextBlock CMS — Vercel, CLI, Git or Docker$o$,
|
|
1592
|
+
$n$Install NextBlock CMS: Vercel, CLI, Git, Docker or AI Agent$n$);
|
|
1593
|
+
|
|
1594
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'how-to-setup-nextblock', 'en', 'meta_description',
|
|
1595
|
+
$o$Install NextBlock in minutes — one-click Vercel deploy, npm create nextblock, git clone, or self-hosted Docker. No config files, no manual SQL.$o$,
|
|
1596
|
+
$n$Install NextBlock in minutes: one-click Vercel deploy, npm create nextblock, git clone, self-hosted Docker, or your AI coding agent. No manual SQL.$n$);
|
|
1597
|
+
|
|
1598
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'subtitle',
|
|
1599
|
+
$o$Quatre façons de lancer NextBlock : déploiement Vercel en un clic, npm create nextblock, git clone avec l'assistant dans le navigateur, ou une pile Docker 100 % locale.$o$,
|
|
1600
|
+
$n$Cinq façons de lancer NextBlock : déploiement Vercel en un clic, npm create nextblock, git clone avec l'assistant dans le navigateur, une pile Docker 100 % locale ou votre agent de code IA.$n$);
|
|
1601
|
+
|
|
1602
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'excerpt',
|
|
1603
|
+
$o$Toutes les façons d'installer NextBlock — cloud en un clic, CLI, git clone ou Docker auto-hébergé — avec les étapes à copier-coller.$o$,
|
|
1604
|
+
$n$Toutes les façons d'installer NextBlock — cloud en un clic, CLI, git clone, Docker auto-hébergé ou votre agent de code IA — avec les étapes à copier-coller.$n$);
|
|
1605
|
+
|
|
1606
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'meta_title',
|
|
1607
|
+
$o$Installer NextBlock — Vercel, CLI, Git ou Docker$o$,
|
|
1608
|
+
$n$Installer NextBlock : Vercel, CLI, Git, Docker ou agent IA$n$);
|
|
1609
|
+
|
|
1610
|
+
INSERT INTO pg_temp.nb_02018_fields (kind, slug, lang, field, old_value, new_value) VALUES ('post', 'comment-configurer-nextblock', 'fr', 'meta_description',
|
|
1611
|
+
$o$Installez NextBlock en quelques minutes : déploiement Vercel en un clic, npm create nextblock, git clone ou Docker auto-hébergé. Sans config ni SQL.$o$,
|
|
1612
|
+
$n$Installez NextBlock en quelques minutes : Vercel en un clic, npm create nextblock, git clone, Docker auto-hébergé ou votre agent IA. Sans SQL manuel.$n$);
|
|
1613
|
+
|
|
1614
|
+
-- ========================================================================================
|
|
1615
|
+
-- Apply, item by item. Install guides first: items that point at Option 5 require it.
|
|
1616
|
+
-- ========================================================================================
|
|
1617
|
+
|
|
1618
|
+
DO $nb_02018_items$
|
|
1619
|
+
BEGIN
|
|
1620
|
+
PERFORM pg_temp.nb_02018_item('post', 'how-to-setup-nextblock', 'en', false);
|
|
1621
|
+
PERFORM pg_temp.nb_02018_item('post', 'comment-configurer-nextblock', 'fr', false);
|
|
1622
|
+
PERFORM pg_temp.nb_02018_item('post', 'how-nextblock-works', 'en', true);
|
|
1623
|
+
PERFORM pg_temp.nb_02018_item('post', 'comment-nextblock-fonctionne', 'fr', true);
|
|
1624
|
+
PERFORM pg_temp.nb_02018_item('post', 'nextblock-commerce-guide', 'en', false);
|
|
1625
|
+
PERFORM pg_temp.nb_02018_item('post', 'guide-commerce-nextblock', 'fr', false);
|
|
1626
|
+
PERFORM pg_temp.nb_02018_item('post', 'cortex-ai-mcp-connection-guide', 'en', true);
|
|
1627
|
+
PERFORM pg_temp.nb_02018_item('post', 'guide-connexion-mcp-cortex-ai', 'fr', true);
|
|
1628
|
+
PERFORM pg_temp.nb_02018_item('post', 'nextblock-cortex-ai-guide', 'en', false);
|
|
1629
|
+
PERFORM pg_temp.nb_02018_item('page', 'home', 'en', true);
|
|
1630
|
+
PERFORM pg_temp.nb_02018_item('page', 'accueil', 'fr', true);
|
|
1631
|
+
PERFORM pg_temp.nb_02018_item('page', 'articles', 'en', false);
|
|
1632
|
+
PERFORM pg_temp.nb_02018_item('page', 'articles', 'fr', false);
|
|
1633
|
+
PERFORM pg_temp.nb_02018_item('post', 'how-updating-works', 'en', true);
|
|
1634
|
+
PERFORM pg_temp.nb_02018_item('post', 'comment-fonctionnent-les-mises-a-jour', 'fr', true);
|
|
1635
|
+
END
|
|
1636
|
+
$nb_02018_items$;
|
|
1637
|
+
|
|
1638
|
+
-- ==========================================================================================
|
|
1639
|
+
-- French Cortex AI guide ('guide-cortex-ai-nextblock'), the insert 02009 meant to make.
|
|
1640
|
+
-- 02009 keyed it on translation group dbe2a06f-…, but the seeded English post
|
|
1641
|
+
-- 'nextblock-cortex-ai-guide' lives in group 669489e7-…, so its guard never matched and the
|
|
1642
|
+
-- French twin exists nowhere. The English row is resolved here by slug + language, and the
|
|
1643
|
+
-- French row takes its translation group, feature image, status and publish date, so it is
|
|
1644
|
+
-- exactly as visible as the English original (a drafted or archived English guide yields a
|
|
1645
|
+
-- drafted or archived French twin). Inserted once: skipped when that group already has a
|
|
1646
|
+
-- French row or the French slug is taken.
|
|
1647
|
+
-- ==========================================================================================
|
|
1648
|
+
|
|
1649
|
+
DO $nb_02018_fr_cortex$
|
|
1650
|
+
DECLARE
|
|
1651
|
+
v_fr bigint;
|
|
1652
|
+
v_en record;
|
|
1653
|
+
v_post bigint;
|
|
1654
|
+
BEGIN
|
|
1655
|
+
SELECT id INTO v_fr FROM public.languages WHERE code = 'fr' LIMIT 1;
|
|
1656
|
+
SELECT p.id, p.translation_group_id, p.feature_image_id, p.published_at, p.status
|
|
1657
|
+
INTO v_en
|
|
1658
|
+
FROM public.posts AS p
|
|
1659
|
+
JOIN public.languages AS l ON l.id = p.language_id
|
|
1660
|
+
WHERE p.slug = 'nextblock-cortex-ai-guide' AND l.code = 'en'
|
|
1661
|
+
ORDER BY p.id
|
|
1662
|
+
LIMIT 1;
|
|
1663
|
+
|
|
1664
|
+
IF v_fr IS NULL OR v_en.id IS NULL OR v_en.translation_group_id IS NULL THEN
|
|
1665
|
+
RAISE NOTICE '02018: no French language or no English Cortex AI guide; French guide not inserted.';
|
|
1666
|
+
RETURN;
|
|
1667
|
+
END IF;
|
|
1668
|
+
|
|
1669
|
+
IF EXISTS (SELECT 1 FROM public.posts WHERE translation_group_id = v_en.translation_group_id AND language_id = v_fr)
|
|
1670
|
+
OR EXISTS (SELECT 1 FROM public.posts WHERE slug = 'guide-cortex-ai-nextblock' AND language_id = v_fr) THEN
|
|
1671
|
+
RETURN;
|
|
1672
|
+
END IF;
|
|
1673
|
+
|
|
1674
|
+
-- The seed inserts explicit ids; make sure the identity sequences are past them. Only ever
|
|
1675
|
+
-- move a sequence forward: rewinding would hand a deleted row's id to this insert (and to
|
|
1676
|
+
-- every later CMS insert), and could collide with a concurrent insert on a live site.
|
|
1677
|
+
PERFORM setval('public.posts_id_seq',
|
|
1678
|
+
GREATEST(COALESCE((SELECT MAX(id) FROM public.posts), 1), (SELECT last_value FROM public.posts_id_seq)), true);
|
|
1679
|
+
PERFORM setval('public.blocks_id_seq',
|
|
1680
|
+
GREATEST(COALESCE((SELECT MAX(id) FROM public.blocks), 1), (SELECT last_value FROM public.blocks_id_seq)), true);
|
|
1681
|
+
|
|
1682
|
+
INSERT INTO public.posts
|
|
1683
|
+
(language_id, author_id, title, slug, label, excerpt, subtitle, status, published_at,
|
|
1684
|
+
meta_title, meta_description, feature_image_id, version, translation_group_id)
|
|
1685
|
+
VALUES
|
|
1686
|
+
(v_fr, NULL, $o$Guide NextBlock Cortex AI$o$, 'guide-cortex-ai-nextblock', $o$Cortex AI$o$,
|
|
1687
|
+
$o$Un guide pratique de Cortex AI : l'IA qui comprend vos blocs, dans l'éditeur NextBlock, avec votre propre clé OpenRouter, plus un serveur MCP pour votre application IA.$o$,
|
|
1688
|
+
$o$Découvrez comment Cortex AI apporte la génération structurée, le choix du modèle et des flux de contenu plus sûrs directement dans l'éditeur NextBlock.$o$,
|
|
1689
|
+
v_en.status, v_en.published_at,
|
|
1690
|
+
$o$Guide NextBlock Cortex AI$o$,
|
|
1691
|
+
$o$Découvrez comment NextBlock Cortex AI aide les équipes à générer, affiner et traduire du contenu par blocs, avec votre clé OpenRouter ou via MCP.$o$,
|
|
1692
|
+
v_en.feature_image_id, 1, v_en.translation_group_id)
|
|
1693
|
+
RETURNING id INTO v_post;
|
|
1694
|
+
|
|
1695
|
+
INSERT INTO public.blocks (post_id, language_id, block_type, content, "order")
|
|
1696
|
+
VALUES (v_post, v_fr, 'text', jsonb_build_object('html_content', replace($h$
|
|
1697
|
+
<p class='text-lg leading-8 text-slate-700 dark:text-slate-300'>NextBlock Cortex AI est l'outil de contenu intelligent conçu pour les pages web modernes. Il comprend les blocs de page, les mises en page de sections et les règles éditoriales, pour que vous créiez un meilleur contenu, plus vite.</p>
|
|
1698
|
+
|
|
1699
|
+
<div class='grid gap-4 md:grid-cols-3 my-10'>
|
|
1700
|
+
<div class='rounded-3xl border border-violet-200/70 bg-violet-50/80 p-6 dark:border-violet-500/20 dark:bg-violet-500/10'>
|
|
1701
|
+
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-violet-700 dark:text-violet-200'>Choix du modèle</p>
|
|
1702
|
+
<h2 class='mt-3 text-xl font-semibold text-slate-900 dark:text-white'>Choisissez le bon modèle</h2>
|
|
1703
|
+
<p class='mt-3 text-sm text-slate-600 dark:text-slate-300'>Branchez votre propre clé OpenRouter et choisissez un seul modèle pour tout le site : des modèles gratuits avec bascule automatique, ou le modèle payant de votre choix.</p>
|
|
1704
|
+
</div>
|
|
1705
|
+
<div class='rounded-3xl border border-sky-200/70 bg-sky-50/80 p-6 dark:border-sky-500/20 dark:bg-sky-500/10'>
|
|
1706
|
+
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-sky-700 dark:text-sky-200'>Contrôle BYOK</p>
|
|
1707
|
+
<h2 class='mt-3 text-xl font-semibold text-slate-900 dark:text-white'>Utilisez vos propres clés</h2>
|
|
1708
|
+
<p class='mt-3 text-sm text-slate-600 dark:text-slate-300'>Gardez les clés des fournisseurs en sécurité sur votre serveur tout en offrant aux éditeurs un écran de rédaction IA tout simple.</p>
|
|
1709
|
+
</div>
|
|
1710
|
+
<div class='rounded-3xl border border-emerald-200/70 bg-emerald-50/80 p-6 dark:border-emerald-500/20 dark:bg-emerald-500/10'>
|
|
1711
|
+
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-emerald-700 dark:text-emerald-200'>Sortie typée</p>
|
|
1712
|
+
<h2 class='mt-3 text-xl font-semibold text-slate-900 dark:text-white'>Générez des blocs valides</h2>
|
|
1713
|
+
<p class='mt-3 text-sm text-slate-600 dark:text-slate-300'>Des schémas typés garantissent que le contenu IA s'insère directement dans vos pages sous forme de blocs propres et fonctionnels.</p>
|
|
1714
|
+
</div>
|
|
1715
|
+
</div>
|
|
1716
|
+
|
|
1717
|
+
<h2>Pourquoi Cortex AI a sa place dans l'éditeur</h2>
|
|
1718
|
+
<p>Les outils de clavardage génériques peuvent rédiger du texte, mais ils ne font pas la différence entre une bannière héros, une grille de cartes et un article de blogue. Cortex AI vit directement dans votre écran d'édition. Il crée du contenu qui s'ajuste aux blocs de votre site en ligne.</p>
|
|
1719
|
+
<p>L'IA devient ainsi vraiment utile au quotidien. Vous pouvez ébaucher une nouvelle section d'accueil, peaufiner un résumé, enrichir une fiche produit ou traduire un article complet en toute simplicité.</p>
|
|
1720
|
+
|
|
1721
|
+
<div class='rounded-[2rem] border border-slate-200/80 bg-slate-50/90 p-6 my-10 dark:border-white/10 dark:bg-slate-900/70'>
|
|
1722
|
+
<p class='text-xs font-semibold uppercase tracking-[0.22em] text-violet-700 dark:text-violet-200'>Flux éditorial</p>
|
|
1723
|
+
<div class='grid gap-5 md:grid-cols-2 mt-5'>
|
|
1724
|
+
<div class='rounded-2xl border border-slate-200 bg-white p-5 dark:border-white/10 dark:bg-slate-950/50'>
|
|
1725
|
+
<h3 class='mt-0 text-xl text-slate-900 dark:text-white'>Des premiers jets plus rapides</h3>
|
|
1726
|
+
<p class='text-sm text-slate-600 dark:text-slate-300'>Partez d'un prompt et obtenez une section, un brouillon d'article ou une histoire de produit qui respecte votre ton.</p>
|
|
1727
|
+
</div>
|
|
1728
|
+
<div class='rounded-2xl border border-slate-200 bg-white p-5 dark:border-white/10 dark:bg-slate-950/50'>
|
|
1729
|
+
<h3 class='mt-0 text-xl text-slate-900 dark:text-white'>Des révisions plus nettes</h3>
|
|
1730
|
+
<p class='text-sm text-slate-600 dark:text-slate-300'>Demandez un texte plus court, plus clair ou traduit, sans quitter votre écran d'édition.</p>
|
|
1731
|
+
</div>
|
|
1732
|
+
</div>
|
|
1733
|
+
</div>
|
|
1734
|
+
|
|
1735
|
+
<h2>Choix du modèle et contrôle des coûts</h2>
|
|
1736
|
+
<p>Cortex AI fonctionne avec OpenRouter, et vous choisissez un seul modèle pour tout le site dans les réglages de Cortex AI. Les modèles gratuits sont proposés par défaut, avec une bascule automatique quand l'un d'eux est occupé. Ils demandent quand même une clé OpenRouter, mais un compte OpenRouter gratuit suffit. Pour choisir un modèle payant, enregistrez votre clé dans le CMS. Vous gérez cette clé sur le serveur, pour que vos rédacteurs se concentrent sur le contenu.</p>
|
|
1737
|
+
<ul class='list-disc pl-6 space-y-2 text-sm'>
|
|
1738
|
+
<li>Commencez avec les modèles gratuits, sans frais de modèle.</li>
|
|
1739
|
+
<li>Passez tout le site à un modèle payant plus puissant quand vous visez plus de qualité.</li>
|
|
1740
|
+
<li>Gardez votre clé OpenRouter chiffrée dans les réglages du CMS.</li>
|
|
1741
|
+
<li>Maîtrisez les coûts sans changer l'affichage des pages pour les visiteurs.</li>
|
|
1742
|
+
</ul>
|
|
1743
|
+
|
|
1744
|
+
<h2>Une génération pensée pour vos blocs</h2>
|
|
1745
|
+
<p>Cortex AI fait plus qu'écrire du texte brut. Il crée du contenu structuré qui correspond directement aux composants NextBlock. Vous obtenez des textes de section, des titres, des boutons et des blocs traduits prêts à l'emploi. Vous passez moins de temps à remettre en forme des textes approximatifs venus d'outils externes.</p>
|
|
1746
|
+
<p>Comme le contenu généré respecte vos règles de blocs, tout reste cohérent et rapide sur le web.</p>
|
|
1747
|
+
|
|
1748
|
+
<h2>Des flux d'équipe plus sûrs</h2>
|
|
1749
|
+
<p>L'IA donne le meilleur d'elle-même quand les humains gardent le contrôle. Avec Cortex AI, les éditeurs révisent chaque brouillon avant publication. Les développeurs gèrent les clés des modèles, et le CMS conserve toutes les versions dans votre historique habituel.</p>
|
|
1750
|
+
|
|
1751
|
+
<h2>Un flux de lancement concret</h2>
|
|
1752
|
+
<ol class='list-decimal pl-6 space-y-2 text-sm'>
|
|
1753
|
+
<li>Ébauchez un article, une section d'accueil ou une histoire de produit à partir d'un prompt clair.</li>
|
|
1754
|
+
<li>Affinez le texte pour qu'il colle à votre public et au ton de votre marque.</li>
|
|
1755
|
+
<li>Créez une version traduite ou un résumé plus court pour les cartes sociales et les balises de recherche.</li>
|
|
1756
|
+
<li>Révisez le contenu dans l'éditeur, publiez, puis suivez vos révisions au fil du temps.</li>
|
|
1757
|
+
</ol>
|
|
1758
|
+
|
|
1759
|
+
<h2>Deux façons d'utiliser Cortex AI</h2>
|
|
1760
|
+
<p>Cortex AI travaille à deux endroits. <strong>L'IA dans l'éditeur</strong> ébauche, réécrit et traduit vos blocs avec votre propre clé OpenRouter, modèles gratuits compris. <strong>Le serveur MCP</strong> permet à votre propre application IA, comme Claude Code ou Cursor, de bâtir vos pages avec l'abonnement que vous payez déjà. <a href='/article/guide-connexion-mcp-cortex-ai'>Connectez votre application IA via MCP</a>.</p>
|
|
1761
|
+
<p>Le CMS NextBlock est gratuit et open source, sous licence AGPL. Ces deux usages font partie de Cortex AI, qui commence par un essai gratuit de 30 jours, sans carte de crédit.</p>
|
|
1762
|
+
|
|
1763
|
+
<p>Cortex AI transforme votre CMS en atelier créatif plus rapide. Il ne remplace pas le goût humain, mais il vous aide à transformer de bonnes idées en pages finies en un temps record.</p>$h$, chr(13), '')), 0);
|
|
1764
|
+
END
|
|
1765
|
+
$nb_02018_fr_cortex$;
|
|
1766
|
+
|
|
1767
|
+
-- French install guide -> French Cortex AI guide. Linked only once that guide exists and is
|
|
1768
|
+
-- published (inserted above, or an operator's own translation in the same group under its own
|
|
1769
|
+
-- slug), and only where the install guide was rewritten above.
|
|
1770
|
+
DO $nb_02018_fr_cortex_link$
|
|
1771
|
+
DECLARE
|
|
1772
|
+
v_group uuid;
|
|
1773
|
+
v_slug text;
|
|
1774
|
+
BEGIN
|
|
1775
|
+
SELECT p.translation_group_id INTO v_group
|
|
1776
|
+
FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
1777
|
+
WHERE p.slug = 'nextblock-cortex-ai-guide' AND l.code = 'en'
|
|
1778
|
+
ORDER BY p.id LIMIT 1;
|
|
1779
|
+
|
|
1780
|
+
SELECT p.slug INTO v_slug
|
|
1781
|
+
FROM public.posts AS p JOIN public.languages AS l ON l.id = p.language_id
|
|
1782
|
+
WHERE l.code = 'fr' AND p.status = 'published'
|
|
1783
|
+
AND ((v_group IS NOT NULL AND p.translation_group_id = v_group) OR p.slug = 'guide-cortex-ai-nextblock')
|
|
1784
|
+
ORDER BY (p.translation_group_id IS NOT DISTINCT FROM v_group) DESC, p.id
|
|
1785
|
+
LIMIT 1;
|
|
1786
|
+
|
|
1787
|
+
IF v_slug IS NULL THEN
|
|
1788
|
+
RETURN;
|
|
1789
|
+
END IF;
|
|
1790
|
+
|
|
1791
|
+
PERFORM pg_temp.nb_02018_fragment('post', 'comment-configurer-nextblock', 'fr',
|
|
1792
|
+
$o$, ou mettez Cortex AI au travail avec le <a href='/article/guide-connexion-mcp-cortex-ai'>guide de connexion MCP</a>.</p>$o$,
|
|
1793
|
+
format($n$, ou mettez Cortex AI au travail avec le <a href='/article/%s'>guide Cortex AI</a> et le <a href='/article/guide-connexion-mcp-cortex-ai'>guide de connexion MCP</a>.</p>$n$, v_slug),
|
|
1794
|
+
$u$guide Cortex AI</a> et le <a href='/article/guide-connexion-mcp-cortex-ai'>$u$);
|
|
1795
|
+
END
|
|
1796
|
+
$nb_02018_fr_cortex_link$;
|
|
1797
|
+
|
|
1798
|
+
-- ==========================================================================================
|
|
1799
|
+
-- English home: the 'More Than a CMS' community section and the 'Have Questions?' CTA both
|
|
1800
|
+
-- carry "order" = 7 (the French home uses 7 and 8), and the public query orders by "order"
|
|
1801
|
+
-- alone, so which one renders first is undefined. Move the CTA after the community section,
|
|
1802
|
+
-- as in French. Matched by page + content signature; skipped once order 8 is taken.
|
|
1803
|
+
-- ==========================================================================================
|
|
1804
|
+
|
|
1805
|
+
UPDATE public.blocks AS b
|
|
1806
|
+
SET "order" = 8,
|
|
1807
|
+
updated_at = now()
|
|
1808
|
+
FROM public.pages AS p
|
|
1809
|
+
JOIN public.languages AS l ON l.id = p.language_id
|
|
1810
|
+
WHERE b.page_id = p.id AND p.slug = 'home' AND l.code = 'en'
|
|
1811
|
+
AND b.block_type = 'section' AND b."order" = 7
|
|
1812
|
+
AND b.content::text LIKE '%Have Questions?%'
|
|
1813
|
+
AND EXISTS (SELECT 1 FROM public.blocks AS o WHERE o.page_id = p.id AND o.id <> b.id AND o."order" = 7)
|
|
1814
|
+
AND NOT EXISTS (SELECT 1 FROM public.blocks AS o WHERE o.page_id = p.id AND o."order" = 8);
|
|
1815
|
+
|
|
1816
|
+
DROP FUNCTION IF EXISTS pg_temp.nb_02018_item(text, text, text, boolean);
|
|
1817
|
+
DROP FUNCTION IF EXISTS pg_temp.nb_02018_fragment(text, text, text, text, text, text);
|
|
1818
|
+
DROP FUNCTION IF EXISTS pg_temp.nb_02018_json_inner(text);
|
|
1819
|
+
DROP TABLE IF EXISTS pg_temp.nb_02018_edits;
|
|
1820
|
+
DROP TABLE IF EXISTS pg_temp.nb_02018_fields;
|