diff --git a/src/base/components/Navbar/Navbar.tsx b/src/base/components/Navbar/Navbar.tsx
index cd236b1..9edfca3 100644
--- a/src/base/components/Navbar/Navbar.tsx
+++ b/src/base/components/Navbar/Navbar.tsx
@@ -14,6 +14,7 @@ import {
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { LanguageSelector } from './LanguageSelector';
+import { NowPlayingBadge } from './NowPlayingBadge';
import { PreferencesPanel } from './PreferencesPanel';
import { SITE_NAME } from '@/lib/site';
@@ -125,22 +126,28 @@ export const Navbar = () => {
})}
-
-
+
+
+
+
diff --git a/src/base/components/Navbar/NowPlayingBadge.tsx b/src/base/components/Navbar/NowPlayingBadge.tsx
new file mode 100644
index 0000000..b205570
--- /dev/null
+++ b/src/base/components/Navbar/NowPlayingBadge.tsx
@@ -0,0 +1,116 @@
+'use client';
+
+import Image from 'next/image';
+import Link from 'next/link';
+import { useState } from 'react';
+
+import useSWR from 'swr';
+
+import { LastfmTrack } from '@/types/Lastfm';
+
+type NowPlayingResponse = {
+ nowPlaying: LastfmTrack | null;
+};
+
+const jsonFetcher = (url: string) => fetch(url).then((r) => r.json());
+
+const NowPlayingArt = ({
+ track,
+ size,
+}: {
+ track: LastfmTrack;
+ size: number;
+}) => {
+ const [failed, setFailed] = useState(false);
+
+ if (!track.imageUrl || failed) {
+ return (
+
+ );
+ }
+
+ return (
+ setFailed(true)}
+ />
+ );
+};
+
+const LiveDot = ({ className = '' }: { className?: string }) => (
+
+);
+
+type NowPlayingBadgeProps = {
+ /** 'full' = capa + faixa + artista (desktop). 'compact' = só a capa (mobile). */
+ variant: 'full' | 'compact';
+};
+
+/**
+ * Selo "ouvindo agora" da navbar. Só renderiza algo quando há uma faixa
+ * tocando no momento — sem música, o componente não ocupa espaço nenhum.
+ */
+export const NowPlayingBadge = ({ variant }: NowPlayingBadgeProps) => {
+ const { data } = useSWR(
+ '/api/lastfm/now-playing',
+ jsonFetcher,
+ { revalidateOnFocus: false, refreshInterval: 60_000 },
+ );
+ const track = data?.nowPlaying;
+
+ if (!track) return null;
+
+ const href =
+ track.imageSource === 'spotify' && track.spotifyUrl
+ ? track.spotifyUrl
+ : track.url;
+
+ if (variant === 'compact') {
+ return (
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ {track.name}
+
+
+ {track.artist}
+
+
+
+
+ );
+};