Add Dedicated Developers Page - #197
Conversation
🤖 CodeAnt AI — Review Status
|
Thanks for using CodeAnt! 🎉We're free for open-source projects. if you're enjoying it, help us grow by sharing. Share on X · |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (32)
📝 WalkthroughWalkthroughThe 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. ChangesOrbital catalog platform
Developer network page
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
Possibly related PRs
Suggested labels: ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
| const localQuery = useMemo(() => { | ||
| return orbitalDataService.queryObjects( | ||
| { | ||
| objectType: classFilter ? (classFilter as import('@/types/orbital').ObjectType) : 'ALL', | ||
| searchQuery: debouncedSearch, | ||
| }, | ||
| page, | ||
| PAGE_SIZE | ||
| ); | ||
| }, [classFilter, debouncedSearch, page]); |
There was a problem hiding this comment.
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.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| const localQuery = useMemo(() => { | ||
| return orbitalDataService.queryObjects( | ||
| { objectType: 'SATELLITE', searchQuery: debouncedSearch }, | ||
| page, | ||
| PAGE_SIZE | ||
| ); | ||
| }, [debouncedSearch, page]); |
There was a problem hiding this comment.
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.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| const altKm = object.semimajorAxis ? Math.round(object.semimajorAxis - 6371) : 0; | ||
| const velocity = object.semimajorAxis ? calculateOrbitalVelocity(object.semimajorAxis, altKm) : 7.5; |
There was a problem hiding this comment.
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.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| const obj = orbitalDataService.getOrbitalObjectById(catalogNumber); | ||
| if (!obj) return; |
There was a problem hiding this comment.
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.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| const searchResults = useMemo(() => { | ||
| if (!query.trim()) return []; | ||
| return orbitalDataService.searchOrbitalObjects(query, 30); | ||
| }, [query]); |
There was a problem hiding this comment.
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.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', |
There was a problem hiding this comment.
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.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" |
There was a problem hiding this comment.
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.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
User description
Description
Overview
This PR adds a new
/developerspage to Kepler to showcase the developers and open-source contributors working on the project.What's Included
/developersroute.Design
The page follows Kepler's existing visual language with:
Technical Notes
Testing
/developersroute works correctlyCodeAnt-AI Description
Add unified orbital catalog search and high-performance globe tracking
What Changed
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:
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
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:
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
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