style(landing): revise feature copy and docker instructions for clarity

Update landing page descriptions to emphasize native file rendering and
layout-aware parsing. Adjust Docker quick start instructions to remove
redundant volume mount and highlight required environment variables for
self-hosting.
This commit is contained in:
Richard R 2026-05-31 16:09:31 -06:00
parent 535d562a0b
commit 0b1e293638
2 changed files with 17 additions and 13 deletions

View file

@ -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.

View file

@ -91,9 +91,10 @@ export default async function LandingPage() {
<p className="public-hero-copy">
OpenReader turns EPUB, PDF, TXT, Markdown, and DOCX into a
synchronized read-along surface, with genuine text-to-speech,
word-level highlighting, and audiobook export. It&rsquo;s open
source, and entirely yours to self-host.
synchronized read-along surface, reading your original file in a
native viewer with genuine text-to-speech, word-level
highlighting, and audiobook export. It&rsquo;s open source, and
entirely yours to self-host.
</p>
<div className="public-actions">
@ -221,9 +222,9 @@ export default async function LandingPage() {
<span className="public-step-num">03</span>
<h3>Read, listen, export</h3>
<p>
Follow word-level highlighting as it plays, pick up where you
left off on any device, and export a chaptered m4b or mp3
audiobook for the road.
Follow word-level highlighting right on the original page as it
plays, pick up where you left off on any device, and export a
chaptered m4b or mp3 audiobook for the road.
</p>
</li>
</ol>
@ -240,12 +241,14 @@ export default async function LandingPage() {
<div className="public-features">
<article className="public-feature public-feature-wide">
<span className="public-feature-kicker">Parsing</span>
<h3>Layout-aware PDF understanding</h3>
<span className="public-feature-kicker">Formats</span>
<h3>Native EPUB and PDF, kept intact</h3>
<p>
PP-DocLayoutV3 (ONNX) detects structured blocks, stitches
content across pages, and aligns highlights to real geometry,
so even dense, multi-column PDFs read in the right order.
Your file renders in a built-in EPUB and PDF reader, never
flattened to plain text. Layout-aware parsing (PP-DocLayoutV3,
ONNX) maps the structure underneath, so read-along highlighting
follows the true reading order, even in dense, multi-column
PDFs.
</p>
</article>
@ -346,10 +349,13 @@ export default async function LandingPage() {
<span className="public-term-prompt">$</span> docker run --name openreader \{'\n'}
{' '}-p <span className="public-term-accent">3003:3003</span> -p{' '}
<span className="public-term-accent">8333:8333</span> \{'\n'}
{' '}-v <span className="public-term-accent">openreader_docstore:/app/docstore</span> \{'\n'}
{' '}-e BASE_URL=
<span className="public-term-accent">http://localhost:3003</span> \{'\n'}
{' '}-e AUTH_SECRET=
<span className="public-term-accent">$(openssl rand -hex 32)</span> \{'\n'}
{' '}-e ADMIN_EMAILS=
<span className="public-term-accent">you@example.com</span> \{'\n'}
{' '}ghcr.io/richardr1126/openreader:latest{'\n'}
{'\n'}
<span className="public-term-comment"># open the reading room</span>