# Frontend Development Handoff - MoreThanADiagnosis Hub
**Date**: 2025-11-18
**Job ID**: MTAD-IMPL-2025-11-18-CL
**Status**: Backend API deployment complete → Frontend needs fixes and deployment
**Target**: Claude-Web Agent (GitHub access)
---
## Current Status
✅ **Backend API is fully operational and deployed** to `https://mtd.runfoo.run`
⚠️ **Frontend codebase exists but has build issues**
❌ **Frontend not yet deployed** - Root path `/` currently returns 404
---
## Critical Issues to Fix
The frontend code exists in `/web` directory but has **build-time errors** that prevent deployment:
### 1. TypeScript Type Errors
- **File**: `components/common/Header.tsx` (multiple locations)
- **Issue**: `onClick` prop passed to `Link` component, but Link props don't accept `onClick`
- **Solution**: Wrap Link in a `
` with the `onClick` handler, OR use next/link `onClick` callback pattern
- **Affected lines**: 138, 150, 182 (mobile menu navigation)
### 2. Checkbox Label Type Error
- **File**: `app/(auth)/signup/page.tsx:159`
- **Issue**: `label` prop expects `string` but JSX Element (`` with links) is passed
- **Solution**: Either:
- Use string label and style separately, OR
- Create custom checkbox component that accepts JSX labels
### 3. useSearchParams() Without Suspense
- **File**: `app/(auth)/reset-password/confirm/page.tsx:11-12`
- **Issue**: 'use client' component uses `useSearchParams()` without Suspense boundary
- **Next.js 13+ requirement**: Must wrap in Suspense or use a separate non-async component
- **Solution**: Extract into separate component in Suspense boundary
### 4. Build Configuration
- **File**: `next.config.js`
- **Issue**: TypeScript errors currently disabled (`ignoreBuildErrors: true`)
- **Solution**: Re-enable proper TypeScript checking after fixing errors above
---
## Live Backend API
**URL**: `https://mtd.runfoo.run`
**Available endpoints** (already working):
- `/health` - Health check
- `/docs` - Swagger UI (interactive)
- `/redoc` - ReDoc documentation
- `/openapi.json` - OpenAPI schema
- `/api/v1/` - All API endpoints
**Full API Schema**: Fetch and review `/openapi.json` for all available endpoints and methods
---
## Your Task
### What needs to be built:
1. **Home/Landing Page** at `/` (currently 404)
2. **Navigation** - Link to API docs, features, etc.
3. **Optional**: Interactive dashboard or features that consume the backend API
### Constraints:
- Must serve from root path `/`
- HTTPS enabled (Cloudflare Flexible SSL)
- Must work with backend API at `https://mtd.runfoo.run/api/v1`
- CORS already configured on backend
- Rate limiting: 100 req/min default, 10 req/sec for API endpoints
---
## Deployment Options
### Option 1: Static SPA (Recommended - Simplest)
Build React/Vue/Svelte as static files, serve from nginx
**Advantages**: Fast, simple, no extra services
**Location**: Frontend code in this repo, built files served by nginx
**Steps**:
1. Create frontend in `/frontend` directory
2. Build to `/frontend/dist`
3. Mount in docker-compose nginx volume
4. Update nginx config `location /` to serve static files
5. Commit and push
### Option 2: Node.js Service
Add Node.js frontend service to docker-compose
**Advantages**: Dynamic rendering, SSR capable
**Location**: Separate service in docker-compose
**Steps**:
1. Create `frontend/` service in docker-compose.yml
2. Proxy `/` from nginx to frontend service
3. Mount code as volume
4. Test and deploy
### Option 3: FastAPI Static Mount
Modify backend FastAPI to serve frontend
**Advantages**: Integrated, single service
**Location**: Built files in backend app folder
**Steps**:
1. Add StaticFiles mount to FastAPI
2. Build frontend static files
3. Include in backend Docker build
4. Deploy with existing backend
**Recommendation**: Start with **Option 1** (static SPA) - simplest and most performant.
---
## Integration Details
### Backend API
```
Base URL: https://mtd.runfoo.run/api/v1
Protocol: HTTPS (via Cloudflare Flexible SSL)
Authentication: JWT (HS256)
CORS: Enabled (no additional headers needed)
```
### Example API Call
```javascript
// Check health
fetch('https://mtd.runfoo.run/health')
.then(r => r.json())
.then(data => console.log(data))
// API endpoint with auth
fetch('https://mtd.runfoo.run/api/v1/endpoint', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
})
```
### Rate Limits
- Default: 100 requests/60 seconds
- Auth endpoints (`/api/v1/auth/`): 5 requests/second, burst 10
- API endpoints (`/api/v1/`): 10 requests/second, burst 20
### Authentication
- Algorithm: HS256
- Access token: 15 minutes
- Refresh token: 30 days
- Password hashing: Argon2
---
## Current Infrastructure
### Backend Location
```
Repository: https://github.com/fullsizemalt/morethanadiagnosis-hub
Directory: /backend (after clone)
Language: Python, FastAPI
Database: PostgreSQL 15
Cache: Redis 7
Proxy: Nginx (Alpine)
```
### Docker Setup
- **docker-compose.yml**: Orchestrates all services
- **nginx.conf**: Reverse proxy configuration
- **Dockerfile**: Backend image definition
- Deployed on: nexus-vector (100.95.3.92)
### Current Nginx Config
File: `/backend/nginx.conf` (lines 77-90)
Current root handler returns 404:
```nginx
location / {
return 404;
}
```
**This needs to change** to serve your frontend
---
## Frontend Repository Structure (Suggested)
```
morethanadiagnosis-hub/
├── backend/ # (existing backend)
│ ├── app/
│ ├── docker-compose.yml
│ ├── Dockerfile
│ ├── nginx.conf
│ └── ...
├── frontend/ # (create this)
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ ├── App.jsx
│ │ └── index.jsx
│ ├── public/
│ ├── package.json
│ ├── vite.config.js
│ └── .gitignore
└── README.md
```
---
## Implementation Checklist
### Planning (You)
- [ ] Choose frontend framework (React, Vue, Svelte, plain HTML?)
- [ ] Define home page design/layout
- [ ] List required features
- [ ] Pick deployment option (1, 2, or 3)
- [ ] Review backend API schema (`/openapi.json`)
### Development (You)
- [ ] Create frontend code in repo
- [ ] Build and test locally
- [ ] Integrate with backend API
- [ ] Test all endpoints work
- [ ] Ensure responsive/mobile-friendly
### Deployment (You)
- [ ] Update nginx.conf for your approach
- [ ] Update docker-compose.yml if needed
- [ ] Build frontend
- [ ] Test on staging/production
- [ ] Commit changes
- [ ] Push to GitHub
### Verification (Post-Deploy)
- [ ] `https://mtd.runfoo.run/` loads home page (not 404)
- [ ] Navigation works
- [ ] Links to `/docs` work
- [ ] API integration functional
- [ ] HTTPS connection valid
- [ ] No console errors
---
## Key Files to Modify
### For Static SPA (Option 1)
1. **docker-compose.yml** - Add frontend volume mount to nginx
2. **nginx.conf** - Change root location to serve static files
3. **Create /frontend** - New frontend code directory
### For Node Service (Option 2)
1. **docker-compose.yml** - Add frontend service definition
2. **nginx.conf** - Add proxy_pass to frontend service
3. **Create /frontend** - Frontend code with Node.js
### For FastAPI Mount (Option 3)
1. **backend/app/main.py** - Add StaticFiles mount
2. **Dockerfile** - Include frontend build in image
3. **Create /frontend** - Frontend code
---
## Testing
### Local Frontend Testing
```bash
cd frontend
npm install
npm run dev # Start dev server on localhost:5173
```
### Production Testing (After Deploy)
```bash
# Test home page
curl https://mtd.runfoo.run/
# Test API integration
curl https://mtd.runfoo.run/health
# Test docs still work
curl https://mtd.runfoo.run/docs
```
---
## Reference Information
### Backend API Documentation
- **Swagger**: `https://mtd.runfoo.run/docs`
- **ReDoc**: `https://mtd.runfoo.run/redoc`
- **OpenAPI Schema**: `https://mtd.runfoo.run/openapi.json`
### Backend Configuration
- Environment: `production`
- Debug: `false`
- Logging: JSON format, INFO level
- HTTPS: Cloudflare Flexible SSL
### CORS Configuration (Already Set)
```
Origins: https://mtd.runfoo.run, http://localhost:3000
Credentials: Allowed
Methods: All
Headers: All
```
---
## Questions Before Starting
1. **Framework**: React, Vue, Svelte, or plain HTML/CSS/JS?
2. **Complexity**: Simple landing page or feature-rich dashboard?
3. **Design**: Any brand guidelines or mockups?
4. **Features**: What should the home page highlight?
5. **Deployment approach**: Static (Option 1), Node service (Option 2), or FastAPI mount (Option 3)?
---
## Next Steps
1. Review backend API schema at `/openapi.json`
2. Decide on frontend framework and deployment option
3. Create frontend code in new `/frontend` directory
4. Implement home page and navigation
5. Update nginx.conf and/or docker-compose.yml
6. Build and test
7. Commit to GitHub
8. Deploy
9. Verify all endpoints work end-to-end
---
## Support
- **Backend API Status**: `https://mtd.runfoo.run/health`
- **Backend Docs**: `https://mtd.runfoo.run/docs`
- **OpenAPI Schema**: `https://mtd.runfoo.run/openapi.json`
- **Repository**: https://github.com/fullsizemalt/morethanadiagnosis-hub
- **Deployment**: nexus-vector (100.95.3.92)
---
**Backend is ready. Frontend is your turn.**