{"id":22369196,"url":"https://github.com/devluxor/icarus","last_synced_at":"2026-05-02T18:33:04.896Z","repository":{"id":264867154,"uuid":"894492725","full_name":"devluxor/icarus","owner":"devluxor","description":"Find your favourite asteroid!","archived":false,"fork":false,"pushed_at":"2024-11-27T13:32:32.000Z","size":131,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-21T03:56:16.334Z","etag":null,"topics":["astronomy","express","nasa","node","react","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devluxor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-26T13:00:41.000Z","updated_at":"2024-11-27T13:32:36.000Z","dependencies_parsed_at":"2025-03-26T16:20:22.809Z","dependency_job_id":"d58cc2a5-35ef-4602-8b27-b675dada28a2","html_url":"https://github.com/devluxor/icarus","commit_stats":null,"previous_names":["devluxor/icarus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devluxor/icarus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devluxor%2Ficarus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devluxor%2Ficarus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devluxor%2Ficarus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devluxor%2Ficarus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devluxor","download_url":"https://codeload.github.com/devluxor/icarus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devluxor%2Ficarus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32545864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T12:25:33.646Z","status":"ssl_error","status_checked_at":"2026-05-02T12:24:51.733Z","response_time":132,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astronomy","express","nasa","node","react","typescript"],"created_at":"2024-12-04T19:18:07.898Z","updated_at":"2026-05-02T18:33:04.867Z","avatar_url":"https://github.com/devluxor.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌠 Icarus 🌠\n\n## Find your favourite asteroids\n\nThis web application takes leverage of the NASA NeoWs (Near Earth Object Web Service), a RESTful web service for near earth Asteroid information.\n\n## Stack\n\n- The backend server has been written in Node.js (v22.11.0) + Express (v4.21.1);\n- The frontend application has been written using React (v18.3.1), with Vite as a building tool, and Axios as a helper service to handle the API calls to the backend server. In the containerized version, a Nginx image has been used to serve the React application.\n\nBoth projects have been written using TypeScript.\n\n## Installation\n\n### Containerized version\n\nFor ease of use, this application has been containerized using Docker Compose (Docker v27.3.1). In order to use it, please follow these steps:\n\n1. Clone this repository:\n\n```sh\ngit clone https://github.com/devluxor/icarus.git\n```\n\n2. Then, in the `backend` folder of the root directory, create a file `.env` with the following content:\n\n```txt\nPORT=8080\nASTEROID_API_URL=https://api.nasa.gov/neo/rest/v1/feed\nASTEROID_DETAILS_API_URL=https://api.nasa.gov/neo/rest/v1/neo\nAPI_KEY=\u003cAPI KEY\u003e\n```\n\nNote that the API KEY must be either `DEMO_KEY` (it won't allow for multiple successive requests, as it works just for demo purposes) or **an official NASA API key**, which can be easily obtainable by completing this [form](https://api.nasa.gov/#signUp).\n\n3. Once this file is created in the `backend` folder, please run the following command:\n\n```sh\ndocker compose up\n```\n\nThis command will run both containers at the same time, orchestrating the backend and the frontend elements of the application to run together. You will be able to access the UI via the URL \u003chttp://localhost:3030\u003e.\nI opted to expose the backend server API as well in order for the user to query the API directly (i.e.: using Postman), and to check the server won't accept bad user input (for instance, incoherent or invalid dates in the query parameters). The user can access the backend server via the URL \u003chttp://localhost:8080\u003e.\n\nIn other circumstances, I would have used a reverse proxy as a third element in the containers' orchestration, and I would only have this proxy's port exposed to the public for better security. Note the `.env` file, although it does not contain important secrets, is not copied to the images, as the environment variables are passed directly, on runtime, when the image is created and run.\n\n## Pending tasks; todos.\n\nThe most important aspects that are pending to do are: \n\n- Tests\n- API pagination\n- More sorting functionality\n- More processing work of the asteroids for a fuller picture of the asteroid characteristics and astronomical history, as well as improve the performance of the application.\n- Further Docker Image building optimization\n\nWith limited time, and limited requests with a single key to the NASA API (it resets every 24 hours), I had to prioritize between adding more features and implementing complete unit, integration and E2E tests. I chose the former, as in a short time, in a project of these characteristics, my opinion is that is worth risking the sacrifice of code coverage for a more enjoyable experience, specially considering the help of the type safety that TypeScript provides. With more time on my hands, no doubt I wouldn't have hesitated on implementing a full testing suite.\n\n## Not containerized version\n\n### Backend (Node version 22.11.0)\n\n1. Clone this repository:\n\n```sh\ngit clone https://github.com/devluxor/icarus.git\n```\n\n2. In the `backend` folder of the root directory, create a file `.env` with the following content:\n\n```txt\nPORT=8080\nASTEROID_API_URL=https://api.nasa.gov/neo/rest/v1/feed\nASTEROID_DETAILS_API_URL=https://api.nasa.gov/neo/rest/v1/neo\nAPI_KEY=\u003cAPI KEY\u003e\n```\n\nNote that the API KEY must be either `DEMO_KEY` (it won't allow for multiple successive requests, as it works just for demo purposes) or **an official NASA API key**, which can be easily obtainable by completing this [form](https://api.nasa.gov/#signUp).\n\n3. Install all dependencies via:\n\n```sh\nnpm install\n```\n\n4. Then, start the server by running:\n\n```sh\nnpm run start:dev\n```\n\n5. The server will be accessible via the URL \u003chttp://localhost:8080/api/asteroids\u003e\n\n### Frontend (React version 18.3.1)\n\n1. Within the `frontend` folder, please install the dependencies with:\n\n```sh\nnpm install\n```\n\n2. Then, start the application with:\n\n```sh\nnpm run dev\n```\n\nIt will be accessible via the URL \u003chttp://localhost:5173/\u003e with your browser of choice.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevluxor%2Ficarus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevluxor%2Ficarus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevluxor%2Ficarus/lists"}