Commit Graph

726 Commits

Author SHA1 Message Date
Jeff Emmett 656b34ac1d chore: switch Transak to staging until production IP whitelisted
Production gateway rejects the access token (error 1002). Staging
flow works end-to-end. Will switch back once Transak whitelists
the server IP for production.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:57:35 -07:00
Jeff Emmett 2dbfbe1a7c chore: add TRANSAK_SECRET override in entrypoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:38:08 -07:00
Jeff Emmett 649f22834e chore: temp override TRANSAK_API_KEY with production key
Infisical still has the staging key; override in entrypoint until
the dashboard is updated with write-access credentials.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:26:51 -07:00
Jeff Emmett e8a54f1eb6 feat(rflows): migrate to Transak API-based widget URL
Transak deprecated direct query-parameter URLs. The new flow uses
their Create Widget URL API with a Partner Access Token to generate
one-time sessionId-based URLs server-side. Also stops exposing the
API key in config endpoints and adds referrerpolicy to the iframe.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:00:46 -07:00
Jeff Emmett 3f71b219bb fix(rflows): remove iframe sandbox restricting Transak widget
The sandbox attribute was blocking Transak's internal redirects,
causing T-INF-101 access denied errors. Transak needs full iframe
capabilities for its payment flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:41:34 -07:00
Jeff Emmett 23f0cce9a1 fix(rflows): hardcode Base mainnet chainId (8453)
Infisical has BASE_CHAIN_ID=84532 (Base Sepolia testnet) which
conflicts with the live Openfort API key. Hardcode 8453 to prevent
testnet/mainnet mismatch.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:38:38 -07:00
Jeff Emmett 30a409b2f8 fix(rflows): fix Openfort wallet label — colon not allowed in name
Openfort rejects ':' in player name query param. Changed label from
'user:email@example.com' to just 'email@example.com'. Also improved
error serialization for Openfort's non-standard APIError objects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:30:27 -07:00
Jeff Emmett 01a794b0f2 fix(rflows): remove Coinbase onramp, use Transak only
Coinbase CDP integration was causing 500 errors ([object Object]).
Simplify to Transak-only: remove CoinbaseOnrampProvider import/init,
provider selection UI, and popup window branch. Also fix error handler
to properly stringify non-Error objects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:24:18 -07:00
Jeff Emmett 1c336c8616 fix: migrate folk-rapp shadow DOM colors to --rs-* CSS variables
folk-rapp.ts (the wrapper for all rApps on canvas) had ~30 hardcoded
dark-mode hex colors in its shadow DOM styles, preventing rApp cards
from responding to light/dark theme switching.

Replaces all hardcoded colors with var(--rs-*) tokens: bg-surface,
text-primary, text-secondary, text-muted, text-inverse, border,
shadow, bg-hover, bg-active, etc.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:13:28 -07:00
Jeff Emmett 8072b250ea feat: canvas background selector — grid, dot, or blank preference
Add user-selectable canvas background style via data-canvas-bg attribute
and CSS custom properties (--rs-canvas-bg-image, --rs-canvas-bg-size).
Three options: grid (default), dot, blank — persisted in localStorage.

- theme.css: new tokens + [data-canvas-bg] selectors
- rstack-identity.ts: Grid/Dot/Blank selector in user dropdown
- canvas.html: CSS vars, zoom-aware scaling, canvas-bg-change listener
- flows.css: use shared bg-image/bg-size vars (fixes rFlows theme bug)
- FOUC prevention in all entry points (shell.ts, create-space.html)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:37:50 -07:00
Jeff Emmett 72100c0922 feat: migrate hardcoded colors to --rs-* CSS variables across 18 modules
Replace structural UI colors with theme-aware CSS custom properties so
all rApp modules respond correctly to light/dark theme switching.

Covers: folk-social-post, folk-forum-dashboard, folk-video-player,
folk-video-chat, folk-thread-gallery, folk-campaign-manager,
folk-wallet-viewer, folk-vote-dashboard, folk-swag-designer,
folk-cart-shop, folk-workflow-block, folk-choices-dashboard,
folk-pubs-editor, folk-book-shelf, folk-flows-app, folk-analytics-view,
folk-campaign-planner, and flows.css canvas background.

