Skip to content

Commit 385035a

Browse files
committed
Update README and demo documentation for clarity and consistency
- Revised README.md to enhance clarity on the docproc CLI functionality and its integration with the demo application. - Updated demo/docker-compose.yml to reflect the new naming convention for the demo ecosystem. - Adjusted demo/README.md to align with the new branding of "docproc // edu". - Modified frontend components to consistently use the updated branding in headers and PDF exports. This commit aims to improve the overall documentation and user experience by ensuring consistent terminology and clearer instructions.
1 parent 927588f commit 385035a

File tree

7 files changed

+41
-45
lines changed

7 files changed

+41
-45
lines changed

README.md

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,48 @@
11
# docproc
22

3-
**Document processor CLI** — File in, markdown out. High-accuracy extraction from PDF, DOCX, PPTX, XLSX using vision LLMs and optional LLM refinement. Multi-provider (OpenAI, Azure, Anthropic, Ollama, LiteLLM). Docproc is document processing only; assessment grading lives in the Go demo app.
3+
docproc turns documents into markdown. Give it a PDF, DOCX, PPTX, or XLSX; you get clean text and every image (equations, diagrams, labels) explained by a vision model. It’s CLI only. Works with OpenAI, Azure, Anthropic, Ollama, or LiteLLM.
44

5-
**Full-stack demo (Go + React)** — The study workspace (upload, RAG chat, notes, flashcards, assessments) lives in **[demo/](demo/)**. It is a separate Go application that uses LocalStack (S3), RabbitMQ, PostgreSQL + PgVector, and invokes the docproc CLI only when a document is uploaded or when grading an answer.
5+
The **docproc // edu** demo in [demo/](demo/) is a full study workspace: upload docs, chat over them, generate notes and flashcards, create and take assessments. That app is written in Go and calls this CLI when a document is uploaded; it does grading itself.
66

77
---
88

9-
## Features (CLI)
9+
## What the CLI does
1010

11-
- **Extract**`docproc --file input.pdf -o output.md`: native text + vision for every embedded image (equations, diagrams, labels).
12-
- **Vision** — PDFs: native text layer; embedded images → Azure AI Vision or vision LLM (OpenAI, Anthropic, Ollama).
13-
- **Refine** — Optional LLM pass: markdown, LaTeX math, boilerplate removed (`ingest.use_llm_refine`).
14-
- **Config**`docproc.yaml`: AI providers, ingest options; no server or database required for extract.
11+
**Extract.** `docproc --file input.pdf -o output.md` — Pulls text from the native layer and runs vision on every embedded image. Optional extra pass: tidy markdown, LaTeX math, strip boilerplate (see `ingest.use_llm_refine` in config).
1512

16-
## Quick Start (CLI only)
13+
**Config.** `docproc.yaml` holds AI providers and ingest options. No database or server needed for extract. Use `docproc init-config --env .env` once to generate a starter config from your `.env`.
14+
15+
## Quick start
1716

1817
```bash
1918
git clone https://github.com/rithulkamesh/docproc.git && cd docproc
2019
uv sync --python 3.12
2120

22-
# One-time: write ~/.config/docproc/docproc.yml from .env
23-
uv run docproc init-config --env .env
24-
25-
# Extract a document to markdown
21+
uv run docproc init-config --env .env # one-time
2622
uv run docproc --file input.pdf -o output.md
2723
```
2824

29-
## Demo (full stack)
25+
## Demo (docproc // edu)
3026

31-
See **[demo/README.md](demo/README.md)**. Run PostgreSQL, LocalStack, RabbitMQ via `docker compose`, then the Go API and worker; the React frontend in `demo/web/` talks to the Go app. Document processing is done by running the docproc CLI from the Go worker.
27+
See [demo/README.md](demo/README.md). From `demo/`, run `docker compose up -d` (stack name: **docproc-edu**). Then start the Go API and worker from `demo/go/`, and the React app from `demo/web/`. The worker runs the docproc CLI on each uploaded document.
3228

3329
## Configuration
3430

35-
Create `docproc.yaml` (or use `docproc init-config` to generate from `.env`). For extract and grade, only AI and ingest matter:
31+
Create `docproc.yaml` or generate from `.env` with `init-config`. For both the CLI and the demo, the bits that matter are AI providers and ingest:
3632

