Files
djnizz-website/src/data/site.ts
T
Nizz05andClaude Opus 5 074c87ed79 Website djnizz.at: Hero- und About-Sektion mit Docker-Deployment
Astro 7 mit Tailwind 4 und Node-Adapter. Alle Seiten werden vorgerendert,
der Node-Server ist dabei, damit spaeter einzelne Routen (Booking-Formular)
ohne Umbau am Deployment dynamisch werden koennen.

Inhalt:
- Fullscreen-Hero mit freigestelltem Render, animierten Lasern und
  Genre-Laufband; Typografie als HTML statt eingebranntem Bildtext
- About-Sektion mit Genre-Karten und Eckdaten
- Impressum und Datenschutzerklaerung
- Zentrale Inhaltsdatei src/data/site.ts

Technik:
- Selbst gehostete Schriften, keine Cookies, kein Tracking, keine
  externen Requests
- Docker Multi-Stage (238 MB) hinter Caddy mit automatischem HTTPS,
  Security-Headern und IP-maskierten Logs
- scripts/cutout.mjs stellt den Render ueber eine Sobel-Kantenkarte frei
  und entfernt eingeschlossene Hintergrundflaechen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 23:17:13 +02:00

119 lines
4.6 KiB
TypeScript

/**
* Zentrale Inhalts- und Konfigurationsdatei.
*
* Praktisch alle Texte, Links und Kontaktdaten der Seite stehen hier drin -
* fuer Aenderungen am Inhalt musst du keine Komponente anfassen.
*
* Achtung: `SITE.url` muss mit `site` in astro.config.mjs uebereinstimmen.
*/
export const SITE = {
name: 'DJ NIZZ',
url: 'https://djnizz.at',
/** Erscheint im Browser-Tab und in Suchergebnissen. */
title: 'DJ NIZZ - Hardstyle, Techno, Drum & Bass, House & Commerce DJ',
description:
'DJ NIZZ - Hardstyle, Techno, Drum & Bass, House und Commerce. Sets, die den Floor nicht mehr loslassen. Jetzt für Clubs, Festivals und Privatevents buchen.',
locale: 'de-AT',
/** Wird fuer strukturierte Daten und den Footer verwendet. */
region: 'Österreich',
} as const;
/**
* Wird an allen Booking-Buttons, im Footer und im Impressum verwendet.
* Bewusst ohne `as const`: sonst haette `phone` den Literaltyp `''` und
* TypeScript wuerde den Zweig "Telefonnummer anzeigen" als unerreichbar werten.
*/
export const CONTACT: { email: string; phone: string } = {
email: 'business.djnizz@gmail.com',
/** Leer lassen, wenn die Telefonnummer nicht oeffentlich stehen soll. */
phone: '',
};
/** Angaben fuer Impressum (§ 25 MedienG, § 5 ECG) und Datenschutzerklaerung. */
export const LEGAL = {
name: 'Nicolas Thomas Gruber',
street: 'Seegasse 10',
zip: '7063',
city: 'Oggau am Neusiedler See',
country: 'Österreich',
} as const;
/**
* TODO anpassen: eigene Profil-Links eintragen.
* Eintraege mit leerem `url` werden auf der Seite automatisch weggelassen,
* du kannst also alles stehen lassen, was du noch nicht hast.
*/
export const SOCIALS: { name: string; url: string; icon: SocialIcon }[] = [
{ name: 'Instagram', url: '', icon: 'instagram' },
{ name: 'SoundCloud', url: '', icon: 'soundcloud' },
{ name: 'Spotify', url: '', icon: 'spotify' },
{ name: 'YouTube', url: '', icon: 'youtube' },
{ name: 'TikTok', url: '', icon: 'tiktok' },
];
export type SocialIcon = 'instagram' | 'soundcloud' | 'spotify' | 'youtube' | 'tiktok';
/** Reihenfolge bestimmt die Anzeige im Hero-Marquee und in den Genre-Karten. */
export const GENRES = [
{
name: 'Hardstyle',
accent: 'magenta',
description:
'Harte Kicks, euphorische Melodien, Screeches, die im Nacken sitzen. Der Moment, in dem der Floor kollektiv abhebt.',
},
{
name: 'Techno',
accent: 'cyan',
description:
'Treibend, hypnotisch, kompromisslos. Lange Spannungsbögen statt schneller Effekte - gebaut für die späten Stunden.',
},
{
name: 'Drum & Bass',
accent: 'lime',
description:
'Breakbeats bei 174 BPM, Bass, der im Brustkorb sitzt. Der Gangwechsel, mit dem ein Set nochmal komplett die Richtung dreht.',
},
{
name: 'House',
accent: 'gold',
description:
'Groove zuerst. Warme Basslines und Vocals, die die Menge in Bewegung halten, ohne sie zu überfahren.',
},
{
name: 'Commerce',
accent: 'violet',
description:
'Die Hits, die jeder mitsingt - neu gedacht, sauber gemixt und so eingebaut, dass sie den Set-Flow tragen statt ihn zu brechen.',
},
] as const;
/**
* TODO anpassen: Das ist Platzhaltertext ueber deinen Sound - keine
* Biografie mit echten Daten. Schreib hier rein, was wirklich stimmt
* (seit wann du auflegst, Residencies, groesste Gigs, Releases).
*/
export const ABOUT = {
kicker: 'Über mich',
headline: 'Fünf Genres, ein Set',
lead:
'Ich lege auf, was den Raum trägt - nicht was gerade in der Charts-Playlist steht. Hardstyle, Techno, Drum & Bass, House und Commerce sind für mich keine getrennten Schubladen, sondern fünf Werkzeuge für denselben Abend.',
paragraphs: [
'Ein Set beginnt selten dort, wo es endet. Ich baue den Abend auf: groovige House-Nummern zum Ankommen, ein Techno-Mittelteil, der die Spannung hält, ein Drum-&-Bass-Break als Richtungswechsel und Hardstyle für den Punkt, an dem der Floor wirklich explodiert. Dazwischen die Tracks, die jeder kennt - so eingebaut, dass sie den Flow tragen.',
'Was mir wichtig ist: Ich spiele für die Leute vor mir, nicht für die Kamera. Wenn ein Übergang sitzt und man das an 400 Händen gleichzeitig sieht, ist der Abend gelungen.',
],
/** Kurze Eckdaten neben dem Text. Text frei anpassbar. */
facts: [
{ label: 'Basis', value: 'Österreich' },
{ label: 'Setlänge', value: '1-4 h' },
{ label: 'Formate', value: 'Club, Festival, Private' },
{ label: 'Technik', value: 'Pioneer CDJ / Rekordbox' },
],
} as const;
/** Navigation. Weitere Sektionen (Musik, Termine) hier ergaenzen. */
export const NAV = [
{ label: 'Start', href: '#start' },
{ label: 'Über mich', href: '#about' },
] as const;