Problema su esamais sprendimais
Prieš kurdamas WebEdge CMS, išbandžiau kelias alternatyvas:
- Strapi — geras kaip startas, bet savarankiškai talpinamas diegimas sunkokas; atnaujinimai dažnai lūžo; pusiau komercinė licencija verčia galvoti ilgalaikėje perspektyvoje
- Directus — artimiausia alternatyva. Lanksti duomenų modeliavimo schema, atviras kodas, normali UI. Tačiau realaus laiko sinchronizacija nėra stiprioji pusė, o diegimo sudėtingumas prideda nereikalingų sluoksnių
- Sanity — puiki DX, bet debesinis, ir moka pagal naudojimą. Ilgalaikiai kaštai greitai auga esant dideliam kiekiui turinio
- Payload CMS — moderni, TypeScript-first architektūra. Rimta galimybė, bet tuo metu trūko kai kurių funkcijų
Pagrindinis neišspręstas poreikis visose šiose platformose: realaus laiko duomenys be papildomos infrastruktūros. Klientai nori, kad sąsaja atsinaujintų iš karto, kai turinys pakeičiamas — be puslapio perkrovimo, be WebSocket serverio rankinio konfigūravimo.
Sprendimas: Convex kaip pagrindas
Convex išsprendė pagrindinę problemą: jis teikia reaktyvias užklausas ir realaus laiko sinchronizaciją kaip pirmojo lygio funkciją. Kai duomenys keičiasi — visi prisijungę klientai automatiškai gauna naują būseną.
Tai reiškia, kad WebEdge CMS administravimo sąsajoje redaktoriui nereikia spausti F5. Keitiniai matomi iš karto — tai svarbu komandose, kur vienu metu dirba keli žmonės.
Techninis rinkinys:
- Convex (self-hosted) — duomenų bazė + realaus laiko sinchronizacija + funkcijų paleidimas
- Vue 3 (Composition API,
<script setup>) — administravimo UI - TailwindCSS — stiliai be papildomų CSS failų
- REST API, suderinamas su Strapi formatu — kad esami Nuxt frontendai veiktų be pakeitimų
Ką tai davė, ko neduotų Directus
- Visiškas valdymas — duomenų schema, API elgsena, vidinė logika yra mano. Nėra „tai neįmanoma su šia platforma" situacijų.
- Integracija su savo produktais — WebEdge CMS jau integruotas su WebEdge Mail: generuoja PDF sąskaitas ir siunčia el. paštu tiesiai iš CMS. Tai su standartiniu sprendimu būtų atskiras projektas.
- Multi-site iš karto — vienas CMS valdo kelis domenus su atskiru turiniu ir kalbomis. Strapi tai reikalavo sudėtingos konfigūracijos.
- Realaus laiko UI — administravimo sąsaja jaučiasi kaip native aplikacija, ne kaip tradicinis CMS.
Kas buvo sunkiau nei tikėjausi
Realybė: kurdamas CMS palietei viską.
- Autentifikacija ir RBAC — reikia apgalvoti roles, teises, vartotojų valdymą nuo nulio. Strapi tai duoda iš karto.
- Turinio modeliavimas — kaip pavaizduoti bet kokios struktūros turinį dinamiškai? Tai nėra trivialus uždavinys.
- Medijų valdymas — failų įkėlimas, pjūviai, URL generavimas, saugojimas. Su Convex Storage tai išsprendžiama, bet reikia laiko.
- i18n — daugiakalbis turinys turi savo logiką: kurie laukai verčiami, kaip siejamos skirtingų kalbų įrašų versijos, kaip veikia rezervinis variantas.
- Rich text redaktorius — integruoti Tiptap arba ProseMirror į savo UI ir išsaugoti HTML ar JSON duomenų bazėje — paprastas darbas, kol nereikia labai specifinių formatavimo poreikių.
Kiekvienas iš šių punktų yra atskiras produktas. Kai kurių kūrėjų tai sustabdo — ir teisingai. Tai didelė investicija.
Kada verta kurti savo CMS
Sąžiningai: daugeliu atvejų neverta. Directus, Payload arba Strapi tinka, jei:
- Jums nereikia specifinių integracijų į savo produkto ekosistemą
- Jūsų turinio modelis standartinis
- Komanda maža ir nėra laiko palaikyti papildomą sistemą
Verta svarstyti savo CMS, jei:
- CMS yra jūsų produkto dalis, ne tik turinio valdymo įrankis
- Reikia gilios integracijos su savo infrastruktūra (el. paštas, sąskaitos, realaus laiko duomenys)
- Planuojate valdyti kelis saitus su skirtinga logika iš vienos vietos
- Ilgalaikis savarankiško talpinimo kaštų valdymas yra prioritetas
Išvada
WebEdge CMS nėra „geresnė Directus". Tai kita kategorija — sistema, skirta WebEdge produktų ekosistemą valdyti, o ne universali CMS platforma.
Jei ieškote CMS savo klientų projektams ar turinio komandai — žiūrėkite į Directus, Payload arba Sanity. Jie puikūs savo nišoje.
Bet jei jūsų situacija panaši į mano — kai standartinis sprendimas nesusijungia su tuo, ką jau turite — tada kurti savo yra pagrįstas pasirinkimas.
Tiesiog žinokite, į ką einate. 😄