62 lines
1.6 KiB
Markdown
62 lines
1.6 KiB
Markdown
---
|
|
inclusion: always
|
|
---
|
|
|
|
# Project Structure
|
|
|
|
## Directory Layout
|
|
|
|
```
|
|
/
|
|
├── src/
|
|
│ └── index.js # Main application entry point
|
|
├── public/
|
|
│ ├── index.html # Frontend web interface
|
|
│ └── photo_*.jpg # Profile photo asset
|
|
├── quotes/
|
|
│ └── quotes.json # Generated quotes storage (gitignored)
|
|
├── .env # Environment variables (gitignored)
|
|
├── .env.example # Environment template
|
|
└── package.json # Dependencies and scripts
|
|
```
|
|
|
|
## Architecture
|
|
|
|
**Backend (src/index.js)**
|
|
- Express server with CORS enabled
|
|
- Static file serving from `public/`
|
|
- Cron job for hourly quote generation
|
|
- REST API endpoints for quote operations
|
|
|
|
**Frontend (public/index.html)**
|
|
- Single-page application
|
|
- Vanilla JavaScript (no framework)
|
|
- Inline CSS with gradient theme
|
|
- Auto-refresh every 60 seconds
|
|
|
|
## API Endpoints
|
|
|
|
- `GET /api/quotes` - Retrieve all quotes (reversed order)
|
|
- `POST /api/generate` - Manually trigger quote generation
|
|
- `POST /api/quotes/:index/react` - Add emoji reaction to quote
|
|
- `POST /api/quotes/:index/comment` - Add comment to quote (implemented but not used in UI)
|
|
|
|
## Data Model
|
|
|
|
Quote object structure:
|
|
```json
|
|
{
|
|
"timestamp": "ISO 8601 date string",
|
|
"quote": "Quote text in Russian",
|
|
"reactions": { "emoji": count },
|
|
"comments": [{ "id", "author", "text", "timestamp" }]
|
|
}
|
|
```
|
|
|
|
## Conventions
|
|
|
|
- CommonJS module system (require/module.exports)
|
|
- Synchronous file operations for data persistence
|
|
- Error logging to console
|
|
- Process exits on missing API key
|