-
Notifications
You must be signed in to change notification settings - Fork 0
Product Surface & Navigation
Lodestar is structured as a Single Page Application (SPA) hosted within a Tauri v2 shell. The interface is organized around a persistent navigation rail and a dynamic content area driven by SvelteKit routing. The application state and UI are fundamentally driven by the vaultPath, which determines the data context for all surfaces
The application's root layout is defined in +layout.svelte, which implements a two-column grid: a fixed-width navigation rail (.rail) and a flexible content area (.app__content)
The rail serves as the primary navigation hub, categorizing surfaces into functional areas and diagnostic tools
- Brand: Displays "Lodestar" using the display font
- Active Links: Current routes are highlighted using the
.onclass, which inverts the rail's color scheme - Future Surfaces: Placeholders for planned features (
Today,Triage,Pipeline,Network,Patterns) are styled with the.futureclass to indicate they are currently non-functional - Diagnostics: A secondary section containing the
ChecksandSettingssurfaces
Route detection is handled via SvelteKit's page store, which drives the active state of navigation links
| Surface | Path Pattern | Code Entity / Route |
|---|---|---|
| Companies |
/ or /companies/*
|
src/routes/+page.svelte |
| Checks | /checks/* |
src/routes/checks/ (Planned) |
| Settings | /settings/* |
src/routes/settings/ (Planned) |
The entire UI lifecycle is tied to the selection and monitoring of a local Obsidian vault.
When the app starts or a vault is changed, the +layout.svelte component triggers a global synchronization effect. This calls startVaultSync(path), which establishes a bridge between the Rust file watcher and the Svelte stores.
Individual surfaces are responsible for ensuring their respective stores are populated based on the companiesStore.vaultPath.
- Companies Surface: On mount, it checks if
companiesStoreanddomainsStorehave been loaded for the current path - Reactivity: Stores use Svelte 5 runes (
$state,$derived) to provide reactive access to vault data
The following diagram illustrates how the vaultPath flows from the backend through the frontend stores to drive the UI surfaces.
Diagram: Vault Data Flow
flowchart TD
subgraph subGraph2 ["UI Surfaces"]
H["Companies (+page.svelte)"]
I["Checks Surface"]
end
subgraph subGraph1 ["Frontend Stores (Svelte 5)"]
D["vaultSync.ts"]
E["companiesStore"]
F["domainsStore"]
G["checksStore"]
end
subgraph subGraph0 ["Backend (Rust)"]
A["Config/Keychain"]
B["Tauri Commands"]
C["Watcher (watcher.rs)"]
end
A --> B
C --> B
B --> D
D --> E
D --> F
D --> G
E --> H
F --> H
G --> I
The Companies surface (/) is the primary interface for managing the job search pipeline. It features a complex filtering and search system.
The search input supports advanced keyboard interactions for rapid navigation:
- ArrowUp/Down: Move
activeIndexthrough theview.rankedlist - Enter: Opens the currently selected company slug
- Escape: Clears the query and resets focus
The UI state (filters, sort, query) is passed to applyView, which computes the visible subset of companies
- Tabs: Users can toggle between
Queue,All,By domain, andBest prospects - Comboboxes: Multi-select filters for
Status,Domain,Remote,Size, andStage
Diagram: Search & Filter Logic
flowchart LR
subgraph subGraph2 ["Output Components"]
L["List Rendering"]
K["Keyboard Nav"]
D["Domain Grouping"]
end
subgraph Computation
CS["companiesStore.companies"]
AV["applyView()"]
V["view ($derived)"]
end
subgraph subGraph0 ["Input State"]
Q["query ($state)"]
F["filters ($state)"]
S["sortKey ($state)"]
end
CS --> AV
Q --> AV
F --> AV
S --> AV
AV --> V
V --> L
V --> K
V --> D
The Checks surface provides visibility into the background job-fetch pipeline. It tracks execution history, costs, and telemetry.
- Implementation: Driven by
checksStore - Data Model: Loads
CheckSummaryobjects which aggregate costs (credits and USD) and execution status - Navigation: Accessed via
/checksin the rail
The application includes placeholders for several specialized surfaces intended to complete the job search lifecycle:
- Today: A daily dashboard for scheduled tasks and follow-ups
- Triage: High-speed interface for processing new job listings
- Pipeline: Visual Kanban or list view of active applications
- Network: CRM for managing professional contacts and referrals
- Patterns: Analytics on market trends and personal performance