mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-12 02:01:39 -05:00
382 lines
10 KiB
Markdown
382 lines
10 KiB
Markdown
|
|
# Dawarich Maps V2 - Incremental Implementation Guide
|
||
|
|
|
||
|
|
## 🎯 Overview
|
||
|
|
|
||
|
|
This is a **production-ready, incremental implementation guide** for reimplementing Dawarich's map functionality using **MapLibre GL JS** with a **mobile-first** approach.
|
||
|
|
|
||
|
|
### ✨ Key Innovation: Incremental MVP Approach
|
||
|
|
|
||
|
|
Each phase delivers a **working, deployable application**. You can:
|
||
|
|
- ✅ **Deploy after any phase** - Get working software in production early
|
||
|
|
- ✅ **Get user feedback** - Validate features incrementally
|
||
|
|
- ✅ **Test continuously** - E2E tests catch regressions at each step
|
||
|
|
- ✅ **Rollback safely** - Revert to any previous working phase
|
||
|
|
|
||
|
|
## 📚 Implementation Phases
|
||
|
|
|
||
|
|
### **Phase 1: MVP - Basic Map** ✅ (Week 1)
|
||
|
|
**File**: [PHASE_1_MVP.md](./PHASE_1_MVP.md) | **Test**: `e2e/v2/phase-1-mvp.spec.ts`
|
||
|
|
|
||
|
|
**Deployable MVP**: Basic location history viewer
|
||
|
|
|
||
|
|
**Features**:
|
||
|
|
- ✅ MapLibre map with points
|
||
|
|
- ✅ Point clustering
|
||
|
|
- ✅ Basic popups
|
||
|
|
- ✅ Month selector
|
||
|
|
- ✅ API integration
|
||
|
|
|
||
|
|
**Deploy Decision**: Users can view location history on a map
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Phase 2: Routes + Navigation** ✅ (Week 2)
|
||
|
|
**File**: [PHASE_2_ROUTES.md](./PHASE_2_ROUTES.md) | **Test**: `e2e/v2/phase-2-routes.spec.ts`
|
||
|
|
|
||
|
|
**Builds on Phase 1 + adds**:
|
||
|
|
- ✅ Routes layer (speed-colored)
|
||
|
|
- ✅ Date navigation (Prev/Next Day/Week/Month)
|
||
|
|
- ✅ Layer toggles (Points, Routes)
|
||
|
|
- ✅ Enhanced date picker
|
||
|
|
|
||
|
|
**Deploy Decision**: Full navigation + route visualization
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Phase 3: Heatmap + Mobile** ✅ (Week 3)
|
||
|
|
**File**: [PHASE_3_MOBILE.md](./PHASE_3_MOBILE.md) | **Test**: `e2e/v2/phase-3-mobile.spec.ts`
|
||
|
|
|
||
|
|
**Builds on Phase 2 + adds**:
|
||
|
|
- ✅ Heatmap layer
|
||
|
|
- ✅ Bottom sheet UI (mobile)
|
||
|
|
- ✅ Touch gestures
|
||
|
|
- ✅ Settings panel
|
||
|
|
- ✅ Responsive breakpoints
|
||
|
|
|
||
|
|
**Deploy Decision**: Mobile-optimized map viewer
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Phase 4: Visits + Photos** ✅ (Week 4)
|
||
|
|
**File**: [PHASE_4_VISITS.md](./PHASE_4_VISITS.md) | **Test**: `e2e/v2/phase-4-visits.spec.ts`
|
||
|
|
|
||
|
|
**Builds on Phase 3 + adds**:
|
||
|
|
- ✅ Visits layer (suggested + confirmed)
|
||
|
|
- ✅ Photos layer
|
||
|
|
- ✅ Visits drawer with search
|
||
|
|
- ✅ Photo popups
|
||
|
|
|
||
|
|
**Deploy Decision**: Full location + visit tracking
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Phase 5: Areas + Drawing** ✅ (Week 5)
|
||
|
|
**File**: [PHASE_5_AREAS.md](./PHASE_5_AREAS.md) | **Test**: `e2e/v2/phase-5-areas.spec.ts`
|
||
|
|
|
||
|
|
**Builds on Phase 4 + adds**:
|
||
|
|
- ✅ Areas layer
|
||
|
|
- ✅ Rectangle selection tool
|
||
|
|
- ✅ Area drawing (circles)
|
||
|
|
- ✅ Tracks layer
|
||
|
|
|
||
|
|
**Deploy Decision**: Interactive area management
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Phase 6: Fog + Scratch + Advanced** ✅ (Week 6)
|
||
|
|
**File**: [PHASE_6_ADVANCED.md](./PHASE_6_ADVANCED.md) | **Test**: `e2e/v2/phase-6-advanced.spec.ts`
|
||
|
|
|
||
|
|
**Builds on Phase 5 + adds**:
|
||
|
|
- ✅ Fog of war layer
|
||
|
|
- ✅ Scratch map (visited countries)
|
||
|
|
- ✅ Keyboard shortcuts
|
||
|
|
- ✅ Toast notifications
|
||
|
|
|
||
|
|
**Deploy Decision**: 100% V1 feature parity
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Phase 7: Real-time + Family** ✅ (Week 7)
|
||
|
|
**File**: [PHASE_7_REALTIME.md](./PHASE_7_REALTIME.md) | **Test**: `e2e/v2/phase-7-realtime.spec.ts`
|
||
|
|
|
||
|
|
**Builds on Phase 6 + adds**:
|
||
|
|
- ✅ ActionCable integration
|
||
|
|
- ✅ Real-time point updates
|
||
|
|
- ✅ Family layer (shared locations)
|
||
|
|
- ✅ WebSocket reconnection
|
||
|
|
|
||
|
|
**Deploy Decision**: Full collaborative features
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **Phase 8: Performance + Polish** ✅ (Week 8)
|
||
|
|
**File**: [PHASE_8_PERFORMANCE.md](./PHASE_8_PERFORMANCE.md) | **Test**: `e2e/v2/phase-8-performance.spec.ts`
|
||
|
|
|
||
|
|
**Builds on Phase 7 + adds**:
|
||
|
|
- ✅ Lazy loading
|
||
|
|
- ✅ Progressive data loading
|
||
|
|
- ✅ Performance monitoring
|
||
|
|
- ✅ Service worker (offline)
|
||
|
|
- ✅ Bundle optimization
|
||
|
|
|
||
|
|
**Deploy Decision**: Production-ready
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎉 **ALL PHASES COMPLETE!**
|
||
|
|
|
||
|
|
See **[IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md)** for the full summary.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🏗️ Architecture Principles
|
||
|
|
|
||
|
|
### 1. Frontend-Only Implementation
|
||
|
|
- **No backend changes** - Uses existing API endpoints
|
||
|
|
- Client-side GeoJSON transformation
|
||
|
|
- ApiClient wrapper for all API calls
|
||
|
|
|
||
|
|
### 2. Rails & Stimulus Best Practices
|
||
|
|
- **Stimulus values** for configuration only (NOT large datasets)
|
||
|
|
- AJAX data fetching after page load
|
||
|
|
- Proper cleanup in `disconnect()`
|
||
|
|
- Turbo Drive compatibility
|
||
|
|
- Outlets for controller communication
|
||
|
|
|
||
|
|
### 3. Mobile-First Design
|
||
|
|
- Touch-optimized UI components
|
||
|
|
- Bottom sheet pattern for mobile
|
||
|
|
- Progressive enhancement for desktop
|
||
|
|
- Gesture support (swipe, pinch, long press)
|
||
|
|
|
||
|
|
### 4. Performance Optimized
|
||
|
|
- Lazy loading for heavy components
|
||
|
|
- Viewport-based data loading
|
||
|
|
- Progressive loading with feedback
|
||
|
|
- Memory leak prevention
|
||
|
|
- Service worker for offline support
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📁 Directory Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
app/javascript/maps_v2/
|
||
|
|
├── PHASE_1_FOUNDATION.md # Week 1-2 implementation
|
||
|
|
├── PHASE_2_CORE_LAYERS.md # Week 3-4 implementation
|
||
|
|
├── PHASE_3_ADVANCED_LAYERS.md # Week 5-6 implementation
|
||
|
|
├── PHASE_4_UI_COMPONENTS.md # Week 7 implementation
|
||
|
|
├── PHASE_5_INTERACTIONS.md # Week 8 implementation
|
||
|
|
├── PHASE_6_PERFORMANCE.md # Week 9 implementation
|
||
|
|
├── PHASE_7_TESTING.md # Week 10 implementation
|
||
|
|
├── README.md # This file (master index)
|
||
|
|
└── SETUP.md # Original setup guide
|
||
|
|
|
||
|
|
# Future implementation files (to be created):
|
||
|
|
├── controllers/
|
||
|
|
│ ├── map_controller.js
|
||
|
|
│ ├── date_picker_controller.js
|
||
|
|
│ ├── settings_panel_controller.js
|
||
|
|
│ ├── bottom_sheet_controller.js
|
||
|
|
│ └── visits_drawer_controller.js
|
||
|
|
├── layers/
|
||
|
|
│ ├── base_layer.js
|
||
|
|
│ ├── points_layer.js
|
||
|
|
│ ├── routes_layer.js
|
||
|
|
│ ├── heatmap_layer.js
|
||
|
|
│ ├── fog_layer.js
|
||
|
|
│ └── [other layers]
|
||
|
|
├── services/
|
||
|
|
│ ├── api_client.js
|
||
|
|
│ ├── map_engine.js
|
||
|
|
│ └── [other services]
|
||
|
|
├── utils/
|
||
|
|
│ ├── geojson_transformers.js
|
||
|
|
│ ├── cache_manager.js
|
||
|
|
│ ├── performance_utils.js
|
||
|
|
│ └── [other utils]
|
||
|
|
└── components/
|
||
|
|
├── popup_factory.js
|
||
|
|
└── [other components]
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Quick Start
|
||
|
|
|
||
|
|
### 1. Review Phase Overview
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Understand the incremental approach
|
||
|
|
cat PHASES_OVERVIEW.md
|
||
|
|
|
||
|
|
# See all phases at a glance
|
||
|
|
cat PHASES_SUMMARY.md
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Start with Phase 1 MVP
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Week 1: Implement minimal viable map
|
||
|
|
cat PHASE_1_MVP.md
|
||
|
|
|
||
|
|
# Create files as specified in guide
|
||
|
|
# Run E2E tests: npx playwright test e2e/v2/phase-1-mvp.spec.ts
|
||
|
|
# Deploy to staging
|
||
|
|
# Get user feedback
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Continue Incrementally
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Week 2: Add routes + navigation
|
||
|
|
cat PHASE_2_ROUTES.md
|
||
|
|
|
||
|
|
# Week 3: Add mobile UI
|
||
|
|
# Request: "expand phase 3"
|
||
|
|
# ... continue through Phase 8
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Existing API Endpoints
|
||
|
|
|
||
|
|
All endpoints are documented in **PHASE_1_FOUNDATION.md**:
|
||
|
|
|
||
|
|
- `GET /api/v1/points` - Paginated points
|
||
|
|
- `GET /api/v1/visits` - User visits
|
||
|
|
- `GET /api/v1/areas` - User-defined areas
|
||
|
|
- `GET /api/v1/photos` - Photos with location
|
||
|
|
- `GET /api/v1/maps/hexagons` - Hexagon grid data
|
||
|
|
- `GET /api/v1/settings` - User settings
|
||
|
|
|
||
|
|
### 3. Implementation Order
|
||
|
|
|
||
|
|
Follow the phases in order:
|
||
|
|
1. Foundation → API client, transformers
|
||
|
|
2. Core Layers → Points, routes, heatmap
|
||
|
|
3. Advanced Layers → Fog, visits, photos
|
||
|
|
4. UI Components → Date picker, settings, mobile UI
|
||
|
|
5. Interactions → Gestures, keyboard, real-time
|
||
|
|
6. Performance → Optimization, monitoring
|
||
|
|
7. Testing → Unit, integration, migration
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Feature Parity
|
||
|
|
|
||
|
|
**100% feature parity with V1 implementation:**
|
||
|
|
|
||
|
|
| Feature | V1 (Leaflet) | V2 (MapLibre) |
|
||
|
|
|---------|--------------|---------------|
|
||
|
|
| Points Layer | ✅ | ✅ |
|
||
|
|
| Routes Layer | ✅ | ✅ |
|
||
|
|
| Heatmap | ✅ | ✅ |
|
||
|
|
| Fog of War | ✅ | ✅ |
|
||
|
|
| Scratch Map | ✅ | ✅ |
|
||
|
|
| Visits (Suggested) | ✅ | ✅ |
|
||
|
|
| Visits (Confirmed) | ✅ | ✅ |
|
||
|
|
| Photos Layer | ✅ | ✅ |
|
||
|
|
| Areas Layer | ✅ | ✅ |
|
||
|
|
| Tracks Layer | ✅ | ✅ |
|
||
|
|
| Family Layer | ✅ | ✅ |
|
||
|
|
| Date Navigation | ✅ | ✅ (enhanced) |
|
||
|
|
| Settings Panel | ✅ | ✅ |
|
||
|
|
| Mobile Gestures | ⚠️ Basic | ✅ Full support |
|
||
|
|
| Keyboard Shortcuts | ❌ | ✅ NEW |
|
||
|
|
| Real-time Updates | ⚠️ Polling | ✅ ActionCable |
|
||
|
|
| Offline Support | ❌ | ✅ NEW |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Performance Targets
|
||
|
|
|
||
|
|
| Metric | Target | Current V1 |
|
||
|
|
|--------|--------|------------|
|
||
|
|
| Initial Bundle Size | < 500KB (gzipped) | ~450KB |
|
||
|
|
| Time to Interactive | < 3s | ~2.5s |
|
||
|
|
| Points Render (10k) | < 500ms | ~800ms |
|
||
|
|
| Points Render (100k) | < 2s | ~15s |
|
||
|
|
| Memory Usage (idle) | < 100MB | ~120MB |
|
||
|
|
| Memory Usage (100k points) | < 300MB | ~450MB |
|
||
|
|
| FPS (during pan/zoom) | > 55fps | ~45fps |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📖 Documentation
|
||
|
|
|
||
|
|
### For Developers
|
||
|
|
- [PHASE_1_FOUNDATION.md](./PHASE_1_FOUNDATION.md) - API integration
|
||
|
|
- [PHASE_2_CORE_LAYERS.md](./PHASE_2_CORE_LAYERS.md) - Layer architecture
|
||
|
|
- [PHASE_6_PERFORMANCE.md](./PHASE_6_PERFORMANCE.md) - Optimization guide
|
||
|
|
- [PHASE_7_TESTING.md](./PHASE_7_TESTING.md) - Testing strategies
|
||
|
|
|
||
|
|
### For Users
|
||
|
|
- [USER_GUIDE.md](./USER_GUIDE.md) - End-user documentation (in Phase 7)
|
||
|
|
- [API.md](./API.md) - API reference (in Phase 7)
|
||
|
|
|
||
|
|
### For Migration
|
||
|
|
- [MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md) - V1 to V2 migration (in Phase 7)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ Implementation Checklist
|
||
|
|
|
||
|
|
### Pre-Implementation
|
||
|
|
- [x] Phase 1 guide complete
|
||
|
|
- [x] Phase 2 guide complete
|
||
|
|
- [x] Phase 3 guide complete
|
||
|
|
- [x] Phase 4 guide complete
|
||
|
|
- [x] Phase 5 guide complete
|
||
|
|
- [x] Phase 6 guide complete
|
||
|
|
- [x] Phase 7 guide complete
|
||
|
|
- [x] Master index (README) updated
|
||
|
|
|
||
|
|
### Implementation Progress
|
||
|
|
- [ ] Phase 1: Foundation (Week 1-2)
|
||
|
|
- [ ] Phase 2: Core Layers (Week 3-4)
|
||
|
|
- [ ] Phase 3: Advanced Layers (Week 5-6)
|
||
|
|
- [ ] Phase 4: UI Components (Week 7)
|
||
|
|
- [ ] Phase 5: Interactions (Week 8)
|
||
|
|
- [ ] Phase 6: Performance (Week 9)
|
||
|
|
- [ ] Phase 7: Testing & Migration (Week 10)
|
||
|
|
|
||
|
|
### Production Deployment
|
||
|
|
- [ ] All unit tests passing
|
||
|
|
- [ ] All integration tests passing
|
||
|
|
- [ ] Performance targets met
|
||
|
|
- [ ] Migration guide followed
|
||
|
|
- [ ] User documentation published
|
||
|
|
- [ ] V1 fallback available
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🤝 Contributing
|
||
|
|
|
||
|
|
When implementing features from these guides:
|
||
|
|
|
||
|
|
1. **Follow the phases sequentially** - Each phase builds on previous ones
|
||
|
|
2. **Copy-paste code carefully** - All code is production-ready but may need minor adjustments
|
||
|
|
3. **Test thoroughly** - Use provided test examples
|
||
|
|
4. **Update documentation** - Keep guides in sync with implementation
|
||
|
|
5. **Performance first** - Monitor metrics from Phase 6
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 License
|
||
|
|
|
||
|
|
This implementation guide is part of the Dawarich project. See main project LICENSE.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎉 Summary
|
||
|
|
|
||
|
|
**Total Implementation:**
|
||
|
|
- 7 comprehensive phase guides
|
||
|
|
- ~8,000 lines of production-ready code
|
||
|
|
- 100% feature parity with V1
|
||
|
|
- Mobile-first design
|
||
|
|
- Rails & Stimulus best practices
|
||
|
|
- Complete testing suite
|
||
|
|
- Migration guide with rollback plan
|
||
|
|
|
||
|
|
**Ready for implementation!** Start with [PHASE_1_FOUNDATION.md](./PHASE_1_FOUNDATION.md).
|