Intentionally preserved: platform brand colors, chain colors,
data-viz/chart colors, video player black, call action buttons.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:34:13 -07:00
Jeff Emmett a7063d24f5 feat: PWA support — installable app, Web Push notifications, app badge
Phase 1: Installable PWA
- Add web app manifest with multi-size icons (192, 512, maskable, apple-touch)
- Add PWA meta tags to all entry points (shell.ts, canvas.html, index.html, create-space.html)
- Register service worker on all pages (previously only canvas.html)
- Add manifest.json to precache core list
- Capture beforeinstallprompt for custom install UX

Phase 2: Web Push Notifications
- Add web-push dependency + push_subscriptions DB table
- VAPID key endpoint, subscribe/unsubscribe routes in notification-routes.ts
- Web Push delivery in notify() with auto-cleanup of expired subscriptions
- SW push + notificationclick event handlers
- Client push subscription flow in notification bell component

Phase 3: Install UX Polish
- App badge (setAppBadge/clearAppBadge) on unread count changes
- "Enable push" button in notification panel header

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:35:30 -07:00
Jeff Emmett 1cd8225680 feat(rcal): zoom bar relocation, likelihood feature, rich demo data, remove floating map
- Move zoom bars between calendar and map panes when docked (3-column grid layout)
- Add likelihood/pencil-in feature: tentative events render with dashed borders, lower opacity, percentage badges across all 7 view paths + modal + map markers
- Expand demo data from ~47 to 105 events spanning months -1 to +8 with periodic (yoga, standups), episodic (workshop series, book club), and tentative (25-80% likelihood) events
- Add Community and Health source categories
- Remove floating map option — map is now docked or minimized only
- Decouple zoom bars by default (spatialGranularity=Country, zoomCoupled=false)
- Preserve effective spatial index when decoupling via 'c' key or button
- Extend lunar computation range to month+9

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:07:16 -07:00
Jeff Emmett b2347ec418 feat: per-rApp inline config + module-aware settings panel
Add <rstack-module-setup> component for inline module configuration
(replaces static "Not Configured" instructions). Enhance settings
gear panel to show the current module's settingsSchema at the top.
Pass module-id through shell rendering and tab-cache switching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:45:48 -07:00
Jeff Emmett bb432a6af1 chore: add backlog-notify onStatusChange hook
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 15:30:41 -07:00
Jeff Emmett 1f6b019dbf feat(rmaps): theme support, mobile fix, theme-aware map tiles
Replace all hardcoded dark colors with --rs-* CSS variables in both
demo and room modes. Add LIGHT_STYLE (CARTO voyager) tiles and
MutationObserver to swap MapLibre styles on theme toggle. Make SVG
demo map theme-aware (ocean, continents, graticule, pins). Fix mobile
layout with calc(100vh) sizing instead of fixed heights. Remove
hardcoded theme: "dark" from mod.ts renderShell calls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 14:22:11 -07:00
Jeff Emmett 53af7fc057 feat(rcal): docked map layout + theme-aware tiles; emoji tab badges
- rCal: default map to docked (side-by-side) layout instead of floating overlay
- rCal: switch map tiles between Voyager (light) and dark_all (dark) based on theme
- rCal: boost dark mode map brightness/contrast for readability
- rCal: watch for theme changes via MutationObserver for live tile swapping
- Tab bar: replace text badges with emoji icons, fix badge colors for light themes
- App switcher: fix badge text color to dark for gradient backgrounds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 14:13:28 -07:00
Jeff Emmett 2131d79f38 chore(encryptid): remove temporary OIDC debug logging
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 13:40:31 -07:00
Jeff Emmett 6d0ebf2958 debug(encryptid): add OIDC token exchange debug logging
Temporary logging to diagnose invalid_grant errors on token exchange.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 13:19:32 -07:00
Jeff Emmett 61c735cabd chore(encryptid): brand verification email as rIdentity + footer links
- From address: rIdentity <noreply@ridentity.online>
- Callback URL uses auth.ridentity.online
- Footer links to rIdentity, rStack, rSpace

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 13:03:00 -07:00
Jeff Emmett e37044f599 feat(rflows): redesign canvas toolbar + zoom controls, remove sufficiency badge
Move toolbar from horizontal top-right strip to vertical left-side panel
with larger, more prominent buttons and emoji icons. Replace basic +/-
zoom buttons with a pill-shaped widget showing live zoom percentage and a
fit-to-view button. Remove the "0% Enough" sufficiency badge overlay.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:39:04 -07:00
Jeff Emmett cf7fab25f3 feat(encryptid): OIDC email verification flow for access_denied
When passkey auth succeeds but user's email doesn't match the OIDC
client's allowedEmails, show an inline email verification form instead
of a dead-end error. Sends a branded verification email with a single-use
30-minute token, then updates users.email on callback and lets the user
retry sign-in.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:33:20 -07:00
Jeff Emmett 49f55dffc8 fix: resolve 500s on notifications, cache errors in SW, and [object Object] on-ramp alert
- Notification routes: wrap GET / and GET /count in try-catch, return
  graceful fallbacks instead of 500s when DB table is missing/unavailable
