CMS (Sanity Studio)
echo CMS er en Sanity Studio installasjon som fungerer som headless CMS for echo’s nettsider. Den tillater ikke-tekniske brukere å opprette og redigere innhold som arrangementer, innlegg, og andre data.
Teknologi
Section titled “Teknologi”Core Stack
Section titled “Core Stack”- Sanity.io v4 - Headless CMS platform
- React 19 - UI framework for Studio
- TypeScript - Type safety for schemas og komponenter
Plugins
Section titled “Plugins”- Vision - GraphQL playground og query testing
- Media - Forbedret media library
- Markdown - Rich text med markdown support
- Color Input - Fargevelger for branding
- Singleton Tools - Single-instance dokumenter (banner)
Struktur
Section titled “Struktur”apps/cms/├── schemas/ # Content schemas│ ├── happening.tsx # Arrangementer│ ├── post.tsx # Innlegg/nyheter│ ├── job-ad.tsx # Stillingsannonser│ ├── ... # Resten av schemas├── src/│ └── desk-structure.ts # Studio navigation struktur├── migrations/ # Schema migrasjoner└── sanity.config.ts # Studio konfigurasjonContent Types
Section titled “Content Types”Hovedinnhold
Section titled “Hovedinnhold”Arrangementer (happening)
Section titled “Arrangementer (happening)”- Metadata - Tittel, beskrivelse, dato/tid
- Registrering - Kapasitet, påmeldingsfrist, spørsmål
- Location - Fysisk eller digital lokasjon
- Bedrift - Tilknyttet bedrift (for bedpres)
- Bilder - Hero image og galleri
Innlegg (post)
Section titled “Innlegg (post)”- Metadata - Tittel, forfatter, publiseringsdato
- Innhold - Rich text med markdown
- Bilder - Featured image og inline bilder
- SEO - Meta description og tags
Stillingsannonser (job-ad)
Section titled “Stillingsannonser (job-ad)”- Bedrift - Bedriftsinformasjon og logo
- Stillingsinfo - Tittel, beskrivelse, krav
- Søknadsfrist - Deadline for søknader
- Lokasjon - Arbeidssted
Organisasjon
Section titled “Organisasjon”Studentgrupper (student-group)
Section titled “Studentgrupper (student-group)”- Gruppeinformasjon - Navn, beskrivelse, type
- Medlemmer - Gruppeleder og medlemmer
- Kontaktinfo - E-post og sosiale medier
- Logo - Gruppens logo/bilde
Brukerprofiler (profile)
Section titled “Brukerprofiler (profile)”- Personinfo - Navn, studie, årstrinn
- Rolle - Verv i echo
- Kontakt - E-post, sosiale medier
- Profilbilde - Avatar
Generell informasjon
Section titled “Generell informasjon”Bannere (banner)
Section titled “Bannere (banner)”- Visning - Tittel, beskrivelse, CTA
- Styling - Farger og layout
- Målgruppe - Hvem som skal se banneret
- Periode - Når banneret skal vises
Statisk info (static-info)
Section titled “Statisk info (static-info)”- Om echo - Vedtekter, retningslinjer
- Kontaktinfo - Adresser og telefonnummer
- Generell info - FAQ, praktisk informasjon
Studio-miljøer
Section titled “Studio-miljøer”Miljøer som develop og testing er bare tilgjengelig når du kjører Sanity lokalt på PCen din. Et annet Studio-miljø vil si hvilke data du har tilgjengelig når du kjører Sanity.
Når man driver å utvikle i Sanity er det anbefalt å bruke develop miljøet. Dette fordi det er et miljø man kan endre data fritt i uten at det påvirker produksjos-miljøet, som der igjen gjør at nettsiden endrer seg.
Produksjon
Section titled “Produksjon”- Dataset:
production - URL:
/prodbasepath - Tilgang: Kun godkjente redaktører
- Backup: Automatisk daily backup
Development
Section titled “Development”- Dataset:
develop - URL:
/devbasepath - Tilgang: Alle Webkom medlemmer
- Testing: Safe environment for utvikling
Testing
Section titled “Testing”- Dataset:
testing - URL:
/testbasepath - Tilgang: Automatiserte tester
- Reset: Regelmessig reset av data
Arbeidsflyt
Section titled “Arbeidsflyt”Innholdsredigering
Section titled “Innholdsredigering”- Logg inn på Sanity Studio (localhost:3333)
- Velg miljø - øverst til venstre
- Opprett innhold
- Publiser
Schema utvikling
Section titled “Schema utvikling”- Rediger schemas i
/schemasmappen - Test lokalt i development miljø
- Deploy til produksjon etter testing
Eventuelt
Section titled “Eventuelt”- Migrer data hvis nødvendig
Dette er om du gjør større endringer som også krever at du endrer på eksisterende data.
Sanity Queries
Section titled “Sanity Queries”GROQ eksempler
Section titled “GROQ eksempler”// Hent alle arrangementer*[_type == "happening" && date > now()] | order(date asc)
// Hent publiserte innlegg*[_type == "post" && publishedAt <= now()] | order(publishedAt desc)
// Hent aktive stillingsannonser*[_type == "jobAd" && deadline > now()]Custom komponenter
Section titled “Custom komponenter”Schema fields
Section titled “Schema fields”// Eksempel: Custom datetime pickerexport const customDateTime = defineField({ name: "customDate", type: "datetime", validation: (Rule) => Rule.required(), options: { timeStep: 15, calendarTodayLabel: "Today", },});Deployment og drift
Section titled “Deployment og drift”Studio deployment
Section titled “Studio deployment”# Deploy til Sanity hostingpnpm deploy
# Med spesifikk datasetsanity deploy --dataset productionSchema extraction og typegen
Section titled “Schema extraction og typegen”Etter man har gjort endringer til noen av schemas, må man kjøre pnpm extract for å generere en .json-fil vi der igjen kan bruke for å autogenere typer på queries.
# Extract schema for validationpnpm extractEtter man har laget nye queries i packages/sanity/src/queries, må man kjøre pnpm typegen for å generere nye types. Denne er avhengig av at pnpm extract har blitt kjørt før eller er up-to-date.
# Generer typespnpm typegenBest practices
Section titled “Best practices”Schema design
Section titled “Schema design”- Konsistente navn - Bruk camelCase for fields
- Validation - Legg til required fields og custom validation
- Preview - Definer gode preview komponenter
- Groups - Organiser fields i logical groups
Content strategi
Section titled “Content strategi”- Templates - Opprett templates for vanlige content types
- Media optimization - Bruk passende bildestørrelser
- SEO - Fyll ut metadata for alle public content
- Versioning - Bruk drafts for work-in-progress
Troubleshooting
Section titled “Troubleshooting”Type generation problemer
Section titled “Type generation problemer”# Regenerer typespnpm typegen