{"id":25625260,"url":"https://github.com/droidbg/echoai","last_synced_at":"2026-05-09T07:01:38.858Z","repository":{"id":274639872,"uuid":"923517793","full_name":"droidbg/EchoAI","owner":"droidbg","description":"A modern, responsive AI chat interface built with React, TypeScript, and OpenAI. Features dark/light mode, custom API keys, and real-time AI conversations with a sleek UI.","archived":false,"fork":false,"pushed_at":"2026-02-25T15:12:57.000Z","size":1772,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-25T18:05:12.886Z","etag":null,"topics":["chatgpt","chatgpt-api","chatgpt-app","nodejs","openapi","opneai","reactjs"],"latest_commit_sha":null,"homepage":"https://echoai2.vercel.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/droidbg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-01-28T11:47:10.000Z","updated_at":"2026-02-25T15:16:41.000Z","dependencies_parsed_at":"2025-01-28T14:44:02.290Z","dependency_job_id":"665343fe-3723-4ef7-92a9-952003b1af5e","html_url":"https://github.com/droidbg/EchoAI","commit_stats":null,"previous_names":["droidbg/chatgpt2.0","droidbg/echoai"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/droidbg/EchoAI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droidbg%2FEchoAI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droidbg%2FEchoAI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droidbg%2FEchoAI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droidbg%2FEchoAI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/droidbg","download_url":"https://codeload.github.com/droidbg/EchoAI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droidbg%2FEchoAI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32810381,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"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":["chatgpt","chatgpt-api","chatgpt-app","nodejs","openapi","opneai","reactjs"],"created_at":"2025-02-22T14:56:44.940Z","updated_at":"2026-05-09T07:01:38.852Z","avatar_url":"https://github.com/droidbg.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./client/public/logo.webp\" alt=\"EchoAI Logo\" width=\"120\" height=\"120\"\u003e\n  \n  # EchoAI\n  \n  **A modern, responsive AI chat interface built with React, TypeScript, and OpenAI**\n  \n  \u003cbr\u003e\n  \n  \u003c!-- Badges --\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/droidbg/EchoAI\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/stars/droidbg/EchoAI?style=for-the-badge\u0026logo=github\u0026color=yellow\u0026labelColor=black\" alt=\"GitHub stars\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/droidbg/EchoAI/fork\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/forks/droidbg/EchoAI?style=for-the-badge\u0026logo=github\u0026color=blue\u0026labelColor=black\" alt=\"GitHub forks\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/droidbg/EchoAI/issues\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/issues/droidbg/EchoAI?style=for-the-badge\u0026logo=github\u0026color=red\u0026labelColor=black\" alt=\"GitHub issues\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/droidbg/EchoAI/blob/main/LICENSE\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-blue?style=for-the-badge\u0026logo=apache\" alt=\"License\"\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n  \n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://nodejs.org/\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/Node.js-18+-green?style=for-the-badge\u0026logo=node.js\u0026logoColor=white\" alt=\"Node.js\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://reactjs.org/\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/React-18.3.1-blue?style=for-the-badge\u0026logo=react\u0026logoColor=white\" alt=\"React\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.typescriptlang.org/\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/TypeScript-5.6.2-blue?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\" alt=\"TypeScript\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://tailwindcss.com/\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/Tailwind%20CSS-4.0-38B2AC?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white\" alt=\"Tailwind CSS\"\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n  \n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://echoai2.vercel.app\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/🌐%20Live%20Demo-Visit%20Now-green?style=for-the-badge\u0026logo=vercel\u0026logoColor=white\" alt=\"Live Demo\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/droidbg/EchoAI/discussions\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/💬%20Discussions-Join%20Us-blue?style=for-the-badge\u0026logo=github\u0026logoColor=white\" alt=\"Discussions\"\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n  \n  \u003cbr\u003e\n  \n  \u003c!-- Quick Links --\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"#-features\"\u003eFeatures\u003c/a\u003e •\n    \u003ca href=\"#-quick-start\"\u003eQuick Start\u003c/a\u003e •\n    \u003ca href=\"#-installation\"\u003eInstallation\u003c/a\u003e •\n    \u003ca href=\"#-deployment\"\u003eDeployment\u003c/a\u003e •\n    \u003ca href=\"#-contributing\"\u003eContributing\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## 📱 Demo\n\n\u003cdiv align=\"center\"\u003e\n  \n  ### 🖥️ Desktop View\n  \u003cimg src=\"./docs/demo-desktop.gif\" alt=\"EchoAI Desktop Demo\" width=\"800\" style=\"border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);\"\u003e\n  \n  \u003cbr\u003e\u003cbr\u003e\n  \n  ### 📱 Mobile View\n  \u003cimg src=\"./docs/demo-mobile.gif\" alt=\"EchoAI Mobile Demo\" width=\"300\" style=\"border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);\"\u003e\n  \n  \u003cbr\u003e\u003cbr\u003e\n  \n  ### 🎨 UI Screenshots\n  \n  \u003ctable\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cstrong\u003eLight Mode\u003c/strong\u003e\u003cbr\u003e\n        \u003cimg src=\"./docs/screenshot-light.png\" alt=\"Light Mode\" width=\"400\" style=\"border-radius: 8px;\"\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cstrong\u003eDark Mode\u003c/strong\u003e\u003cbr\u003e\n        \u003cimg src=\"./docs/screenshot-dark.png\" alt=\"Dark Mode\" width=\"400\" style=\"border-radius: 8px;\"\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cstrong\u003eSettings Modal\u003c/strong\u003e\u003cbr\u003e\n        \u003cimg src=\"./docs/screenshot-settings.png\" alt=\"Settings\" width=\"400\" style=\"border-radius: 8px;\"\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cstrong\u003eError Handling\u003c/strong\u003e\u003cbr\u003e\n        \u003cimg src=\"./docs/screenshot-error.png\" alt=\"Error Handling\" width=\"400\" style=\"border-radius: 8px;\"\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/table\u003e\n  \n  \u003cbr\u003e\n  \n  **[🚀 Try EchoAI Live](https://echoai2.vercel.app)** • **[📖 View Documentation](#-documentation)**\n  \n\u003c/div\u003e\n\n---\n\n## 📊 Project Status\n\n\u003cdiv align=\"center\"\u003e\n\n| Status            | Description          |\n| ----------------- | -------------------- |\n| 🟢 **Stable**     | Production ready     |\n| 🟢 **Active**     | Regular updates      |\n| 🟢 **Maintained** | Bug fixes \u0026 features |\n| 🟢 **Documented** | Comprehensive docs   |\n\n\u003c/div\u003e\n\n### 🎯 Current Version: `v1.0.0`\n\n- ✅ **Core Features**: Chat interface, API integration, error handling\n- ✅ **UI/UX**: Dark/light mode, responsive design, animations\n- ✅ **Security**: API key management, input validation\n- ✅ **Performance**: Optimized builds, lazy loading\n- 🔄 **Roadmap**: See [Issues](https://github.com/droidbg/EchoAI/issues) for upcoming features\n\n---\n\n## 🌟 Features\n\n### 🎨 **Modern User Interface**\n\n- **Responsive Design**: Works seamlessly on desktop, tablet, and mobile devices\n- **Dark/Light Mode**: Toggle between beautiful dark and light themes\n- **Glass Morphism**: Modern UI with backdrop blur effects and smooth animations\n- **Accessibility**: Built with accessibility best practices in mind\n\n### 🤖 **AI-Powered Conversations**\n\n- **OpenAI Integration**: Powered by GPT-4 for intelligent, contextual responses\n- **Smart Suggestions**: Pre-built prompts for common use cases\n- **Context Awareness**: Maintains conversation context throughout the chat\n- **Error Recovery**: Intelligent retry mechanisms with fallback options\n\n### 🔐 **Flexible API Key Management**\n\n- **User API Keys**: Use your own OpenAI API key for personal use\n- **Server Fallback**: Built-in server with default API key for easy setup\n- **Secure Storage**: API keys stored securely in browser local storage\n- **Key Validation**: Real-time API key testing and validation\n\n### ⚡ **Performance \u0026 Reliability**\n\n- **Fast Loading**: Optimized bundle size and lazy loading\n- **Error Handling**: Comprehensive error handling with user-friendly messages\n- **Retry Logic**: Automatic retry mechanisms for failed requests\n- **Offline Support**: Graceful degradation when offline\n\n### 🛠️ **Developer Experience**\n\n- **TypeScript**: Full type safety and excellent developer experience\n- **Modern Stack**: React 18, Vite, Tailwind CSS, and more\n- **Hot Reload**: Fast development with instant feedback\n- **ESLint \u0026 Prettier**: Consistent code formatting and quality\n\n---\n\n## 📋 Table of Contents\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n- [📱 Demo](#-demo)\n- [🌟 Features](#-features)\n- [🚀 Quick Start](#-quick-start)\n- [📦 Installation](#-installation)\n- [⚙️ Configuration](#️-configuration)\n- [💻 Usage](#-usage)\n- [🏗️ Architecture](#️-architecture)\n- [📚 API Documentation](#-api-documentation)\n- [🚀 Deployment](#-deployment)\n- [🤝 Contributing](#-contributing)\n- [📄 License](#-license)\n- [🙏 Acknowledgments](#-acknowledgments)\n- [📞 Support](#-support)\n\n\u003c/details\u003e\n\n---\n\n## 🚀 Quick Start\n\n\u003e **⚡ Get up and running in under 5 minutes!**\n\n### 📋 Prerequisites\n\n| Requirement        | Version  | Download                                                |\n| ------------------ | -------- | ------------------------------------------------------- |\n| **Node.js**        | ≥ 16.0.0 | [Download](https://nodejs.org/)                         |\n| **npm**            | Latest   | Included with Node.js                                   |\n| **OpenAI API Key** | Any      | [Get Key](https://platform.openai.com/account/api-keys) |\n\n### ⚡ One-Command Setup\n\n```bash\n# Clone, install, and start EchoAI\ngit clone https://github.com/droidbg/EchoAI.git \u0026\u0026 cd EchoAI \u0026\u0026 npm run setup\n```\n\n\u003e **Note**: The `npm run setup` script will be added to automate the entire setup process.\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/droidbg/EchoAI.git\ncd EchoAI\n```\n\n### 2. Install Dependencies\n\n```bash\n# Install client dependencies\ncd client\nnpm install\n\n# Install server dependencies\ncd ../server\nnpm install\n```\n\n### 3. Configure Environment\n\n```bash\n# Copy environment templates\ncp client/.env.example client/.env\ncp server/.env.example server/.env\n```\n\nEdit the environment files:\n\n**`client/.env`:**\n\n```env\nVITE_SERVER_URL=http://localhost:3080/\n```\n\n**`server/.env`:**\n\n```env\nOPENAI_API_KEY=sk-your-openai-api-key-here\n```\n\n### 4. Start the Application\n\n```bash\n# Terminal 1: Start the server\ncd server\nnpm start\n\n# Terminal 2: Start the client\ncd client\nnpm start\n```\n\nVisit `http://localhost:5173` to see EchoAI in action! 🎉\n\n---\n\n## 📦 Installation\n\n### Option 1: Full Stack Setup (Recommended)\n\nThis setup includes both the React frontend and Node.js backend:\n\n```bash\n# Clone and setup\ngit clone https://github.com/droidbg/EchoAI.git\ncd EchoAI\n\n# Install all dependencies\nnpm run install:all\n\n# Configure environment\ncp client/.env.example client/.env\ncp server/.env.example server/.env\n\n# Start both client and server\nnpm run dev\n```\n\n### Option 2: Client-Only Setup\n\nIf you prefer to use your own backend or API:\n\n```bash\n# Clone and setup client only\ngit clone https://github.com/droidbg/EchoAI.git\ncd EchoAI/client\n\n# Install dependencies\nnpm install\n\n# Configure environment\ncp .env.example .env\n\n# Start client\nnpm start\n```\n\n### Option 3: Server-Only Setup\n\nFor deploying just the backend:\n\n```bash\n# Clone and setup server only\ngit clone https://github.com/droidbg/EchoAI.git\ncd EchoAI/server\n\n# Install dependencies\nnpm install\n\n# Configure environment\ncp .env.example .env\n\n# Start server\nnpm start\n```\n\n---\n\n## ⚙️ Configuration\n\n### Environment Variables\n\n#### Client Configuration (`client/.env`)\n\n| Variable          | Description        | Default                  | Required |\n| ----------------- | ------------------ | ------------------------ | -------- |\n| `VITE_SERVER_URL` | Backend server URL | `http://localhost:3080/` | Yes      |\n| `VITE_DEBUG`      | Enable debug mode  | `false`                  | No       |\n\n#### Server Configuration (`server/.env`)\n\n| Variable         | Description         | Default       | Required        |\n| ---------------- | ------------------- | ------------- | --------------- |\n| `OPENAI_API_KEY` | Your OpenAI API key | -             | Yes             |\n| `PORT`           | Server port         | `3080`        | No              |\n| `NODE_ENV`       | Environment mode    | `development` | No              |\n| `CLIENT_URL`     | Client URL for CORS | -             | No (production) |\n\n### API Key Setup\n\n#### Using Your Own API Key (Recommended)\n\n1. **Get an OpenAI API Key**:\n\n   - Visit [OpenAI Platform](https://platform.openai.com/account/api-keys)\n   - Create a new API key\n   - Copy the key (starts with `sk-` or `sk-proj-`)\n\n2. **Add to EchoAI**:\n   - Click the settings gear icon in the top-right corner\n   - Paste your API key in the \"Your OpenAI API Key\" field\n   - Click \"Save Key\"\n   - The system will test your key automatically\n\n#### Using Server API Key\n\n1. **Add to Server Environment**:\n\n   ```bash\n   # In server/.env\n   OPENAI_API_KEY=sk-your-openai-api-key-here\n   ```\n\n2. **Restart the Server**:\n   ```bash\n   cd server\n   npm start\n   ```\n\n---\n\n## 💻 Usage\n\n### Basic Chat\n\n1. **Start a Conversation**: Type your message in the input field\n2. **Send Message**: Press Enter or click the send button\n3. **View Response**: The AI response will appear in the chat\n4. **Continue Chatting**: Keep the conversation going naturally\n\n### Using Suggestions\n\nEchoAI provides helpful suggestions to get you started:\n\n- **\"Explain quantum computing\"** - Get explanations of complex topics\n- **\"Write a creative story\"** - Generate creative content\n- **\"Help with coding\"** - Get programming assistance\n- **\"Plan a vacation\"** - Get travel planning help\n\n### Error Handling\n\nWhen errors occur, EchoAI provides helpful options:\n\n- **Try Again**: Retry the failed request\n- **Use Your API Key**: Switch to your personal API key\n- **Clear Error**: Dismiss the error and continue\n\n### Settings\n\nAccess settings by clicking the gear icon:\n\n- **API Key Management**: Add, test, or remove your API key\n- **Theme Toggle**: Switch between dark and light modes\n- **Key Status**: See which API key is currently active\n\n---\n\n## 🏗️ Architecture\n\n### Frontend (React + TypeScript)\n\n```\nclient/\n├── src/\n│   ├── components/          # React components\n│   │   ├── AiChat.tsx      # AI message display\n│   │   ├── ChatBody.tsx    # Main chat container\n│   │   ├── ChatInput.tsx   # Message input\n│   │   ├── SettingsModal.tsx # Settings interface\n│   │   ├── TypingIndicator.tsx # Loading animation\n│   │   └── UserChat.tsx    # User message display\n│   ├── utils/              # Utility functions\n│   │   ├── Api.ts          # API communication\n│   │   └── ApiKeyManager.ts # API key management\n│   ├── App.tsx             # Main application\n│   └── main.tsx            # Application entry point\n├── public/                 # Static assets\n└── package.json           # Dependencies and scripts\n```\n\n### Backend (Node.js + Express)\n\n```\nserver/\n├── index.js               # Main server file\n├── package.json          # Dependencies and scripts\n├── vercel.json           # Vercel deployment config\n└── .env.example          # Environment template\n```\n\n### Technology Stack\n\n#### Frontend\n\n- **React 18** - Modern React with hooks and concurrent features\n- **TypeScript** - Type-safe JavaScript development\n- **Vite** - Fast build tool and development server\n- **Tailwind CSS** - Utility-first CSS framework\n- **React Query** - Data fetching and state management\n- **Auto Animate** - Smooth animations\n\n#### Backend\n\n- **Node.js** - JavaScript runtime\n- **Express** - Web application framework\n- **OpenAI SDK** - Official OpenAI API client\n- **CORS** - Cross-origin resource sharing\n- **dotenv** - Environment variable management\n\n---\n\n## 📚 API Documentation\n\n### Server Endpoints\n\n#### Health Check\n\n```http\nGET /\n```\n\n**Response:**\n\n```json\n{\n  \"status\": \"healthy\",\n  \"service\": \"EchoAI Server\",\n  \"version\": \"1.0.0\",\n  \"timestamp\": \"2024-12-19T10:30:00.000Z\",\n  \"environment\": \"development\"\n}\n```\n\n#### Chat Completion\n\n```http\nPOST /\nContent-Type: application/json\n\n{\n  \"message\": \"Hello, how are you?\"\n}\n```\n\n**Response:**\n\n```json\n{\n  \"message\": \"Hello! I'm doing well, thank you for asking. How can I help you today?\",\n  \"usage\": {\n    \"prompt_tokens\": 10,\n    \"completion_tokens\": 20,\n    \"total_tokens\": 30\n  },\n  \"model\": \"gpt-4o-mini\"\n}\n```\n\n**Error Responses:**\n\n| Status | Error                 | Description                |\n| ------ | --------------------- | -------------------------- |\n| 400    | Invalid request       | Missing or invalid message |\n| 401    | Invalid API key       | OpenAI API key is invalid  |\n| 402    | Insufficient quota    | OpenAI API quota exceeded  |\n| 429    | Rate limit exceeded   | Too many requests          |\n| 500    | Internal server error | Server-side error          |\n\n### Client API\n\n#### Message Type\n\n```typescript\ninterface Message {\n  sender: 'user' | 'ai';\n  message: string;\n  isError?: boolean;\n  errorId?: string;\n}\n```\n\n#### API Functions\n\n```typescript\n// Fetch AI response\nfetchResponse(messages: Message[]): Promise\u003c{ message: string }\u003e\n\n// API Key Management\nApiKeyManager.getApiKey(): string | null\nApiKeyManager.setApiKey(key: string): void\nApiKeyManager.clearApiKey(): void\nApiKeyManager.validateApiKeyFormat(key: string): { isValid: boolean; message: string }\nApiKeyManager.testApiKey(key: string): Promise\u003c{ isValid: boolean; message: string }\u003e\n```\n\n---\n\n## 🚀 Deployment\n\n### Option 1: Vercel (Recommended)\n\n#### Deploy Client\n\n```bash\n# Install Vercel CLI\nnpm i -g vercel\n\n# Deploy client\ncd client\nvercel\n\n# Follow the prompts to configure\n```\n\n#### Deploy Server\n\n```bash\n# Deploy server\ncd server\nvercel\n\n# Add environment variables in Vercel dashboard\n# OPENAI_API_KEY=your-key-here\n```\n\n### Option 2: Railway\n\n#### Deploy Full Stack\n\n```bash\n# Install Railway CLI\nnpm i -g @railway/cli\n\n# Login and deploy\nrailway login\nrailway init\nrailway up\n```\n\n### Option 3: Self-Hosted\n\n#### Using Docker\n\n```dockerfile\n# Dockerfile for server\nFROM node:18-alpine\nWORKDIR /app\nCOPY server/package*.json ./\nRUN npm ci --only=production\nCOPY server/ .\nEXPOSE 3080\nCMD [\"npm\", \"start\"]\n```\n\n#### Using PM2\n\n```bash\n# Install PM2\nnpm i -g pm2\n\n# Start server with PM2\ncd server\npm2 start index.js --name echoai-server\npm2 startup\npm2 save\n```\n\n### Environment Variables for Production\n\n```bash\n# Server\nOPENAI_API_KEY=sk-your-production-key\nNODE_ENV=production\nPORT=3080\nCLIENT_URL=https://your-client-domain.com\n\n# Client\nVITE_SERVER_URL=https://your-server-domain.com\n```\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions to EchoAI! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Quick Contribution Guide\n\n1. **Fork the repository**\n2. **Create a feature branch**: `git checkout -b feature/amazing-feature`\n3. **Make your changes** and test them\n4. **Commit your changes**: `git commit -m 'Add amazing feature'`\n5. **Push to the branch**: `git push origin feature/amazing-feature`\n6. **Open a Pull Request**\n\n### Development Setup\n\n```bash\n# Fork and clone\ngit clone https://github.com/droidbg/EchoAI.git\ncd EchoAI\n\n# Install dependencies\nnpm run install:all\n\n# Start development servers\nnpm run dev\n```\n\n### Code Style\n\n- Use TypeScript for all new code\n- Follow ESLint and Prettier configurations\n- Add JSDoc comments for complex functions\n- Write meaningful commit messages\n- Test your changes thoroughly\n\n---\n\n## 📄 License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- **OpenAI** for providing the amazing GPT models\n- **React Team** for the excellent framework\n- **Vercel** for the deployment platform\n- **All Contributors** who help make EchoAI better\n\n---\n\n## 📞 Support\n\n- **Documentation**: [GitHub Wiki](https://github.com/droidbg/EchoAI/wiki)\n- **Issues**: [GitHub Issues](https://github.com/droidbg/EchoAI/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/droidbg/EchoAI/discussions)\n- **Security**: [Security Policy](SECURITY.md)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003eMade with ❤️ by the EchoAI Contributors\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/droidbg/EchoAI\"\u003e⭐ Star us on GitHub\u003c/a\u003e •\n    \u003ca href=\"https://github.com/droidbg/EchoAI/issues\"\u003e🐛 Report Bug\u003c/a\u003e •\n    \u003ca href=\"https://github.com/droidbg/EchoAI/issues\"\u003e💡 Request Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdroidbg%2Fechoai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdroidbg%2Fechoai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdroidbg%2Fechoai/lists"}