Features added this session: - Target comparison: side-by-side overlay (CompareModal) from Targets page via ⊕ button on each row; shows altitude curves, key times, filter recommendations and per-filter integration progress for two targets simultaneously - Integration goal progress dashboard card: per-target keeper minutes vs goal hours (from CLAUDE.md §16.3) broken down by filter, with color-coded progress bars; powered by new stats.integration_goals backend query - Session planning timeline: Gantt-style "Plan Tonight" section on Dashboard (PlanningTimeline component) — search targets, set durations, sequential scheduling from dusk, overrun warnings, clipboard export - Slew-optimized run order toggle (nearest-neighbor sort by RA/Dec angular distance) - Best Nights 14-day card + Monthly Highlights card on Dashboard Catalog expansions: - Sharpless (Sh2), VdB, LDN, Barnard dark nebulae, LBN, Melotte, Collinder, Gum, RCW, Abell PN, Abell GC, PGC bright subset - Caldwell/Arp/Melotte/Collinder number columns + cross-reference maps - Weather score multiplier applied to composite sort - galaxy_cluster type (ACO badge) throughout TypeBadge, CSS, filter chips Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
13 KiB
Astronome — TODO
Missing Spec Items
- Settings — catalog info — shows last refreshed date + DB size in App Info table
- Detail Drawer Tab 3 — workflow card — WorkflowCard renders steps + notes (was already built, now confirmed)
- Stats page — guiding charts — Guiding RMS over time as a proper LineChart (Total/RA/Dec lines)
- Calendar day panel — weather — clicking a day shows go/nogo, temp, cloud cover, seeing from 7timer
- New Moon timeline — best targets overlay — top 3 emission nebulae shown per new moon window (from
/api/calendar/new-moon-windows)
New Features
High Priority
- Integration progress tracker — per-target progress bar (% of goal hours) with color coding; goal hours from CLAUDE.md §16.3 table; shown on TargetRow in a "Goal" column
- Nightly recompute trigger — "Recompute Tonight" button in Settings → POST
/api/nightly/recompute - Export imaging log as CSV — "↓ Export Log CSV" button on Stats page → GET
/api/log/export
Medium Priority
- Object planning notes — per-target free-text field in Detail Drawer Tab 4; saved to
target_notestable; auto-saves on blur - Filter accumulation breakdown — keepers-only integration per filter shown in Detail Drawer Tab 4 (above session list); from
/api/log/:idfilter_breakdownfield - Moon avoidance cone on altitude curve — blue shading when moon is above horizon; amber shading when moon sep < 30°
Nice to Have
- Seasonal visibility heatmap —
YearlyVisibility.tsxreplaced bar chart with a 12×31 SVG calendar heatmap. Each cell = one day, colored byalt_at_midnight(green/teal/amber/muted). Blue moon overlay (opacity ∝ illumination). Hover tooltip shows date, alt, usable hours, moon %. Today ring in amber.
Bugs & Fixes
-
Fix gallery image upload — root cause: ServeDir was mounted at URL
/data/gallery(nginx sends that path to frontend, not backend). Fixed by remounting ServeDir at/api/gallery/files/. Updated all gallery image URL formats ingallery.rs. Also fixedapi.gallery.uploadto throw on non-2xx responses so errors surface in the UI. -
Fix Custom Object coordinate calculations — root cause:
get_target,get_visibility,get_curve,get_filters,get_yearly, andget_workflow_handlerintargets.rsall queried only thecatalogtable, returning 404 for custom objects. Fixed by adding alookup_coordshelper that falls back tocustom_targetstable;get_targetnow returns a full response shape with null catalog-specific fields for custom objects.
Observing & Planning
-
Improve "best tonight" algorithm with composite score — composite score
(alt*0.4 + fill*0.3 + usable*0.2 + moon*0.1)is the default sort inlist_targets. "Best Score Tonight" and "Altitude tonight" both exposed as sort options in Targets page. -
Custom horizon in target visibility — fixed
usable_min/best_start/endinvisibility.rsto usemax(30°, horizon_alt(az))instead of flat 30°. Addedis_visible_tonightcolumn tonightly_cache(with runtime migration). Nightly precompute now stores the flag.list_targetstonight filter usesis_visible_tonight = 1with fallback tomax_alt_deg >= 15for pre-migration rows. -
Show custom and solar system objects in Targets list —
list_targetsappends custom_targets (with RA/Dec) on page 1 with live-computed current altitude. Frontend:is_customflag renders a teal "CUSTOM" pill in TargetRow; TypeBadge extended with USR/SAT/CMT labels; "Custom" toggle chip added to filter bar (teal, default on). -
Greatly improve Targets filtering and sorting:
- Multi-select object type filter — multi-select chips; comma-separated type param parsed server-side.
- Best tonight sort — "Best Score Tonight" is default; "Altitude tonight" added as explicit sort option.
- Persist filter state — all filter/sort state saved to
localStorage(astronome_targets_filters_v2). - Additional filter dimensions — min altitude, min usable time already present.
- Remaining: multi-select catalogue filter, FOV/SB ranges, constellation multi-select, session window.
-
Add Astrobin search links in target detail — added two Astrobin links (by common name and by catalog ID) in Detail Drawer Tab 2, plus a GoTo coordinates card with RA/Dec copy buttons and live hour angle / east–west meridian indicator.
-
Moon path on altitude graph — already implemented:
CurvePoint.moon_alt_degpopulated in backend, rendered as dim blue dashedLineinAltitudeCurve.tsx; moon-above-horizon windows shaded in subtle blue, close-approach (<30°) shaded in amber. -
Merge "Tonight" and "Target" tabs in Detail Drawer — combined into single "Overview" tab: DSS + metadata left column, altitude curve + key times right column; GoTo card + Aladin below the fold.
-
Tonight run order — Dashboard "Tonight's Run Order" Gantt-style card: each target row shows a bar across the night window (colored by filter), with start→end time. Targets sorted by
best_start_utc. Also added "Run order (imaging window)" sort option to Targets page. -
Moon separation live warning — red banner on Dashboard when the moon is within 20° of any top-5 tonight target. Uses
moon_sep_degfrom nightly_cache already fetched for the target list. -
Altitude urgency indicator —
list_targetsSQL joins a 90-day peak subquery; computesurgencyfield:peak(≥90% of seasonal max),rising(70–90%, before peak date),declining(70–90%, after peak date). TargetRow renders ▲ peak / ↗ rising / ↘ declining in matching semantic colors below the common name. -
Imaging time calculator — SNR-based sub count estimator added to Filters & Workflow tab. Interactive SNR slider (10–50), computes subs needed, total time, sessions needed. Uses IMX571 sensor constants (read noise 3.5e-, dark 0.002e-/px/s), per-filter sky backgrounds, surface_brightness from catalog.
Equipment & Sessions
-
Integration gap detector — Dashboard card showing targets with data in one narrowband filter but missing the companion (sv220↔c2, uvir↔sv260). Computed via new SQL query in
stats.rs, surfaced asintegration_gapsin the stats response, and displayed as a filter-gap card on the Dashboard. -
Dew heater alarm —
DewAlert.tsxnow triggers a browserNotification(requests permission on first alert) when level appears or escalates. Tagdew-alertprevents duplicate notifications. -
Session checklist —
SessionChecklist.tsxcollapsible card on Dashboard with 6 items (polar alignment, focus, guiding, dew heater, battery, cap). State in localStorage keyed by dusk date — auto-resets each evening. Progress bar + "Ready" indicator. -
Equipment profiles — Settings page section. localStorage-based profiles showing plate scale, FOV. Current hardcoded AT71+ATR2600C shown as ACTIVE. Add/Edit/Delete UI with live preview of plate scale and FOV.
Post-Processing
- PixInsight WBPP project generator — button on Detail Drawer Tab 3 that generates a
.bat/.shscript or folder structure stub for WBPP. Out of scope for now (requires XISF format knowledge).
Catalog & Discovery
-
Sharpless catalog (Sh2) — 299 entries from VizieR VII/20 with popular names (Cave, Lion, Dolphin, etc.)
-
Check LdN and VdB implementations — LDN now fetches 1724 entries from VizieR VII/7A; VdB fetches 158 entries from VizieR VII/21A;
popular_names.rsverified;Cl+Ntype bug fixed (IC1396 Elephant Trunk now included)
Additional Catalogue Ingestion
The pipeline already handles NGC, IC, Messier (as NGC cross-refs), Sh2, VdB, LDN. The following need dedicated fetch modules in catalog/ following the same VizieR TSV pattern used by sh2.rs / ldn.rs. Each needs: fetch + parse + deduplicate against existing entries (match on RA/Dec within 2′) + upsert into catalog table + popular names entries in popular_names.rs.
-
Caldwell catalogue —
caldwell_num INTEGERcolumn added via migration; hardcoded map incaldwell.rspopulates after each catalog upsert.C20,Arp85prefix search supported. C-number shown in TargetRow (blue, only when no Messier num). Also addedarp_numcolumn and Arp map. -
LBN (Lynds Bright Nebulae) —
lbn.rsfetches VizieR VII/9. Positional dedup against NGC/IC/Sh2 (2' radius). Class field used for emission vs reflection typing. Fallback hardcoded set. -
GUM catalogue —
gum.rsfetches VizieR XI/75, Dec filter ≥ -30°. Positional dedup against existing catalog. Hardcoded fallback for VizieR failures. -
RCW catalogue —
rcw.rsfetches VizieR VIII/76, Dec filter ≥ -30°. Positional dedup. -
Barnard catalogue (B) —
barnard.rsfetches VizieR VII/220A. Positional dedup against LDN. Hardcoded fallback includes B33 (Horsehead), B72 (Snake), B142/143, etc. Popular names wired in. -
Abell Galaxy Clusters —
abell_gc.rsfetches VizieR VII/110A. Newgalaxy_clustertype added. TypeBadge shows "ACO", purple badge. Added to Targets filter chips and filter/sv260 suitability. Difficulty 4-5 based on m10 brightness. -
Abell Planetary Nebulae —
abell_pn.rsfetches VizieR V/74. Positional dedup. All set difficulty=5, hubble_type="low-SB PN — narrowband only". Prominent fallback set includes Abell 21 (Medusa), Abell 74, etc. -
Arp catalogue —
arp_num INTEGERcolumn added via migration, populated fromcaldwell.rsarp_map(). "Arp85" prefix search already supported inlist_targets. Notable entries include Arp 85=M51, Arp 244=Antennae Galaxies. -
Melotte catalogue —
melotte_num INTEGERcolumn added via migration. Hardcoded cross-reference map populates after upsert. Standalone entries added: Mel 20 (Alpha Per), Mel 25 (Hyades), Mel 111 (Coma Star Cluster). -
Collinder catalogue —
collinder_num INTEGERcolumn added via migration. Cross-reference map + Cr399 (Brocchi's Coathanger) standalone entry. -
PGC (Principal Galaxy Catalogue) bright subset — PGC contains millions of galaxies; ingesting all is impractical. Add only the "bright" subset: PGC objects with
B_Mag < 14.0not already in NGC/IC. Source: VizieR VII/237. Expect ~5000 new entries. Adds fainter NGC-complement galaxies for completeness. Object type:galaxy. -
"Similar targets nearby" suggestions —
GET /api/targets/:id/similarreturns same obj_type + constellation within 25° RA. Shown in Overview tab as "Similar Targets Nearby" before Aladin embed. -
Observation history timeline —
SessionTimelineon Stats page: sessions grouped by date, thumbnail (or star placeholder), filter pill, integration time, quality chip. Backendhistoryfield added to/api/stats.
Planning & Scheduling
-
Best nights ranking (14-night view) —
/api/calendar/best-nightsendpoint returns 14 nights scored bymoon*0.5 + dark*0.5. Dashboard card shows date, score bar, moon %, sorted by date (best score highlighted). Top 3 targets per night from nightly_cache. -
Weather score in target ranking —
list_targetsfetchesgo_nogofrom weather_cache and applies a multiplier (go=1.0, marginal=0.7, nogo=0.3) to the composite best-score sort. Defaults to 1.0 when forecast unavailable. -
Session planning timeline — "Plan Tonight" mode: user selects an ordered set of targets, each assigned a duration. Renders a Gantt-style timeline (dusk→dawn, x-axis UTC) with color-coded blocks per target showing overlap with that object's visibility window. Warn when a target block extends past its set time. Exportable as a plain-text run order (e.g. "21:45 NGC7000 · 2h → 23:45 IC1805 · 1h30 → …").
-
Monthly highlights —
/api/calendar/monthly-highlightsreturns top 8 objects this month (by peak alt, preferring unimaged). Dashboard card shows name, type, peak alt, filter, imaged status. -
Seasonal peak indicator on target rows — already implemented as
urgencyfield:▲ peak(≥90% of seasonal max),↗ rising,↘ declining. Shown below common name in TargetRow.
Catalogue Completion & Progress
-
Catalogue completion tracker — Stats page grid: Messier, Sharpless, LDN, VdB, NGC, IC progress bars with keeper counts and 🏆 badge on completion. Backend computes totals dynamically.
-
Beginner-friendly filter — "Accessible tonight" chip on Targets page: applies min_alt≥40°, usable≥60min server-side, plus difficulty≤2 and moon_sep≥45° client-side.
-
Deep-linkable target URLs — added
/targets/:targetIdReact Router route. URL updates when a drawer is opened; navigating directly to/targets/NGC7000pre-opens that drawer and disables the tonight-only filter so the target is always found.
GoTo Mount Integration
-
GoTo coordinates card — already in Overview tab: RA/Dec with copy buttons, live hour angle, East/West meridian indicator.
-
Slew-order optimizer — "⟳ Slew-optimized order" toggle in the Run Order card. Nearest-neighbor heuristic on RA/Dec angular distance reorders tonight's targets. Pure frontend, no backend needed.