3733
```yaml
3834
ai_providers:
3935
- provider: openai # or azure, anthropic, ollama, litellm
4036
primary_ai: openai
4137

4238
ingest:
43-
use_vision: true # PDF: extract text + vision for images
44-
use_llm_refine: true # Clean markdown, LaTeX, remove boilerplate
39+
use_vision: true
40+
use_llm_refine: true
4541
```
4642
47-
Secrets from environment or `.env`. See [docs/CONFIGURATION.md](docs/CONFIGURATION.md).
43+
Secrets go in the environment or `.env`. Full schema: [docs/CONFIGURATION.md](docs/CONFIGURATION.md).
4844

49-
## Installation
45+
## Install
5046

5147
```bash
5248
uv tool install git+https://github.com/rithulkamesh/docproc.git
@@ -58,38 +54,36 @@ From source: `uv sync --python 3.12` then `uv run docproc --file input.pdf -o ou
5854
## Usage
5955

6056
- **Extract:** `docproc --file input.pdf -o output.md` (optional `--config path`, `-v`).
61-
- **Shell completions:** `docproc completions bash` or `docproc completions zsh`.
57+
- **Completions:** `docproc completions bash` or `docproc completions zsh`.
6258

63-
## Documentation
59+
## Docs
6460

6561
| Doc | Description |
6662
|-----|-------------|
67-
| [docs/README.md](docs/README.md) | Documentation index |
68-
| [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | Config schema, database options, AI providers, ingest, RAG |
69-
| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Pipeline flow, modules, CLI vs API |
70-
| [docs/AZURE_SETUP.md](docs/AZURE_SETUP.md) | Azure OpenAI + Azure AI Vision (Describe + Read), credentials |
71-
| [docs/ASSESSMENTS_AI.md](docs/ASSESSMENTS_AI.md) | AI-generated assessments, grading pipeline, question types |
72-
73-
## Environment
63+
| [docs/README.md](docs/README.md) | Index |
64+
| [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | Config schema, providers, ingest, RAG |
65+
| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Pipeline, CLI vs API |
66+
| [docs/AZURE_SETUP.md](docs/AZURE_SETUP.md) | Azure OpenAI and Vision setup |
67+
| [docs/ASSESSMENTS_AI.md](docs/ASSESSMENTS_AI.md) | Assessments and grading in the demo |
7468

75-
- `DOCPROC_CONFIG` — Path to config file (default: `docproc.yaml`).
76-
- Provider-specific: `OPENAI_API_KEY`, `AZURE_OPENAI_*`, `ANTHROPIC_API_KEY`, etc. See [.env.example](.env.example) and [docs/CONFIGURATION.md](docs/CONFIGURATION.md).
69+
**Environment:** `DOCPROC_CONFIG` for config path (default: `docproc.yaml`). Provider keys: `OPENAI_API_KEY`, `AZURE_OPENAI_*`, `ANTHROPIC_API_KEY`, etc. See [.env.example](.env.example).
7770

7871
## Contributing
7972

80-
Pull requests welcome. Ensure tests pass.
73+
Pull requests welcome. Run the tests before sending.
8174

8275
## License
8376

8477
MIT. See [LICENSE.md](LICENSE.md).
8578

86-
## Motivation
87-
I learn by asking questions. Not surface-level ones. The deep, obsessive "why"s that most materials never bother to answer. When my peers were studying from slides and PDFs, I sat there stuck. I couldn't absorb content I wasn't allowed to interrogate. Documents don't talk back. They don't explain the intuition, the connections, the *why*. Tools like NotebookLM couldn't help either: they don't understand images inside the data source, so those parts show up blank. Most of my slides were visual or text as screenshots. I was left with nothing.
79+
---
80+
81+
## Why I built this
8882

89-
So I built something for myself. A platform that extracts content from any document — slides, papers, textbooks — and lets me use AI to actually ask. *Why does this work? What's the reasoning here? How does this connect to that thing from last week?* It grew from "extract and query" into a full study environment: converse over the corpus, generate notes and flashcards, and create or take AI-generated assessments with automatic grading. For the first time, static documents became something I could learn from. Not by re-reading. By *conversing*, *noting*, and *testing*.
83+
I learn by asking questions. Not surface-level ones—the deep "why"s that most materials never answer. When my peers studied from slides and PDFs, I got stuck. I couldn’t absorb content I wasn’t allowed to interrogate. Documents don’t talk back. They don’t explain the intuition or the connections. Tools like NotebookLM didn’t help: they don’t understand images in the source, so those parts showed up blank. Most of my slides were visual or screenshots. I had nothing to work with.
9084

91-
I'm open-sourcing it because I'm probably not the only one who learns this way.
85+
So I built something for myself. A way to pull content out of any document—slides, papers, textbooks—and ask AI the questions I needed. *Why does this work? What’s the reasoning here? How does this connect to what we did last week?* It grew from "extract and query" into a full study environment: chat over the corpus, generate notes and flashcards, create and take assessments with automatic grading. For the first time I could learn from static documents by *conversing*, *noting*, and *testing*—not just re-reading.
9286

93-
## Contact
87+
I’m open-sourcing it because I’m probably not the only one who learns this way.
9488

9589
[hi@rithul.dev](mailto:hi@rithul.dev)

demo/README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# Docproc Demo (Go)
2-
1+
# docproc // edu
32

43
Full-stack demo: Go API + React frontend. Document processing is done by the **docproc** CLI (Python). This app handles uploads, storage (LocalStack S3), message queue (RabbitMQ), RAG (PgVector), and **assessment grading** (single-select, formula, conceptual, derivation) in Go.
54

demo/docker-compose.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
# Demo stack: PostgreSQL (pgvector), LocalStack (S3), RabbitMQ.
2-
# Run the Go app and worker separately (e.g. go run . and go run . --worker).
1+
# docproc // edu — pure demo ecosystem
2+
# PostgreSQL (pgvector), LocalStack (S3), RabbitMQ.
3+
# Run the Go API and worker from demo/go (e.g. go run . and go run . --worker).
4+
name: docproc-edu
5+
36
services:
47
postgres:
58
image: pgvector/pgvector:pg16

demo/web/WEB_APP_SPEC.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This document describes **every feature** of the `demo/web/` frontend in detail,
66

77
## 1. Product Overview
88

9-
- **Name / branding:** “docproc” (shown in header); product is “docproc / edu” in PDF exports.
9+
- **Name / branding:** “docproc // edu” (shown in header and PDF exports).
1010
- **Core value:** One workspace per **project**; each project has **documents** that are processed and indexed. All study features (chat, notes, flashcards, tests) are grounded in those documents.
1111
- **Primary user flow:** Create/select project → Add documents → Wait for processing → Use Converse (chat), Notes, Flashcards, or create/take Assessments. Sources canvas manages documents.
1212
- **No auth in app:** Assumes backend is configured (API base URL, optional namespace). Settings view shows API status only.
@@ -200,7 +200,7 @@ No sidebar document list in current layout; document selection is only within th
200200
- “+ Add section”, “Download PDF”.
201201
- List of note sections: each is textarea (auto-save debounced 600ms via `updateNote`); metadata: source filename, updated time; Saving…/Saved indicator.
202202
- “Add section” creates note with optional “Section for: {filename}” if a doc is selected.
203-
- **Download PDF:** jsPDF; header “docproc / edu”, “Project Notes”, project id and date; generated summary (if any) then each section with optional “Section N — {filename}”; filename `docproc-notes-{projectId}-{timestamp}.pdf`.
203+
- **Download PDF:** jsPDF; header “docproc // edu”, “Project Notes”, project id and date; generated summary (if any) then each section with optional “Section N — {filename}”; filename `docproc-notes-{projectId}-{timestamp}.pdf`.
204204

205205
**NotesModule** (used in StudyDock): Same concepts in a more compact layout for the dock; sections in a scrollable area with max-height.
206206

demo/web/src/components/NotesCanvas.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ export function NotesCanvas() {
182182
}
183183
}
184184

185-
addText('docproc / edu', 18, true)
185+
addText('docproc // edu', 18, true)
186186
y += 2
187187
addText('Project Notes', 12, true)
188188
y += lineHeight

demo/web/src/components/NotesModule.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ export function NotesModule({ documents, selectedDocumentId, projectId }: NotesM
166166
}
167167

168168
// Branding header
169-
addText('docproc / edu', 18, true)
169+
addText('docproc // edu', 18, true)
170170
y += 2
171171
addText('Project Notes', 12, true)
172172
y += lineHeight

demo/web/src/components/ProjectHeaderBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export function ProjectHeaderBar() {
4646
>
4747
<div className="header-brand">
4848
<Link to="/">
49-
<span className="header-brand-label">docproc</span>
49+
<span className="header-brand-label">docproc // edu</span>
5050
</Link>
5151
{editingName ? (
5252
<input

0 commit comments

Comments
 (0)