Files
yellowjacket/frontend/index.html
T
yonluandClaude Opus 5 01bc5f2094 feat(jobs): surface background jobs with progress, logs and controls
Add a central job registry that library scans and search index builds
report into, so background work is visible instead of buried in the
settings page.

- backend/jobs: registry with per-job ring-buffer logs, capability-driven
  controls, and one coalesced JobsChanged snapshot at 4Hz
- pause survives restart via a job_state table; a paused scan is adopted
  back on launch and skipped by the soft scan
- top-bar indicator, popover, details drawer and a Jobs page replacing
  the config page's scan UI; per-library start/stop retained
- scan timing breakdown moves into the job log, Full rescan to the Jobs
  page; delete the orphaned library-manager component

Also add cmd/indexbuild and cmd/indexexport so the explore index can be
built once centrally rather than by every install, which today streams
~205GB from the ListenBrainz spark dump on first run. indexbuild picks
build/refresh/rebuild from index state; the Gitea workflow runs it on
push, weekly, or manually and publishes only when content changed.

fresh-install no longer defaults YJ_HOME under /tmp: it is tmpfs on most
distros, and the import needs ~6GB of real disk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 14:42:22 -04:00

49 lines
1.5 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<link href="./index.css" rel="stylesheet" />
<title>yellowjacket</title>
<script src="/index.ts" type="module"></script>
</head>
<body>
<header class="top-bar">
<hgroup>
<h1 class="title">YellowJacket</h1>
<h3 class="subtitle">Music how it was meant to bee.</h3>
</hgroup>
<div id="library-only-toggle" class="mode-toggle" title="Toggle Library Only mode">
<wa-icon name="globe" class="mode-icon mode-icon-globe"></wa-icon>
<div class="mode-toggle-track">
<div class="mode-toggle-thumb"></div>
</div>
<wa-icon name="hard-drive" class="mode-icon mode-icon-local"></wa-icon>
</div>
<library-filter></library-filter>
<search-bar></search-bar>
<job-indicator></job-indicator>
</header>
<div class="sidebar">
<app-sidebar></app-sidebar>
</div>
<div class="content-area">
<main class="main-panel" id="main-content">
<track-list></track-list>
</main>
<queue-panel id="queue-panel"></queue-panel>
</div>
<footer class="bottom-bar">
<now-playing></now-playing>
<audio-player></audio-player>
<button id="queue-button">
<wa-icon name="list"></wa-icon>
</button>
</footer>
<first-run-wizard></first-run-wizard>
</body>
</html>