Initial release v1.1.0

- Complete MVP for tracking Fidelity brokerage account performance
- Transaction import from CSV with deduplication
- Automatic FIFO position tracking with options support
- Real-time P&L calculations with market data caching
- Dashboard with timeframe filtering (30/90/180 days, 1 year, YTD, all time)
- Docker-based deployment with PostgreSQL backend
- React/TypeScript frontend with TailwindCSS
- FastAPI backend with SQLAlchemy ORM

Features:
- Multi-account support
- Import via CSV upload or filesystem
- Open and closed position tracking
- Balance history charting
- Performance analytics and metrics
- Top trades analysis
- Responsive UI design

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Chris
2026-01-22 14:27:43 -05:00
commit eea4469095
90 changed files with 14513 additions and 0 deletions

167
SOLUTION_SUMMARY.md Normal file
View File

@@ -0,0 +1,167 @@
# Solution Summary - Account Creation Fix
## Problem Identified
Your backend is running **old cached code** from a previous Docker build. Even though you updated the files on your Linux server, the running container has the old version because:
1. Docker cached the old code during the initial build
2. Rebuilding without `--no-cache` reused those cached layers
3. The old code had `redirect_slashes=False` which causes 307 redirects
4. Result: Account creation fails because API calls get redirected instead of processed
## The Fix
Run the **nuclear-fix.sh** script on your Linux server. This script:
- Completely removes all old containers, images, and cache
- Rebuilds everything from scratch with `--no-cache`
- Tests that the correct code is running
- Verifies all endpoints work
## Files Created for You
### 1. nuclear-fix.sh ⭐ MAIN FIX
Complete rebuild script that fixes everything. **Run this first**.
### 2. verify-backend-code.sh
Diagnostic script that shows exactly what code is running in the container.
Use this if the nuclear fix doesn't work.
### 3. CRITICAL_FIX_README.md
Detailed explanation of the problem and multiple solution options.
### 4. transfer-to-server.sh
Helper script to transfer all files to your Linux server via SSH.
## Quick Start
### On your Mac:
```bash
cd /Users/chris/Desktop/fidelity
# Option A: Transfer files with helper script
./transfer-to-server.sh pi@starship2
# Option B: Manual transfer
scp nuclear-fix.sh verify-backend-code.sh CRITICAL_FIX_README.md pi@starship2:~/fidelity/
scp backend/app/main.py pi@starship2:~/fidelity/backend/app/
```
### On your Linux server (starship2):
```bash
cd ~/fidelity
# Read the detailed explanation (optional)
cat CRITICAL_FIX_README.md
# Run the nuclear fix
./nuclear-fix.sh
# Watch the output - it will test everything automatically
```
## Expected Results
After running nuclear-fix.sh, you should see:
```
✓ Backend health check: PASSED
✓ Accounts endpoint: PASSED (HTTP 200)
✓ Frontend: PASSED (HTTP 200)
```
Then when you create an account in the UI:
- The form submits successfully
- No spinning/loading forever
- Account appears in the list
## If It Still Doesn't Work
Run the verification script:
```bash
./verify-backend-code.sh
```
This will show:
- What version of main.py is actually running
- Database connection details
- Registered routes
- Any configuration issues
Share the output and I can help further.
## Technical Details
### Why --no-cache Is Critical
Your current workflow:
1. ✅ Update files on Mac
2. ✅ Transfer to Linux server
3. ❌ Run `docker compose build` (WITHOUT --no-cache)
4. ❌ Docker reuses cached layers with OLD CODE
5. ❌ Container runs old code, account creation fails
Correct workflow:
1. ✅ Update files on Mac
2. ✅ Transfer to Linux server
3. ✅ Run `docker compose build --no-cache`
4. ✅ Docker rebuilds every layer with NEW CODE
5. ✅ Container runs new code, everything works
### The Volume Mount Misconception
docker-compose.yml has:
```yaml
volumes:
- ./backend:/app
```
You might think: "Code changes should be automatic!"
Reality:
- Volume mount puts files in container ✅
- But uvicorn runs WITHOUT --reload flag ❌
- Python has already loaded modules into memory ❌
- Changing files doesn't restart the process ❌
For production (your setup), code is baked into the image at build time.
### Why You See 307 Redirects
Old main.py had:
```python
app = FastAPI(
redirect_slashes=False, # This was the problem!
...
)
```
This caused:
- Frontend calls: `GET /api/accounts` (no trailing slash)
- Route registered as: `/api/accounts/` (with trailing slash)
- FastAPI can't match, returns 307 redirect
- Frontend doesn't follow redirect, gets stuck
New main.py (fixed):
```python
app = FastAPI(
# redirect_slashes defaults to True
# Handles both /api/accounts and /api/accounts/
...
)
```
This works:
- Frontend calls: `GET /api/accounts` (no trailing slash)
- FastAPI auto-redirects internally to `/api/accounts/`
- Route matches, returns 200 with data ✅
## Summary
**Problem**: Old code in Docker container
**Cause**: Docker build cache
**Solution**: Rebuild with --no-cache
**Script**: nuclear-fix.sh does this automatically
Transfer the files and run the script. It should work!