diff --git a/docs-site/docs/docker-quick-start.md b/docs-site/docs/docker-quick-start.md index d51d351..8a725f8 100644 --- a/docs-site/docs/docker-quick-start.md +++ b/docs-site/docs/docker-quick-start.md @@ -41,7 +41,6 @@ docker run --name openreader \ -p 3003:3003 \ -p 8333:8333 \ -v openreader_docstore:/app/docstore \ - -v /path/to/your/library:/app/docstore/library:ro \ -e API_BASE=http://host.docker.internal:8880/v1 \ -e API_KEY=none \ -e BASE_URL=http://localhost:3003 \ @@ -55,7 +54,6 @@ What this command enables: - `-p 3003:3003`: exposes the OpenReader web app/API. - `-p 8333:8333`: exposes embedded SeaweedFS S3 endpoint for direct browser presigned upload/download. - `-v openreader_docstore:/app/docstore`: persists SQLite metadata, SeaweedFS blob data, and migration/runtime state. -- `-v /path/to/your/library:/app/docstore/library:ro`: mounts a read-only importable library source. - `-e API_BASE=...` / `-e API_KEY=...`: **first-boot seed only.** On the first container start, these are auto-migrated into a `default-openai` admin shared provider stored in the DB (key encrypted at rest). After that, the running app no longer reads them — manage the provider from **Settings → Admin → Shared providers**. See [Admin Panel](./configure/admin-panel). - `-e BASE_URL=...` and `-e AUTH_SECRET=...`: required for v4+ auth/session startup. - `-e ADMIN_EMAILS=...`: (optional, requires auth) comma-separated emails auto-promoted to admin. Admins see the **Admin** tab in Settings. diff --git a/src/app/(app)/signin/page.tsx b/src/app/(app)/signin/page.tsx index 23ba379..fd46578 100644 --- a/src/app/(app)/signin/page.tsx +++ b/src/app/(app)/signin/page.tsx @@ -10,7 +10,7 @@ import { useFeatureFlag } from '@/contexts/RuntimeConfigContext'; import { showPrivacyModal } from '@/components/PrivacyModal'; import { GithubIcon } from '@/components/icons/Icons'; import { LoadingSpinner } from '@/components/Spinner'; -import { buttonClass } from '@/components/formPrimitives'; +import { buttonClass } from '@/components/ui/buttonPrimitives'; function SessionExpiredLoader({ setSessionExpired }: { setSessionExpired: (v: boolean) => void }) { const searchParams = useSearchParams(); diff --git a/src/app/(app)/signup/page.tsx b/src/app/(app)/signup/page.tsx index af55a28..9d9fbf1 100644 --- a/src/app/(app)/signup/page.tsx +++ b/src/app/(app)/signup/page.tsx @@ -9,7 +9,7 @@ import { useAuthConfig, useAuthRateLimit } from '@/contexts/AuthRateLimitContext import { useFeatureFlag } from '@/contexts/RuntimeConfigContext'; import { showPrivacyModal } from '@/components/PrivacyModal'; import { LoadingSpinner } from '@/components/Spinner'; -import { buttonClass } from '@/components/formPrimitives'; +import { buttonClass } from '@/components/ui/buttonPrimitives'; import toast from 'react-hot-toast'; export default function SignUpPage() { diff --git a/src/app/(public)/layout.tsx b/src/app/(public)/layout.tsx index 2d4ff21..7cc7024 100644 --- a/src/app/(public)/layout.tsx +++ b/src/app/(public)/layout.tsx @@ -1,338 +1,128 @@ import type { ReactNode } from 'react'; import Link from 'next/link'; import { getResolvedRuntimeConfigForRsc } from '@/lib/server/runtime-config-rsc'; +import { buttonClass } from '@/components/ui/buttonPrimitives'; +import './public.css'; export default async function PublicLayout({ children }: { children: ReactNode }) { const runtimeConfig = await getResolvedRuntimeConfigForRsc(); const enableUserSignups = runtimeConfig.enableUserSignups; return ( - <> - - -
- {/* ── Ambient orbs ────────────── */} -