{"id":"34e6cc3d-7c09-42a9-bbfa-91f8fc7590da","entityType":"agent","slug":"crewai-seung-gu-opad","name":"opad","canonicalUrl":"https://www.xpersona.co/agent/crewai-seung-gu-opad","canonicalPath":"/agent/crewai-seung-gu-opad","generatedAt":"2026-10-09T18:13:41.395Z","source":"GITHUB_REPOS","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T13:52:38.477Z","emptyReason":null},"description":"AI reading material for language learners — turns recent news into level-matched articles. crewAI with a Next.js / FastAPI / worker split, live at 1story1day.com OPAD (One Paragraph A Day) OPAD is an AI-powered system that **transforms** current news articles into personalized educational reading materials for language learners using $1. **How it works:** - 🔍 **Finding** - Searches for recent news articles on a specified topic - 📰 **Selecting** - Chooses the best article based on topic relevance, difficulty, and educational value - ✏️ **Transforming** - Adapts and transform","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 10/9/2026.","installCommand":null,"sourceUrl":"https://github.com/seung-gu/opad","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/seung-gu/opad","kind":"source"}],"safetyScore":66,"overallRank":36,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"AI reading material for language learners — turns recent news into level-matched articles. crewAI with a Next.js / FastAPI / worker split, live at 1story1day.co"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:52:38.477Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"crewai","status":"self-declared"},{"label":"multi-agent","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"crewai","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"multi-agent","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:crewai|supported|profile capability:multi-agent|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-10-09T13:52:38.477Z","emptyReason":"No source adoption metrics were available."},"stars":0,"forks":0,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:52:38.456Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T13:52:38.477Z","lastCrawledAt":"2026-10-09T13:52:38.456Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-16T13:52:38.456Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"GITHUB REPOS","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":null,"setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_REPOS","generatedAt":"2026-10-09T18:13:41.395Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-seung-gu-opad/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"GITHUB REPOS","verified":false,"confidence":"high","updatedAt":"2026-10-09T13:52:38.477Z","emptyReason":null},"readme":"# OPAD (One Paragraph A Day)\n\nOPAD is an AI-powered system that **transforms** current news articles into personalized educational reading materials for language learners using [crewAI](https://crewai.com).\n\n**How it works:**\n- 🔍 **Finding** - Searches for recent news articles on a specified topic\n- 📰 **Selecting** - Chooses the best article based on topic relevance, difficulty, and educational value\n- ✏️ **Transforming** - Adapts and transforms the selected article to match the target language level and length\n\n## Purpose\n\nOPAD provides language learners with:\n- **Current, relevant content**: Real news articles instead of outdated textbook materials\n- **Appropriate difficulty**: Content adapted to the learner's proficiency level\n- **Complete source attribution**: Original source information preserved\n- **Personalized learning**: Materials tailored to specific topics, languages, and levels\n\n## Overview\n\nOPAD uses a **3-service architecture** (Web/API/Worker) with asynchronous job processing:\n\n- **Web (Next.js)**: User interface for generating and viewing articles\n- **API (FastAPI)**: REST API for article CRUD operations and job queue management\n- **Worker (Python)**: Background job processor that runs CrewAI to generate articles\n\n**Data Storage:**\n- **MongoDB**: Article metadata and content storage\n- **Redis**: Job queue and status tracking\n\nFor detailed architecture documentation, see [ARCHITECTURE.md](./docs/ARCHITECTURE.md).\n\n## Installation & Deployment\n\n### Prerequisites\n\n- Python >=3.10 <3.14\n- Node.js >=18\n- Docker (for containerized deployment)\n- MongoDB and Redis (provided by Railway add-ons or local Docker)\n\n### Local Development (Docker)\n\n1. **Start dependencies** (MongoDB and Redis):\n   ```bash\n   docker-compose -f docker-compose.local.yml up -d\n   ```\n\n2. **Install dependencies**:\n   ```bash\n   # Python\n   pip install uv\n   uv pip install -e .\n\n   # Node.js / monorepo\n   pnpm install\n   pnpm prepare\n   ```\n\n   > If you make backend API changes under `server/api`, regenerate the shared client types with:\n   > ```bash\n   > pnpm export:openapi\n   > pnpm generate:types\n   > ```\n\n3. **Set environment variables**:\n   ```bash\n   export REDIS_URL=redis://localhost:6379\n   export MONGO_URL=mongodb://localhost:27017/\n   export OPENAI_API_KEY=your-key\n   export SERPER_API_KEY=your-key\n\n   # JWT Authentication (Required)\n   # Generate a secure key: openssl rand -hex 32\n   export JWT_SECRET_KEY=your-secure-random-secret-key-here\n\n   # CORS (Optional, default: \"*\")\n   export CORS_ORIGINS=http://localhost:8000\n   ```\n\n4. **Run services** (in separate terminals):\n   ```bash\n   # API (Terminal 1)\n   PYTHONPATH=server uvicorn api.main:app --reload --port 8001\n   \n   # Worker (Terminal 2)\n   PYTHONPATH=server uv run python -m worker.main\n   \n   # Web (Terminal 3)\n   cd client/apps/web\n   API_BASE_URL=http://localhost:8001 npm run dev\n   ```\n\n5. **Access**: Open [http://localhost:8000](http://localhost:8000)\n\nFor detailed local setup instructions, see [SETUP.md](./docs/SETUP.md).\n\n### Railway Deployment\n\n1. **Create Railway project** with 3 services:\n   - `web` (Next.js) - Use `Dockerfile.web`\n   - `api` (FastAPI) - Use `Dockerfile.api`\n   - `worker` (Python) - Use `Dockerfile.worker`\n\n2. **Add add-ons**:\n   - MongoDB add-on (provides `MONGO_URL`)\n   - Redis add-on (provides `REDIS_URL`)\n\n3. **Configure environment variables**:\n   \n   **Web service:**\n   ```\n   API_BASE_URL=https://${{ api.RAILWAY_PUBLIC_DOMAIN }}\n   ```\n\n   **API service:**\n   ```\n   JWT_SECRET_KEY=<generate-with-openssl-rand-hex-32>\n   CORS_ORIGINS=https://${{ web.RAILWAY_PUBLIC_DOMAIN }}\n   OPENAI_API_KEY=your-key\n   SERPER_API_KEY=your-key\n   ```\n\n   **Worker service:**\n   ```\n   REDIS_URL=${{ api.REDIS_URL }}\n   MONGO_URL=${{ api.MONGO_URL }}\n   OPENAI_API_KEY=your-key\n   SERPER_API_KEY=your-key\n   ```\n\n4. **Deploy**: Railway automatically builds and deploys from your repository\n\nFor detailed Railway deployment instructions, see [SETUP.md](./docs/SETUP.md).\n\n## API Type Generation\n\nThis project uses an automated pipeline to generate TypeScript types from the FastAPI OpenAPI schema. All generation tools and artifacts are grouped in the `client/libs/api-types/` directory to maintain domain separation.\n\nFor detailed information on the pipeline architecture, see the **[API Types README](./client/libs/api-types/README.md)**.\n\n### How It Works\n\n1. **Export OpenAPI Schema**: The `sync_from_backend.py` script introspects the FastAPI application and exports the OpenAPI specification:\n   ```bash\n   pnpm export:openapi\n   ```\n   Generates: `client/libs/api-types/openapi.json`\n\n2. **Generate TypeScript Types**: openapi-typescript converts the OpenAPI schema to TypeScript:\n   ```bash\n   pnpm generate:types\n   ```\n   Generates: `client/libs/api-types/api.generated.ts`\n\n3. **Wrap Generated Types (Domain Models)**: We create domain-specific wrapper types (e.g., `Article`, `Vocabulary`) based on the raw generated types (e.g., `ArticleResponse`, `VocabularyResponse`). This allows us to safely handle API nullability and maintain backward compatibility for frontend-specific Enums:\n   ```typescript\n   // Example from client/libs/types/article.ts\n   import type { components } from '../api-types/api.generated';\n\n   export type Article = components['schemas']['ArticleResponse'];\n   \n   ```\n\n### Automatic Type Regeneration\n\nA **Husky pre-commit hook** automatically regenerates types when you modify API contracts:\n\n```bash\n# Triggered when modifying any of these files:\nserver/api/main.py\nserver/api/models.py\nserver/api/routes/*.py\nserver/api/dependencies.py\n```\n\nThe hook runs:\n```bash\npnpm export:openapi && pnpm generate:types\n```\n\nThen stages the generated files for commit.\n\n### Manual Type Generation\n\nRegenerate types at any time:\n```bash\n# Step 1: Export OpenAPI schema to JSON\npnpm export:openapi\n\n# Step 2: Generate TypeScript types from the schema\npnpm generate:types\n\n# Both steps together\npnpm export:openapi && pnpm generate:types\n```\n\n### Type Validation\n\nBoth web and mobile packages validate types during build:\n```bash\npnpm --filter @opad/web exec tsc --noEmit\npnpm --filter @opad/mobile exec tsc --noEmit\n```\n\n## Documentation\n\n- **[ARCHITECTURE.md](./docs/ARCHITECTURE.md)**: Detailed system architecture and design\n- **[SETUP.md](./docs/SETUP.md)**: Comprehensive setup and deployment guide\n- **[DEVLOG.md](./docs/DEVLOG.md)**: Development log and milestones\n- **[REFERENCE.md](./docs/REFERENCE.md)**: API flow diagrams and reference documentation\n- **[CLAUDE.md](./CLAUDE.md)**: AI agent pipeline and development guidelines\n- **[CHANGELOG.md](./docs/CHANGELOG.md)**: Version history and release notes\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.\n","readmeExcerpt":"OPAD (One Paragraph A Day) OPAD is an AI-powered system that **transforms** current news articles into personalized educational reading materials for language learners using $1. **How it works:** - 🔍 **Finding** - Searches for recent news articles on a specified topic - 📰 **Selecting** - Chooses the best article based on topic relevance, difficulty, and educational value - ✏️ **Transforming** - Adapts and transform","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"docker-compose -f docker-compose.local.yml up -d"},{"language":"bash","snippet":"# Python\n   pip install uv\n   uv pip install -e .\n\n   # Node.js / monorepo\n   pnpm install\n   pnpm prepare"},{"language":"bash","snippet":"> pnpm export:openapi\n   > pnpm generate:types\n   >"},{"language":"bash","snippet":"export REDIS_URL=redis://localhost:6379\n   export MONGO_URL=mongodb://localhost:27017/\n   export OPENAI_API_KEY=your-key\n   export SERPER_API_KEY=your-key\n\n   # JWT Authentication (Required)\n   # Generate a secure key: openssl rand -hex 32\n   export JWT_SECRET_KEY=your-secure-random-secret-key-here\n\n   # CORS (Optional, default: \"*\")\n   export CORS_ORIGINS=http://localhost:8000"},{"language":"bash","snippet":"# API (Terminal 1)\n   PYTHONPATH=server uvicorn api.main:app --reload --port 8001\n   \n   # Worker (Terminal 2)\n   PYTHONPATH=server uv run python -m worker.main\n   \n   # Web (Terminal 3)\n   cd client/apps/web\n   API_BASE_URL=http://localhost:8001 npm run dev"},{"language":"text","snippet":"API_BASE_URL=https://${{ api.RAILWAY_PUBLIC_DOMAIN }}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB REPOS","editorialOverview":"AI reading material for language learners — turns recent news into level-matched articles. crewAI with a Next.js / FastAPI / worker split, live at 1story1day.com OPAD (One Paragraph A Day) OPAD is an AI-powered system that **transforms** current news articles into personalized educational reading materials for language learners using $1. **How it works:** - 🔍 **Finding** - Searches for recent news articles on a specified topic - 📰 **Selecting** - Chooses the best article based on topic relevance, difficulty, and educational value - ✏️ **Transforming** - Adapts and transform","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":369,"uniquenessScore":70,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T13:52:38.477Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T13:52:38.477Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T18:13:41.395Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/github_repos","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}