Praktični vodič: izgradite internacionalizirani direktorij zračnih luka na Profound CMS-u — jedna parametarska ruta koja prikazuje stranicu za svaku zračnu luku, na 35 jezika.
Izgradite stvarni, internacionalizirani direktorij zračnih luka na Profound CMS-u: jedan URL obrazac koji prikazuje stranicu za svaku zračnu luku, na 35 jezika. Vi pišete Next.js kod i ručno gradite CMS strukturu; Claude Code (putem Profound MCP-a) preuzima tri zadatka — generiranje podataka o zračnim lukama, povezivanje dizajnerskog sustava i generiranje četiri React komponente. Tri dijela: Postavljanje, Izgradnja, Produkcija.
Pogledajte cijeli video vodič.
/{language}/{airport_code}.cms-renderer.curl -fsSL https://bun.sh/install | bashgh) i Vercel račun povezan s GitHubom.language) dolaze ugrađene.cms-renderer SDK-a s API ključem za čitanje.Krajnje stanje: ~50 zračnih luka u CMS-u, aplikacija povezana da ih čita i dizajnerski sustav postavljen.
Prijavite se na Profound (WorkOS autentifikacija) i izradite web-stranicu nazvanu airports. Kopirajte dvije stvari: ID web-stranice (UUID u administratorskom URL-u) i API ključ razine čitanja iz Deployments → Create API key. Aplikaciji je potrebno samo čitanje, pa je ključ za čitanje dovoljan.
bunx create-profound-next airports
cd airports
Dodajte svoje vjerodajnice u .env.local:
PROFOUND_API_KEY=<vaš read ključ>
NEXT_PUBLIC_PROFOUND_WEBSITE_ID=<vaš website id>
NEXT_PUBLIC_CMS_API_URL=https://cms.dev.tryprofound.com
NEXT_PUBLIC_BUNNY_CDN_URL=https://cms-profound.b-cdn.net
Pokrenite bun dev i otvorite localhost:3000 kako biste potvrdili povezivanje.
airportU adminu idite na Components → Create new component i nazovite je airport. Dodajte šest polja: code, name, city, country (Text) te latitude, longitude (Number). Označite code kao polje Route Slug i postavite status na Active. Ostavite sva polja neobaveznima; nemojte dodavati oznaku UI Element.
Komponenta airport — šest polja, s code postavljenim kao Route Slug.
bun run generate-schemas
Ovo zapisuje airportSchema (Zod) i Airport (tip) u generated/cms-schemas.ts, i potvrđuje da vaše vjerodajnice rade.
Povežite MCP i autentificirajte se:
claude mcp add --transport http Profound http://107.21.107.99:8081/mcp
Poslužitelj se autentificira preko OAuth-a (WorkOS). U Claude Codeu pokrenite /mcp, odaberite Profound i dovršite prijavu u pregledniku — Claude Code će vas također automatski potaknuti prvi put kada se pozove Profound alat. Kada /mcp prikaže da je Profound connected, zatražite od Claudea:
Generiraj pedeset stvarnih zračnih luka — ispravne IATA kodove, nazive, gradove, države i koordinate. Spremi ih kao JSON u
datamapu, validiraj prema našoj komponenti airport, zatim svaku kreiraj kao objavljen dokument putem Profound MCP-a, paralelno.
Otvorite airport → Variants kako biste potvrdili da postoji ~50 objavljenih zračnih luka. Aplikacija ih čita pomoću API ključa; MCP piše s vlastitom WorkOS sesijom.
Oko 50 zračnih luka, dodanih kao objavljene varijante.
Scaffold dolazi bez stilova. Postavite DESIGN.md (Tailwind v4 @theme blok plus tokeni) u korijen projekta — vlastiti ili preuzet s refero.design. Zatim zatražite od Claudea:
Pročitaj DESIGN.md. Postavi Tailwind v4 i poveži temu i fontove. Koristi
next/fontza fontove, a ne runtime Google import. Samo stiliziranje — bez stranica ili komponenti.
Potvrdite da src/app/globals.css sadrži @import "tailwindcss"; plus @theme blok, te da localhost:3000 prikazuje tokene.
Izgradite render sloj: UI elemente, React komponente, rutu, CEL vezivanja i prijevod.
U adminu Create new component četiri puta (bez Route Slug polja). Za svaku dodajte polja kao Text osim gdje je drukčije navedeno, postavite status na Active i dodajte oznaku UI Element u Settings → Tags:
nav → brandheadline → title, subtitlebody → code, city, country, latitude (Number), longitude (Number)footer → textbody.latitude i body.longitude moraju biti Number kako bi odgovarali komponenti airport.
Svaki UI element je vlastita komponenta — ovdje body, postavljena na Active s oznakom UI Element.
Sva četiri UI elementa uz komponentu airport.
bun run generate-schemas
Zatražite od Claudea:
Izgradi četiri React komponente — nav, headline, body, footer — u
components/. Svaka prima jedancontentprop tipiziran kaoBlockComponentProps<T>izcms-renderer/lib/types, gdje jeTgenerirani tip elementa, i čita svoja polja scontent. Registriraj sve četiri u registru catch-all rute prema nazivu komponente. Stiliziraj ih našim dizajnerskim sustavom, ali kao naše vlastite komponente — ne kopiraj izgled izvorišne stranice. Nav: brand s lijeve strane. Headline: naziv zračne luke s podnaslovomcode · city, country. Body: panel s detaljima s kodom, gradom, državom i koordinatama. Footer: jedan statični redak. Samo layout i stil.
Claude kreira četiri komponente i popunjava registar u src/app/[...slug]/page.tsx:
const registry = { nav: Nav, headline: Headline, body: Body, footer: Footer };
Dva pravila: svaka komponenta čita svoja polja s content (ne kao zasebne propse), i ključevi registra moraju točno odgovarati nazivima komponenti u CMS-u — u suprotnom se ništa ne prikazuje.
U adminu idite na Pages → Create page i postavite obrazac /{airport_code}. Pod Dynamic Segment Mappings mapirajte airport_code → komponenta airport, slug polje code. Spremite — završit ćete u Page Builderu. Provjerite da /JFK radi.
Dodavanje UI elementa na stranicu s kartice Custom.
Četiri UI elementa dodana u JFK vezanje u Page Builderu.
Odaberite JFK vezanje → Add UI Element → kartica Custom → dodajte nav, headline, body, footer tim redom. Profound propagira taj skup na svako vezanje zračne luke.
Popunite svako polje. Statične vrijednosti (nav brand, footer text): upišite ih izravno. Dinamičke vrijednosti: prebacite na dynamic i napišite CEL. Zajednički upit je documents.get("airport", meta.params.airport_code).
| Polje | CEL vrijednost |
|---|---|
headline.title | documents.get("airport", meta.params.airport_code).name |
headline.subtitle | documents.get("airport", meta.params.airport_code).code + " · " + documents.get("airport", meta.params.airport_code).city + ", " + documents.get("airport", meta.params.airport_code).country |
body.code / body.city / body.country | documents.get("airport", meta.params.airport_code).<field> |
body.latitude / body.longitude | documents.get("airport", meta.params.airport_code).latitude (i .longitude) |
nav.brand, footer.text | statični stringovi |
Objavite stranicu (gore desno).
Otvorite localhost:3000/JFK, zatim /SFO, /LAX — isti predložak, različite zračne luke.
Dovršena stranica koja prikazuje podatke o JFK-u, na engleskom.
Prvo prevedite komponente. U adminu otvorite svaku komponentu (bilo koju — ne mora biti UI element) i kliknite Translate → Submit. Profound prevodi sadržaj na svih 35 jezika odjednom, uključujući statične vrijednosti polja. Učinite to prije uređivanja rute ili CEL koda.
Translate → Submit šalje komponentu na svih 35 jezika odjednom.
Dodajte dimenziju jezika. U Pages promijenite obrazac u /{language}/{airport_code}. Dodajte Dynamic Segment Mapping za language → ugrađena language sistemska komponenta, slug polje code. Spremite i provjerite da /en/JFK radi.
Dodavanje segmenta {language} u rutu.
Usmjerite sva prevodiva polja na prevedeni fetch. Internacionalizacija stranice znači zamjenu svakog jezično ovisnog polja — ne samo naslovnog — iz documents.get(...) u documents.translated("airport", meta.params.airport_code, meta.params.language):
| Polje | Prevedeni CEL |
|---|---|
headline.title | documents.translated("airport", meta.params.airport_code, meta.params.language).name |
headline.subtitle | documents.get("airport", meta.params.airport_code).code + " · " + documents.translated("airport", meta.params.airport_code, meta.params.language).city + ", " + documents.translated("airport", meta.params.airport_code, meta.params.language).country |
body.city / body.country | documents.translated("airport", meta.params.airport_code, meta.params.language).city (i .country) |
Ostavite IATA code i koordinate na documents.get — identični su na svim jezicima. nav.brand i footer.text već su pokriveni prijevodom komponenti u koraku 1.
Kada su sva tri koraka gotova, /fr/SFO, /de/SFO, itd. potpuno se prikazuju prevedeni.
Gurnite na GitHub:
git init
git add -A
git commit -m "Airport directory"
gh repo create airports --public --source=. --push
Uvezite u Vercel: Add New → Project → uvezite airports repo. Dodajte varijable okoline — PROFOUND_API_KEY, NEXT_PUBLIC_PROFOUND_WEBSITE_ID, NEXT_PUBLIC_CMS_API_URL, i po želji NEXT_PUBLIC_BUNNY_CDN_URL — zatim Deploy. Posjetite /en/JFK i /fr/SFO. Svaki budući git push ponovno objavljuje.
Oboje dolazi sa scaffoldom.
<Refresher> u layout.tsx osvježava stranicu koju pregledavate kada uređujete i spremate u adminu — bez ponovnog deploya.?edit_mode=true bilo kojem URL-u (npr. …/en/JFK?edit_mode=true) za preklapanja za uređivanje. Posjetitelji javnog weba i dalje vide čistu stranicu.?edit_mode=true postavlja urednik preko žive stranice.
Pedeset zračnih luka, 35 jezika, uživo — opisano jednom i ispunjeno podacima: jedna ruta, četiri React komponente i nekoliko CEL vezivanja. CMS drži sadržaj, vaš kod ga renderira, a CEL ih povezuje.