Skip to main content
Tillbaka

Changelog

v2.20.0

Alla uppdateringar och förbättringar av Kaponi Live webbplatsen

26 april 20261 månader sedan
v2.20.0

Codebase Hardening & Consolidation

Dependency Upgrades

  • Next.js 16.1.6 → 16.2.4 + @next/third-parties matched
  • React + React DOM 19.2.4 → 19.2.5
  • Framer Motion → Motion (rebrand, same 12.38.0; imports now use motion/react)
  • Tailwind CSS + @tailwindcss/postcss 4.2.2 → 4.2.4
  • Biome 2.3.13 → 2.4.13, Playwright 1.58 → 1.59, postcss 8.5.8 → 8.5.10
  • lenis 1.1.6 → 1.3.23, resend 6.8 → 6.12.2
  • @types/node 20 → 22 (matches Node 22 runtime)
  • Removed unused deps: @formspree/react, react-intersection-observer, @types/sharp (sharp ships its own types now)

Dead Code & Asset Cleanup

  • Deleted Layout.tsx (was a duplicate of AppShell)
  • Removed unused components: burger/, header/, curtain/, image-marquee/, text-marquee/
  • Trimmed 7 unused exports from lib/partners.ts (getPartnersByType, getBijeloDugmeMembers, getAllCountries, getActors, getShows, getMemorialPartners, isMemorial)
  • Purged WSL :Zone.Identifier artifacts from public/images
  • Net diff for the pass: −1,677 lines (658 added, 2,335 removed)

Shared Helpers (Consolidation)

  • New lib/seo.ts with SITE_URL, SITE_BRAND, ORGANIZATION_ID, ogLocaleFor, alternatesFor — replaces hardcoded "https://kaponi.se" strings in metadata + JSON-LD
  • New lib/og-image.tsx with renderSiteOg() and renderEventOg(event) — collapses 4 near-identical OG/Twitter image routes (190–280 lines each) into 10-line shims
  • New lib/calendar.ts with buildGoogleCalendarUrl(...) — replaces inline string-concat blobs in event page client

Accessibility Polish

  • Added type="button" to 12+ buttons across modal, navbar, theme toggle, view toggle, language switcher, FAQ, partners filter
  • aria-hidden="true" on decorative SVGs throughout (logo, modal close, error icon, social icons)
  • Footer social links: <ul><li> structure with screen-reader labels (replaced role="list"/role="listitem" pattern)
  • Renamed shadowed Error component to ErrorPage; added keyboard focus handlers (was mouse-only)
  • Fixed CSS specificity ordering on footer hover states; removed duplicate display rule in burger CSS

SEO & AEO Refinements

  • Sitemap lastModified bumped to 2026-04-24
  • robots.txt now enumerates 11 AI crawlers — added ChatGPT-User, Perplexity-User, Google-Extended, ClaudeBot, anthropic-ai, Applebot-Extended, CCBot
  • Sitemap exports host directive
  • Homepage MusicEvent JSON-LD references ORGANIZATION_ID, omits empty offers, adds addressCountry: "SE"
  • Dropped stale validFrom: "2026-01-01" placeholder from event offers

Tooling & Lint

  • New biome.json scopes checks (excludes .next, kaponi-old-site, scripts/, visual-audit/screenshots)
  • Formatter disabled inside biome check to avoid churn — still runnable on demand via pnpm format
  • Disabled opinionated rules clashing with intentional patterns (JSON-LD index keys, progressive-enhancement min-height: 100vh/100dvh, tab-pattern buttons)
  • parseInt now passes radix in /api/contact payload size guard
  • String concatenations replaced with template literals where flagged

Testing

  • New tests/events.test.ts (node:test, zero extra deps): 14 cases
  • Covers formatEventDate (all 3 locales + fallback + empty + weekday math)
  • Covers getDaysUntilEvent (past/future), getEventUrgency (manual badge priority, 30-day window, past, far-future)
  • Covers buildGoogleCalendarUrl encoding + optional details
  • pnpm test script wired up: node --test --import tsx tests/**/*.test.ts
20 april 20261 månader sedan
v2.19.0

Jala Brat & Buba Corelli GOAT Tour Event + UX

New Event: Jala Brat & Buba Corelli GOAT Tour

  • Helsingborg, 31 oktober 2026 at HBG Arena
  • Square-cropped tour poster with age restriction note
  • Updated to public ticket URL on the official event page
  • Title later expanded to the full tour name for brand consistency

