Innehållshantering
Proyectas CMS är din apps primära datalager — inte bara blogginlägg och marknadsföringstext, utan de riktiga poster som din app bygger på. Samlingar skapas och fylls med verklighetstrogen exempelinnehåll innan gränssnittet existerar, så att din app levereras kopplad till redigerbar data redan från den första builden.
De flesta Proyecta-appar lagrar sin data i det inbyggda CMS-systemet. När du beskriver din app utformar Proyecta en datamodell, skapar de samlingar som behövs och fyller dem med realistiskt exempelinnehåll — allt innan en enda sida byggs. Dina sidor läser sedan det verkliga, ägarredigerbara innehållet via typade hooks som AI:n kopplar upp åt dig. För en helhetsbild av hur det här hänger ihop, se Hur din apps data fungerar.
Du behöver inte tänka på något av det här för att komma igång — det sker automatiskt. Den här sidan förklarar vad som ligger under ytan så att du kan forma det.
Samlingar och singletons
Section titled “Samlingar och singletons”Innehåll organiseras i samlingar och singletons:
| Typ | Vad det är | Exempel |
|---|---|---|
| Samling | En innehållstyp med många poster — ett schema, många rader. | posts, services, testimonials, catalogItems |
| Singleton | En innehållstyp med exakt en post — globalt, engångsinnehåll. | businessInfo, seoSettings |
En samling är en form; varje post är ett objekt av den formen (ett blogginlägg, en tjänst, en FAQ). En singleton innehåller ett enda redigerbart register — din företagsidentitet, eller hero- och sektionskopian för en sida.
Vilka typer av innehåll
Section titled “Vilka typer av innehåll”Proyecta levereras med färdiga samlingsdesigner — väldefinierade fält, adminledtrådar och startinnehåll — för de typer av poster som verkliga företag använder: blogginlägg och artiklar, tjänster, en produktkatalog, en meny, omdömen och recensioner, teammedlemmar, ett fotogalleri, vanliga frågor, evenemang, platser, nedladdningsbara resurser, lediga tjänster, kurser, turer och boendeannonser, med mera.
Du väljer aldrig från en lista. När du beskriver din app väljer Proyecta de samlingar som ditt underlag kräver — din företagstyp, de funktioner du bett om, ditt språk — och skapar dem, förifyllda med realistiskt exempelinnehåll. Om din app behöver något som ingen av dem täcker, utformar Proyecta en anpassad samling med egna fält istället.
Därför visar din adminpanel din apps samlingar — inte en fast lista. Den bygger sig själv utifrån din apps aktiva innehållsmodell, så oavsett vad Proyecta skapat åt dig — inbyggt eller anpassat — är det exakt vad du ser och redigerar. Två Proyecta-appar har sällan samma uppsättning, och det är med avsikt.
Varje samling består av typade fält. Fälttyper tillämpas från start till slut — adminpanelen renderar rätt editor, och dina sidor får korrekt typade värden.
| Fälttyp | Används för |
|---|---|
string |
Korta envärden — titlar, namn, adresser. |
text |
Ett stycke ren text. |
markdown |
Lång formaterad text — artikelinnehåll, “om oss”-text. |
slug |
URL-identifierare, automatiskt härlett från ett annat fält (t.ex. titeln). |
number |
Antal, betyg, varaktigheter. |
money |
Ett pris eller valutabelopp — visas och redigeras som pengar. |
boolean |
På/av-flaggor. |
date |
Kalenderdatum. |
datetime |
Tidsstämplar — publiceringsdatum, evenemangsstarter. |
weeklyHours |
Öppettider för varje dag i veckan. |
asset |
En bild, video eller PDF (lagrad som en publik URL). |
reference |
En länk till en post i en annan samling. |
enum |
Ett värde från en fast lista med alternativ. |
array |
En lista med strängar — taggar, telefonnummer, zoner. |
blocks |
Staplingsbara innehållsblock — en sida byggd av typade sektioner. |
json |
Strukturerad data som inte passar någon av typerna ovan. |
Poster, utkast och publicering
Section titled “Poster, utkast och publicering”En post är ett objekt i en samling. Varje post har en status:
- Draft — ett pågående arbete; visas aldrig på din publicerade webbplats.
- Published — live och synlig för besökare.
- Archived — pensionerad, hålls undan.
Dina publika sidor ser bara publicerade poster — utkast och arkiverade objekt döljs automatiskt, så att du kan förbereda innehåll på ett säkert sätt innan det går live.
Hantera innehåll (ingen kod krävs)
Section titled “Hantera innehåll (ingen kod krävs)”Det finns två sätt att lägga till och redigera innehåll — inget av dem kräver att du rör kod:
- Fråga AI:n i chatten. Beskriv bara förändringen så redigerar den rätt innehåll åt dig:
"Add a testimonial from María González: 'Best service in town', 5 stars.""Change the tagline in Business Info to 'Café de especialidad en la Roma'.""Mark the last five contact-form submissions as read."
- Din apps adminpanel. Varje publicerad app får en inbyggd, inloggningsskyddad adminpanel där du (och personal du ger åtkomst) hanterar innehåll och formulärinskickar direkt — en kalkylbladsliknande editor per samling, plus en inkorg för inskickningar. Den konfigurerar sig själv utifrån din apps aktiva innehållsmodell, så nya samlingar visas där automatiskt. Se Admin Panel.
Hantera ditt CMS-innehåll via din apps adminpanel eller AI:n — en inbyggd innehållseditor i builder-verktyget finns på färdplanen (se Coming soon). En realtids-postvisare för appar med live-uppdateringar kommer snart.
Hur din app läser innehåll
Section titled “Hur din app läser innehåll”Dina sidor läser innehåll via en uppsättning typade hooks i @/hooks/useContent — och AI:n skriver den kopplingen åt dig. Du beskriver sidan; Proyecta genererar komponenterna som anropar dessa hooks mot dina riktiga samlingar. Du rör dem sällan själv, men här är vad de gör:
| Hook | Vad den gör |
|---|---|
useCollection('posts') |
Listar en samlings publicerade poster (med valfritt filter/sortering/begränsning). |
useEntry('posts', slug) |
Hämtar en publicerad post via slug (detaljsidor). |
useSingleton('businessInfo') |
Läser en singleton (företagsinfo, sidinnehåll). |
useFormSubmit('contactForm') |
Skickar in ett formulär och rapporterar valideringsfel. |
// A blog index — exactly the kind of code the AI generates for youimport { useCollection } from '@/hooks/useContent';
function BlogList() { const { data: posts, isLoading } = useCollection('posts', { sort: 'published_at:desc' }); if (isLoading) return <Spinner />; return posts?.map((post) => <PostCard key={post._id} post={post} />);}När Proyecta genererar typade gränssnitt för dina samlingar blir hooks fullt typade (useCollection<Post>('posts')), så din editor autokompleterar varje fält. Läsningar hydreras vid första rendering från en bakad ögonblicksbild — sidor renderas omedelbart och SEO-vänligt, och uppdateras sedan live i bakgrunden.
Formulär
Section titled “Formulär”Formulär är en förstklassig funktion, inte något AI:n bygger för hand. Lägg till ett formulärblock så renderar det fälten, validerar indata, skickar iväg och visar ett lyckat tillstånd:
<FormBlock form="contactForm" />Formulär levereras färdiga också — ett kontaktformulär, en offertförfrågan, ett bokningsformulär, ett beställningsformulär, ett registreringsformulär — och Proyecta kopplar rätt formulär till dina sidor. Inskickningar hamnar i din apps adminpanel-inkorg, och ägaren får ett e-postmeddelande när ett nytt formulär kommer in. Se Forms för hela bilden.
Lokalisering
Section titled “Lokalisering”Innehåll kan översättas till flera lokaler. Fält markerade som lokaliserade lagrar ett värde per språk, och läs-hooks löser dem via en fallback-kedja (begärt språk → konfigurerade fallbacks → standard) när du skickar med besökarens aktiva lokal:
const { data: posts } = useCollection('posts', { locale: 'es' });Enspråkiga appar ignorerar lokaler helt — det finns inget att konfigurera. För den bredare översättningsberättelsen, se Internationalisering.
Releaser
Section titled “Releaser”En release samlar flera poster så att de går live (eller avpubliceras) tillsammans — förbered en samordnad innehållslansering (en lansering, en ny produktsida, en FAQ-uppdatering) och aktivera allt på en gång.
Observera: Automatisk tidsstyrd publicering är ännu inte implementerat. En release med ett
scheduled_at-datum får statusenscheduledmen måste publiceras manuellt. Automatisk publicering vid den schemalagda tidpunkten kommer snart.
Vanliga mönster (låt AI:n koppla upp det)
Section titled “Vanliga mönster (låt AI:n koppla upp det)”Du skriver sällan det här för hand — beskriv vad du vill ha och Proyecta bygger det mot riktiga samlingar:
"Build a blog. Each post has a title, cover image, rich-text body, category, and tags. Public routes at /blog and /blog/[slug], newest first.""Add an FAQ section the owner can edit, grouped by category.""Add a bookable services list with a request-a-quote form.""Make the site bilingual — English and Spanish — with a language switcher.""Seed the testimonials with five realistic reviews for a coffee shop."
Var din apps data bor
Section titled “Var din apps data bor”CMS är standardplatsen för beständigt innehåll och poster. Vissa typer av data bor i specialbyggda system istället:
| Typ av data | Var den bor |
|---|---|
| Innehåll och poster (inlägg, tjänster, annonser, FAQs, katalog, bokningar) | Proyecta CMS (den här sidan) — standard |
| Realtids-/beteendetillstånd (live-chatt, flöden, närvaro, speltillstånd) | Realtidslager — kommer snart |
| Användarkonton och inloggning | Auth |
| Produkter, beställningar, prenumerationer, betalningar | Commerce |
| Uppladdade filer och media | Files & Media |
| Statiska resurser inbakade i builden | katalogen public/ i ditt projekt |
CMS är standard. Ett realtidslager för genuint realtids-beteende kommer snart; även då kommer beständigt innehåll och handelskatalogen att fortsätta leva i CMS.
Coming soon
Section titled “Coming soon”- Inbyggd innehållseditor — bläddra och redigera dina CMS-samlingar direkt från builder-instrumentpanelen (idag: hantera innehåll via adminpanelen eller AI:n).
- Rich-text WYSIWYG-editor — visuell redigering för
markdown-fält (idag redigeras de som markdown). - Tidsstyrd autopublicering — releaser som går live automatiskt vid sin schemalagda tid.
- Live-förhandsgranskning av innehållsändringar mot din app.
- Innehållsroller — separera editorsbehörigheter från utvecklarbehörigheter.