# nasa-across/across-frontend architecture

> Architecture diagram of the GitHub repository nasa-across/across-frontend, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nasa-across/across-frontend
- Repository: https://github.com/nasa-across/across-frontend

## Overview

ACROSS Frontend is a SvelteKit web application for exploring astronomy observations, schedules, observatories and ingestion status, calculating visibility, submitting observation requests, and managing user accounts and groups. Server-side route loaders and form actions coordinate page workflows with the ACROSS API through shared request utilities. The graph preserves the major route families visible in the tree; several subsystems are represented at their enclosing route directory because their implementation was not sampled.

Main entry points: [`src/lib/utils/across/callApi.ts`](https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/callApi.ts) (API client), [`src/lib/utils/across/getTelescopes.ts`](https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/getTelescopes.ts) (Telescope lookup), [`src/routes/ingestion-status/+page.server.ts`](https://github.com/nasa-across/across-frontend/blob/main/src/routes/ingestion-status/%2Bpage.server.ts) (Ingestion status), [`src/routes/visibility-calculator/+page.server.ts`](https://github.com/nasa-across/across-frontend/blob/main/src/routes/visibility-calculator/%2Bpage.server.ts) (Visibility calculator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_explore["Astronomy data"]
  node_observations["Observations<br/>[+page.server.ts]"]
  node_schedules["Schedules<br/>[+page.server.ts]"]
  node_observatories["Observatories"]
  node_ingestion["Ingestion status<br/>[+page.server.ts]"]
end

subgraph group_tools["Planning tools"]
  node_visibility["Visibility calculator<br/>[+page.server.ts]"]
  node_request["Observation request<br/>[+page.server.ts]"]
end

subgraph group_accounts["Accounts"]
  node_login["Login<br/>[+page.server.ts]"]
  node_register["Registration<br/>[+page.server.ts]"]
  node_verify["Login verification<br/>[+page.server.ts]"]
  node_profile["User profile<br/>[+page.server.ts]"]
  node_groups["Group management"]
  node_service["Service accounts<br/>[+page.server.ts]"]
end

subgraph group_shared["Shared runtime"]
  node_resolve["Object resolver<br/>[resolveObject.ts]"]
  node_callapi["API client<br/>[callApi.ts]"]
  node_telescopes["Telescope lookup<br/>[getTelescopes.ts]"]
  node_observatorylookup["Observatory lookup"]
  node_schedulelookup["Schedule lookup<br/>[getSchedules.ts]"]
end

node_visitor(("Visitor"))
node_api{{"ACROSS API"}}

node_visitor -->|"opens"| node_observations
node_visitor -->|"opens"| node_schedules
node_visitor -->|"opens"| node_observatories
node_visitor -->|"opens"| node_ingestion
node_visitor -->|"uses"| node_visibility
node_visitor -->|"submits"| node_request
node_visitor -->|"starts login"| node_login
node_visitor -->|"registers"| node_register
node_visitor -->|"manages account"| node_profile
node_visitor -->|"manages groups"| node_groups
node_visitor -->|"manages credentials"| node_service
node_observations -->|"fetches observations"| node_callapi
node_observations -->|"loads telescopes"| node_telescopes
node_schedules -->|"fetches schedules"| node_callapi
node_schedules -->|"loads telescopes"| node_telescopes
node_observatories -->|"loads data"| node_api
node_ingestion -->|"loads telescopes"| node_telescopes
node_ingestion -->|"loads observatories"| node_observatorylookup
node_ingestion -->|"loads schedules"| node_schedulelookup
node_visibility -->|"loads telescopes"| node_telescopes
node_visibility -->|"exposes resolver"| node_resolve
node_visibility -->|"requests windows"| node_callapi
node_request -->|"loads telescopes"| node_telescopes
node_request -->|"exposes resolver"| node_resolve
node_request -->|"posts request"| node_callapi
node_login -->|"requests login"| node_callapi
node_register -->|"creates user"| node_callapi
node_verify -->|"loads user"| node_callapi
node_profile -->|"updates account"| node_callapi
node_groups -->|"manages memberships"| node_api
node_service -->|"manages accounts"| node_callapi
node_callapi -->|"sends requests"| node_api
node_telescopes -->|"fetches telescopes"| node_callapi
node_observatorylookup -->|"fetches observatories"| node_callapi
node_schedulelookup -->|"fetches schedules"| node_callapi

click node_observations "https://github.com/nasa-across/across-frontend/blob/main/src/routes/observations/%2Bpage.server.ts"
click node_schedules "https://github.com/nasa-across/across-frontend/blob/main/src/routes/schedules/%2Bpage.server.ts"
click node_observatories "https://github.com/nasa-across/across-frontend/tree/main/src/routes/observatories"
click node_ingestion "https://github.com/nasa-across/across-frontend/blob/main/src/routes/ingestion-status/%2Bpage.server.ts"
click node_visibility "https://github.com/nasa-across/across-frontend/blob/main/src/routes/visibility-calculator/%2Bpage.server.ts"
click node_request "https://github.com/nasa-across/across-frontend/blob/main/src/routes/observation-request/create/%2Bpage.server.ts"
click node_resolve "https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/resolveObject.ts"
click node_login "https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/login/%2Bpage.server.ts"
click node_register "https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/register/%2Bpage.server.ts"
click node_verify "https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/login-verify/%2Bpage.server.ts"
click node_profile "https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/profile/%2Bpage.server.ts"
click node_groups "https://github.com/nasa-across/across-frontend/tree/main/src/routes/user/%5BuserGroupName%5D/user-group-manage"
click node_service "https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/service-accounts/%2Bpage.server.ts"
click node_callapi "https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/callApi.ts"
click node_telescopes "https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/getTelescopes.ts"
click node_observatorylookup "https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/getObservatories.ts"
click node_schedulelookup "https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/getSchedules.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_observations,node_schedules,node_observatories,node_ingestion toneBlue
class node_visibility,node_request toneAmber
class node_login,node_register,node_verify,node_profile,node_groups,node_service,node_api toneMint
class node_resolve,node_callapi,node_telescopes,node_observatorylookup,node_schedulelookup toneRose
class node_visitor toneIndigo
```

## Components

### Astronomy data

- [Observations](https://github.com/nasa-across/across-frontend/blob/main/src/routes/observations/%2Bpage.server.ts): `src/routes/observations/+page.server.ts`
- [Schedules](https://github.com/nasa-across/across-frontend/blob/main/src/routes/schedules/%2Bpage.server.ts): `src/routes/schedules/+page.server.ts`
- [Observatories](https://github.com/nasa-across/across-frontend/tree/main/src/routes/observatories): `src/routes/observatories`
- [Ingestion status](https://github.com/nasa-across/across-frontend/blob/main/src/routes/ingestion-status/%2Bpage.server.ts): `src/routes/ingestion-status/+page.server.ts`

### Planning tools

- [Visibility calculator](https://github.com/nasa-across/across-frontend/blob/main/src/routes/visibility-calculator/%2Bpage.server.ts): `src/routes/visibility-calculator/+page.server.ts`
- [Observation request](https://github.com/nasa-across/across-frontend/blob/main/src/routes/observation-request/create/%2Bpage.server.ts): `src/routes/observation-request/create/+page.server.ts`

### Accounts

- [Login](https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/login/%2Bpage.server.ts): `src/routes/user/login/+page.server.ts`
- [Registration](https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/register/%2Bpage.server.ts): `src/routes/user/register/+page.server.ts`
- [Login verification](https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/login-verify/%2Bpage.server.ts): `src/routes/user/login-verify/+page.server.ts`
- [User profile](https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/profile/%2Bpage.server.ts): `src/routes/user/profile/+page.server.ts`
- [Group management](https://github.com/nasa-across/across-frontend/tree/main/src/routes/user/%5BuserGroupName%5D/user-group-manage): `src/routes/user/[userGroupName]/user-group-manage`
- [Service accounts](https://github.com/nasa-across/across-frontend/blob/main/src/routes/user/service-accounts/%2Bpage.server.ts): `src/routes/user/service-accounts/+page.server.ts`

### Shared runtime

- [Object resolver](https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/resolveObject.ts): `src/lib/utils/across/resolveObject.ts`
- [API client](https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/callApi.ts): `src/lib/utils/across/callApi.ts`
- [Telescope lookup](https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/getTelescopes.ts): `src/lib/utils/across/getTelescopes.ts`
- [Observatory lookup](https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/getObservatories.ts): `src/lib/utils/across/getObservatories.ts`
- [Schedule lookup](https://github.com/nasa-across/across-frontend/blob/main/src/lib/utils/across/getSchedules.ts): `src/lib/utils/across/getSchedules.ts`

### Other components

- **Visitor**
- **ACROSS API**

## Connections

- Visitor → Observations: opens
- Visitor → Schedules: opens
- Visitor → Observatories: opens
- Visitor → Ingestion status: opens
- Visitor → Visibility calculator: uses
- Visitor → Observation request: submits
- Visitor → Login: starts login
- Visitor → Registration: registers
- Visitor → User profile: manages account
- Visitor → Group management: manages groups
- Visitor → Service accounts: manages credentials
- Observations → API client: fetches observations
- Observations → Telescope lookup: loads telescopes
- Schedules → API client: fetches schedules
- Schedules → Telescope lookup: loads telescopes
- Observatories → ACROSS API: loads data
- Ingestion status → Telescope lookup: loads telescopes
- Ingestion status → Observatory lookup: loads observatories
- Ingestion status → Schedule lookup: loads schedules
- Visibility calculator → Telescope lookup: loads telescopes
- Visibility calculator → Object resolver: exposes resolver
- Visibility calculator → API client: requests windows
- Observation request → Telescope lookup: loads telescopes
- Observation request → Object resolver: exposes resolver
- Observation request → API client: posts request
- Login → API client: requests login
- Registration → API client: creates user
- Login verification → API client: loads user
- User profile → API client: updates account
- Group management → ACROSS API: manages memberships
- Service accounts → API client: manages accounts
- API client → ACROSS API: sends requests
- Telescope lookup → API client: fetches telescopes
- Observatory lookup → API client: fetches observatories
- Schedule lookup → API client: fetches schedules