/jalabuba Vanity Short Link

  • /jalabuba and /jala-buba 308-redirect to the event detail page
  • Redirect respects the visitor's preferred locale (sv/en/bs) via proxy middleware
  • Lets us share a memorable link in physical promo and Stories

presentedBy Label

  • New optional Event.presentedBy field (string | LocalizedString)
  • Renders as a small accent-colored pill above the artist name on event cards and detail pages
  • Used to split the long Jala/Buba tour title cleanly ("MUSIC WEEK PRESENTS")
  • Hidden in horizontal list variant of the card to keep that layout compact

Ticket Copy Cleanup

  • Dropped Tickster vendor name from ticket copy — phrasing is now vendor-agnostic
  • Updated across sv/en/bs translations so future ticket providers swap in cleanly
9 april 20262 månader sedan
v2.18.1

Balkan Afterparty Event + Praktisk Info Refactor

New Event: Balkan Afterparty

  • Helsingborg, 2 maj 2026 at The Tivoli
  • Afterparty paired with the Aleksandra Prijović concert earlier that night
  • WebP poster + blur placeholder, Google Maps link, full 3-locale descriptions
  • Door times and ticket URL added (Tivoli doors ~23:30)

Praktisk Info Section

  • New practicalInfo field on Event type lets each event override the generic "doors open" text
  • Aleksandra: Doors 19:00, concert 21:00
  • Afterparty: Doors ca 23:30
  • Section width and padding aligned with the content area; background image toned down for readability

Event List Polishing

  • Reordered: Aleksandra first, Afterparty second (chronological match for the same night)
  • Tickster importer now matches events by URL, not artist name — eliminates duplicate afterparty rendering
  • Removed past Senidah events (Stockholm Apr 3, Malmö Apr 4, Göteborg Apr 5) as they passed

Build Stability

  • Removed auto Tickster scrape from `next build` so the build no longer fails on Tickster outages
  • Manual `pnpm update-events` preserves curated event metadata when refreshing from Tickster
4 april 20262 månader sedan
v2.18.0

Post-Concert Cleanup, SEO/AEO Hardening & UX Fixes

Event Updates

  • Removed past Senidah Stockholm (Fållan, Apr 3) event
  • Göteborg event: added full trilingual descriptions (sv/en/bs), mapsUrl, ticketInfo, ticketTip
  • Fixed artist diacritics: "Adi Sose" → "Adi Šoše" for Göteborg event
  • Build script now preserves manually curated event data instead of overwriting on Tickster sync

Partners (Temporarily Hidden)

  • Partners section hidden from homepage, navbar, header, and footer
  • Partner pages removed from sitemap until images and full info are ready
  • Partner routes still functional but not linked — will re-enable later

SEO & AEO Fixes

  • Fixed founding date inconsistency in schema (1985 → 1983) on partners page
  • Fixed changelog canonical URL to be locale-aware (/sv/changelog)
  • Added dns-prefetch for Tickster and Google Maps domains
  • Removed unused NEXT_PUBLIC_CMS_API_TOKEN env variable from config
  • Cleaned up stale deploy timestamp comments from next.config

Accessibility & i18n

  • Theme toggle aria-label now uses i18n translations (sv/en/bs) instead of hardcoded Swedish
  • Added nav.switchToLight and nav.switchToDark translation keys for all locales

Code Quality

  • Fixed rate limit memory leak in contact API (cleanup when >100 entries)
  • Removed unused PartnersIcon export from NavIcons
  • Removed unused trackExternalLink function from analytics
21 mars 20262 månader sedan
v2.17.0

Partner Pages Cinematic Upgrade & SEO/AEO Overhaul

Cinematic Hero Experience

  • New full-bleed cinematic hero backgrounds for partner pages (heroEnvironment field)
  • Film-grade gradient overlay with depth parallax on hover
  • Cinematic mode with white text on dark overlay, glassmorphism genre tags
  • Responsive cinematic hero for all breakpoints

AEO - Answer Engine Optimization

  • New shortBio field for factual AI-citable answer capsules per partner
  • Answer capsule section rendered at top of partner pages (speakable schema)
  • Created /llms.txt for AI crawler discovery (ChatGPT, Perplexity, Claude)
  • Explicitly allowed GPTBot, PerplexityBot, GoogleOther, Claude-Web in robots.txt
  • Smart meta descriptions that break at sentence boundaries instead of mid-word

