Replace manual backend config with auto JWT auth
Some checks failed
CI / build-and-deploy (push) Failing after 6s

Device auto-registers on first launch using hardcoded backend URL
and anon key (MarksAuth.swift). 90-day JWT stored in UserDefaults,
refreshed transparently. No settings fields needed — ClaudeService
is always active and non-optional throughout the app.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Krishna Kumar
2026-05-22 14:14:54 -05:00
parent 9f0a10d228
commit 525e6557c8
11 changed files with 143 additions and 137 deletions

View File

@@ -61,12 +61,10 @@ struct BookmarksView: View {
} label: {
Label("Open in Safari", systemImage: "safari")
}
if viewModel.claude != nil {
Button {
podcastBookmark = bookmark
} label: {
Label("Convert to Podcast", systemImage: "headphones")
}
Button {
podcastBookmark = bookmark
} label: {
Label("Convert to Podcast", systemImage: "headphones")
}
Divider()
Button {
@@ -92,22 +90,20 @@ struct BookmarksView: View {
.navigationBarTitleDisplayMode(.large)
.toolbar {
ToolbarItem(placement: .topBarLeading) {
if viewModel.claude != nil {
Menu {
Button {
Task { await viewModel.generateSmartCollections() }
showCollections = true
} label: {
Label("Smart Collections", systemImage: "sparkles")
}
Button {
Task { await viewModel.enrichAll() }
} label: {
Label("Enrich All with AI", systemImage: "wand.and.stars")
}
Menu {
Button {
Task { await viewModel.generateSmartCollections() }
showCollections = true
} label: {
Image(systemName: "sparkles")
Label("Smart Collections", systemImage: "sparkles")
}
Button {
Task { await viewModel.enrichAll() }
} label: {
Label("Enrich All with AI", systemImage: "wand.and.stars")
}
} label: {
Image(systemName: "sparkles")
}
}
ToolbarItem(placement: .topBarTrailing) {
@@ -163,9 +159,7 @@ struct BookmarksView: View {
if new == nil { readingProgress = ReadingProgress.all() }
}
.sheet(item: $podcastBookmark) { bookmark in
if let claude = viewModel.claude {
PodcastPlayerView(articleUrl: bookmark.url, claude: claude)
}
PodcastPlayerView(articleUrl: bookmark.url, claude: viewModel.claude)
}
.refreshable {
await viewModel.load()