BlueSky & more on desktop lazurite.stormlightlabs.org/
tauri rust typescript bluesky appview atproto solid
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs: expanded v0.1 roadmap

+189 -33
-22
docs/tasks/08-release.md
··· 1 - # 08: Release 2 - 3 - ## Tasks 4 - 5 - - [ ] App icon and branding 6 - - [ ] Auto-update via `tauri-plugin-updater` pointing to GitHub Releases 7 - - [ ] macOS code signing and notarization 8 - - [ ] DMG packaging via `tauri build` 9 - - [ ] Smoke test: fresh install flow, OAuth login, timeline load, search sync 10 - 11 - ## Parking Lot 12 - 13 - - Settings 14 - 1. Clear cache 15 - 2. Reset 16 - 3. Logs 17 - 4. Theme (light/dark/auto) 18 - 5. Timeline refresh interval 19 - 6. Notification preferences 20 - 7. Data export (JSON/CSV) 21 - 8. Account management (add/remove accounts) 22 - 9. About (version info, license, contributors, support links)
+30
docs/tasks/08-settings.md
··· 1 + # Task 08: Settings 2 + 3 + Spec: TBD 4 + 5 + ## Steps 6 + 7 + ### Backend — `src-tauri/src/settings.rs` 8 + 9 + - [ ] `get_settings()` — read user preferences from SQLite `settings` table, return as typed struct 10 + - [ ] `update_setting(key: String, value: String)` — upsert a key-value pair in `settings` table 11 + - [ ] `clear_cache()` — delete cached feed data, embedded vectors, and FTS5 index; vacuum database 12 + - [ ] `reset_app()` — drop all user data tables and re-run migrations; clear auth tokens 13 + - [ ] `export_data(format: String, path: String)` — export user data as JSON or CSV to chosen path 14 + - [ ] `get_log_entries(limit: u32, level: Option<String>)` — read recent log entries for the in-app log viewer 15 + - [ ] SQLite migration: `settings` table (`key TEXT PRIMARY KEY, value TEXT, updated_at TEXT`) 16 + 17 + ### Frontend — Settings View 18 + 19 + - [ ] Settings route (`/settings`) accessible from app rail icon (`i-ri-settings-3-line`) 20 + - [ ] Section-based layout using `surface_container` cards with `xl` radius: 21 + 1. **Appearance** — Theme toggle (light/dark/auto), `Motion` crossfade on theme switch 22 + 2. **Timeline** — Refresh interval selector (30s, 1m, 2m, 5m, manual) 23 + 3. **Notifications** — Toggle desktop notifications, badge count, notification sound 24 + 4. **Data** — Clear cache (with size display), export (JSON/CSV), reset app (with confirmation dialog) 25 + 5. **Accounts** — List active accounts, add/remove account flows (reuses OAuth from Task 02) 26 + 6. **Logs** — Collapsible log viewer with level filtering (`info`, `warn`, `error`) 27 + 7. **About** — Version info, license (MIT), contributors, support links 28 + - [ ] `Presence` slide transitions between setting sections 29 + - [ ] Keyboard shortcut: `,` to open settings from anywhere 30 + - [ ] Confirmation modal for destructive actions (clear cache, reset app, remove account) using glass overlay
+63
docs/tasks/09-multicolumn.md
··· 1 + # Task 09: Multicolumn Views 2 + 3 + Spec: TBD 4 + 5 + ## Overview 6 + 7 + TweetDeck-style multicolumn layout allowing users to view multiple feeds and/or AT Explorer panels side by side. Each column is an independent, scrollable pane that can display any feed (timeline, custom feed, list feed) or an explorer view (PDS browser, repo browser, collection/record views). 8 + 9 + ## Steps 10 + 11 + ### Backend — `src-tauri/src/columns.rs` 12 + 13 + - [ ] SQLite migration: `columns` table (`id TEXT PRIMARY KEY, account_did TEXT, kind TEXT, config TEXT, position INTEGER, width TEXT, created_at TEXT`) 14 + - `kind`: `feed` | `explorer` — determines the column type 15 + - `config`: JSON blob — for feeds: `{ feed_uri, feed_type }`, for explorer: `{ target_uri }` 16 + - `width`: `narrow` | `standard` | `wide` 17 + - [ ] `get_columns(account_did: String)` — return ordered column list for the active account 18 + - [ ] `add_column(account_did: String, kind: String, config: String, position: Option<u32>)` — insert at position or append 19 + - [ ] `remove_column(id: String)` — delete column by ID 20 + - [ ] `reorder_columns(ids: Vec<String>)` — bulk update positions 21 + - [ ] `update_column(id: String, config: Option<String>, width: Option<String>)` — modify column settings 22 + 23 + ### Frontend — Column Layout 24 + 25 + - [ ] Multicolumn route (`/deck`) accessible from app rail icon (`i-ri-layout-column-line`) 26 + - [ ] Horizontal scrolling container with snap points per column 27 + - [ ] Three column width presets: narrow (320px), standard (420px), wide (560px) 28 + - [ ] Column header bar: feed/explorer name, width toggle, close button, drag handle 29 + - [ ] Drag-and-drop column reordering with `Motion` position animation 30 + - [ ] `Presence` scale-in animation when adding a column, scale-out on removal 31 + - [ ] Responsive: collapse to single-column on narrow windows with horizontal swipe navigation 32 + 33 + ### Frontend — Column Types 34 + 35 + #### Feed Column 36 + 37 + - [ ] Reuse existing feed content loader and post card components from Task 03 38 + - [ ] Independent scroll position and cursor pagination per column 39 + - [ ] Column-specific feed preferences (hide reposts/replies/quotes) 40 + - [ ] Inline thread expansion (click post to expand thread within the column) 41 + 42 + #### Explorer Column 43 + 44 + - [ ] Reuse existing explorer views from Task 05 (PDS, repo, collection, record) 45 + - [ ] Independent navigation stack per column (breadcrumbs, back/forward) 46 + - [ ] Compact record rendering mode for narrower column widths 47 + 48 + ### Frontend — Column Management 49 + 50 + - [ ] "Add column" button (`i-ri-add-line`) opens a picker panel: 51 + - Feed picker: lists pinned feeds, saved feeds, list feeds 52 + - Explorer picker: input field for at:// URI, handle, DID, or PDS URL 53 + - [ ] Right-click column header for context menu (resize, duplicate, close) 54 + - [ ] Keyboard shortcuts: `Ctrl+Shift+N` add column, `Ctrl+Shift+W` close focused column, `Ctrl+[/]` focus prev/next column 55 + - [ ] Persist column layout to SQLite per account — restore on app launch 56 + 57 + ### Parking Lot 58 + 59 + - [ ] Column templates / saved layouts (e.g., "Research", "Timeline + Notifications") 60 + - [ ] Notification column type 61 + - [ ] Search results column type 62 + - [ ] Column-level auto-refresh interval override 63 + - [ ] Shared scroll sync between related columns
+80
docs/tasks/10-release.md
··· 1 + # Task 10: Release 2 + 3 + ## Overview 4 + 5 + Cross-platform build, signing, packaging, and auto-update pipeline targeting macOS, Windows, and Linux. All packaging uses `tauri build` with platform-specific configuration. CI/CD runs on GitHub Actions with separate jobs per platform. 6 + 7 + ## Steps 8 + 9 + ### App Identity & Branding 10 + 11 + - [ ] Final app icon set: generate all required sizes from source SVG 12 + - macOS: `icon.icns` (16–1024px) 13 + - Windows: `icon.ico` (16–256px) 14 + - Linux: `icon.png` at 32, 128, 256, 512px 15 + - [ ] Update `tauri.conf.json` — `productName`, `identifier`, window title, bundle metadata (description, copyright, category) 16 + - [ ] Splash / welcome screen for first-launch flow 17 + 18 + ### macOS 19 + 20 + - [ ] Code signing via Apple Developer certificate (`APPLE_CERTIFICATE`, `APPLE_CERTIFICATE_PASSWORD` secrets) 21 + - [ ] Notarization via `notarytool` (`APPLE_ID`, `APPLE_PASSWORD`, `APPLE_TEAM_ID` secrets) 22 + - [ ] DMG packaging — `tauri build` produces `.dmg` by default on macOS 23 + - [ ] Universal binary (x86_64 + aarch64) via `--target universal-apple-darwin` 24 + - [ ] Verify Gatekeeper passes on clean macOS install 25 + 26 + ### Windows 27 + 28 + - [ ] NSIS installer — `tauri build` default on Windows; configure install path, start menu shortcut, desktop shortcut 29 + - [ ] Optional: MSI installer via `bundle > targets` configuration 30 + - [ ] Code signing via certificate (`WINDOWS_CERTIFICATE`, `WINDOWS_CERTIFICATE_PASSWORD` secrets) 31 + - Evaluate EV vs OV certificate for SmartScreen reputation 32 + - [ ] Portable `.exe` variant (no install required) via WiX or NSIS portable config 33 + - [ ] Verify Windows Defender / SmartScreen does not flag the installer 34 + 35 + ### Linux 36 + 37 + - [ ] AppImage packaging — portable, no-install binary (primary distribution format) 38 + - [ ] `.deb` package for Debian/Ubuntu — configure dependencies (libwebkit2gtk, libssl) 39 + - [ ] `.rpm` package for Fedora/RHEL 40 + - [ ] Desktop entry file with icon, categories, and MIME type for `at://` deep links 41 + - [ ] Verify launch on Ubuntu 22.04+, Fedora 38+, and Arch (via AppImage) 42 + 43 + ### Auto-Update — `tauri-plugin-updater` 44 + 45 + - [ ] Add `tauri-plugin-updater` to `Cargo.toml` dependencies (currently commented out) 46 + - [ ] Configure update endpoint pointing to GitHub Releases (`latest.json` / release assets) 47 + - [ ] Implement update check on app launch + periodic background check (configurable in Settings) 48 + - [ ] Update available notification with changelog summary, install-on-quit option 49 + - [ ] Differential updates where supported (Tauri v2 update mechanism) 50 + - [ ] Signing update bundles with Tauri's update keypair (`TAURI_SIGNING_PRIVATE_KEY`, `TAURI_SIGNING_PRIVATE_KEY_PASSWORD`) 51 + 52 + ### CI/CD — GitHub Actions 53 + 54 + - [ ] Matrix build workflow: `[macos-latest, windows-latest, ubuntu-latest]` 55 + - macOS job: build universal binary, sign, notarize, produce `.dmg` 56 + - Windows job: build NSIS installer, sign, produce `.exe` 57 + - Linux job: build AppImage, `.deb`, `.rpm` 58 + - [ ] Trigger: push to `release/*` branch or manual `workflow_dispatch` 59 + - [ ] Upload all artifacts to GitHub Release (draft) with checksums 60 + - [ ] Generate `latest.json` manifest for `tauri-plugin-updater` 61 + - [ ] Version bump automation: tag-based versioning synced to `tauri.conf.json` and `Cargo.toml` 62 + 63 + ### Smoke Test 64 + 65 + - [ ] Fresh install flow: download, install, first-launch welcome 66 + - [ ] OAuth login: full loopback flow on each platform 67 + - [ ] Timeline load: verify feed rendering, scroll, keyboard shortcuts 68 + - [ ] Search sync: confirm FTS5 + embedding pipeline runs post-login 69 + - [ ] Auto-update: verify update detection and installation from a prior version 70 + - [ ] Deep links: `at://` URI opens app and navigates to explorer view 71 + - [ ] Multicolumn: verify column persistence across app restart 72 + 73 + ### Parking Lot 74 + 75 + - [ ] Flathub / Snap Store submission for Linux 76 + - [ ] Windows Store (MSIX) submission 77 + - [ ] macOS App Store submission 78 + - [ ] Crash reporting integration (Sentry or similar) 79 + - [ ] Analytics / telemetry (opt-in, privacy-respecting) 80 + - [ ] Beta / nightly release channel
+16 -11
docs/tasks/mvp.md
··· 1 - # Lazurite Desktop — MVP Task Breakdown 1 + # Lazurite Desktop - MVP Task Breakdown (v0.1.0) 2 2 3 - Tasks are grouped by module. Each references the relevant spec. Polish (keyboard shortcuts, animations via `solid-motionone`, loading states, accessibility) is built into each task — not deferred. 3 + Tasks are grouped by module. Each references the relevant spec. Polish (keyboard shortcuts, animations via `solid-motionone`, loading states, accessibility) is built into each task - not deferred. 4 4 5 5 ## Phase 1: Foundation 6 6 7 - - [Rust Backend Setup](./01-backend-setup.md) — Cargo deps, SQLite, Tauri commands scaffold, theme, error toast, `solid-motionone` 8 - - [Auth & Accounts](./02-auth.md) — OAuth loopback, multi-account, session persistence, account switcher animations 7 + - [Rust Backend Setup](./01-backend-setup.md) - Cargo deps, SQLite, Tauri commands scaffold, theme, error toast, `solid-motionone` 8 + - [Auth & Accounts](./02-auth.md) - OAuth loopback, multi-account, session persistence, account switcher animations 9 9 10 10 ## Phase 2: Core Social 11 11 12 - - [Feeds](./03-feeds.md) — Pinned feed tabs, post rendering, composer, keyboard shortcuts, scroll animations 13 - - [Notifications](./04-notifications.md) �� Mentions, activity, system notifications, badge animations 12 + - [Feeds](./03-feeds.md) - Pinned feed tabs, post rendering, composer, keyboard shortcuts, scroll animations 13 + - [Notifications](./04-notifications.md) - Mentions, activity, system notifications, badge animations 14 14 15 15 ## Phase 3: Power Features 16 16 17 - - [AT Explorer](./05-explorer.md) — pds.ls-style data browser, at:// deep links, view transitions, keyboard nav 18 - - [Search & Embeddings](./06-search.md) — FTS5, fastembed, sqlite-vec, sync pipeline, result animations 17 + - [AT Explorer](./05-explorer.md) - pds.ls-style data browser, at:// deep links, view transitions, keyboard nav 18 + - [Search & Embeddings](./06-search.md) - FTS5, fastembed, sqlite-vec, sync pipeline, result animations 19 + 20 + ## Phase 4: Long-Form & Polish 21 + 22 + - [Standard.site](./07-standard-site.md) - Publication/document views, subscriptions, reading view transitions 23 + - [Settings](./08-settings.md) - Theme, notifications, data export, cache management, account management, logs 24 + - [Multicolumn Views](./09-multicolumn.md) - TweetDeck-style side-by-side feeds and AT Explorer panels 19 25 20 - ## Phase 4: Long-Form & Release 26 + ## Phase 5: Release 21 27 22 - - [Standard.site](./07-standard-site.md) — Publication/document views, subscriptions, reading view transitions 23 - - [Release](./08-release.md) — macOS code signing, notarization, DMG packaging, auto-update 28 + - [Release](./10-release.md) - Cross-platform build (macOS, Windows, Linux), code signing, auto-update, CI/CD