Enriched Schema Markup (SEO)

  • Added knowsAbout, hasOccupation, memberOf (Kaponi Live) to JSON-LD
  • Added performerIn linking events to artist schema
  • Added speakable specification for voice assistants and AI citation
  • Added birthDate/deathDate for memorial partners
  • Extended sameAs with Apple Music, Wikipedia, MusicBrainz support
  • Custom OG images per partner (1200x630 social cards)

Spotify Integration

  • Embedded Spotify player section on partner pages (spotifyArtistId field)
  • Premium styled player with shadow and rounded corners
  • Lazy-loaded iframe for performance

Cinematic Quote Break

  • New artistQuote field for featured quotes from partners
  • Full-width atmospheric section with cinematic background overlay
  • Large decorative quotation marks with author attribution
  • Responsive typography scaling

Data Model Extensions

  • Added shortBio (LocalizedString) - AEO answer capsule
  • Added heroEnvironment (string) - cinematic hero background path
  • Added ogImage (string) - custom social sharing card per partner
  • Added artistQuote (LocalizedString) - cinematic quote break
  • Added spotifyArtistId (string) - embedded Spotify player
  • Added appleMusicUrl, wikipediaUrl, musicbrainzId to SocialLinks
  • All 11 partners populated with shortBio and spotifyArtistId
  • Dino Merlin and Zdravko Colic have artistQuote examples

Custom 404 Page

  • Branded not-found page with glassmorphism design
  • Multi-language support (sv/en/bs) with auto-detection from URL
  • Large 404 display with Clash Display font
  • CTA buttons to Events and Partners pages
  • Back navigation button
  • Fade-in animations

Critical SEO Fixes

  • Added partner pages to sitemap (was completely missing - 11 partners x 3 locales = 33 URLs)
  • Added events listing page to sitemap
  • Added contact page to sitemap
  • Updated sitemap lastModified dates
  • Featured partners get higher sitemap priority (0.85 vs 0.7)
  • Added Organization + Breadcrumb schema to partners listing page
  • Added MusicEvent schema for upcoming events on homepage (drives Google event carousels)

RSS Feed & Image Optimization

  • Created /feed.xml RSS feed for all upcoming events
  • Added RSS feed link tag to layout head
  • Enabled AVIF image format in next.config (smaller files, better quality)
  • Optimized device/image sizes for responsive delivery
  • Added dns-prefetch for Spotify embeds
  • Added proper Content-Type headers for llms.txt
22 januari 20264 månader sedan
v2.16.0

Contact Form & Footer Improvements

Contact Form with Resend

  • Replaced Formspree with Resend for email delivery
  • Created reusable ContactForm component used on both contact page and homepage
  • New API route (/api/contact) with proper TypeScript types
  • Professional HTML email template with Swedish text
  • Reply-to set to sender's email for easy responses

Footer Light Mode Fix

  • Footer now has dark background in both themes (matching navbar)
  • White logo visible on dark background in light mode
  • Consistent premium dark aesthetic across all themes
  • All text colors adjusted for dark background

Events Grid Placeholder

  • Placeholder card now renders inside grid (flows with event cards)
  • Responsive: shows on 3-col when needed, hides on 2-col when even count
  • Compact circular social buttons with platform-specific hover colors
  • Instagram gradient, Facebook blue, TikTok black with cyan glow
  • Generic "Coming soon" text (sv/en/bs) instead of specific date

TypeScript & React 19

  • Added proper TypeScript interfaces for API routes
  • React 19 compatible JSX imports
  • Lazy Resend initialization to avoid build-time errors
22 januari 20264 månader sedan
v2.15.0

Navigation & Contact Page

Simplified Navigation

  • Navbar now has 3 main links: Hem, Konserter, Kontakt
  • All nav items are now page links (no scroll-to-section)
  • Added Home icon for homepage link
  • Translations for all 3 locales (sv/en/bs)

Dedicated Contact Page

  • New /contact page with professional layout
  • Contact info cards (email, phone) with hover effects
  • Social media links (Instagram, Facebook, TikTok)
  • Contact form with Formspree integration
  • Full SEO metadata and ContactPage schema
  • Light/dark mode support

Layout Architecture

  • Created AppShell component for persistent navbar/footer
  • Navbar and footer now in root layout (no re-rendering on navigation)
  • Smoother page transitions without layout flashing
  • Removed redundant Layout wrapper from all pages

