Add offline task CRUD, phase 1 (PWA)

Lets users create, edit, and complete tasks with no network connection,
queued locally in IndexedDB and replayed via the existing /api/sync/
protocol once back online -- the same protocol the native Android app
already uses, with zero backend changes. The service worker now routes
the dashboard's offline fallback to a small client-rendered task app
instead of the generic "you're offline" page; every other route keeps
the generic fallback.

Conflicts (server row touched elsewhere since last sync) auto-resolve
as "local wins" rather than surfacing a resolution UI. Scope is title/
status/priority/due-date only -- tags, subtasks, time tracking, and
recurrence editing offline are out of scope for this phase.

Also adds the first real test coverage for sync/views.py (previously
untested): new-item creation, soft-delete-bypasses-conflict-check,
conflict detection/discarding, and both resolve_conflict paths.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Keith Smith
2026-09-04 23:01:47 -06:00
co-authored by Claude Sonnet 5
parent 9ac1c41897
commit 922d4d1bf2
9 changed files with 544 additions and 5 deletions
+3 -1
View File
@@ -147,7 +147,9 @@
{% endif %}
{% endblock %}
<script src="{% static 'js/app.js' %}?v=6"></script>
<script src="{% static 'js/offline-db.js' %}?v=7"></script>
<script src="{% static 'js/offline-sync.js' %}?v=7"></script>
<script src="{% static 'js/app.js' %}?v=7"></script>
{% block extra_js %}{% endblock %}
</body>
</html>