planning checkpoint next step in agents
This commit is contained in:
301
AGENTS.md
301
AGENTS.md
@@ -1 +1,300 @@
|
|||||||
Empty AGENTS.md for planning webapp
|
# Daily Journal Prompt Generator - Webapp Refactoring Plan
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Refactor the existing Python CLI application into a modern web application with FastAPI backend and a lightweight frontend. The system will maintain all existing functionality while providing a web-based interface for easier access and better user experience.
|
||||||
|
|
||||||
|
## Current Architecture Analysis
|
||||||
|
|
||||||
|
### Existing CLI Application
|
||||||
|
- **Language**: Python 3.7+
|
||||||
|
- **Core Dependencies**: openai, python-dotenv, rich
|
||||||
|
- **Data Storage**: JSON files (`prompts_historic.json`, `prompts_pool.json`)
|
||||||
|
- **Configuration**: `.env` file for API keys, `settings.cfg` for app settings
|
||||||
|
- **Functionality**:
|
||||||
|
1. AI-powered prompt generation using OpenAI-compatible APIs
|
||||||
|
2. Smart repetition avoidance with 60-prompt history buffer
|
||||||
|
3. Prompt pool system for offline usage
|
||||||
|
4. Interactive CLI with rich formatting
|
||||||
|
|
||||||
|
### Key Features to Preserve
|
||||||
|
1. AI prompt generation with history awareness
|
||||||
|
2. Prompt pool management (fill, draw, stats)
|
||||||
|
3. Configuration via environment variables
|
||||||
|
4. JSON-based data persistence
|
||||||
|
5. All existing prompt generation logic
|
||||||
|
As the user discards prompts, the themes will be very slowly steered, so it's okay to take some inspiration from the history.
|
||||||
|
|
||||||
|
## Proposed Web Application Architecture
|
||||||
|
|
||||||
|
### Backend: FastAPI
|
||||||
|
**Rationale**: FastAPI provides async capabilities, automatic OpenAPI documentation, and excellent performance. It's well-suited for AI API integrations.
|
||||||
|
|
||||||
|
**Components**:
|
||||||
|
1. **API Endpoints**:
|
||||||
|
- `GET /api/prompts/draw` - Draw prompts from pool
|
||||||
|
- `POST /api/prompts/fill-pool` - Fill prompt pool using AI
|
||||||
|
- `GET /api/prompts/stats` - Get pool and history statistics
|
||||||
|
- `GET /api/prompts/history` - Get prompt history
|
||||||
|
- `POST /api/prompts/select/{prompt_id}` - Select a prompt for journaling
|
||||||
|
|
||||||
|
2. **Core Services**:
|
||||||
|
- PromptGeneratorService (adapted from existing logic)
|
||||||
|
- PromptPoolService (manages pool operations)
|
||||||
|
- HistoryService (manages 60-item cyclic buffer)
|
||||||
|
- AIClientService (OpenAI API integration)
|
||||||
|
|
||||||
|
3. **Data Layer**:
|
||||||
|
- **Initial Approach**: Keep JSON file storage (`prompts_historic.json`, `prompts_pool.json`)
|
||||||
|
- **Docker Volume**: Mount `./data` directory to `/app/data` for persistent JSON storage
|
||||||
|
- **Future Evolution**: SQLite database migration path (optional later phase)
|
||||||
|
- **Rationale**: Maintains compatibility with existing CLI app, simple file-based persistence
|
||||||
|
|
||||||
|
4. **Configuration**:
|
||||||
|
- Environment variables (API keys, settings)
|
||||||
|
- Pydantic models for validation
|
||||||
|
- Settings management with python-dotenv
|
||||||
|
|
||||||
|
### Frontend Options Analysis
|
||||||
|
|
||||||
|
#### Option: Astro-erudite with React Components
|
||||||
|
**Decision**: Use astro-erudite (minimalist Astro flavor) with React components for interactive elements.
|
||||||
|
|
||||||
|
**Rationale**:
|
||||||
|
- **astro-erudite**: Minimalist flavor of Astro focused on simplicity and content-first approach
|
||||||
|
- **React Components**: Allows using React's rich component ecosystem for interactive elements
|
||||||
|
- **Best of Both Worlds**: Astro's performance with React's interactivity where needed
|
||||||
|
- **Future Flexibility**: Can add more React components as features expand
|
||||||
|
- **Minimalist Philosophy**: Aligns with the simple, focused nature of the prompt generator
|
||||||
|
|
||||||
|
**Architecture**:
|
||||||
|
- astro-erudite handles page routing and static content
|
||||||
|
- React components for interactive elements (prompt selection, admin controls)
|
||||||
|
- Partial hydration for optimal performance
|
||||||
|
- Minimal styling approach (Tailwind CSS optional, can use simple CSS)
|
||||||
|
|
||||||
|
**Frontend Components**:
|
||||||
|
1. **Prompt Display Component**: Shows multiple prompts with selection
|
||||||
|
2. **Stats Dashboard**: Shows pool/history statistics
|
||||||
|
3. **Admin Panel**: Controls for filling pool, viewing history
|
||||||
|
4. **Responsive Design**: Mobile-friendly interface
|
||||||
|
|
||||||
|
### Docker & Docker Compose Setup
|
||||||
|
|
||||||
|
#### Multi-container Architecture
|
||||||
|
```
|
||||||
|
services:
|
||||||
|
backend:
|
||||||
|
build: ./backend
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
volumes:
|
||||||
|
- ./backend:/app
|
||||||
|
- ./data:/app/data # For JSON file persistence
|
||||||
|
environment:
|
||||||
|
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}
|
||||||
|
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
||||||
|
develop:
|
||||||
|
watch:
|
||||||
|
- action: sync
|
||||||
|
path: ./backend
|
||||||
|
target: /app
|
||||||
|
- action: rebuild
|
||||||
|
path: ./backend/requirements.txt
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
build: ./frontend
|
||||||
|
ports:
|
||||||
|
- "3000:3000" # Development
|
||||||
|
- "80:80" # Production
|
||||||
|
volumes:
|
||||||
|
- ./frontend:/app
|
||||||
|
develop:
|
||||||
|
watch:
|
||||||
|
- action: sync
|
||||||
|
path: ./frontend/src
|
||||||
|
target: /app/src
|
||||||
|
- action: rebuild
|
||||||
|
path: ./frontend/package.json
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Dockerfile Examples
|
||||||
|
|
||||||
|
**Backend Dockerfile**:
|
||||||
|
```dockerfile
|
||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Frontend Dockerfile (Astro)**:
|
||||||
|
```dockerfile
|
||||||
|
FROM node:18-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package*.json .
|
||||||
|
RUN npm ci
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
FROM nginx:alpine
|
||||||
|
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||||
|
EXPOSE 80
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Refactoring Strategy
|
||||||
|
|
||||||
|
### Phase 1: Backend API Development
|
||||||
|
1. **Setup FastAPI project structure**
|
||||||
|
- Create `backend/` directory
|
||||||
|
- Set up virtual environment
|
||||||
|
- Install FastAPI, uvicorn, pydantic
|
||||||
|
|
||||||
|
2. **Adapt existing Python logic**
|
||||||
|
- Refactor `generate_prompts.py` into services
|
||||||
|
- Create API endpoints
|
||||||
|
- Add error handling and validation
|
||||||
|
|
||||||
|
3. **Data persistence**
|
||||||
|
- Keep JSON file storage initially
|
||||||
|
- Add file locking for concurrent access
|
||||||
|
- Plan SQLite migration
|
||||||
|
|
||||||
|
4. **Testing**
|
||||||
|
- Unit tests for services
|
||||||
|
- API integration tests
|
||||||
|
- Maintain existing test coverage
|
||||||
|
|
||||||
|
### Phase 2: Frontend Development
|
||||||
|
1. **Setup Astro project**
|
||||||
|
- Create `frontend/` directory
|
||||||
|
- Initialize Astro project
|
||||||
|
- Install UI components (Tailwind CSS recommended)
|
||||||
|
|
||||||
|
2. **Build UI components**
|
||||||
|
- Prompt display and selection
|
||||||
|
- Statistics dashboard
|
||||||
|
- Admin controls
|
||||||
|
|
||||||
|
3. **API integration**
|
||||||
|
- Fetch data from FastAPI backend
|
||||||
|
- Handle user interactions
|
||||||
|
- Error states and loading indicators
|
||||||
|
|
||||||
|
### Phase 3: Dockerization & Deployment
|
||||||
|
1. **Docker configuration**
|
||||||
|
- Create Dockerfiles for backend/frontend
|
||||||
|
- Create docker-compose.yml
|
||||||
|
- Configure development vs production builds
|
||||||
|
|
||||||
|
2. **Environment setup**
|
||||||
|
- Environment variable management
|
||||||
|
- Volume mounts for development
|
||||||
|
- Production optimization
|
||||||
|
|
||||||
|
3. **Deployment preparation**
|
||||||
|
- Health checks
|
||||||
|
- Logging configuration
|
||||||
|
- Monitoring setup
|
||||||
|
|
||||||
|
## Technical Decisions
|
||||||
|
|
||||||
|
### 1. Authentication (Optional)
|
||||||
|
**Current**: None (single-user CLI)
|
||||||
|
**Webapp Option**: Basic session-based auth or JWT
|
||||||
|
**Recommendation**: Start without auth, add later if needed for multi-user
|
||||||
|
|
||||||
|
### 2. Data Storage Evolution
|
||||||
|
**Phase 1**: JSON files (maintain compatibility)
|
||||||
|
**Phase 2**: SQLite with migration script
|
||||||
|
**Phase 3**: Optional PostgreSQL for scalability
|
||||||
|
|
||||||
|
### 3. API Design Principles
|
||||||
|
- RESTful endpoints
|
||||||
|
- JSON responses
|
||||||
|
- Consistent error handling
|
||||||
|
- OpenAPI documentation
|
||||||
|
- Versioning (v1/ prefix)
|
||||||
|
|
||||||
|
### 4. Frontend State Management
|
||||||
|
**Simple approach**: React-like state with Astro components
|
||||||
|
**If complex**: Consider lightweight state management (Zustand, Jotai)
|
||||||
|
**Initial**: Component-level state sufficient
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
```bash
|
||||||
|
# Clone and setup
|
||||||
|
git clone <repo>
|
||||||
|
cd daily-journal-prompt-webapp
|
||||||
|
|
||||||
|
# Start with Docker Compose
|
||||||
|
docker-compose up --build
|
||||||
|
|
||||||
|
# Or develop separately
|
||||||
|
cd backend && uvicorn main:app --reload
|
||||||
|
cd frontend && npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing Strategy
|
||||||
|
- **Backend**: pytest with FastAPI TestClient
|
||||||
|
- **Frontend**: Vitest for unit tests, Playwright for E2E
|
||||||
|
- **Integration**: Docker Compose test environment
|
||||||
|
|
||||||
|
### CI/CD Considerations
|
||||||
|
- GitHub Actions for testing
|
||||||
|
- Docker image building
|
||||||
|
- Deployment to cloud platform (Render, Railway, Fly.io)
|
||||||
|
|
||||||
|
## Risk Assessment & Mitigation
|
||||||
|
|
||||||
|
### Risks
|
||||||
|
1. **API Key exposure**: Use environment variables, never commit to repo
|
||||||
|
2. **Data loss during migration**: Backup JSON files, incremental migration
|
||||||
|
3. **Performance issues**: Monitor API response times, optimize database queries
|
||||||
|
4. **Browser compatibility**: Use modern CSS/JS, test on target browsers
|
||||||
|
|
||||||
|
### Mitigations
|
||||||
|
- Comprehensive testing
|
||||||
|
- Gradual rollout
|
||||||
|
- Monitoring and logging
|
||||||
|
- Regular backups
|
||||||
|
|
||||||
|
## Success Metrics
|
||||||
|
|
||||||
|
1. **Functionality**: All CLI features available in webapp
|
||||||
|
2. **Performance**: API response < 200ms, page load < 2s
|
||||||
|
3. **Usability**: Intuitive UI, mobile-responsive
|
||||||
|
4. **Reliability**: 99.9% uptime, error rate < 1%
|
||||||
|
5. **Maintainability**: Clean code, good test coverage, documented APIs
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
### Immediate Actions
|
||||||
|
1. Create project structure with backend/frontend directories
|
||||||
|
2. Set up FastAPI backend skeleton
|
||||||
|
3. Begin refactoring core prompt generation logic
|
||||||
|
4. Create basic Astro frontend
|
||||||
|
5. Implement Docker configuration
|
||||||
|
|
||||||
|
### Future Enhancements
|
||||||
|
1. User accounts and prompt history per user
|
||||||
|
2. Prompt customization options
|
||||||
|
3. Export functionality (PDF, Markdown)
|
||||||
|
4. Mobile app (React Native)
|
||||||
|
5. Social features (share prompts, community)
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
The refactoring from CLI to webapp will significantly improve accessibility and user experience while maintaining all existing functionality. The proposed architecture using FastAPI + Astro provides a modern, performant, and maintainable foundation for future enhancements.
|
||||||
|
|
||||||
|
The phased approach allows for incremental development with clear milestones and risk mitigation at each step.
|
||||||
|
|||||||
Reference in New Issue
Block a user