{"id":31749102,"url":"https://github.com/sachinsen7/endpointhub","last_synced_at":"2026-04-12T14:55:17.791Z","repository":{"id":309580247,"uuid":"1036784276","full_name":"Sachinsen7/EndPointHub","owner":"Sachinsen7","description":"EndpointHub is a lightweight and free-first API marketplace designed for developers to publish, discover, and consume APIs with ease. It features user authentication, API key management, secure request proxying with rate limiting, and interactive documentation. Built entirely with free and open-source technologies","archived":false,"fork":false,"pushed_at":"2025-10-07T07:09:20.000Z","size":210,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-07T09:19:32.806Z","etag":null,"topics":["docker","framer-motion","ioredis","neondb","nextjs14","nodemailer","postgresql","prisma","react","recharts-js","redux","swaggerui","zod"],"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/Sachinsen7.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-12T15:20:33.000Z","updated_at":"2025-10-07T07:09:24.000Z","dependencies_parsed_at":"2025-08-12T18:23:23.857Z","dependency_job_id":"c09b5f70-ff1e-46d9-9ece-a5010353d62f","html_url":"https://github.com/Sachinsen7/EndPointHub","commit_stats":null,"previous_names":["sachinsen7/endpointhub"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Sachinsen7/EndPointHub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachinsen7%2FEndPointHub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachinsen7%2FEndPointHub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachinsen7%2FEndPointHub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachinsen7%2FEndPointHub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sachinsen7","download_url":"https://codeload.github.com/Sachinsen7/EndPointHub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachinsen7%2FEndPointHub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001538,"owners_count":26083119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["docker","framer-motion","ioredis","neondb","nextjs14","nodemailer","postgresql","prisma","react","recharts-js","redux","swaggerui","zod"],"created_at":"2025-10-09T14:30:10.018Z","updated_at":"2025-10-09T14:30:11.251Z","avatar_url":"https://github.com/Sachinsen7.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\n# EndpointHub: API Marketplace\n\n## Overview\n\nEndpointHub is a lightweight and free-first API marketplace designed for developers to publish, discover, and consume APIs with ease. It features user authentication, API key management, secure request proxying with rate limiting, and interactive documentation. Built entirely with free and open-source technologies, EndpointHub is perfect for students, hobbyists, and developers wanting to build, deploy, and scale without cost.\n---\n\n## Technologies Used\n\n## Frontend\n\n- Next.js 13+ (React framework with built-in routing, SSR/SSG)\n\n- Tailwind CSS (utility-first, responsive styling)\n\n- Redux Toolkit + RTK Query (state management \u0026 API caching)\n\n- Swagger UI / Redoc (interactive API documentation viewer)\n\n## Backend\n\n- Node.js + Express.js (REST API server)\n\n- PostgreSQL (free tier on Supabase or local via Docker)\n\n- Redis (optional caching \u0026 rate limiting; free tiers available)\n\n- JWT (JSON Web Tokens for authentication)\n\n- bcrypt (password hashing)\n\n## DevOps \u0026 Deployment\n\n- Docker \u0026 Docker Compose (for local development)\n\n- GitHub Actions (CI/CD automation)\n\n- Render / Railway / Vercel / Netlify (free hosting tiers)\n\n- Nginx (optional reverse proxy for SSL and routing)\n\n---\n\n## Features (MVP)\n\n- User registration/login with JWT authentication\n\n- Publish APIs with OpenAPI/Swagger docs\n\n- Generate and revoke API keys per user and API\n\n- Proxy API requests with key validation and rate limiting\n\n- Interactive API documentation viewer embedded in the frontend\n\n- Usage analytics dashboard (requests, errors, latency)\n\n- Responsive UI with light/dark mode support\n\n---\n\n## Project Structure\n\ntext\n\n`endpointhub/ ├── frontend/                    # Next.js app (UI, dashboards, docs) │   ├── app/                     # Next.js 13 App Router routes (pages + API routes) │   │   ├── api/                 # Next.js API routes (optional backend logic) │   │   ├── dashboard/           # Publisher \u0026 analytics dashboard pages │   │   ├── apis/                # API listing \u0026 documentation viewer pages │   │   └── page.tsx             # Landing page │   ├── components/              # Reusable React components │   ├── styles/                  # Tailwind config and CSS files │   ├── utils/                   # Helper functions, api wrappers │   ├── public/                  # Static assets (images, favicon) │   ├── package.json │   └── next.config.js │ ├── backend/                     # Express.js REST API server │   ├── src/ │   │   ├── controllers/         # REST route handlers │   │   ├── middlewares/         # Auth, rate limit, validation middleware │   │   ├── models/              # DB schema/models │   │   ├── routes/              # API route definitions │   │   ├── services/            # Business logic like API key mgmt, analytics │   │   └── index.ts             # Server entry point │   ├── package.json │   └── Dockerfile │ ├── docker-compose.yml           # Compose file for backend, frontend, Postgres, Redis ├── nginx/ │   └── nginx.conf               # Optional reverse proxy and SSL config └── README.md `\n\n---\n\n## Getting Started\n\n## Prerequisites\n\n- Node.js v18 or higher\n\n- Docker \u0026 Docker Compose (for running PostgreSQL, Redis, and services locally)\n\n- Git\n\n## Environment Variables (.env)\n\nCreate a `.env` file inside the `backend/` directory with the following variables:\n\ntext\n\n`PORT=4000 DATABASE_URL=postgres://dev:dev@localhost:5432/endpointhub JWT_SECRET=your_jwt_secret_key REDIS_URL=redis://localhost:6379 FRONTEND_URL=http://localhost:3000 `\n\n## Running Locally\n\n1.  Clone the repository:\n\nbash\n\n`git clone \u003cyour-repo-url\u003e endpointhub cd endpointhub `\n\n1.  Start the Docker services:\n\nbash\n\n`docker-compose up -d `\n\n1.  Install and run the backend server:\n\nbash\n\n`cd backend npm install npm run dev `\n\n1.  Install and run the frontend:\n\nbash\n\n`cd frontend npm install npm run dev `\n\n1.  Open your browser and navigate to:\n\ntext\n\n`http://localhost:3000 `\n\n---\n\n## API Endpoints\n\n## Authentication\n\n- `POST /api/auth/register` - Register a new user\n\n- `POST /api/auth/login` - Authenticate user and receive JWT\n\n- `GET /api/auth/me` - Get info about the currently logged-in user\n\n## APIs\n\n- `POST /api/apis` - Publish a new API (OpenAPI spec upload)\n\n- `GET /api/apis` - List all published APIs\n\n- `GET /api/apis/:id` - Get details of a specific API\n\n- `PUT /api/apis/:id` - Update API (owner only)\n\n- `DELETE /api/apis/:id` - Delete API (owner only)\n\n## API Keys\n\n- `POST /api/apis/:id/keys` - Generate an API key for an API\n\n- `GET /api/keys` - List all API keys for the user\n\n- `DELETE /api/keys/:id` - Revoke an API key\n\n## Proxy\n\n- `ALL /proxy/:apiId/*` - Proxies requests to the target API with API key validation and rate limiting\n\n---\n\n## Roadmap\n\n- Week 1: Setup authentication, database, and user management\n\n- Week 2: Develop API publishing and listing UI + backend endpoints\n\n- Week 3: Implement API key generation and request proxying\n\n- Week 4: Add usage analytics, error tracking, and rate limiting middleware\n\n- Week 5: Finalize UI polish, testing, and prepare deployment scripts\n\n---\n\n## Backend Server Skeleton (Express.js)\n\n```typescript\n\n`// backend/src/index.ts\n// import express from 'express'; import cors from 'cors'; import morgan from 'morgan'; import authRoutes from './routes/auth'; import apiRoutes from './routes/apis'; import keyRoutes from './routes/keys'; import proxyRoutes from './routes/proxy';   const app = express();   app.use(cors()); app.use(express.json()); app.use(morgan('dev'));   app.use('/api/auth', authRoutes); app.use('/api/apis', apiRoutes); app.use('/api/keys', keyRoutes); app.use('/proxy', proxyRoutes);   const PORT = process.env.PORT || 4000; app.listen(PORT, () =\u003e console.log(`Server running on port ${PORT}`)); `\n\n```\n\n---\n\n## Frontend Skeleton (Next.js with Redux Toolkit)\n\ntsx\n\n`// frontend/src/pages/_app.tsx import { AppProps } from 'next/app'; import { Provider } from 'react-redux'; import store from '../redux/store'; import '../styles/globals.css';   function MyApp({ Component, pageProps }: AppProps) {\n return ( \u003cProvider store={store}\u003e \u003cComponent {...pageProps} /\u003e \u003c/Provider\u003e ); }   export default MyApp; `\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsachinsen7%2Fendpointhub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsachinsen7%2Fendpointhub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsachinsen7%2Fendpointhub/lists"}