dawarich/app/javascript/maps_v2/START_HERE.md

7.1 KiB

🚀 Start Here - Maps V2 Implementation

Welcome!

You're about to implement a modern, mobile-first map for Dawarich using incremental MVP approach. This means you can deploy after every single phase and get working software in production early.


📖 Reading Order

1. PHASES_OVERVIEW.md (5 min read)

Understand the philosophy behind incremental implementation and why each phase is deployable.

Key takeaways:

  • Each phase delivers working software
  • E2E tests catch regressions
  • Safe rollback at any point
  • Get user feedback early

2. PHASES_SUMMARY.md (10 min read)

Quick reference for all 8 phases showing what each adds.

Key takeaways:

  • Phase progression from MVP to full feature parity
  • New files created in each phase
  • E2E test coverage
  • Feature flags strategy

3. README.md (10 min read)

Complete guide with architecture, features, and quick start.

Key takeaways:

  • Architecture principles
  • Feature parity table
  • Performance targets
  • Implementation checklist

🎯 Your First Week: Phase 1 MVP

Day 1-2: Setup & Planning

  1. Read PHASE_1_MVP.md (30 min)
  2. Install MapLibre GL JS: npm install maplibre-gl
  3. Review Rails controller setup
  4. Plan your development environment

Day 3-4: Implementation

  1. Create all Phase 1 files (copy-paste from guide)
  2. Update routes (config/routes.rb)
  3. Create controller (app/controllers/maps_v2_controller.rb)
  4. Test locally: Visit /maps_v2

Day 5: Testing

  1. Write E2E tests (e2e/v2/phase-1-mvp.spec.ts)
  2. Run tests: npx playwright test e2e/v2/phase-1-mvp.spec.ts
  3. Fix any failing tests
  4. Manual QA checklist

Day 6-7: Deploy & Validate

  1. Deploy to staging
  2. User acceptance testing
  3. Monitor performance
  4. Deploy to production (if approved)

Success criteria: Users can view location history on a map with points.


📁 File Structure After Phase 1

app/javascript/maps_v2/
├── controllers/
│   └── map_controller.js              ✅ Main controller
├── services/
│   └── api_client.js                  ✅ API wrapper
├── layers/
│   ├── base_layer.js                  ✅ Base class
│   └── points_layer.js                ✅ Points + clustering
├── utils/
│   └── geojson_transformers.js        ✅ API → GeoJSON
└── components/
    └── popup_factory.js               ✅ Point popups

app/views/maps_v2/
└── index.html.erb                     ✅ Main view

app/controllers/
└── maps_v2_controller.rb              ✅ Rails controller

e2e/v2/
├── phase-1-mvp.spec.ts               ✅ E2E tests
└── helpers/
    └── setup.ts                       ✅ Test helpers

Phase 1 Completion Checklist

Code

  • All 6 JavaScript files created
  • View template created
  • Rails controller created
  • Routes updated
  • MapLibre GL JS installed

Functionality

  • Map renders successfully
  • Points load from API
  • Clustering works at low zoom
  • Popups show on point click
  • Month selector changes data
  • Loading indicator shows

Testing

  • E2E tests written
  • All E2E tests pass
  • Manual testing complete
  • No console errors
  • Tested on mobile viewport
  • Tested on desktop viewport

Performance

  • Map loads in < 3 seconds
  • Points render smoothly
  • No memory leaks (DevTools check)

Deployment

  • Deployed to staging
  • Staging URL accessible
  • User acceptance testing
  • Performance acceptable
  • Ready for production

🎉 After Phase 1 Success

Congratulations! You now have a working location history map in production.

Next Steps:

Option A: Continue to Phase 2 (Recommended)

Option B: Get User Feedback

  • Let users try Phase 1
  • Collect feedback
  • Prioritize Phase 2 based on needs

Option C: Expand Phase 3-8

  • Ask: "expand phase 3"
  • I'll create full implementation guide
  • Continue incremental deployment

🆘 Need Help?

Common Questions

Q: Can I skip phases? A: No, each phase builds on the previous. Phase 2 requires Phase 1, etc.

Q: Can I deploy after Phase 1? A: Yes! That's the whole point. Each phase is deployable.

Q: What if Phase 1 has bugs? A: Fix them before moving to Phase 2. Each phase should be stable.

Q: How long does each phase take? A: ~1 week per phase for solo developer. Adjust based on team size.

Q: Can I modify the phases? A: Yes, but maintain the incremental approach. Don't break Phase N when adding Phase N+1.

Getting Unstuck

Map doesn't render:

  • Check browser console for errors
  • Verify MapLibre GL JS is installed
  • Check API key is correct
  • Review Network tab for API calls

Points don't load:

  • Check API response in Network tab
  • Verify date range has data
  • Check GeoJSON transformation
  • Test API endpoint directly

E2E tests fail:

  • Run in headed mode: npx playwright test --headed
  • Check test selectors match your HTML
  • Verify test data exists (demo user has points)
  • Check browser console in test

Deploy fails:

  • Verify all files committed
  • Check for missing dependencies
  • Review Rails logs
  • Test locally first

📊 Progress Tracking

Phase Status Deployed User Feedback
1. MVP 🔲 Todo Not deployed -
2. Routes 🔲 Todo Not deployed -
3. Mobile 🔲 Todo Not deployed -
4. Visits 🔲 Todo Not deployed -
5. Areas 🔲 Todo Not deployed -
6. Advanced 🔲 Todo Not deployed -
7. Realtime 🔲 Todo Not deployed -
8. Performance 🔲 Todo Not deployed -

Update this table as you progress!


🎓 Learning Resources

MapLibre GL JS

Stimulus.js

Playwright


🚀 Ready to Start?

  1. Read PHASE_1_MVP.md
  2. Create the files
  3. Run the tests
  4. Deploy to staging
  5. Celebrate! 🎉

You've got this! Start with Phase 1 and build incrementally.


💡 Pro Tips

  • Commit after each file - Easy to track progress
  • Test continuously - Don't wait until the end
  • Deploy early - Get real user feedback
  • Document decisions - Future you will thank you
  • Keep it simple - Don't over-engineer Phase 1
  • Celebrate wins - Each deployed phase is a victory!

Good luck with your implementation! 🗺️