Skip to content

Add Dedicated Developers Page - #197

Merged
krishkhinchi merged 1 commit into
7-Blocks:mainfrom
krishkhinchi:Developers_Page
Aug 15, 2026
Merged

Add Dedicated Developers Page#197
krishkhinchi merged 1 commit into
7-Blocks:mainfrom
krishkhinchi:Developers_Page

Conversation

@krishkhinchi

@krishkhinchi krishkhinchi commented Aug 15, 2026

Copy link
Copy Markdown
Member

User description

Description

Overview

This PR adds a new /developers page to Kepler to showcase the developers and open-source contributors working on the project.

What's Included

  • Added a dedicated /developers route.
  • Added reusable developer/contributor cards.
  • Added centralized developer data structure.
  • Added developer roles, bios, technologies, and contribution details.
  • Added GitHub profile links.
  • Added contributor statistics section.
  • Added frontend search and filtering by role/technology.
  • Added responsive layouts for desktop, tablet, and mobile.
  • Added empty state for unmatched searches.
  • Integrated the Developers page with the existing Kepler navigation.
  • Followed the existing dark, space-operations-themed Kepler UI.
  • Added subtle hover interactions and visual system indicators.
  • Added accessibility improvements for interactive elements and images.

Design

The page follows Kepler's existing visual language with:

  • Dark space-themed interface
  • Cyan/blue accents
  • Technical typography
  • Subtle borders and glow effects
  • Minimal animations
  • Responsive card-based layout

Technical Notes

  • Developer information is maintained separately from the page UI for easier future updates.
  • No authentication or backend dependency is introduced.
  • Existing dashboard and application functionality remains unchanged.
  • Existing components and styling patterns are reused wherever possible.

Testing

  • /developers route works correctly
  • Developer cards render correctly
  • Search functionality works
  • Filters work correctly
  • GitHub links work
  • Responsive layout verified
  • Navigation integration verified
  • No console errors
  • Existing routes remain unaffected
  • Production build tested

CodeAnt-AI Description

Add unified orbital catalog search and high-performance globe tracking

What Changed

  • Adds a local catalog of 64,103 orbital objects with searchable names, NORAD IDs, operators, categories, and orbital regimes.
  • Replaces the globe’s API-loaded entities with a GPU-optimized view of up to 7,000 objects, including live position updates and instant layer filtering.
  • Users can hover over objects for key orbital data, click for detailed orbital information, and track selected objects directly on the globe.
  • Adds global orbital search with result cards, detailed object views, and “View on Globe” actions across the application.
  • Satellite and debris pages now fall back to the local catalog when backend data is unavailable, while the dashboard and traffic monitor show catalog-based statistics.
  • Adds a retryable error screen for failures in the 3D orbital visualization.
  • Reworks the Developers page to show real contributors with searchable profiles, contribution statistics, role filters, GitHub links, and contribution guidance.
  • Adds unit coverage for catalog parsing, object classification, orbital positioning, and velocity calculations.

Impact

✅ Search 64,103 orbital objects
✅ Faster globe rendering with 7,000 visible points
✅ Continue browsing satellite and debris data during backend outages

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

  • New Features
    • Added a searchable orbital catalog with object details, hover information, filtering, category visibility, and fly-to globe actions.
    • Added live orbital visualization with payload, debris, and rocket-body classifications, regimes, statistics, and legend controls.
    • Added orbital traffic metrics and catalog data across the Dashboard, Satellites, Debris, and Space Traffic pages.
    • Replaced the Developers showcase with a searchable contributor network and contribution statistics.
  • Bug Fixes
    • Added graceful error recovery and local catalog fallbacks when data services are unavailable.
  • Style
    • Refined distant star rendering for a subtler background.

@codeant-ai

codeant-ai Bot commented Aug 15, 2026

Copy link
Copy Markdown

🤖 CodeAnt AI — Review Status

Status Commit Started (UTC) Finished (UTC)
✅ Reviewed your PR bcb9a10 Aug 15, 2026 · 19:19 19:23

@codeant-ai

codeant-ai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@github-actions github-actions Bot added bug Something isn't working enhancement New feature or request frontend Frontend development size/XL Very large or complex contribution. type:bug Fixes an existing bug or unexpected behavior. type:feature Introduces a new feature or enhancement. type:frontend Changes frontend or client-side code. labels Aug 15, 2026
@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 71f28287-c624-4aa2-9fc2-557fd9e377e5

📥 Commits

Reviewing files that changed from the base of the PR and between f6a5c7b and bcb9a10.

