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>
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
/**
|
||||
* 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;
|
||||
Reference in New Issue
Block a user