Admin Dashboard (Phenom Global Command Center)
Detailed documentation for the Phenom Global Command Center admin dashboard, featuring UAP monitoring, map views, and team management capabilities.
The Nest Backend Platform is Phenom’s comprehensive backend infrastructure hosted at https://nest.thephenom.app/ (production) and https://dev-nest.thephenom.app/ (staging). It consists of two primary components:
N.E.S.T. authenticates users with AWS Cognito. The admin frontend speaks to Cognito directly via the amazon-cognito-identity-js SDK and stores the resulting ID token in a Zustand store. That same token is forwarded to the nest-api Worker as a Bearer token, and the Worker forwards it again to Hasura so row-level security can be applied per user.
The Cognito JWT is the single source of identity throughout the request chain: Worker, Hasura, and any future services all verify it independently against the same Cognito JWKS endpoint.
Reference URLs:
| Pool | Purpose | Pool ID |
|---|---|---|
phenom-dev-local |
Local + dev nest admin sign-in | us-east-1_AkG9mnbjA |
phenom-staging |
Staging environment | us-east-1_n8gO6SbP6 |
phenom-prod |
Production (nest.thephenom.app + chat.thephenom.app) | us-east-1_knEL7cqS3 |
The frontend client ID is set per pool via VITE_COGNITO_CLIENT_ID. The Cognito region (us-east-1) and pool ID are also configured in the nest-api Worker via wrangler.toml so it can verify incoming Bearer tokens.
admin_sandbox/phenom/src/features/auth/.nest.thephenom.app and dev-nest.thephenom.app (the CF Access apps were deleted 2026-05-16). API routes use Cognito Bearer tokens exclusively. CF Access remains only on the nest-firebase snapshot.The user dropdown in the sidebar calls useAuthStore.logout(), which signs out of the Cognito session via userPool.getCurrentUser().signOut() and navigates to /sign-in. The previous Cloudflare Access logout endpoint (/cdn-cgi/access/logout) is no longer used and was returning a 404 in dev.
Frontend:
Backend:
api-staging.thephenom.app/v1/graphql (target group phenom-dev-graphql-tg)phenom-backend/hasura/migrations/default/nest-api Worker and Hasura against the same JWKS endpointnest-api Cloudflare Worker – API layer for all /api/* routes. Verifies Cognito JWT and forwards it to Hasura for row-level security. Handles events, lists, shares, users, notifications, teams, and S3 URL signing.Deployment:
The Cognito JWT is verified independently by both the Worker and Hasura. The Worker never holds long-lived credentials for Hasura – there is no admin secret in the request path. This means a stolen Worker secret cannot be used to read the database.
us-east-1_AkG9mnbjA (dev). Handles sign-up, OTP verification, sign-in, forgot/reset password.https://api.thephenom.app/v1/graphql; staging/dev: https://api-staging.thephenom.app/v1/graphql. Source of truth for all N.E.S.T. data: phenom, drops, users, lists, list_items, list_shares, item_shares, transcriptions, phenom_media, phenom_coords, phenom_sensor_data, phenom_shoots, and more. Schema managed by phenom-backend/hasura/migrations/default/.nest-api Worker – Cloudflare Worker at admin_sandbox/nest-api/. All /api/* routes go through Hasura with the user’s forwarded Cognito JWT for row-level security.Track and manage UAP (Unidentified Anomalous Phenomena) events globally with:
GitHub: Phenom-earth/phenom-backend
Directory Structure:
phenom-backend/
├── server/phenom/ # Nhost React Apollo backend (legacy; current backend is Hasura + Cognito)
├── admin_sandbox/phenom/ # Admin dashboard application
├── adsb/ # ADSB aircraft tracking service
│ ├── airnav/ # AirNav RadarBox API CLI
│ └── run-phenoms/ # Phenom-to-aircraft correlation
├── db/
│ └── schema/ # Database schemas
└── utils/ # Deployment utilities
Authentication is handled by AWS Cognito + Hasura’s JWT verifier – no separate auth submodule.
jonathan_at_phenom-api-clientphenom-7ee1afirebase npm package, firebase.ts, firebase.json, and the functions/ directory have all been removed. The FIREBASE_SERVICE_ACCOUNT Worker secret should be deleted from Cloudflare./api/events endpoint queried Firestore live. All data was migrated to Hasura/Postgres via phenom-backend/hasura/scripts/migrate_firebase_to_postgres.py (idempotent backfill script). The backfill script remains available for any final Buzzard writes during sunset.authStore. Refresh tokens are persisted by amazon-cognito-identity-js to localStorage so the session survives reloads.forgotPassword / confirmPassword APIs.phenom-dev-local (or phenom-staging) can sign innest-api Worker has no privileged data access of its own.nest.thephenom.app and dev-nest.thephenom.app are not behind CF Access (apps deleted 2026-05-16); Cognito sign-in is the sole gate. API routes use Cognito Bearer tokens exclusively, with no CF_Authorization cookie auth. CF Access remains only on the nest-firebase snapshot.The Firebase → Cognito + Hasura migration is complete. All Worker routes use Cognito Bearer tokens and Hasura GraphQL. Firebase, D1, and CF Access cookie auth have been fully retired from the codebase.
Production (nest.thephenom.app) runs against the phenom-prod Cognito pool (us-east-1_knEL7cqS3) and the prod Synapse chat cluster (chat.thephenom.app). The dev surface (dev-nest.thephenom.app) uses phenom-dev-local for auth.
Open items:
FIREBASE_SERVICE_ACCOUNT Worker secret should be removed from Cloudflare (dead secret, firebase.ts was deleted)./adsb/run-phenoms/) still reads phenom records from Firebase Firestore. Migration to Hasura is pending.features/chats/services/hasura-chat.ts queries tables dropped in Hasura migration 20260404. This code needs to be rewritten against Synapse/Matrix or removed.users.avatar_url reference mxc addresses on the old staging Synapse MXID. These must be re-uploaded against each user’s prod-pool MXID. See Chat Authentication for context.Authentication is unified across N.E.S.T. and Synapse Chat via AWS Cognito. Production uses pool us-east-1_knEL7cqS3 (phenom-prod). See Infrastructure for the full pool and endpoint reference.
For access issues or technical support, contact the internal development team or reference the GitHub repository.
Detailed documentation for the Phenom Global Command Center admin dashboard, featuring UAP monitoring, map views, and team management capabilities.
Feature-by-feature guide for the N.E.S.T. (Nexus for Evidence, Screening, and Tracking) web application. Covers every interactive feature available to INT team members.
Sprint-by-sprint tracking of defects found, categorized by Ishikawa root cause category. Used to identify systemic quality patterns across the Phenom 3D Geospatial Digital Twin project.
Complete map of all services, APIs, databases, and credentials that power the N.E.S.T. (Nexus for Evidence, Screening, and Tracking) platform. Use this when debugging cross-service issues or onboarding new team members.
Aircraft detection and tracking service using AirNav RadarBox API for correlating phenom sightings with known air traffic.
The firebase-main branch and nest-firebase.thephenom.app form a frozen snapshot of the currently-deployed N.E.S.T. production. They exist so that forward migration work on main always has a working fallback to point to.
nest.thephenom.app is the production N.E.S.T. surface, served by the phenom-backend-prod Cloudflare Pages project + the nest-api-prod Cloudflare Worker, built against the real production infrastructure in phenom-infra/environments/production/ (api.thephenom.app + phenom-prod Cognito pool + phenom-prod-media-storage).
The N.E.S.T. SPA exposes three Cognito-driven password flows – self-service sign-up, forgot-password, and (as of 2026-05-17) the NEW_PASSWORD_REQUIRED challenge for admin-invited users. This page documents each flow’s screen, the underlying amazon-cognito-identity-js call, and the auth-store contract.
Post-migration, N.E.S.T. is reachable only by Cognito users who are members of the nest-access group. This page documents the gate’s mechanism, how to add a user, the per-environment pool IDs, and what the SPA must do to read the claim.
When nest-firebase.thephenom.app (or any other CF Access surface gated by the N.E.S.T. Team by Phenom.earth GitHub App as the SSO IdP) returns “failed to fetch user/group from identity provider” after a successful GitHub consent, this page maps the failure to its root cause and the fix.
Authoritative current-state snapshot (2026-05-28) of N.E.S.T. teams, admin roles, chat/Synapse hosting, dev-nest auth, web push, and CI, grouped by deployment status. Source: the 2026-05-28 chat/teams/profile/avatars/push/CI change set.
Technical documentation for the Nhost backend service providing authentication, GraphQL API, and storage capabilities for the Phenom platform.
How nest.thephenom.app authenticates to chat.thephenom.app: which Cognito pool mints tokens, which SPA client ID is used, how Synapse validates the JWT, and the in-app recovery surfaces for broken chat sessions.
Instructions for provisioning an EC2 instance from scratch for the DEV Phenom backend, including Git and Docker setup.
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
© 2026 Phenom Earth