Ako som vytvoril web DnBDoctor.com

1. Použité technológie a dôvody ich výberu
Next.js
Pri výbere frameworku som sa rozhodol pre Next.js, pretože ponúka server-side rendering (SSR), čo výrazne pomáha s výkonom a SEO. Okrem toho Next.js podporuje automatické code splitting, čím sa stránka načítava rýchlejšie, a má natívnu podporu pre optimalizáciu obrázkov cez next/image
, čo som využil na rôznych podstránkach.
TypeScript
Použil som TypeScript, pretože zabezpečuje lepšiu typovú kontrolu, čím minimalizuje chyby a zlepšuje udržiavateľnosť kódu. Pri rozsiahlejších projektoch to výrazne uľahčuje spoluprácu a refaktorovanie kódu.
Framer Motion
Pre animácie a prechody medzi stránkami som použil Framer Motion. Tento knižničný balík umožňuje jednoduchú implementáciu plynulých animácií, ktoré zlepšujú celkový UX webu.
SWR
Na data fetching a caching som využil SWR. Tento nástroj umožňuje automatické obnovenie dát a zlepšuje celkový výkon aplikácie.
next/font
Pre optimalizáciu fontov som použil next/font, ktorý umožňuje priame načítanie fontov a tým znižuje počet externých requestov.
2. Optimalizácia pre SEO
Metadata
Každá stránka obsahuje optimalizované metaúdaje, vrátane title, description a keywords, aby bola čo najlepšie indexovaná vyhľadávačmi.
Schema.org
Implementoval som Schema.org štruktúrované dáta, ktoré pomáhajú vyhľadávačom lepšie porozumieť obsahu stránky.
Robots.txt a Canonical URLs
Použil som robots.txt na kontrolu indexovania stránok a canonical URLs, aby som zabránil duplikovaniu obsahu vo vyhľadávačoch.
export async function generateMetadata(
{ params }: LayoutProps
): Promise<Metadata> {
const { slug } = await params
try {
const response = await fetch(
'https://admin.dnbdoctor.com/wp-json/wp/v2/posts?' + new URLSearchParams({
slug,
_embed: '1'
}),
{ next: { revalidate: 3600 } }
)
const data = await response.json()
const release = data[0]
const title = release?.title?.rendered || 'Music Release'
const description = release?.excerpt?.rendered?.replace(/<[^>]*>/g, '') || 'Check out this release on DnB Doctor'
const releaseUrl = `https://dnbdoctor.com/music/${slug}`
const imageUrl = release?._embedded?.['wp:featuredmedia']?.[0]?.source_url
return {
title: `${title} | DnB Doctor`,
description,
openGraph: {
title: `${title} | DnB Doctor`,
description,
url: releaseUrl,
siteName: 'DnB Doctor',
images: imageUrl ? [
{
url: imageUrl,
width: 1200,
height: 630,
}
] : [],
},
robots: {
index: true,
follow: true,
},
}
} catch (error) {
console.error('Error fetching release data:', error)
return {
title: 'Music Release | DnB Doctor',
description: 'Check out our latest releases on DnB Doctor.',
}
}
}
3. Výkon a optimalizácia
Code Splitting
Next.js automaticky rozdeľuje kód na menšie časti, čím sa načítava len to, čo je potrebné.
Lazy Loading
Použil som lazy loading pre komponenty a obrázky, aby som zrýchlil načítanie stránky.
Caching
Na zlepšenie výkonu som implementoval caching na strane klienta (SWR) a revalidate interval na strane servera.
Optimalizácia obrázkov
Vďaka next/image som zabezpečil automatické škálovanie a optimalizáciu obrázkov.
4. Používateľská skúsenosť (UX)
Responzívny dizajn
Stránka je plne responzívna a optimalizovaná pre rôzne zariadenia.
Animácie a prechody
Použitím Framer Motion som vytvoril plynulé animácie, ktoré zlepšujú UX.
Prístupnosť
Dbal som na prístupnosť webu, aby bol použiteľný aj pre ľudí so zdravotným postihnutím.
5. Integrácia s externými službami
Facebook Pixel
Na sledovanie konverzií a remarketing som integroval Facebook Pixel.
Google Analytics
Použil som Google Analytics na sledovanie návštevnosti a správania používateľov.
SoundCloud
Stránka podporuje SoundCloud prehrávače, aby používatelia mohli priamo prehrávať hudbu.
Turnstile
Na ochranu formulárov som nasadil Turnstile.
6. Riešenie problémov a výziev
API integrácia
Najväčšou výzvou bola integrácia s WordPress API. Musel som riešiť problémy s CORS politikou a optimalizovať načítavanie dát.
Výkon
Riešil som dlhé načítavanie stránok, ktoré som optimalizoval cez caching, lazy loading a code splitting.
SEO
Pre zlepšenie SEO som optimalizoval metaúdaje a implementoval Schema.org dáta.
7. Zaujímavosti z vývoja
Vlastné hooks
Vytvoril som vlastné hooks, napríklad useLatestPosts
, useMultipleMediaPreviews
a useCategories
, ktoré zjednodušujú správu dát.
Komponenty
Použil som znovupoužiteľné komponenty, ako napríklad AudioPreview
, SocialShare
a SubscribeCTA
.
Dynamické metaúdaje
Metaúdaje pre hudbu a články sa generujú dynamicky na základe obsahu.
8. Budúce plány
Ďalšie optimalizácie
Plánujem ďalšie vylepšenia výkonu a zlepšenie UX.
Nové funkcie
Chcem pridať viac interaktívnych prvkov a podporu pre viac hudobných platforiem.
Komunita
Snažím sa budovať aktívnu komunitu okolo DnB Doctor a podporovať začínajúcich producentov.
9. Bezpečnosť a ochrana údajov
HTTPS a SSL
Implementoval som SSL certifikát a HTTPS protokol pre bezpečnú komunikáciu medzi používateľom a serverom.
Ochrana formulárov
Pre ochranu pred spamom a automatizovanými útokmi som použil Cloudflare Turnstile, ktorý je menej invazívny ako tradičná CAPTCHA.
GDPR Compliance
Implementoval som komplexné GDPR riešenie vrátane správy cookies a možnosti exportu/vymazania používateľských údajov.
10. Technické detaily implementácie
Custom Hooks
Vytvoril som niekoľko vlastných hooks pre lepšiu organizáciu kódu:
useAudioPlayer
– pre správu prehrávania hudbyuseInfiniteScroll
– pre nekonečné načítavanie obsahuuseLocalStorage
– pre perzistentnú state management
State Management
Pre správu stavu aplikácie som použil kombináciu React Context API a SWR, čo umožňuje efektívnu prácu s dátami a ich automatickú synchronizáciu.
API Integrácie
Implementoval som vlastné API endpointy pre:
- Správu newslettera
- Spracovanie demo submisií
- Integráciu pre automatické odosielanie “Promo” skladieb pre špecifický list v newsletteri
- Celý newsletter je vlastný plugin v headless WordPress časti webu
- Odosielanie newslettera funguje cez Brevo SMTP
useEffect(() => {
const fetchTrackInfo = async () => {
try {
// Support both track and track_id parameters
const trackId = searchParams.get('track_id') || searchParams.get('track')
const token = searchParams.get('token')
if (!trackId) {
throw new Error('Missing track ID parameter. Use track_id or track in URL.')
}
const info = await feedbackApi.getTrackInfo(parseInt(trackId), token || undefined)
if (!info) {
throw new Error('Track information not found')
}
setTrackInfo(info)
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to load track information')
console.error('Feedback form error:', err)
} finally {
setLoading(false)
}
}
fetchTrackInfo()
}, [searchParams])
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault()
if (!trackInfo || rating === 0) return
const trackId = searchParams.get('track_id') || searchParams.get('track')
const token = searchParams.get('token')
if (!trackId) {
setError('Missing track ID')
return
}
try {
setSubmitting(true)
await feedbackApi.submitFeedback({
track_id: parseInt(trackId),
token: token || undefined,
rating,
feedback,
name
})
setSuccess(true)
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to submit feedback')
console.error('Feedback submission error:', err)
} finally {
setSubmitting(false)
}
}
11. Monitoring a analytika
Error Tracking
Implementoval som error tracking systém pre monitorovanie a rýchle riešenie problémov v produkcii.
Performance Monitoring
Používam Web Vitals a Lighthouse pre sledovanie výkonu a optimalizáciu používateľskej skúsenosti.
User Analytics
Kombinujem dáta z Google Analytics a Facebook Pixel pre lepšie pochopenie správania používateľov.
12. Automatizácia a CI/CD
Deployment Pipeline
Vytvoril som automatizovaný deployment pipeline s testovaním a kontrolou kvality kódu.
Content Management
Automatizoval som proces publikovania obsahu a jeho distribúcie cez sociálne siete.
14. Záver a ponaučenia
Hlavné výzvy
Najväčšie výzvy zahŕňali optimalizáciu výkonu, integráciu rôznych API a zabezpečenie konzistentného používateľského zážitku.
Ponaučenia
Projekt ma naučil dôležitosť:
- Dôkladného plánovania architektúry
- Pravidelného testovania a monitoringu
- Flexibilného prístupu k riešeniu problémov
Budúce vylepšenia
V budúcnosti plánujem:
- Implementovať AI-powered odporúčací systém
- Rozšíriť podporu pre viac streamovacích platforiem
- Vytvoriť mobilnú aplikáciu