Events Page Polish

  • Redesigned view toggle (Kort/Lista) with minimal pill style
  • List view date now subtle text instead of colored pill
  • Cleaner, more custom-fitted controls
21 januari 20264 månader sedan
v2.14.0

URL Routing, Event Page Redesign & SEO

URL-based Locale Routing

  • Migrated from localStorage to URL-based routing (/sv/, /en/, /bs/)
  • Proxy middleware for automatic locale detection and redirects
  • LocaleLink component for seamless locale-aware navigation
  • hreflang metadata and sitemap alternates for SEO
  • Backward compatibility: /event/123 redirects to /sv/event/123

Event Page Redesign

  • Premium "Praktisk information" section with animated gradient orbs
  • Interactive info cards: Location (Maps), Date (Calendar), Age (Modal)
  • Replaced accordion with clean inline tabs (Om eventet, Biljetter)
  • Frosted glass card effects with hover animations
  • Calendar integration: click date to add to Google Calendar
  • Maps integration: click venue to open in Google Maps

UI Modernization

  • Squircle corners throughout (softer than pills)
  • New CSS radius variables (--radius-xs through --radius-full)
  • Navbar redesign: underline style, dividers between items
  • Consistent radius values across all components

Light Mode Improvements

  • Dark navbar always (better contrast)
  • Dark footer with inverted logo
  • Event page praktisk info cards work in both themes
  • Contact form TextArea light mode styles

Analytics & Performance

  • Added Vercel Analytics (privacy-friendly, no cookies)
  • Scroll to top on event page mount
  • Smooth scroll before card navigation

Localized Content

  • Event dates now fully localized (sv/en/bs formats)
  • Unique event descriptions per venue (Stockholm, Malmö, Göteborg)
  • Simplified language across all translations
  • Denis-style copywriting: direct, humble, no marketing fluff

SEO Fixes

  • Sitemap: meaningful lastModified dates
  • Added sizes attribute to images for responsive loading
  • Changelog page: proper layout with SEO metadata
  • Organization schema: added telephone field
  • MusicEvent offers: AggregateOffer with price range (395-895 SEK)
20 januari 20264 månader sedan
v2.13.0

Scroll Animations & Image Fixes

Scroll Text Fill Animation

  • Restored scroll-triggered text fill effect on section titles
  • Now uses framer-motion useScroll for cross-browser support
  • Works in all browsers (Chrome, Safari, Firefox, Edge)
  • Text fills in as you scroll down, unfills when scrolling back up
  • Smooth spring-based animation with configurable viewport thresholds

Event Card Images

  • Fixed gray gap between card image and content section
  • Images now use height: 100% with object-fit: cover
  • Ensures images fill container fully regardless of aspect ratio

Performance

  • Removed expensive SVG goo filters for better scroll performance
19 januari 20264 månader sedan
v2.12.0

Next.js 16.1.3 & Inline CSS

Framework Upgrade

  • Upgraded Next.js from 16.1.1 to 16.1.3
  • Includes security fixes and Turbopack improvements
  • Better file system caching for faster builds

Render-Blocking CSS Fix

  • Enabled experimental inlineCss feature
  • CSS now inlined in <style> tags instead of <link> tags
  • Eliminated 580ms render-blocking CSS requests
  • LCP improved from 4.4s to 2.9s (-34%)
  • Speed Index improved from 16.5s to 1.2s (-93%)
19 januari 20264 månader sedan
v2.11.0

Aggressive Image Compression

Source Image Compression

  • Hero background: 56KB → 49KB (quality 35)
  • Showcase image: 118KB → 54KB (54% smaller, resized to 1000px)

Next.js Image Optimization

  • Reduced default image quality from 75 to 60
  • Applies to all images served via /_next/image
19 januari 20264 månader sedan
v2.10.0

Hydration & Image Optimization

Hydration Error Fix

  • Fixed React error #418 (text content mismatch)
  • Urgency badges now calculate client-side only
  • Prevents time-based hydration mismatches between server/client

Further Image Compression

  • Showcase image: 237KB → 118KB (50% smaller)
  • Hero background: 64KB → 56KB (additional 12% savings)
  • Reduced quality to 45 without visible degradation
19 januari 20264 månader sedan
v2.9.0

Performance & Bundle Optimization

