Skip to content

Add optional S3 backup sync and Settings page#10

Merged
yoaquim merged 2 commits into
mainfrom
feat/s3-sync
Apr 27, 2026
Merged

Add optional S3 backup sync and Settings page#10
yoaquim merged 2 commits into
mainfrom
feat/s3-sync

Conversation

@yoaquim
Copy link
Copy Markdown
Owner

@yoaquim yoaquim commented Apr 27, 2026

Summary

  • S3 sync module (server/s3.ts) — automatically uploads changed .seam/ files to S3 after every mutation and pipeline completion. Fully optional — no-op when S3_BUCKET is not configured.
  • Settings page (/settings) — configure Pocket API key and S3 backup (bucket, prefix, AWS profile) with test connection and manual sync buttons.
  • First-run detection — amber banner on home page when POCKET_API_KEY is missing, linking to Settings.
  • Mutation hooks — S3 sync wired into all 8 mutation endpoints (people CRUD, pending speakers, recording actions/speakers/deletion) + pipeline completion.
  • Uses @aws-sdk/client-s3 standard credential chain (env vars, ~/.aws/credentials, SSO, IAM roles). Debounced uploads (300ms) batch rapid mutations.
  • Updated README (S3 docs, updated quick start), landing page (capabilities marquee), .env.example, CLAUDE.md.

Test plan

  • npm test — all 134 tests pass (83 TS + 51 Python)
  • npm run lint — 0 errors
  • npm run format:check — clean
  • Start app with no S3 config → Settings page shows, S3 section empty, app works normally
  • Start app with no POCKET_API_KEY → first-run banner appears, links to /settings
  • Configure S3 via Settings → test connection → save → trigger manual sync → verify objects in S3
  • Create/edit/delete a person → verify file syncs to S3
  • Run full pipeline sync → verify all new recordings + analyses land in S3
  • Delete a recording → verify objects removed from S3
  • Remove S3 config → app continues working with no errors

yoaquim added 2 commits April 26, 2026 20:23
S3 sync module that automatically uploads changed .seam/ files to S3
after every mutation (people CRUD, pending speakers, recording actions,
speaker assignment, deletions) and after pipeline completion. Fully
optional — no-op when S3_BUCKET is not configured.

Settings page at /settings for configuring Pocket API key and S3
backup (bucket, prefix, AWS profile) with test connection and manual
sync buttons. First-run detection banner on home page when API key
is missing.

Uses @aws-sdk/client-s3 standard credential chain (env vars, shared
credentials, SSO, IAM roles). Debounced uploads (300ms) to batch
rapid mutations.
Track apiKeyEdited flag instead of comparing against the masked value
from the server. Only includes pocketApiKey in save payload when the
user actually edited the field. Prevents accidentally sending the
masked string back to the server.
@yoaquim yoaquim merged commit 8b45727 into main Apr 27, 2026
1 check passed
@yoaquim yoaquim deleted the feat/s3-sync branch April 27, 2026 03:19
yoaquim added a commit that referenced this pull request Apr 27, 2026
## Summary

- Rebuilds `docs/landing/` from `landing/` source to deploy the S3
backup capability added in #10

## Test plan

- [ ] Verify "Optional S3 backup & sync" appears in the capabilities
marquee on the live site after merge
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant