Sovereign Sandbox v2: Stateless server with IndexedDB storage#59
Merged
fatherlinux merged 3 commits intomainfrom Jan 26, 2026
Merged
Sovereign Sandbox v2: Stateless server with IndexedDB storage#59fatherlinux merged 3 commits intomainfrom
fatherlinux merged 3 commits intomainfrom
Conversation
- Add IndexedDB storage layer (static/js/storage.js) for browser-side data - Remove SQLite dependency - server is now completely stateless - Store OAuth credentials in browser IndexedDB, not server session - Add bidirectional sync with Google Sheets (pomodoros by ID, settings from Sheet) - Add duplicate prevention with promise-based sync lock - Add /api/sheets/pomodoros/count endpoint for efficient counting - Add /api/sheets/deduplicate endpoint to clean up duplicate rows - Add docs/DATA_ARCHITECTURE.md explaining the architecture - Update privacy policy for stateless architecture and CSV import/export - Update tests for stateless server architecture Privacy improvements: - Server never stores user data - Credentials stored only in browser - No analytics, no telemetry, no tracking Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add /api/sheets/pomodoros/batch endpoint for bulk uploads - Add replace_all mode to save_settings() for full replacement - Update migrateLocalToBackend() to use batch endpoint - Update migrateLocalSettingsToBackend() with replaceAll parameter - Fix overwriteGoogle() to properly push local settings to Sheets - Add .gitignore entries for node_modules, package.json, Screenshot.png - Add PLR0915 exception for auth_callback (complex OAuth flow) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename 'data' to 'batch_request' in proxy_create_pomodoros_batch - Rename 'data' to 'settings_payload' in proxy_save_settings - Remove debug print statement Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements a complete architectural overhaul for privacy-first data storage:
Key Changes
static/js/storage.js- IndexedDB storage layer (1354 lines)docs/DATA_ARCHITECTURE.md- Architecture documentation for users, architects, developers, sysadminsapp.py- Remove SQLite, add stateless proxy endpointssheets_storage.py- Add deduplication functiontemplates/privacy.html- Reflect stateless architectureNew API Endpoints
GET /api/sheets/pomodoros/count- Efficient count (fetches IDs only)POST /api/sheets/deduplicate- Remove duplicate rows from SheetPrivacy Improvements
Test Plan
Closes #52
🤖 Generated with Claude Code