redhead/README.md

136 lines
3.1 KiB
Markdown

# Red Head
A web application that displays Reddit posts from an archive.
## Project Structure
```
.
├── Dockerfile # Docker configuration for the Python backend
├── docker-compose.yml # Docker Compose configuration
├── .gitignore # Git ignore rules
├── README.md # This file
├── src/
│ ├── server/ # Python Flask backend
│ │ ├── app.py # Main Flask application
│ │ ├── parse_archive.py # Archive parsing logic
│ │ ├── requirements.txt # Python dependencies
│ │ ├── sample_posts.json # Sample data
│ │ └── test_parse_archive.py # Tests
│ └── website/ # Frontend files
│ ├── app.js # JavaScript logic
│ ├── index.html # Main HTML file
│ ├── Reddit_Logo.webp # Logo image
│ └── styles.css # CSS styling
└── website/ # Additional website files
└── cache/ # Cache directory
```
## Docker Setup
### Prerequisites
- Docker Engine installed
- Docker Compose installed
### Running the Application
1. **Build and start the containers:**
```bash
docker-compose up --build
```
2. **Run in detached mode:**
```bash
docker-compose up -d
```
3. **Stop the containers:**
```bash
docker-compose down
```
### Environment Variables
The application uses the following environment variables:
- `ARCHIVE_DIR`: Path to the archive directory (default: `/app/archive`)
- `FLASK_ENV`: Flask environment (default: `production`)
### Ports
- **6006**: Main application port (Flask server)
### Volumes
The following volumes are mounted for development:
- `./src/server` → `/app/src/server`
- `./src/website` → `/app/website`
- `./website/cache` → `/app/website/cache`
## Development
### Making Changes
1. **Modify source code** in the `src/` directory
2. **Docker will automatically reload** the application
3. **Access the application** at `http://localhost:6006`
### Testing
To test the Docker setup:
```bash
# Build the images
docker-compose build
# Start the containers
docker-compose up -d
# Check container status
docker-compose ps
# View logs
docker-compose logs app
# Stop containers
docker-compose down
```
## API Endpoints
- `GET /posts` - Get first 10 posts for initial load
- `GET /posts/more?count=N` - Get next 10 posts, starting from index N
- `GET /posts/total` - Get total number of posts available
- `GET /` - Server status endpoint
## Architecture
The application consists of:
1. **Python Flask Backend** (`src/server/`)
- Serves API endpoints
- Handles archive parsing
- Serves static frontend files
2. **Frontend** (`src/website/`)
- HTML, CSS, and JavaScript
- Fetches data from the backend API
- Implements infinite scrolling
## Dependencies
### Python Dependencies (from `src/server/requirements.txt`):
- Flask
- Flask-CORS
- Pillow
- beautifulsoup4
- requests
### Frontend Dependencies:
- None (pure HTML/CSS/JavaScript)
## License
This project is licensed under the MIT License.