Skip to content

February 28: First Deployment and the Auth Cascade

A marathon session: 34 pull requests merged (6 features, 12 fixes, 3 docs, 1 maintenance, 12 dependency updates). Major work on the composite imaging pipeline.

Developer Journal

Really just wanted to test the deployment script today. Shared the staging URL with friends and the discovery flow was cool enough to show off, even though the app is far from ready — only 100GB of storage on the test server, recipes work but not always, and multiple phases still to go before version 1.

A friend's reaction to the signup requirement ("Are you going to sell my data?") kicked off a cascade of auth work. The goal became letting users browse existing composites without signing in, only gating downloads that would flood the server. That turned into anonymous access for read-only endpoints, then a synchronous composite fallback for unauthenticated users.

Spent the evening brainstorming scaling architecture. Initially leaned toward Lambda orchestration but landed on SQS with Fargate auto-scaling workers instead — Lambda's cold starts and memory caps are painful for FITS processing. Mapped out the full scaling spectrum from Level 0 (caching, biggest bang for zero infrastructure) through Level 3 (Step Functions for complex mosaic pipelines). The caching layer is the clear next step — 100 users looking at M16 should mean 1 composite generation and 99 cache hits.

Also connected the Claude app to the AI channel and shared a video on AI tooling.

Highlights

#539 use synchronous composite endpoint for anonymous users

Fixes 401 error when anonymous users attempt composite generation on the GuidedCreate page.

PR #538 enabled anonymous users to skip the download step when data already exists in the library, but the Process step still called the async export endpoint (export-nchannel) which requires authen...

#535 exclude spectral observations from composite pipeline

Spectral observations (NIRSpec _x1d.fits files) have no 2D image data and crash the composite engine with BadRequest - No image data found in FITS file. This PR filters them out at three defensive layers.

When a target has NIRSpec spectroscopic observations, the system tries to build composites from 1D spectral table files, crashing the composite engine. This affects any target with mixed imaging + spe...

What Changed

Features (6)

  • #506 use NASA/STScI discrete color palette for composite presets
  • #510 add per-channel color/weight controls with NASA preset swatches
  • #523 add NASA/STScI thumbnail images to featured targets
  • #526 add AWS EC2 staging deployment scripts
  • #536 add auth badge to recipe cards and cache MAST target searches
  • #538 allow anonymous access to read-only endpoints and skip download for existing data

Bug Fixes (12)

  • #507 send job snapshot on SignalR subscribe to prevent composite timeout
  • #509 prevent OOM crash in 8-channel composite generation
  • #524 show active stage indicator during composite processing
  • #525 cap download speed display and add GB formatting tier
  • #527 set data directory ownership for container user in server-setup
  • #528 add SignalR /hubs proxy to nginx staging and production configs
  • #530 filter proprietary MAST data from searches and recipes
  • #531 use Simbad-resolvable names for featured target searches
  • #533 remove overflow hidden that prevents library dashboard scrolling
  • #534 wait for wizard stepper in composite E2E tests
  • #535 exclude spectral observations from composite pipeline
  • #539 use synchronous composite endpoint for anonymous users

Documentation (3)

  • #508 freshen AGENTS.md with current project state
  • #532 add tiered storage and email/account management roadmap
  • #540 add OpenTelemetry observability roadmap (O-series)

Maintenance (1)

  • #541 add staging server start/stop/deploy script

Dependencies (12 updates: @types/node, @typescript-eslint/parser, AWSSDK.S3, actions/upload-artifact, eslint, eslint-plugin-react-refresh, fastapi, pandas and 4 more)

Issues

Opened:

  • #529 — bug: recipe engine suggests composites for spectral-only observations (NIRSPEC/IFU)
  • #537 — Skip login gate in GuidedCreate when data already exists in library

Closed:

  • #529 — bug: recipe engine suggests composites for spectral-only observations (NIRSPEC/IFU)
  • #537 — Skip login gate in GuidedCreate when data already exists in library

36 commits across 34 pull requests. Next: March 1, 2026 — reorganize plans into design docs and exploration, comprehensive architecture diagram update, simplify anonymous composite code and fix review f...