spotify-clone/frontend/app/layout.tsx
Khoa Vo dd788db786 feat: Add new logo, PWA service worker, and background audio support
- New modern audio wave 'A' logo (192x192 and 512x512 icons)
- PWA service worker for offline support and installability
- Wake Lock API for background audio on FiiO/Android devices
- Visibility change handling to prevent audio pause on screen off
- Updated manifest.json with music categories and proper PWA config
- Media Session API lock screen controls (already present)
- Renamed app to 'Audiophile Web Player'
2026-01-14 10:27:29 +07:00

64 lines
1.9 KiB
TypeScript

import type { Metadata } from "next";
import { Outfit } from "next/font/google";
import "./globals.css";
import Sidebar from "@/components/Sidebar";
import PlayerBar from "@/components/PlayerBar";
import MobileNav from "@/components/MobileNav";
import RightSidebar from "@/components/RightSidebar";
import { PlayerProvider } from "@/context/PlayerContext";
import { LibraryProvider } from "@/context/LibraryContext";
import ServiceWorkerRegistration from "@/components/ServiceWorkerRegistration";
const outfit = Outfit({
subsets: ["latin"],
variable: "--font-outfit",
weight: ["300", "400", "500", "600", "700"],
});
export const metadata: Metadata = {
title: "Audiophile Web Player",
description: "High-Fidelity Local-First Music Player",
manifest: "/manifest.json",
referrer: "no-referrer",
appleWebApp: {
capable: true,
statusBarStyle: "black-translucent",
title: "Audiophile Web Player",
},
other: {
"mobile-web-app-capable": "yes",
},
icons: {
icon: "/icons/icon-192x192.png",
apple: "/icons/icon-512x512.png",
},
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${outfit.variable} antialiased bg-black h-screen flex flex-col overflow-hidden text-white font-sans`}
>
<ServiceWorkerRegistration />
<PlayerProvider>
<LibraryProvider>
<div className="flex-1 flex overflow-hidden p-2 gap-2 mb-[64px] md:mb-0">
<Sidebar />
<main className="flex-1 bg-[#121212] rounded-lg overflow-y-auto relative no-scrollbar">
{children}
</main>
<RightSidebar />
</div>
<PlayerBar />
<MobileNav />
</LibraryProvider>
</PlayerProvider>
</body>
</html>
);
}