Files
theater-ziefen-website/tina/config.ts
T
johannes.gasser d9e3f398b8
Build and Deploy / build-and-deploy (push) Failing after 5m26s
add backend
2026-05-03 20:58:09 +02:00

493 lines
13 KiB
TypeScript

import { defineConfig } from "tinacms";
import { UsernamePasswordAuthJSProvider, TinaUserCollection } from "tinacms-authjs/dist/tinacms";
export default defineConfig({
contentApiUrlOverride: "/api/tina/gql",
authProvider: new UsernamePasswordAuthJSProvider(),
build: {
outputFolder: "admin",
publicFolder: "public",
},
media: {
tina: {
mediaRoot: "images",
publicFolder: "public",
static: false,
},
},
schema: {
collections: [
TinaUserCollection,
{
name: "post",
label: "Blog Posts",
path: "content/blog",
format: "mdx",
fields: [
{
type: "string",
name: "title",
label: "Title",
isTitle: true,
required: true,
},
{
type: "datetime",
name: "date",
label: "Publication Date",
required: true,
},
{
type: "string",
name: "excerpt",
label: "Excerpt",
required: true,
description: "Short summary of the blog post",
},
{
type: "image",
name: "coverImage",
label: "Cover Image",
description: "Featured image for the blog post",
},
{
type: "rich-text",
name: "body",
label: "Body",
isBody: true,
required: true,
},
],
defaultItem: () => {
return {
title: "New Blog Post",
date: new Date().toISOString(),
excerpt: "",
};
},
},
{
name: "page",
label: "Pages",
path: "content/pages",
format: "mdx",
fields: [
{
type: "string",
name: "title",
label: "Title",
isTitle: true,
required: true,
},
{
type: "string",
name: "description",
label: "Description",
description: "Meta description for SEO",
},
{
type: "rich-text",
name: "body",
label: "Content",
isBody: true,
required: true,
},
],
},
{
name: "theaterHomepage",
label: "Theater Homepage",
path: "content/theater",
format: "mdx",
ui: {
allowedActions: {
create: false,
delete: false,
},
},
fields: [
{
type: "string",
name: "title",
label: "Page Title",
isTitle: true,
required: true,
},
// Hero Section
{
type: "object",
name: "hero",
label: "Hero Section",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "string",
name: "subtitle_de",
label: "Subtitle (German)",
required: true,
ui: {
component: "textarea",
},
},
{
type: "string",
name: "subtitle_en",
label: "Subtitle (English)",
required: true,
ui: {
component: "textarea",
},
},
],
},
// Section 1: Das Projekt
{
type: "object",
name: "projekt",
label: "Section 1: Das Projekt / The Project",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true,
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true,
},
],
},
// Section 2: Wer steckt dahinter
{
type: "object",
name: "team",
label: "Section 2: Wer steckt dahinter / Who's Behind It",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true,
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true,
},
{
type: "object",
name: "organizations",
label: "Organizations",
list: true,
fields: [
{
type: "string",
name: "name",
label: "Name",
},
{
type: "string",
name: "role_de",
label: "Role (German)",
},
{
type: "string",
name: "role_en",
label: "Role (English)",
},
{
type: "image",
name: "logo",
label: "Logo",
description: "Organization logo image (SVG, PNG, JPG supported)",
},
{
type: "string",
name: "url",
label: "Website URL",
description: "Organization website link",
},
],
},
],
},
// Section 3: Das Stück
{
type: "object",
name: "stueck",
label: "Section 3: Das Stück / The Play",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true,
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true,
},
],
},
// Section 4: Mitwirkung
{
type: "object",
name: "mitwirkung",
label: "Section 4: Mitwirkung / Participation",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true,
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true,
},
{
type: "string",
name: "director_name",
label: "Director Name",
},
{
type: "string",
name: "director_email",
label: "Director Email",
},
{
type: "string",
name: "director_phone",
label: "Director Phone",
},
],
},
// Section 5: Termine
{
type: "object",
name: "termine",
label: "Section 5: Termine / Schedule",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "object",
name: "events",
label: "Events",
list: true,
fields: [
{
type: "string",
name: "title_de",
label: "Event Title (German)",
},
{
type: "string",
name: "title_en",
label: "Event Title (English)",
},
{
type: "string",
name: "date",
label: "Date/Period",
},
{
type: "string",
name: "description_de",
label: "Description (German)",
ui: {
component: "textarea",
},
},
{
type: "string",
name: "description_en",
label: "Description (English)",
ui: {
component: "textarea",
},
},
],
},
],
},
// Section 6: Presse
{
type: "object",
name: "presse",
label: "Section 6: Presse / Press",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true,
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true,
},
],
},
// Section 7: Foto Galerie
{
type: "object",
name: "gallery",
label: "Section 7: Foto Galerie / Photo Gallery",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "image",
name: "images",
label: "Gallery Images",
list: true,
},
],
},
// Section 8: Tickets
{
type: "object",
name: "tickets",
label: "Section 8: Tickets",
fields: [
{
type: "string",
name: "title_de",
label: "Title (German)",
required: true,
},
{
type: "string",
name: "title_en",
label: "Title (English)",
required: true,
},
{
type: "rich-text",
name: "content_de",
label: "Content (German)",
required: true,
},
{
type: "rich-text",
name: "content_en",
label: "Content (English)",
required: true,
},
{
type: "string",
name: "ticket_url",
label: "Ticket Purchase URL",
description: "External link to ticket partner",
},
],
},
],
},
],
},
});