Files
BTC-Portfolio/CLAUDE.md
T
2026-03-23 23:49:11 +01:00

73 lines
2.3 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Running the Application
### Docker (recommended)
```bash
cd btc-portfolio
docker-compose up
# Frontend: http://localhost:3000
# Backend: http://localhost:8000
```
### Local development
```bash
# Backend
cd btc-portfolio/backend
pip install -r requirements.txt
uvicorn app.main:app --reload
# Frontend
cd btc-portfolio/frontend
npm install && npm start
```
No automated tests are configured — testing is manual.
## Architecture
Full-stack Bitcoin portfolio tracker:
- **Frontend:** React 18 SPA (`btc-portfolio/frontend/src/`) — dark theme, Bitcoin orange (`#f7931a`). JWT stored in `localStorage`. API URL configured via `REACT_APP_API_URL`.
- **Backend:** FastAPI (`btc-portfolio/backend/app/`) — SQLite + SQLAlchemy, JWT auth (HS256, 24h expiry), CoinGecko API for live BTC prices in EUR.
- **Data flow:** React → FastAPI (Bearer token) → SQLite + CoinGecko
### Backend structure
```
app/
main.py # FastAPI app, CORS (localhost:3000 only)
models.py # User, Purchase ORM models
auth.py # JWT + bcrypt (SECRET_KEY hardcoded — env var for prod)
dependencies.py # get_current_user dependency
routes/
users.py # POST /register, POST /login
purchases.py # CRUD /purchases, /purchases/{id}
stats.py # GET /stats (portfolio calculations)
history.py # GET /history (365 days BTC prices)
services/
btc.py # CoinGecko integration (returns 0.0 on failure)
```
### Frontend structure
```
src/
App.js # Routing (public: /login, /register; protected: /dashboard)
pages/
Dashboard.js # Main view: stats, purchase management, charts
components/
AddPurchase.js # Form: amount EUR + BTC price
PurchaseList.js # Table with inline edit/delete, sorted by date asc
PortfolioChart.js # Invested vs current value chart
BTCHistoryChart.js # 1-year BTC price history chart
```
Dashboard has a chart toggle (Both / Portfolio / 1-Year BTC) using tab state in `Dashboard.js`.
### Database schema
- `users`: id, username (unique), password (bcrypt)
- `purchases`: id, amount_eur, price_eur, created_at, user_id (FK)
Database persists via Docker volume at `/app/data/btc_portfolio.db`.