Phase 6: Background Sync & Polish #48

Closed
opened 2026-05-16 18:17:54 -05:00 by null · 1 comment
Owner

Goal

Polish the completed manual, import, matching, and SimpleFIN workflow. Add optional scheduled sync, better error display, match review queue, docs, and tests.

Only start after Phases 1-5 are stable.

Depends on: Phase 1-5 all complete (#43, #44, #45, #46, #47)
Parent: #42


Scope

Implement

  • Optional scheduled background sync
  • Sync interval setting
  • Better error display in UI
  • Match review queue (unmatched, suggested, ignored, recently matched)
  • README docs for all new features
  • Docker env example updates
  • Tests for key paths
  • UI polish pass

Do NOT implement

  • New data models (unless fixing bugs)
  • Plaid/GoCardless
  • Auto-mark bills paid
  • Full budgeting features

Background Sync

BANK_SYNC_BACKGROUND_ENABLED=false
BANK_SYNC_INTERVAL_MINUTES=360

Rules:

  • Disabled by default
  • Manual sync still works when background is off
  • Failed sync does not crash the app
  • Store last_error and last_sync_at
  • Basic retry/backoff if practical

Match Review Queue

A view for:

  • Unmatched transactions
  • Suggested matches
  • Ignored transactions
  • Recently matched transactions

Keep it boring and useful.


Docs Updates

README sections for:

  • Manual payment history
  • CSV import
  • Transaction matching
  • SimpleFIN setup
  • Required env vars
  • Docker examples
  • Security notes
  • Backup notes

Tests

Add or expand tests for:

  • Payment creation
  • Transaction creation
  • CSV import dedupe
  • Matching and unmatching
  • Bill status recalculation
  • SimpleFIN secret encryption
  • Sync disabled behavior
  • Background sync failure handling

Acceptance Criteria

  • Background sync can be enabled or disabled
  • Failed sync does not break the app
  • Last sync status is visible
  • Match review queue works
  • README explains all new features
  • Docker example env updated
  • Tests cover key paths

Previous → Phase 5 (#47)

## Goal Polish the completed manual, import, matching, and SimpleFIN workflow. Add optional scheduled sync, better error display, match review queue, docs, and tests. **Only start after Phases 1-5 are stable.** **Depends on:** Phase 1-5 all complete (#43, #44, #45, #46, #47) **Parent:** #42 --- ## Scope ### Implement - Optional scheduled background sync - Sync interval setting - Better error display in UI - Match review queue (unmatched, suggested, ignored, recently matched) - README docs for all new features - Docker env example updates - Tests for key paths - UI polish pass ### Do NOT implement - New data models (unless fixing bugs) - Plaid/GoCardless - Auto-mark bills paid - Full budgeting features --- ## Background Sync ```env BANK_SYNC_BACKGROUND_ENABLED=false BANK_SYNC_INTERVAL_MINUTES=360 ``` Rules: - Disabled by default - Manual sync still works when background is off - Failed sync does not crash the app - Store last_error and last_sync_at - Basic retry/backoff if practical --- ## Match Review Queue A view for: - Unmatched transactions - Suggested matches - Ignored transactions - Recently matched transactions Keep it boring and useful. --- ## Docs Updates README sections for: - Manual payment history - CSV import - Transaction matching - SimpleFIN setup - Required env vars - Docker examples - Security notes - Backup notes --- ## Tests Add or expand tests for: - Payment creation - Transaction creation - CSV import dedupe - Matching and unmatching - Bill status recalculation - SimpleFIN secret encryption - Sync disabled behavior - Background sync failure handling --- ## Acceptance Criteria - [ ] Background sync can be enabled or disabled - [ ] Failed sync does not break the app - [ ] Last sync status is visible - [ ] Match review queue works - [ ] README explains all new features - [ ] Docker example env updated - [ ] Tests cover key paths --- **Previous → Phase 5 (#47)**
null added the
backend
feature
frontend
priority:low
labels 2026-05-16 18:18:02 -05:00
Author
Owner

Added getOidcClientSecret() helper — reads from DB, decrypts with fallback to plaintext for any legacy value saved before this fix
Replaced 3 read sites (getOidcConfig, getOidcConfigStatus, buildSubmittedOidcConfig) to use the helper instead of raw getSetting
Line 359: write path now calls encryptSecret(...) before setSetting
db/database.js

Added migration v0.79 — on first startup after deploy, finds any existing plaintext oidc_client_secret in the settings table and encrypts it in place. Safe to run if already encrypted (tries to decrypt first, skips if it succeeds)

Added getOidcClientSecret() helper — reads from DB, decrypts with fallback to plaintext for any legacy value saved before this fix Replaced 3 read sites (getOidcConfig, getOidcConfigStatus, buildSubmittedOidcConfig) to use the helper instead of raw getSetting Line 359: write path now calls encryptSecret(...) before setSetting db/database.js Added migration v0.79 — on first startup after deploy, finds any existing plaintext oidc_client_secret in the settings table and encrypts it in place. Safe to run if already encrypted (tries to decrypt first, skips if it succeeds)
null closed this issue 2026-06-03 19:57:25 -05:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: null/BillTracker#48
No description provided.