- getUnreadCount: add null safety (row?.count ?? 0) and catch DB errors
- Service worker: add .catch(() => {}) to all cache.put() calls to
  suppress NetworkError on quota-exceeded or corrupted cache entries
- On-ramp error display: coerce err.error to string so alerts show the
  actual message instead of [object Object]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:31:14 -07:00
Jeff Emmett 97da6c729f chore(backlog): add task-105 listmonk newsletter integration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:28:22 -07:00
Jeff Emmett c92ca0fe05 feat(rsocials): newsletter manager + listmonk proxy + backlog tasks
Add Listmonk newsletter management proxy API with role-based auth,
newsletter manager component, password setting type support, and
new backlog task files. Update newsletter subscribe URL.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:24:02 -07:00
Jeff Emmett e1bdc98b98 feat(rsocials): multi-view campaign planner (timeline, platform, table)
Add three alternative views to the campaign planner canvas:
- Timeline: horizontal chronological layout with day columns and phase bars
- Platform: kanban columns grouped by platform with post cards
- Table: compact sortable table with status, platform, content, dates

View switcher in toolbar preserves canvas state when switching. Clicking
any post in alt views navigates back to canvas with that node selected
and centered. Keyboard shortcuts guarded to canvas-only view.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:21:59 -07:00
Jeff Emmett fc65bec9dc feat(app-switcher): emoji badges + recently used section
Replace text abbreviation badges (rN, rPh, etc.) with r+emoji format
(r📝, r📸, etc.), remove duplicate emoji from item rows, and add a
"Recently Used" section at the top of the sidebar persisted via
localStorage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:10:42 -07:00
Jeff Emmett c8e95ed506 feat(rcart): add cart tab to browser extension + install banner in web UI
Extension gets Clipper/Cart mode tabs, space/cart picker with persistence,
JSON-LD product detection, "Add to rCart" context menu, and badge count.
Web UI shows a dismissible indigo banner prompting extension install when
not detected. Content script sets detection marker on rspace.online pages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:07:13 -07:00
Jeff Emmett 932151aa88 fix(rsocials): campaign planner loads with fit-to-view on initial visit
Previously the planner restored a stale zoomed-out viewport from
localStorage, and fitView() could fail silently if the SVG had zero
dimensions during shadow DOM layout. Now: skip viewport restore on
initial load, retry fitView up to 3 rAFs, and clamp min zoom to 50%.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:58:27 -07:00
Jeff Emmett 9a7548e5ca feat(rflows): faucet-shaped source nodes with purchase modal + MetaMask
Replace flat source cards with pipe/valve/spigot faucet SVG. Click opens a
centered purchase modal (label, amount, payment method) instead of the cramped
side panel. Adds MetaMask as a new payment option alongside Card and rIdentity.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:56:13 -07:00
Jeff Emmett 5ded81046c feat(rschedule): add automation canvas link and workflow gallery to landing page
Adds "Automation Canvas" CTA button in hero and "Your Automations" section
that fetches workflows from API and displays as grid cards or compact list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:54:33 -07:00
Jeff Emmett b3f335c7d4 Merge branch 'main' into dev 2026-03-10 11:43:25 -07:00
Jeff Emmett f22bc4781c feat(rtrips): wire up demo dashboard with 6-card live grid
Add /demo route, Vite build entry for trips-demo.ts, and demo page
CSS (hero, toolbar, 2×3 card grid, calendar, polls, funds, cart).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:42:35 -07:00
Jeff Emmett 8bc7787d37 feat(rschedule): n8n-style automation canvas at /:space/rschedule/reminders
Visual workflow builder with drag-and-drop node palette (15 node types across
triggers, conditions, and actions), SVG canvas with Bezier wiring, config panel,
REST-persisted CRUD, topological execution engine, cron tick loop integration,
webhook trigger endpoint, and two demo workflows (proximity notification +
document sign-off pipeline).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:42:34 -07:00
Jeff Emmett cc6b5a946d feat(rschedule): n8n-style automation canvas at /:space/rschedule/reminders
Visual workflow builder with drag-and-drop node palette (15 node types across
triggers, conditions, and actions), SVG canvas with Bezier wiring, config panel,
REST-persisted CRUD, topological execution engine, cron tick loop integration,
webhook trigger endpoint, and two demo workflows (proximity notification +
document sign-off pipeline).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:42:05 -07:00
Jeff Emmett 61b25e299f feat(rinbox): reply/forward, SMTP send, personal/agent inboxes, canvas shape
Add reply, reply-all, and forward endpoints with proper RFC 5322 threading
headers (In-Reply-To, References). SMTP send executes automatically when
approval threshold is met via nodemailer. Personal inbox CRUD lets users
connect their own IMAP accounts. Agent inbox system with regex-based rules
for auto-classify/auto-reply (drafts go through approval workflow).
Multi-sig email canvas shape (folk-multisig-email) with draft/pending/sent
states and 5s polling. Per-space auto-provisioning via onSpaceCreate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 09:51:47 +00:00
Jeff Emmett de2a1baf84 fix(rsocials): serve campaign planner (n8n flow builder) at /campaigns
The /campaigns route was serving folk-campaign-manager (simple list view)
instead of folk-campaign-planner (the drag-and-drop flow canvas). The
planner was fully built but had no route.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 02:37:18 -07:00
Jeff Emmett 5ddc345341 feat(rwallet): port D3 visualizations from rwallet-online
Add 3 interactive D3 visualizations (Balance River Timeline, Multi-Chain
Flow Map, Single-Chain Sankey) as tabbed views alongside the existing
balance table. D3 loaded lazily from CDN on first viz tab click. Demo
mode shows all visualizations with mock TEC Commons Fund data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:47:18 -07:00
Jeff Emmett aad08c2eec fix(rsocials): use space-scoped data instead of global scope
rsocials had defaultScope: "global" but client components passed the raw
space slug, creating threads in space-specific docs (e.g. commonshub).
Server routes then looked in the non-existent "global" doc → 404.
Changed to defaultScope: "space" to match how client actually works.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:27:00 -07:00
Jeff Emmett 12d3e86e13 feat(rcart): merge group shopping into rCart module
Add shared shopping carts with URL product extraction, pooled funding,
and extension support alongside existing cosmolocal catalog/orders.

