# Slow Reader

A web-based reading tool that creates "meaningful friction" by automatically revealing text at an set pace, encouraging deeper engagement and preventing skimming.

## Features

- Text reveals automatically
- Spacebar to pause, but no fast-forward button. Escape to exit
- Gentle highlighting through text with past words dimmed
- Customizable base WPM speed
- Three modes: text, PDF, URL parsing

## Tech Stack

- **Backend**: Python with FastAPI, WebSockets for real-time text progression
- **Frontend**: Vue.js 3 with Vite
- **Text Processing**: NLTK
- **Package Management**: uv for Python dependencies
- **Text parsing**: Client-side parsing with `PDF.js`, URL content parsing with `readability-lxml`

## Quick Start

1. **Install dependencies**:
   ```bash
   # Backend dependencies (using uv)
   uv sync
   
   # Frontend dependencies
   cd frontend && npm install
   ```

2. **Start the application**:
   ```bash
   ./start.sh
   ```

3. **Open your browser**: Navigate to `http://localhost:3000`

## Manual Startup

If you prefer to run servers separately:

**Backend** (Terminal 1):
```bash
cd backend
uv run uvicorn main:app --reload --host 0.0.0.0 --port 8000
```

**Frontend** (Terminal 2):
```bash
cd frontend
npm run dev
```

## Usage

1. Paste or type your text into the input area
2. Adjust the base reading speed if desired (100-300 WPM)
3. Click "Start Reading" to begin your mindful reading session
4. Use **Spacebar** to pause/slow down when needed
5. Press **Escape** to exit reading mode at any time

## Development

- **Linting**: Run `uv run ruff check` for Python code linting
- **Format**: Run `uv run ruff format` for Python code formatting
- **API Documentation**: Visit `http://localhost:8000/docs` when backend is running

## Future Plans :)

- Browser extension
- Content-type specific pacing
- Reading analytics and progress tracking