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>
119 lines
4.6 KiB
TypeScript
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;
|