- Shopping cart schemas (ShoppingCartDoc, ShoppingCartIndexDoc)
- Server-side product extraction (JSON-LD, meta tags, Amazon/Shopify)
- 13 new API routes (cart CRUD, items, contributions, extension endpoints)
- 3-tab UI (Carts/Catalog/Orders) with cart detail, funding progress
- Local-first client subscriptions for real-time cart sync
- Updated landing page to reflect group shopping workflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 01:21:38 -07:00
Jeff Emmett 62a96c164a feat(rvote): Reddit-style vote column + priority trend chart
- Reddit-style vote column: prominent up/down chevrons flanking the score
  on each ranking proposal card, with x² cost indicator
- Quadratic weight picker: compact inline buttons for +2/+3/+5 and -2
  below the proposal description (supplements chevron ±1)
- Priority Trends chart: SVG line chart showing how proposal scores
  evolve over time, with color-coded lines per proposal, end dots,
  grid lines, time labels, and a toggleable legend
- Score history tracking: records snapshots on each vote, seeds 7 days
  of simulated history for demo mode
- Orange for upvotes, blue for downvotes (matching rvote.online palette)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:52:47 -07:00
Jeff Emmett 35dd1c3d77 feat(rmaps): MapLibre GL map, WebSocket room sync, room history + ping friends
Replace the map room placeholder with a real MapLibre GL dark map (CartoDB
dark_all tiles). Port RoomSync from rmaps-online for WebSocket-based
participant/waypoint sync. Add localStorage room history with thumbnail
capture, participant sidebar with ping buttons, continuous GPS sharing
via watchPosition, and waypoint drop. Demo mode unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:44:28 -07:00
Jeff Emmett 192659b49c feat(rvote): enhanced landing, demo page, and dashboard to match rvote.online quality
- Add /demo route with interactive poll page (connection status, reset, live sync)
- Full rd-* CSS system for demo poll cards, badges, loading states
- Fix landing page links: demo.rspace.online/rvote → /rvote/demo
- Enhanced folk-vote-dashboard: inline voting on proposal cards, grouped by
  status (voting/ranking/decided), create-proposal form, tally bars,
  downvote support, richer visual design with progress indicators
