Files
metabuilder/frontends/codegen/docs/PACKAGES_REMOVAL_COMPLETE_GUIDE.md
2026-03-09 22:30:41 +00:00

328 lines
7.6 KiB
Markdown

# 🎯 Packages Folder Removal - Complete Guide
## ✅ Status: READY TO REMOVE
All dependencies on the `packages` folder have been eliminated. The folder can now be safely deleted.
## 📋 What Changed
### Architecture Simplification
- **Before**: Monorepo with `packages/spark` and `packages/spark-tools`
- **After**: Single application with all code in `src/`
### Storage System
- **Default**: IndexedDB (browser-native, no backend required)
- **Optional**: Flask API backend with automatic IndexedDB fallback
- **Configuration**: Environment variable or UI settings
## 🔧 Migration Summary
### Files Migrated
```
packages/spark/src/* → src/lib/spark/*
packages/spark-tools/src/* → (removed, no longer needed)
```
### Key Components
- `src/lib/storage-service.ts` - Unified storage with IndexedDB & Flask API
- `src/lib/spark/index.ts` - Spark exports
- `src/lib/spark-runtime.ts` - Runtime functionality
- `src/hooks/use-kv.ts` - Persistent state hook
- `src/components/StorageSettings.tsx` - UI for storage configuration
### Configuration Files Updated
-`Dockerfile` - No packages references
-`.dockerignore` - Excludes packages folder
-`package.json` - No workspace: protocol
-`README.md` - Storage documentation updated
## 🚀 Usage Guide
### For Users
#### Default (IndexedDB)
```bash
# Just start the app - IndexedDB works automatically
npm run dev
```
#### With Flask API (Optional)
```bash
# Set environment variable
VITE_FLASK_API_URL=http://localhost:5001 npm run dev
# Or configure in Settings UI:
# 1. Open Settings
# 2. Go to Storage Settings
# 3. Enable "Use Flask API Backend"
# 4. Enter Flask API URL
# 5. Click "Test" to verify connection
```
### For Developers
#### React Hook Usage
```typescript
import { useKV } from '@/hooks/use-kv'
function MyComponent() {
// Use just like useState, but with persistence
const [data, setData, deleteData] = useKV('my-key', defaultValue)
// ⚠️ CRITICAL: Always use functional updates
setData(current => ({ ...current, newField: 'value' }))
// ❌ WRONG: Don't reference closure value
// setData({ ...data, newField: 'value' })
}
```
#### Direct Storage API
```typescript
import { getStorage } from '@/lib/storage-service'
const storage = getStorage()
// Get value
const value = await storage.get('key')
// Set value
await storage.set('key', { some: 'data' })
// Delete value
await storage.delete('key')
// List all keys
const keys = await storage.keys()
// Clear all data
await storage.clear()
```
#### Configure Backend
```typescript
import { setFlaskAPI, disableFlaskAPI } from '@/lib/storage-service'
// Enable Flask API
setFlaskAPI('http://localhost:5001')
// Disable Flask API (back to IndexedDB)
disableFlaskAPI()
```
### For DevOps
#### Docker Build
```bash
# Build image (uses IndexedDB by default)
docker build -t codeforge .
# Run with IndexedDB
docker run -p 80:80 codeforge
# Run with Flask API
docker run -p 80:80 \
-e VITE_FLASK_API_URL=http://backend:5001 \
codeforge
```
#### Docker Compose
```yaml
version: '3.8'
services:
frontend:
build: .
ports:
- "80:80"
environment:
# Optional: Enable Flask backend
- VITE_FLASK_API_URL=http://backend:5001
backend:
build: ./backend
ports:
- "5001:5001"
```
#### Environment Variables
```bash
# Required
PORT=80 # Server port
# Optional
VITE_FLASK_API_URL="" # Flask API URL (empty = IndexedDB only)
```
## 🧪 Testing & Verification
### Automated Verification
```bash
# Run verification script
chmod +x scripts/verify-packages-removal.sh
./scripts/verify-packages-removal.sh
```
### Manual Testing
#### Test IndexedDB (Default)
```bash
npm run dev
# Open http://localhost:5000
# Create some data in the app
# Refresh the page
# ✅ Data should persist
```
#### Test Flask API (Optional)
```bash
# Start Flask backend
cd backend
python app.py
# Start frontend with Flask API
VITE_FLASK_API_URL=http://localhost:5001 npm run dev
# ✅ Data should be stored in Flask backend
```
#### Test Automatic Fallback
```bash
# Start app with non-existent Flask URL
VITE_FLASK_API_URL=http://localhost:9999 npm run dev
# ✅ Should show warning and use IndexedDB
# ✅ App should work normally
```
#### Test Docker Build
```bash
# Build
docker build -t codeforge .
# Run
docker run -p 8080:80 codeforge
# Test
curl http://localhost:8080
# ✅ Should return HTML
```
## 🔍 Verification Checklist
Before removing packages folder:
- [ ] Run `./scripts/verify-packages-removal.sh`
- [ ] Check no imports from `@github/spark` or `@local/spark`
- [ ] Verify `npm run build` succeeds
- [ ] Verify `docker build` succeeds
- [ ] Test IndexedDB storage in browser
- [ ] Test Flask API connection (if using backend)
- [ ] Test automatic fallback
- [ ] Verify all tests pass: `npm test`
## 🗑️ Removing the Packages Folder
Once all checks pass:
```bash
# 1. Verify everything
./scripts/verify-packages-removal.sh
# 2. Remove the packages folder
rm -rf packages
# 3. Test build
npm run build
# 4. Test Docker
docker build -t codeforge .
# 5. Commit changes
git add .
git commit -m "Remove packages folder - all functionality migrated to src/lib"
git push
```
## 📊 Benefits of Removal
### For Development
- ✅ Faster builds (no package compilation)
- ✅ Simpler debugging (all code in one place)
- ✅ Better IDE support (no package resolution)
- ✅ Clearer imports (`@/lib/...` instead of `@github/spark`)
### For CI/CD
- ✅ Faster CI/CD (simpler dependency tree)
- ✅ Smaller Docker images (no package overhead)
- ✅ No `workspace:` protocol issues
- ✅ Standard npm install (no special flags)
### For Users
- ✅ Works offline (IndexedDB default)
- ✅ Zero configuration needed
- ✅ Optional backend (Flask API)
- ✅ Automatic recovery (fallback on failure)
### For Deployment
- ✅ Can run without backend
- ✅ Lower hosting costs
- ✅ Simpler architecture
- ✅ Better reliability (local storage fallback)
## 🔧 Troubleshooting
### Issue: Build fails with "Cannot find module '@github/spark'"
**Solution**: Run verification script to find remaining old imports
```bash
./scripts/verify-packages-removal.sh
```
### Issue: Storage not persisting
**Solution**: Check browser console for IndexedDB errors
```javascript
// Open browser console and run:
indexedDB.databases()
// Should show 'codeforge-storage' database
```
### Issue: Flask API not working
**Solution**: Check network tab and backend logs
```bash
# Check if Flask backend is running
curl http://localhost:5001/api/health
# Check browser console for CORS errors
# Enable CORS in Flask backend if needed
```
### Issue: Docker build fails
**Solution**: Clear Docker cache and rebuild
```bash
docker system prune -a
docker build --no-cache -t codeforge .
```
## 📚 Additional Documentation
- [PACKAGES_REMOVAL_FINAL_SUMMARY.md](./PACKAGES_REMOVAL_FINAL_SUMMARY.md) - Detailed architecture guide
- [STORAGE.md](./STORAGE.md) - Storage system documentation
- [FLASK_BACKEND_SETUP.md](./FLASK_BACKEND_SETUP.md) - Flask backend setup guide
- [README.md](./README.md) - Main project documentation
## 🎉 Next Steps
After removing packages folder:
1. **Clean up documentation** - Remove any outdated package references
2. **Update CI/CD** - Simplify build pipelines
3. **Test thoroughly** - Run full test suite
4. **Deploy** - Push to production with confidence
## ✅ Conclusion
The packages folder has been successfully migrated to the main application structure. All functionality is preserved, with improved:
- Architecture simplicity
- Build performance
- Developer experience
- Deployment reliability
**The packages folder can now be safely deleted!** 🎉