An open API service indexing awesome lists of open source software.

https://github.com/sudo-self/gitx


https://github.com/sudo-self/gitx

Last synced: about 1 year ago
JSON representation

Awesome Lists containing this project

README

          

### Domain xplor.sudo-self.com

### Vercel git-xplore.vercel.app

![Screenshot 2024-02-16 at 9 52 25 AM](https://github.com/sudo-self/gitX/assets/119916323/8490263d-9104-4f5a-852c-e11dd13e5982)
![Screenshot 2024-02-16 at 9 52 50 AM](https://github.com/sudo-self/gitX/assets/119916323/2e259849-e444-4758-b33d-cf4377596ee0)
![Screenshot 2024-02-16 at 2 04 41 AM](https://github.com/sudo-self/gitX/assets/119916323/491d15eb-a065-4dbe-ae58-d04c8d9d3cf8)
![Screenshot 2024-02-16 at 9 27 12 AM](https://github.com/sudo-self/gitX/assets/119916323/2fc24d7c-191a-4c06-b448-2368441da3b1)
![Screenshot 2024-02-16 at 1 36 16 AM](https://github.com/sudo-self/gitX/assets/119916323/d38d308c-9f51-4366-8e2e-32551ebe6144)
![Screenshot 2024-02-16 at 1 35 25 AM](https://github.com/sudo-self/gitX/assets/119916323/481b5050-9a8d-4570-b92f-f4368c059d99)
![Screenshot 2024-02-16 at 12 31 47 AM](https://github.com/sudo-self/gitX/assets/119916323/692d0933-a321-4b3c-bbfa-0bd4205f504d)
![Screenshot 2024-02-16 at 12 31 22 AM](https://github.com/sudo-self/gitX/assets/119916323/f05fc968-43c9-4247-a7fb-a1a2e19e74ad)
![Screenshot 2024-02-16 at 9 46 08 AM](https://github.com/sudo-self/gitX/assets/119916323/777e7f69-80a9-4769-850f-3fd868222670)

### App.js
```
import React, { useState, useEffect } from 'react';
import logo from './logo.svg';
import ReactDOM from 'react-dom';
import { useAuth0, Auth0Provider } from '@auth0/auth0-react';
import './App.css';
import { kv } from '@vercel/kv';

const App = () => {
const { loginWithRedirect, isAuthenticated, logout } = useAuth0();
const [username, setUsername] = useState('');
const [repositories, setRepositories] = useState([]);
const [following, setFollowing] = useState([]);
const [showRepoList, setShowRepoList] = useState(true);
const [selectedRepoURL, setSelectedRepoURL] = useState('');
const [views, setViews] = useState(0);

useEffect(() => {
const fetchData = async () => {
try {
// Fetch count value from KV storage
const views = await kv.get('views');
setViews(parseInt(views) || 0);
} catch (error) {
console.error('Error fetching count:', error);
}
};

fetchData();
}, []); // Empty dependency array means this effect runs once after the initial render

useEffect(() => {
const incrementViews = async () => {
try {
await kv.put('views', (views + 1).toString());
setViews(views + 1);
} catch (error) {
console.error('Error incrementing count:', error);
}
};

incrementViews();
}, [views]); // Increment view count whenever it changes

useEffect(() => {
const fetchFollowing = async () => {
try {
const followingResponse = await fetch(`https://api.github.com/users/${username}/following?per_page=50`);
const followingData = await followingResponse.json();

if (Array.isArray(followingData)) {
setFollowing(followingData);
} else {
console.error('Invalid following data:', followingData);
}
} catch (error) {
console.error('Error fetching following data:', error);
}
};

if (username) {
fetchFollowing();
}
}, [username]);

const debounce = (func, delay) => {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, delay);
};
};

const delayedFetchRepos = debounce(async () => {
try {
const reposResponse = await fetch(`https://api.github.com/users/${username}/repos?per_page=50`);
const reposData = await reposResponse.json();
const filteredRepos = reposData.filter(repo => repo.deployments_url);

setRepositories(filteredRepos);
setShowRepoList(true);
} catch (error) {
console.error('Error fetching data:', error);
}
}, 500); // Adjust debounce delay as needed

const handleInputChange = (event) => {
setUsername(event.target.value);
delayedFetchRepos();
};

const handleSubmit = (event) => {
event.preventDefault();
delayedFetchRepos();
};

const handleBackButtonClick = () => {
setShowRepoList(true);
setSelectedRepoURL('');
};

const handleRepoClick = (repoName) => {
setShowRepoList(false);
setSelectedRepoURL(`https://${username}.github.io/${repoName}`);
};

return (



React Logo
Star

{isAuthenticated ? (
logout({ returnTo: window.location.origin })}>Logout
) : (
Sign in
)}
{showRepoList ? (

git 🔍 Xplor {views}


view websites deployed with github pages




Search

Pages:



    {repositories.map(repo => (
  • handleRepoClick(repo.name)}>
    {repo.name} - View Page

  • ))}


) : (

Back
{selectedRepoURL && (

)}

)}

Followers:



    {following.map(user => (
  • {user.login}

  • ))}

JR ❤ Auth0 React Vercel kv ©2024

);
};

ReactDOM.render(




,
document.getElementById('root')
);

export default App;

```
### Index.js

```
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { Auth0Provider } from '@auth0/auth0-react';

ReactDOM.render(




,
document.getElementById('root')
);
```
### Logo.svg

```

Created by potrace 1.10, written by Jesse Roper 2024

```
### npm install

### npm start

### App.css

```

body {
background-color: #cfe0f2; /* Set background color of the body */
margin: 0; /* Remove default body margin */
font-family: Arial, sans-serif; /* Specify a fallback font */
}

.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 0;
}

.logo {
width: 100px; /* Adjust width as needed */
height: auto;
color: #fff;
}

.App {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
}

.github-link {
font-size: 18px;
color: #ffffff;
text-decoration: none;
}

.github-link:hover {
text-decoration: underline;
}

.card {
background-color: #ffffff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* Add a subtle box shadow */
margin-bottom: 20px; /* Add margin at the bottom */
}
```