Transform ListDock into a PWA with cross-instance data synchronization using Google Drive as the storage backend.
Phase 6: Sharing & Collaboration
- Install
vite-plugin-pwadependencies - Configure
vite.config.tsfor Extension and PWA builds - Create
usePlatform.tshook for platform detection - Set up CI/CD for web deployment
- Verify PWA installation on mobile/desktop
- Status: done
- Create
LayoutSwitchercomponent - Implement Sidebar, Mobile, and Desktop layouts
- Responsive navigation system (Bottom Bar for mobile)
- Verify layout switching via DevTools
- Status: done
- Initialize Firebase Auth
- Configure Google OAuth (drive.file scope)
- Implement Account section and Login/Logout UI
- Secure token management service
- Verify auth cross-device
- Status: done
- Create
driveApi.tswrapper (REST endpoints for search/read/create/update) - Map Lists to Drive files (
list-dock-sync.jsonschema) - Implement Sync Search for shared files
- Verify file creation/updates in Drive
- Status: done
- Update Zustand store (deletedItems tombstone log, timestamps, autoSync trigger)
- Implement CRDT Merge logic (LWW-Element-Set with parent-child safety loops)
- PWA-to-Extension Secure Auth Bridge (externally_connectable messaging)
- Background Sync Worker & Silent Re-auth (native extension identity + GIS environment guards)
- Verify sync under network/offline conditions
- Status: done
- Permissions API for shared lists
- Share UI and Collaborator management
- Cross-List task movement logic
- UI Polish and Sync indicators
- Final cross-device verification
- Status: pending
- How will the Google Drive App Data folder be managed across different sessions? (Use
drive.filescope and app-specific folder) - What is the conflict resolution strategy for concurrent edits? (Last Write Wins using timestamps in CRDT-like merge)
| Decision | Rationale |
|---|---|
| Google Drive (app-specific folder) | Free, user-owned storage; minimizes privacy concerns; fits PWA/Extension hybrid model |
| vite-plugin-pwa | Simplest way to add PWA capabilities to Vite-based project |
| layout-based responsive UI | Ensures optimal UX across Extension sidepanel, Mobile PWA, and Desktop Web |
| Error | Attempt | Resolution |
|---|---|---|
| Port 3102 conflict | 1 | (Resolved in previous session) |
| Babel "Unexpected token" in SettingsPopup.tsx | 1 | (Resolved in previous session) |
- Incorporating existing progress from DEVELOPMENT_PHASES.md.
- Phase 1 & 2 are mostly done; focus is moving towards Authentication (Phase 3).