📒 Files selected for processing (32)
  • frontend/public/data/orbital/metadata.json
  • frontend/public/data/orbital/objects.json
  • frontend/public/data/orbital/objects.min.json
  • frontend/src/App.tsx
  • frontend/src/components/EarthTwin.tsx
  • frontend/src/components/ErrorBoundary.tsx
  • frontend/src/components/SatelliteOfTheDay/SpotlightCard.tsx
  • frontend/src/components/orbital/GlobalSearchModal.tsx
  • frontend/src/components/orbital/OrbitalHoverPanel.tsx
  • frontend/src/components/orbital/OrbitalLegend.tsx
  • frontend/src/components/orbital/OrbitalObjectCard.tsx
  • frontend/src/components/orbital/OrbitalObjectDetails.tsx
  • frontend/src/components/ui/ProceduralSpaceBackground.tsx
  • frontend/src/constants/orbital.ts
  • frontend/src/data/developers.ts
  • frontend/src/pages/Dashboard.tsx
  • frontend/src/pages/Debris.tsx
  • frontend/src/pages/DevelopersPage.tsx
  • frontend/src/pages/Satellites.tsx
  • frontend/src/pages/SpaceTraffic.tsx
  • frontend/src/services/__tests__/orbitalDataService.test.ts
  • frontend/src/services/orbitalDataService.ts
  • frontend/src/services/orbitalPositionService.ts
  • frontend/src/store/index.ts
  • frontend/src/store/layerStore.ts
  • frontend/src/store/orbitalStore.ts
  • frontend/src/stories/LayerManagerPanel.stories.tsx
  • frontend/src/types/objectCategories.ts
  • frontend/src/types/orbitLayers.ts
  • frontend/src/types/orbital.ts
  • frontend/vite.config.ts
  • scratch/generate_catalog.py

📝 Walkthrough

Walkthrough

The PR adds a local orbital catalog with normalization, querying, propagation, GPU rendering, selection, search, and page fallbacks. It also adds orbital detail components, error handling, generated metadata, and a data-driven contributor network page.

Changes

Orbital catalog platform