Image Optimization

  • Resized event images from 1080x1080 to 700x700 (55% smaller files)
  • Converted AVIF images to WebP for better compatibility
  • Compressed hero background from 96KB to 64KB (33% savings)
  • Converted showcase image from JPG to optimized WebP

JavaScript Bundle

  • Added browserslist targeting only modern browsers (last 2 versions)
  • Eliminates polyfills for Array.at, Object.fromEntries, etc.
  • Estimated 14KB savings in legacy JavaScript

CSS Optimization

  • Enabled experimental optimizeCss with critters
  • Critical CSS inlining reduces render-blocking time
19 januari 20264 månader sedan
v2.8.0

Accessibility & Contrast Fixes

WCAG Contrast Compliance

  • Fixed hero "Köp biljetter" button: dark text on peach background (4.5:1+)
  • Fixed footer nav titles: upgraded from tertiary to secondary text color
  • Fixed footer copyright: improved contrast for readability
  • Fixed Facebook button: darkened background for better white text contrast

Screen Reader Accessibility

  • Added aria-labels to all navbar links (visible when labels hidden on mobile)
  • Icon-only navigation now has discernible names for assistive technology
19 januari 20264 månader sedan
v2.7.0

LCP Element Render Delay Fix

Critical LCP Fix

  • Identified hero subtitle as LCP element (not the image)
  • Removed Framer Motion animations causing 2.6s render delay
  • Converted to CSS-only slide animation (transform only, no opacity)
  • Text now visible immediately in DOM for faster LCP

Image Size Optimization

  • Fixed featured image: added sizes="120px" (was loading 1080x1080)
  • Reduced event card dimensions from 800x1000 to 400x500
  • Updated sizes attribute for accurate responsive loading
19 januari 20264 månader sedan
v2.6.0

PageSpeed Insights Optimization

LCP Optimization

  • Converted hero image from JPEG (153KB) to WebP (96KB)
  • Added preload hint for hero image in document head
  • Added sizes attribute for responsive image loading

FCP Optimization

  • Fixed Author-Semibold font missing display: swap
  • Added preconnect hints for GTM and Meta Pixel domains
  • Added dns-prefetch for Google Analytics
  • Deferred Lenis smooth scroll via dynamic import

Image Compression

  • Compressed about.webp from 2.9MB to 75KB (97% smaller)
  • Added lazy loading and sizes to below-fold images
19 januari 20264 månader sedan
v2.5.0

Modal & Image Performance Fixes

Modal Stability

  • Fixed AgeRestrictionModal event listener churn with useCallback
  • CookieConsent now uses createPortal for proper isolation
  • Consolidated dual AnimatePresence into single with mode="wait"
  • Eliminated modal blinking on rapid open/close

Image Layout Stability

  • Removed style override that caused EventImage dimension conflicts
  • Added aspect-ratio: 4/5 to imageContainer matching 800:1000 ratio
  • Fixed imageFallback aspect-ratio mismatch (was 1, now 4/5)
  • Eliminated layout shift when switching between image states
19 januari 20264 månader sedan
v2.4.0

React Compiler & Performance

React Compiler

  • Enabled React Compiler for automatic memoization
  • Improved rendering performance across all components
  • Fixed modal blinking issues on event cards
  • Reduced unnecessary re-renders throughout the app
19 januari 20264 månader sedan
v2.3.0

Analytics & GDPR Cookie Consent

GDPR Cookie Consent

  • Added GDPR-compliant cookie consent banner for EU/Sweden
  • Frosted glass effect with elegant backdrop blur
  • X button in top right corner to dismiss
  • "Read more" link opens detailed cookie info modal
  • Modal explains essential, analytics, and marketing cookies
  • Banner appears after 300px scroll or 4 seconds delay
  • User preference saved in localStorage
  • Translations in Swedish, English, and Bosnian
  • Analytics only load after user accepts cookies

Google Tag Manager

  • Integrated GTM using @next/third-parties for optimal performance
  • Server-side rendering compatible implementation
  • Consent-aware loading respects user privacy choices

Meta Pixel (Facebook)

  • Added Meta Pixel for conversion tracking
  • PageView tracking on all pages
  • InitiateCheckout event on "Buy Tickets" clicks
  • Lead event on newsletter signups
  • Contact event on form submissions

Custom Event Tracking

  • Created analytics utility library (lib/analytics.ts)
  • Buy Tickets clicks tracked with artist/venue/date data
  • Event page views tracked with ViewContent event
  • Newsletter signups tracked as Lead conversions
  • Contact form submissions tracked
  • Social media clicks tracked (Instagram, Facebook, TikTok)
  • Age restriction modal views tracked
  • Language changes tracked
  • Cookie consent responses tracked
