Base code

This commit is contained in:
Kunthawat Greethong
2026-01-08 22:39:53 +07:00
parent 697115c61a
commit c35fa52117
2169 changed files with 626670 additions and 0 deletions

View File

@@ -0,0 +1,498 @@
# Self-Host Setup - Developers
Get ALwrity running on your local machine in just 2 hours. This guide will help you set up the development environment and understand the self-hosted architecture.
## 🎯 What You'll Accomplish
By the end of this guide, you'll have:
- ✅ ALwrity running locally on your machine
- ✅ Backend API server accessible at localhost:8000
- ✅ Frontend dashboard accessible at localhost:3000
- ✅ Configured API keys for AI services
- ✅ Made your first API call to test the setup
## ⏱️ Time Required: 2 hours
## 🚀 Step-by-Step Setup
### Step 1: Prerequisites Check (10 minutes)
Before we start, ensure you have the following installed:
#### Required Software
- **Python 3.8+**: [Download Python](https://www.python.org/downloads/)
- **Node.js 18+**: [Download Node.js](https://nodejs.org/)
- **Git**: [Download Git](https://git-scm.com/downloads)
#### Verify Installation
```bash
# Check Python version
python --version
# Should show Python 3.8 or higher
# Check Node.js version
node --version
# Should show v18 or higher
# Check Git
git --version
# Should show Git version
```
### Step 2: Clone ALwrity Repository (5 minutes)
1. **Clone the repository**:
```bash
git clone https://github.com/AJaySi/ALwrity.git
cd ALwrity
```
2. **Verify the download**:
You should see folders: `backend`, `frontend`, `docs`, etc.
3. **Check the structure**:
```bash
ls -la
# Should show backend/, frontend/, docs/, etc.
```
### Step 3: Backend Setup (30 minutes)
#### Install Python Dependencies
```bash
cd backend
pip install -r requirements.txt
```
#### Configure Environment Variables
1. **Copy the template**:
```bash
cp env_template.txt .env
```
2. **Edit the `.env` file** with your API keys:
```bash
# Required API Keys
GEMINI_API_KEY=your_gemini_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
# Optional but recommended
TAVILY_API_KEY=your_tavily_api_key_here
SERPER_API_KEY=your_serper_api_key_here
# Database (default is fine)
DATABASE_URL=sqlite:///./alwrity.db
# Security
SECRET_KEY=your_secret_key_here
```
#### Get Your API Keys
**Gemini API Key** (Required):
1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey)
2. Create a new API key
3. Copy and paste into your `.env` file
**OpenAI API Key** (Required):
1. Go to [OpenAI Platform](https://platform.openai.com/api-keys)
2. Create a new API key
3. Copy and paste into your `.env` file
#### Start the Backend Server
```bash
python start_alwrity_backend.py
```
You should see:
```
INFO: Started server process
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000
```
### Step 4: Make Your First API Call (10 minutes)
#### Option A: Using cURL
```bash
# Test API connection
curl -X GET "https://api.alwrity.com/v1/health" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
```
#### Option B: Using Python
```python
import requests
# Set up your API key
API_KEY = "your_api_key_here"
BASE_URL = "https://api.alwrity.com/v1"
# Test API connection
response = requests.get(
f"{BASE_URL}/health",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
)
print(f"Status: {response.status_code}")
print(f"Response: {response.json()}")
```
#### Option C: Using JavaScript
```javascript
// Set up your API key
const API_KEY = "your_api_key_here";
const BASE_URL = "https://api.alwrity.com/v1";
// Test API connection
fetch(`${BASE_URL}/health`, {
method: "GET",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
```
### Step 5: Create Your First Content (8 minutes)
#### Generate a Blog Post
```python
import requests
# Set up your API key
API_KEY = "your_api_key_here"
BASE_URL = "https://api.alwrity.com/v1"
# Create content request
content_request = {
"type": "blog_post",
"topic": "Getting Started with ALwrity API",
"key_points": [
"What is ALwrity API",
"How to get started",
"Basic API usage",
"Next steps"
],
"tone": "professional",
"length": "medium",
"seo_optimized": True
}
# Make API call
response = requests.post(
f"{BASE_URL}/content/generate",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
json=content_request
)
if response.status_code == 200:
content = response.json()
print("Generated content:")
print(content["data"]["content"])
else:
print(f"Error: {response.status_code}")
print(response.json())
```
#### Generate Social Media Content
```python
# Create social media content request
social_request = {
"type": "social_media",
"platform": "linkedin",
"topic": "ALwrity API Launch",
"tone": "professional",
"include_hashtags": True,
"include_cta": True
}
# Make API call
response = requests.post(
f"{BASE_URL}/content/generate",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
json=social_request
)
if response.status_code == 200:
content = response.json()
print("Generated social media content:")
print(content["data"]["content"])
else:
print(f"Error: {response.status_code}")
print(response.json())
```
## 🔧 API Structure Overview
### Base URL
```
https://api.alwrity.com/v1
```
### Authentication
All API requests require authentication using your API key:
```bash
Authorization: Bearer YOUR_API_KEY
```
### Common Endpoints
#### Content Generation
```bash
POST /content/generate
POST /content/generate/batch
GET /content/{content_id}
PUT /content/{content_id}
DELETE /content/{content_id}
```
#### Persona Management
```bash
GET /personas
POST /personas
GET /personas/{persona_id}
PUT /personas/{persona_id}
DELETE /personas/{persona_id}
```
#### Analytics
```bash
GET /analytics/usage
GET /analytics/performance
GET /analytics/content/{content_id}
```
### Response Format
All API responses follow this format:
```json
{
"success": true,
"data": {
// Response data here
},
"meta": {
"request_id": "req_1234567890",
"timestamp": "2024-01-15T10:30:00Z",
"rate_limit": {
"limit": 1000,
"remaining": 999,
"reset": 1642248600
}
}
}
```
## 🎯 Common Use Cases
### 1. Automated Blog Post Generation
```python
def generate_blog_post(topic, key_points):
request_data = {
"type": "blog_post",
"topic": topic,
"key_points": key_points,
"tone": "professional",
"length": "long",
"seo_optimized": True,
"include_research": True
}
response = requests.post(
f"{BASE_URL}/content/generate",
headers={"Authorization": f"Bearer {API_KEY}"},
json=request_data
)
return response.json()["data"]["content"]
```
### 2. Social Media Content Automation
```python
def generate_social_content(platform, topic):
request_data = {
"type": "social_media",
"platform": platform,
"topic": topic,
"tone": "engaging",
"include_hashtags": True,
"include_cta": True
}
response = requests.post(
f"{BASE_URL}/content/generate",
headers={"Authorization": f"Bearer {API_KEY}"},
json=request_data
)
return response.json()["data"]["content"]
```
### 3. Batch Content Generation
```python
def generate_multiple_posts(topics):
request_data = {
"type": "blog_post",
"topics": topics,
"tone": "professional",
"length": "medium",
"seo_optimized": True
}
response = requests.post(
f"{BASE_URL}/content/generate/batch",
headers={"Authorization": f"Bearer {API_KEY}"},
json=request_data
)
return response.json()["data"]["content"]
```
## 🚨 Error Handling
### Common Error Codes
```python
def handle_api_response(response):
if response.status_code == 200:
return response.json()["data"]
elif response.status_code == 401:
raise Exception("Invalid API key")
elif response.status_code == 429:
raise Exception("Rate limit exceeded")
elif response.status_code == 400:
raise Exception(f"Bad request: {response.json()['error']}")
elif response.status_code == 500:
raise Exception("Internal server error")
else:
raise Exception(f"Unexpected error: {response.status_code}")
```
### Rate Limiting
ALwrity API has rate limits to ensure fair usage:
- **Free tier**: 100 requests per hour
- **Pro tier**: 1,000 requests per hour
- **Enterprise**: Custom limits
```python
import time
def make_api_call_with_retry(request_data, max_retries=3):
for attempt in range(max_retries):
response = requests.post(
f"{BASE_URL}/content/generate",
headers={"Authorization": f"Bearer {API_KEY}"},
json=request_data
)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
# Rate limited, wait and retry
time.sleep(60)
continue
else:
raise Exception(f"API error: {response.status_code}")
raise Exception("Max retries exceeded")
```
## 🎉 Congratulations!
You've successfully:
- ✅ Set up your developer account
- ✅ Obtained your API keys
- ✅ Made your first API call
- ✅ Generated content via API
- ✅ Understood the API structure
## 🚀 Next Steps
### Immediate Actions (Today)
1. **[Build your first integration](integration-guide.md)** - Create a complete integration
2. **Test different content types** - Try blog posts, social media, emails
3. **Explore advanced features** - Use personas, analytics, webhooks
4. **Join the developer community** - Connect with other developers
### This Week
1. **[Implement advanced features](advanced-usage.md)** - Use webhooks and real-time updates
2. **Build error handling** - Implement robust error handling
3. **Add monitoring** - Track API usage and performance
4. **Test in staging** - Deploy to a staging environment
### This Month
1. **[Deploy to production](deployment.md)** - Deploy your integration
2. **[Optimize performance](performance-optimization.md)** - Improve speed and efficiency
3. **[Scale your integration](scaling.md)** - Handle more users and content
4. **[Contribute to the community](contributing.md)** - Share your integrations
## 🆘 Need Help?
### Common Questions
**Q: How do I handle API errors?**
A: Check the status code and error message. Implement retry logic for rate limits and temporary errors.
**Q: What's the difference between development and production API keys?**
A: Development keys have lower rate limits and are for testing. Production keys are for live applications.
**Q: How do I monitor my API usage?**
A: Use the `/analytics/usage` endpoint to track your API usage and remaining quota.
**Q: Can I use webhooks for real-time updates?**
A: Yes! ALwrity supports webhooks for real-time notifications about content generation and updates.
### Getting Support
- **[API Documentation](https://docs.alwrity.com/api)** - Complete API reference
- **[Code Examples](https://github.com/alwrity/examples)** - Sample integrations
- **[Developer Community](https://github.com/AJaySi/ALwrity/discussions)** - Ask questions and get help
- **[Email Support](mailto:developers@alwrity.com)** - Get personalized help
## 🎯 Success Tips
### For Best Results
1. **Use appropriate rate limiting** - Don't exceed your quota
2. **Implement error handling** - Handle all possible error cases
3. **Cache responses** - Cache content to reduce API calls
4. **Monitor usage** - Track your API usage and costs
### Common Mistakes to Avoid
1. **Don't hardcode API keys** - Use environment variables
2. **Don't ignore rate limits** - Implement proper rate limiting
3. **Don't skip error handling** - Always handle API errors
4. **Don't forget to test** - Test your integration thoroughly
## 🎉 Ready for More?
**[Build your first integration →](integration-guide.md)**
---
*Questions? [Join our developer community](https://github.com/AJaySi/ALwrity/discussions) or [contact developer support](mailto:developers@alwrity.com)!*