Layer / File(s) Summary
Catalog contracts and generation
frontend/src/types/orbital.ts, frontend/src/types/objectCategories.ts, frontend/src/constants/orbital.ts, scratch/generate_catalog.py, frontend/public/data/orbital/metadata.json
Adds canonical orbital models, category metadata, display limits, generated catalog files, and dataset metadata.
Catalog loading and orbital calculations
frontend/src/services/orbitalDataService.ts, frontend/src/services/orbitalPositionService.ts, frontend/src/services/__tests__/*, frontend/vite.config.ts
Adds catalog loading with fallback, indexing, filtering, search, statistics, orbital propagation, velocity calculation, and Vitest coverage.
Orbital state and global search
frontend/src/store/orbitalStore.ts, frontend/src/store/index.ts, frontend/src/App.tsx, frontend/src/components/orbital/GlobalSearchModal.tsx
Adds Zustand state for catalog objects, selection, hover, filters, and loading. The app loads the catalog and exposes global search and detail actions.
Cesium rendering and orbital interaction
frontend/src/components/EarthTwin.tsx, frontend/src/components/orbital/*, frontend/src/components/ErrorBoundary.tsx, frontend/src/components/ui/ProceduralSpaceBackground.tsx
Replaces legacy entity rendering with propagated GPU points and adds hover, selection, fly-to, detail, legend, HUD, visibility controls, and rendering error fallback.
Orbital page integrations
frontend/src/pages/Dashboard.tsx, frontend/src/pages/Debris.tsx, frontend/src/pages/Satellites.tsx, frontend/src/pages/SpaceTraffic.tsx, frontend/src/components/SatelliteOfTheDay/SpotlightCard.tsx
Uses local orbital statistics and objects as fallbacks for dashboard, catalog, debris, traffic, and spotlight views.

Developer network page

Layer / File(s) Summary
Contributor registry and page
frontend/src/data/developers.ts, frontend/src/pages/DevelopersPage.tsx
Adds centralized contributor data and statistics. Replaces the former API and SDK showcase with searchable, filterable developer cards and contribution content.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant App
  participant OrbitalStore
  participant OrbitalDataService
  participant EarthTwin
  App->>OrbitalStore: loadCatalog()
  OrbitalStore->>OrbitalDataService: loadOrbitalObjects()
  OrbitalDataService-->>OrbitalStore: objects and statistics
  OrbitalStore-->>EarthTwin: catalog state
  EarthTwin->>EarthTwin: calculate propagated positions
  EarthTwin-->>EarthTwin: render and interact with orbital points
Loading

Possibly related PRs

  • 7-Blocks/Kepler#4: Adds related backend catalog, dashboard, and satellite API changes.
  • 7-Blocks/Kepler#142: Modifies the EarthTwin orbital selection and spotlight architecture.
  • 7-Blocks/Kepler#174: Extends related orbital category, regime, and layer visibility functionality.

Suggested labels: type:testing

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codeant-ai codeant-ai Bot added the size:XXL This PR changes 1000+ lines, ignoring generated files label Aug 15, 2026
@github-actions github-actions Bot added AI Artificial Intelligence and Machine Learning documentation Improvements or additions to documentation type:documentation Improves project documentation. labels Aug 15, 2026

@krishkhinchi krishkhinchi left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@krishkhinchi
krishkhinchi merged commit a96da33 into 7-Blocks:main Aug 15, 2026
8 of 9 checks passed
Comment on lines +74 to +83
const localQuery = useMemo(() => {
return orbitalDataService.queryObjects(
{
objectType: classFilter ? (classFilter as import('@/types/orbital').ObjectType) : 'ALL',
searchQuery: debouncedSearch,
},
page,
PAGE_SIZE
);
}, [classFilter, debouncedSearch, page]);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: When no classification filter is selected, the query requests the first page of the entire catalog and only then filters that page for debris and rocket bodies. If the catalog's first page contains payloads, the fallback produces an empty table despite later pages containing debris, and pagination totals are also incorrect. Query the combined debris/rocket-body set before applying pagination, or query both classifications separately and merge them. [logic error]

Severity Level: Major ⚠️
- ❌ Local fallback can show an empty debris table.
- ⚠️ Debris pagination totals include payload objects.
- ⚠️ Users cannot navigate to debris on later pages.

Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** frontend/src/pages/Debris.tsx
**Line:** 74:83
**Comment:**
	*Logic Error: When no classification filter is selected, the query requests the first page of the entire catalog and only then filters that page for debris and rocket bodies. If the catalog's first page contains payloads, the fallback produces an empty table despite later pages containing debris, and pagination totals are also incorrect. Query the combined debris/rocket-body set before applying pagination, or query both classifications separately and merge them.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Comment on lines +88 to +94
const localQuery = useMemo(() => {
return orbitalDataService.queryObjects(
{ objectType: 'SATELLITE', searchQuery: debouncedSearch },
page,
PAGE_SIZE
);
}, [debouncedSearch, page]);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The local fallback query is memoized without any dependency representing catalog loading. On the first render, orbitalDataService.queryObjects sees an empty catalog and returns no items; when loadCatalog() later updates the store, this memo remains cached because debouncedSearch and page are unchanged, so an API failure or empty response leaves the satellite table permanently empty. Recompute the query when catalog loading/data changes, or derive the fallback directly from subscribed catalog state. [stale reference]

Severity Level: Major ⚠️
- ❌ Satellite fallback remains empty after catalog loading.
- ⚠️ API outages can hide the locally available satellite catalog.
- ⚠️ Satellite selection and export receive no fallback rows.

Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** frontend/src/pages/Satellites.tsx
**Line:** 88:94
**Comment:**
	*Stale Reference: The local fallback query is memoized without any dependency representing catalog loading. On the first render, `orbitalDataService.queryObjects` sees an empty catalog and returns no items; when `loadCatalog()` later updates the store, this memo remains cached because `debouncedSearch` and `page` are unchanged, so an API failure or empty response leaves the satellite table permanently empty. Recompute the query when catalog loading/data changes, or derive the fallback directly from subscribed catalog state.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Comment on lines +35 to +36
const altKm = object.semimajorAxis ? Math.round(object.semimajorAxis - 6371) : 0;
const velocity = object.semimajorAxis ? calculateOrbitalVelocity(object.semimajorAxis, altKm) : 7.5;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: When semimajorAxis is missing, this assigns 0 and the details modal displays 0 km, unlike the other orbital components that display an unavailable marker. This presents fabricated orbital data for objects with incomplete catalog records; preserve the missing value and render an unavailable state. [incorrect condition logic]

Severity Level: Major ⚠️
- ⚠️ Details modal reports zero altitude for incomplete records.
- ⚠️ Users receive contradictory orbital data within one modal.

Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** frontend/src/components/orbital/OrbitalObjectDetails.tsx
**Line:** 35:36
**Comment:**
	*Incorrect Condition Logic: When `semimajorAxis` is missing, this assigns `0` and the details modal displays `0 km`, unlike the other orbital components that display an unavailable marker. This presents fabricated orbital data for objects with incomplete catalog records; preserve the missing value and render an unavailable state.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Comment on lines +144 to +145
const obj = orbitalDataService.getOrbitalObjectById(catalogNumber);
if (!obj) return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: flyToSatellite exits when the catalog has not finished loading, but the selected satellite effect does not retry after loading completes. Because catalog loading is asynchronous and selection can be established before it finishes, valid selections can fail to fly to the object until the user selects the same object again. [state lifecycle]

Severity Level: Major ⚠️
- ⚠️ Dashboard satellite selections can be dropped during catalog startup.
- ⚠️ Flyby notifications may not move the EarthTwin camera.

Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** frontend/src/components/EarthTwin.tsx
**Line:** 144:145
**Comment:**
	*State Lifecycle: `flyToSatellite` exits when the catalog has not finished loading, but the selected satellite effect does not retry after loading completes. Because catalog loading is asynchronous and selection can be established before it finishes, valid selections can fail to fly to the object until the user selects the same object again.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Comment on lines +29 to +32
const searchResults = useMemo(() => {
if (!query.trim()) return [];
return orbitalDataService.searchOrbitalObjects(query, 30);
}, [query]);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The search results are computed only from query, but the modal does not subscribe to the orbital store or otherwise trigger a render when the asynchronous catalog load completes. If the user searches before loading finishes, the empty result is memoized and remains displayed until the query changes. [stale reference]

Severity Level: Major ⚠️
- ⚠️ Global orbital search fails for startup-time queries.
- ⚠️ Users must edit queries before loaded results appear.

Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** frontend/src/components/orbital/GlobalSearchModal.tsx
**Line:** 29:32
**Comment:**
	*Stale Reference: The search results are computed only from `query`, but the modal does not subscribe to the orbital store or otherwise trigger a render when the asynchronous catalog load completes. If the user searches before loading finishes, the empty result is memoized and remains displayed until the query changes.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

owner: country,
status: classification === 'PAYLOAD' ? 'ACTIVE' : 'INACTIVE',
classification,
epoch: '2026-02-15T00:00:00Z',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: All compact-catalog objects are assigned the same fixed epoch rather than the epoch from the source data. calculateOrbitalPosition uses this value to propagate mean anomaly, so positions are incorrect for any viewing time significantly different from this timestamp. Preserve and unpack the actual epoch, or avoid propagating compact records without one. [logic error]

Severity Level: Major ⚠️
- ⚠️ EarthTwin renders incorrect positions for compact-catalog objects.
- ⚠️ Satellite fly-to and live propagation use inaccurate orbital states.

Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** frontend/src/types/orbital.ts
**Line:** 136:136
**Comment:**
	*Logic Error: All compact-catalog objects are assigned the same fixed epoch rather than the epoch from the source data. `calculateOrbitalPosition` uses this value to propagate mean anomaly, so positions are incorrect for any viewing time significantly different from this timestamp. Preserve and unpack the actual epoch, or avoid propagating compact records without one.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

from datetime import datetime, timezone

# Ensure output directory exists
out_dir = r"c:\Users\KRISH\OneDrive\Desktop\Open source\Kepler\frontend\public\data\orbital"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The generator writes all catalog assets to a developer-specific absolute Windows OneDrive path instead of the repository's frontend/public/data/orbital directory. On other machines or CI, the generated files will not be served by the frontend, so the service's /data/orbital/... requests fail and the catalog remains unavailable. [possible bug]

Severity Level: Critical 🚨
- ❌ Catalog generation fails to populate frontend-served assets.
- ❌ Dashboard and global orbital search lose catalog data.

Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** scratch/generate_catalog.py
**Line:** 8:8
**Comment:**
	*Possible Bug: The generator writes all catalog assets to a developer-specific absolute Windows OneDrive path instead of the repository's `frontend/public/data/orbital` directory. On other machines or CI, the generated files will not be served by the frontend, so the service's `/data/orbital/...` requests fail and the catalog remains unavailable.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

@krishkhinchi krishkhinchi added ECSoC26 Official label for ECSoC26 event contributions. ECSoC26-L2 Level 2 contribution for the ECSoC26 event. labels Aug 17, 2026
@ecsoc-sentinel ecsoc-sentinel Bot added ECSoC26-L3 Level 3 contribution for the ECSoC26 event. and removed ECSoC26-L2 Level 2 contribution for the ECSoC26 event. labels Aug 17, 2026
@jillnowe-byte

Copy link
Copy Markdown

mspin.doc

@jillnowe-byte

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Artificial Intelligence and Machine Learning bug Something isn't working documentation Improvements or additions to documentation ECSoC26-L3 Level 3 contribution for the ECSoC26 event. ECSoC26 Official label for ECSoC26 event contributions. enhancement New feature or request frontend Frontend development size/XL Very large or complex contribution. size:XXL This PR changes 1000+ lines, ignoring generated files type:bug Fixes an existing bug or unexpected behavior. type:documentation Improves project documentation. type:feature Introduces a new feature or enhancement. type:frontend Changes frontend or client-side code.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants