Online browser + post detail: SPA talks to e621 directly

Backend:
- POST /api/files/lookup/ reports which MD5s are already in the library

Frontend:
- e621 client extended with post/tag/favorite types and helpers: post
  search, post detail, batch posts by id, tag autocomplete, toggle
  favorite
- /online: tag search with autocomplete, post grid with rating colors
  and in-library badges, numbered pagination, page tag cloud, blacklist
  panel and filtered counts from /users/me.json, anonymous hint
- /online/view/🆔 media viewer (sample or original, video support),
  taxonomy-colored tags by category, specs sheet, favorite/unfavorite,
  description, sources, pools and parent/children thumbnails
- Shared CollapsibleSidebar extracted from the library page; Online
  added to the nav, command palette and sidebar toggle
This commit is contained in:
2026-09-17 09:00:17 -05:00
parent b6409523e6
commit 04448bf615
14 changed files with 1273 additions and 41 deletions
+4
View File
@@ -8,6 +8,8 @@ import LoginPage from "@/features/auth/LoginPage";
import RegisterPage from "@/features/auth/RegisterPage";
import FileDetailPage from "@/features/library/FileDetailPage";
import LibraryPage from "@/features/library/LibraryPage";
import OnlineDetailPage from "@/features/online/OnlineDetailPage";
import OnlinePage from "@/features/online/OnlinePage";
import UploadPage from "@/features/upload/UploadPage";
import { useAuth } from "@/store/auth";
@@ -37,6 +39,8 @@ export default function App() {
<Route element={<AppShell />}>
<Route path="/" element={<LibraryPage />} />
<Route path="/view/:md5" element={<FileDetailPage />} />
<Route path="/online" element={<OnlinePage />} />
<Route path="/online/view/:id" element={<OnlineDetailPage />} />
<Route
path="/upload"
element={