18 januari 20264 månader sedan
v2.2.0

Event Cards & Navigation Improvements

Event Cards

  • Entire event card is now clickable to navigate to event details
  • Added keyboard accessibility (Enter/Space to activate)
  • Buy ticket button works independently without navigating
  • Age restriction modal button works independently

Header & Navigation

  • Added language switcher to header on all pages
  • Navigation links now work from event pages back to homepage sections
  • Fixed cross-page navigation using absolute paths

Social Media & SEO

  • Added TikTok social link in footer
  • Improved hero image alt text for accessibility
  • Added Organization, WebSite, and FAQPage JSON-LD schemas
  • Added hreflang language alternates for international SEO
  • Created browserconfig.xml for Windows tiles
17 januari 20264 månader sedan
v2.1.0

Single Event Page - Translations & Accessibility

Full Translation Support

  • All 18 hardcoded Swedish text strings now translated
  • Date formatting uses correct locale (sv, en, bs)
  • Back link, headings, buttons all translated
  • Dynamic event descriptions with artist/venue/city

Accessibility Improvements

  • Focus indicators for keyboard navigation on all interactive elements
  • Screen reader support with aria-hidden on decorative icons
  • Touch targets increased to minimum 44px height
  • Color contrast improved for venue and date text
  • Better image alt text: "{Artist} concert at {Venue} in {City}"

SEO Enhancements

  • Enhanced JSON-LD schema with @id, endDate, eventStatus
  • Added BreadcrumbList schema (Home > Concerts > Event)
  • Open Graph URL property for better social sharing

Mobile Navigation

  • Simplified mobile menu to 2 items (Events, Contact)
  • Changed to elegant 8px rounded corners (from pill shape)
  • More compact padding for cleaner look
15 januari 20264 månader sedan
v2.0.0

Multi-Language Support Launch

i18n Implementation

  • Full website available in Swedish, English, and Bosnian
  • Language switcher with country flags in navigation
  • User language preference saved and remembered
  • Instant switching without page reload

Single Event Pages

  • Individual pages for each concert at /event/[id]
  • Rich event details with artist, venue, city, date
  • Large hero image with professional imagery
  • Direct ticket purchase button linking to Tickster
  • Age restriction modal with clear information
10 januari 20265 månader sedan
v1.5.0

Premium Design System & Components

Navigation & Header

  • Glass-morphism floating navbar with blur effect
  • Smooth animations and transitions when scrolling
  • Mobile-optimized icon-based navigation
  • Active state indicators for current section
  • Dark/Light theme toggle with preference saving

Homepage Sections

  • Animated hero with countdown to next concert
  • Event cards with urgency badges (Selling Fast, Few Left)
  • Experience section showcasing brand values
  • Accordion-style FAQ section
  • Newsletter signup with Formspree integration
  • Contact form with validation

Design System

  • Clash Display for headlines
  • Satoshi for body text
  • General Sans for UI elements
  • Peach Fuzz accent color (Pantone 2024 inspired)
  • Premium shadows and glass morphism effects
5 januari 20265 månader sedan
v1.0.0

Technical Foundation

Performance

  • Static Site Generation (SSG) for fast loading
  • Next.js automatic image optimization
  • Code splitting for minimal JavaScript
  • Lenis library for smooth scrolling

SEO Optimization

  • Meta tags for title, description, keywords
  • Open Graph for social media previews
  • Twitter Cards optimization
  • Automatic sitemap generation
  • robots.txt configuration

Accessibility (WCAG)

  • Visible focus indicators for keyboard navigation
  • ARIA labels for screen reader support
  • Minimum 44px touch targets for mobile
  • Reduced motion support for user preferences
  • Proper color contrast throughout
20 december 20255 månader sedan
v0.1.0

Initial Website Rebuild

Complete Rebuild

  • Migrated from legacy site to Next.js 16
  • React 19 with TypeScript
  • Framer Motion for professional animations
  • Tailwind CSS utilities with CSS Modules
  • Formspree for form handling
  • Lucide React icon library

Responsive Design

  • Mobile-first approach
  • Optimized layouts for tablets
  • Full desktop experience

Kaponi Live - Balkan konserter i Skandinavien sedan 1983