Files
clicktrack/app/layout.tsx
AJ Avezzano 5b772655c6 feat: initial scaffold for ClickTrack monorepo
Full self-hosted click track generator for cover bands.

Core technical pieces implemented:
- CTP (Click Track Protocol) TypeScript schema, Zod validator, and WAV
  renderer (44.1 kHz, 16-bit PCM, accented downbeats, ramp sections)
- MusicBrainz API client with 1 req/s rate limiting
- PostgreSQL schema (songs, tempo_maps, registry_sync_log) with triggers
- Git registry sync logic (clone/pull → validate CTP → upsert DB)
- Next.js 14 App Router: search page, track page, API routes
  (/api/songs, /api/tracks, /api/generate)
- UI components: SearchBar, SongResult, TempoMapEditor, ClickTrackPlayer
  (Web Audio API in-browser playback + WAV download)
- Docker Compose stack: app + postgres + redis + nginx + registry-sync
- Multi-stage Dockerfile with standalone Next.js output
- .env.example documenting all configuration variables
- README with setup instructions, CTP format spec, and API reference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:14:46 -04:00

49 lines
1.7 KiB
TypeScript

import type { Metadata } from "next";
import "./globals.css";
export const metadata: Metadata = {
title: {
default: process.env.NEXT_PUBLIC_APP_NAME ?? "ClickTrack",
template: `%s | ${process.env.NEXT_PUBLIC_APP_NAME ?? "ClickTrack"}`,
},
description:
"Self-hosted click track generator for cover bands. Search songs, view community tempo maps, and download metronomic WAV files.",
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body className="min-h-screen bg-zinc-950 text-zinc-100 antialiased">
<header className="border-b border-zinc-800 px-6 py-4">
<div className="mx-auto flex max-w-4xl items-center justify-between">
<a href="/" className="text-xl font-bold tracking-tight text-green-400">
{process.env.NEXT_PUBLIC_APP_NAME ?? "ClickTrack"}
</a>
<nav className="flex gap-6 text-sm text-zinc-400">
<a href="/" className="hover:text-zinc-100 transition-colors">
Search
</a>
<a
href="https://github.com/your-org/clicktrack"
target="_blank"
rel="noopener noreferrer"
className="hover:text-zinc-100 transition-colors"
>
GitHub
</a>
</nav>
</div>
</header>
<main className="mx-auto max-w-4xl px-6 py-10">{children}</main>
<footer className="border-t border-zinc-800 px-6 py-6 text-center text-xs text-zinc-600">
ClickTrack open source, self-hosted. Tempo data from the community registry.
</footer>
</body>
</html>
);
}