- Add vote-demo.ts build step in vite.config.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:42:57 -07:00
Jeff Emmett a5c7bb784e fix(rsocials): subdomain-aware link generation
Links on subdomain routing (e.g. jeff.rspace.online) were including
the space in the path (/demo/rsocials/campaigns) instead of just
/rsocials/campaigns. Added basePath getter to all components and
detect subdomain in the server-rendered hub page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:31:45 -07:00
Jeff Emmett eedf2cf189 feat(canvas): enhanced feed view with cards, sections, and scroll navigation
Replaces minimal feed mode with a polished scroll-through view: shapes wrapped
in card containers with icon/title/type headers, grouped by section (type, date,
position, alpha) with dividers, sticky scroll summary bar with item counter and
clickable section chips for quick navigation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:20:05 -07:00
Jeff Emmett c19142791e feat(rnotes): type-specific notes, voice recording, web clipper, module settings
Phase 1: All 7 note types (NOTE, CODE, BOOKMARK, CLIP, IMAGE, AUDIO, FILE)
with type-specific editors, filter bar, new-note dropdown, and demo notes.
Phase 1.5: Code Snippet and Voice Note slash commands.
Phase 2: Voice recording with 3-tier transcription cascade (server Whisper,
Web Speech API, offline Parakeet TDT), mic button in toolbar, standalone
voice recorder component, upload/transcribe/diarize server routes.
Phase 3: Manifest V3 browser extension (web clipper) retargeted to
rspace.online with slug-based routing, article unlock via Wayback/Google
Cache/archive.ph strategies.
Phase 4: Per-module settings framework — settingsSchema on modules,
moduleSettings in CommunityMeta, gear icon in space settings Modules tab,
rNotes declares defaultNotebookId setting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:39:10 -07:00
Jeff Emmett 63b4294c9c fix: use [rS] favicon.png across all server-rendered pages
Replace inline SVG emoji (🌌) favicons with /favicon.png in all four
shell renderers and both landing page renderers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:25:25 -07:00
Jeff Emmett 981acc5b59 feat(canvas): arrow tool button + 4 arrow style variants
Add arrow button to bottom toolbar with style submenu (smooth, straight,
curved, sketchy). Click toggles connect mode, long-press/right-click opens
style picker. Styles persist via localStorage and sync data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:18:26 -07:00
Jeff Emmett c2b821ba0d feat(rcal): dual zoom lenses — temporal + spatial sliders
Add a visible spatial zoom slider (teal) below the existing temporal slider
(indigo) with a coupling toggle between them. When coupled, dragging either
track moves both; when decoupled, spatial slider controls map zoom independently.
Fix T_TO_S mapping gaps (Season→Region, Decade→Planet).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:11:37 -07:00
Jeff Emmett 5053d69ade fix(rcal): map shows only events from visible calendar period
Previously the map rendered ALL events regardless of which time period
the calendar was displaying. Now markers, transit lines, and map bounds
are filtered to the visible date range (day/week/month/season/year).
The map auto-fits to the bounds of visible located events when zoom
coupling is active.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:54:05 -07:00