# ai.log AI-powered static blog generator with ATProto integration, part of the ai.ai ecosystem. ## πŸš€ Quick Start ### Installation & Setup ```bash # 1. Clone repository git clone https://git.syui.ai/ai/log cd log # 2. Build ailog cargo build --release # 3. Initialize blog ./target/release/ailog init my-blog # 4. Create your first post ./target/release/ailog new "My First Post" # 5. Build static site ./target/release/ailog build # 6. Serve locally ./target/release/ailog serve ``` ### Install via Cargo ```bash cargo install --path . # Now you can use `ailog` command globally ``` ## πŸ“– Core Commands ### Blog Management ```bash # Project setup ailog init # Initialize new blog project ailog new # Create new blog post ailog build # Generate static site with JSON index ailog serve # Start development server ailog clean # Clean build artifacts # ATProto authentication ailog auth init # Setup ATProto credentials ailog auth status # Check authentication status ailog auth logout # Clear credentials # OAuth app build ailog oauth build <project-dir> # Build OAuth comment system ``` ### Stream & AI Features ```bash # Start monitoring & AI generation ailog stream start --ai-generate # Monitor blog + auto-generate AI content ailog stream start --daemon # Run as background daemon ailog stream status # Check stream status ailog stream stop # Stop monitoring ailog stream test # Test ATProto API access ``` ### Documentation & Translation ```bash # Generate documentation ailog doc readme --with-ai # Generate enhanced README ailog doc api --output ./docs # Generate API documentation ailog doc structure --include-deps # Analyze project structure # AI-powered translation ailog doc translate --input README.md --target-lang en ailog doc translate --input docs/guide.ja.md --target-lang en --model qwen2.5:latest ``` ## πŸ—οΈ Architecture ### Project Structure ``` ai.log/ β”œβ”€β”€ src/ # Rust static blog generator β”‚ β”œβ”€β”€ commands/ # CLI command implementations β”‚ β”œβ”€β”€ generator.rs # Core blog generation + JSON index β”‚ β”œβ”€β”€ mcp/ # MCP server integration β”‚ └── main.rs # CLI entry point β”œβ”€β”€ my-blog/ # Your blog content β”‚ β”œβ”€β”€ content/posts/ # Markdown blog posts β”‚ β”œβ”€β”€ templates/ # Tera templates β”‚ β”œβ”€β”€ static/ # Static assets β”‚ └── public/ # Generated site output β”œβ”€β”€ oauth/ # ATProto comment system β”‚ β”œβ”€β”€ src/ # TypeScript OAuth app β”‚ β”œβ”€β”€ dist/ # Built OAuth assets β”‚ └── package.json # Node.js dependencies └── target/ # Rust build output ``` ### Data Flow ``` Blog Posts (Markdown) β†’ ailog build β†’ public/ β”œβ”€β”€ Static HTML pages └── index.json (API) ↓ ailog stream start --ai-generate β†’ Monitor index.json ↓ New posts detected β†’ Ollama AI β†’ ATProto records β”œβ”€β”€ ai.syui.log.chat.lang (translations) └── ai.syui.log.chat.comment (AI comments) ↓ OAuth app β†’ Display AI-generated content ``` ## πŸ€– AI Integration ### AI Content Generation The `--ai-generate` flag enables automatic AI content generation: 1. **Blog Monitoring**: Monitors `index.json` every 5 minutes 2. **Duplicate Prevention**: Checks existing ATProto collections 3. **AI Generation**: Uses Ollama (gemma3:4b) for translations & comments 4. **ATProto Storage**: Saves to derived collections (`base.chat.lang`, `base.chat.comment`) ```bash # Start AI generation monitor ailog stream start --ai-generate # Output: # πŸ€– Starting AI content generation monitor... # πŸ“‘ Blog host: https://syui.ai # 🧠 Ollama host: https://ollama.syui.ai # πŸ” Checking for new blog posts... # βœ… Generated translation for: ι™ηš„γ‚΅γ‚€γƒˆγ‚Έγ‚§γƒγƒ¬γƒΌγ‚Ώγ‚’δ½œγ£γŸ # βœ… Generated comment for: ι™ηš„γ‚΅γ‚€γƒˆγ‚Έγ‚§γƒγƒ¬γƒΌγ‚Ώγ‚’δ½œγ£γŸ ``` ### Collection Management ailog uses a **simplified collection structure** based on a single base collection name: ```bash # Single environment variable controls all collections (unified naming) export VITE_OAUTH_COLLECTION="ai.syui.log" # Automatically derives: # - ai.syui.log (comments) # - ai.syui.log.user (user management) # - ai.syui.log.chat.lang (AI translations) # - ai.syui.log.chat.comment (AI comments) ``` **Benefits:** - βœ… **Simple**: One variable instead of 5+ - βœ… **Consistent**: All collections follow the same pattern - βœ… **Manageable**: Easy systemd/production configuration ### Ask AI Feature Interactive AI chat integrated into blog pages: ```bash # 1. Setup Ollama brew install ollama ollama pull gemma2:2b # 2. Start with CORS support OLLAMA_ORIGINS="https://example.com" ollama serve # 3. Configure AI DID in templates/base.html const aiConfig = { systemPrompt: 'You are a helpful AI assistant.', aiDid: 'did:plc:your-ai-bot-did' }; ``` ## 🌐 ATProto Integration ### OAuth Comment System The OAuth app provides ATProto-authenticated commenting: ```bash # 1. Build OAuth app cd oauth npm install npm run build # 2. Configure for production ailog oauth build my-blog # Auto-generates .env.production # 3. Deploy OAuth assets # Assets are automatically copied to public/ during ailog build ``` ### Authentication Setup ```bash # Initialize ATProto authentication ailog auth init # Input required: # - Handle (e.g., your.handle.bsky.social) # - Access JWT # - Refresh JWT # Check status ailog auth status ``` ### Collection Structure All ATProto collections are **automatically derived** from a single base name: ``` Base Collection: "ai.syui.log" β”œβ”€β”€ ai.syui.log (user comments) β”œβ”€β”€ ai.syui.log.user (registered commenters) └── ai.syui.log.chat/ β”œβ”€β”€ ai.syui.log.chat.lang (AI translations) └── ai.syui.log.chat.comment (AI comments) ``` **Configuration Priority:** 1. Environment variable: `VITE_OAUTH_COLLECTION` (unified) 2. config.toml: `[oauth] collection = "..."` 3. Auto-generated from domain (e.g., `log.syui.ai` β†’ `ai.syui.log`) 4. Default: `ai.syui.log` ### Stream Monitoring ```bash # Monitor ATProto streams for comments ailog stream start # Enable AI generation alongside monitoring ailog stream start --ai-generate --daemon ``` ## πŸ“± OAuth App Features The OAuth TypeScript app provides: ### Comment System - **Real-time Comments**: ATProto-authenticated commenting - **User Management**: Automatic user registration - **Mobile Responsive**: Optimized for all devices - **JSON View**: Technical record inspection ### AI Content Display - **Lang: EN Tab**: AI-generated English translations - **AI Comment Tab**: AI-generated blog insights - **Admin Records**: Fetches from admin DID collections - **Real-time Updates**: Live content refresh ### Setup & Configuration ```bash cd oauth # Development npm run dev # Production build npm run build # Preview production npm run preview ``` **Environment Variables:** ```bash # Production (.env.production - auto-generated by ailog oauth build) VITE_APP_HOST=https://syui.ai VITE_OAUTH_CLIENT_ID=https://syui.ai/client-metadata.json VITE_OAUTH_REDIRECT_URI=https://syui.ai/oauth/callback VITE_ADMIN_DID=did:plc:uqzpqmrjnptsxezjx4xuh2mn # Simplified collection configuration (single base collection) VITE_OAUTH_COLLECTION=ai.syui.log # AI Configuration VITE_AI_ENABLED=true VITE_AI_ASK_AI=true VITE_AI_PROVIDER=ollama # ... (other AI settings) ``` ## πŸ”§ Advanced Features ### JSON Index Generation Every `ailog build` generates `/public/index.json`: ```json [ { "title": "ι™ηš„γ‚΅γ‚€γƒˆγ‚Έγ‚§γƒγƒ¬γƒΌγ‚Ώγ‚’δ½œγ£γŸ", "href": "https://syui.ai/posts/2025-06-06-ailog.html", "formated_time": "Thu Jun 12, 2025", "utc_time": "2025-06-12T00:00:00Z", "tags": ["blog", "rust", "mcp", "atp"], "contents": "Plain text content...", "description": "Excerpt...", "categories": [] } ] ``` This enables: - **API Access**: Programmatic blog content access - **Stream Monitoring**: AI generation triggers - **Search Integration**: Full-text search capabilities ### Translation System AI-powered document translation with Ollama: ```bash # Basic translation ailog doc translate --input README.md --target-lang en # Advanced options ailog doc translate \ --input docs/guide.ja.md \ --target-lang en \ --source-lang ja \ --model qwen2.5:latest \ --output docs/guide.en.md ``` **Features:** - **Markdown-aware**: Preserves code blocks, links, tables - **Multiple models**: qwen2.5, gemma3, etc. - **Auto-detection**: Detects Japanese content automatically - **Structure preservation**: Maintains document formatting ### MCP Server Integration ```bash # Start MCP server for ai.gpt integration ailog mcp --port 8002 # Available tools: # - create_blog_post # - list_blog_posts # - build_blog # - get_post_content # - translate_document # - generate_documentation ``` ## πŸš€ Deployment ### GitHub Actions ```yaml name: Deploy ai.log Blog on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Rust uses: actions-rs/toolchain@v1 with: toolchain: stable - name: Build ailog run: cargo build --release - name: Build blog run: | cd my-blog ../target/release/ailog build - name: Deploy to Cloudflare Pages uses: cloudflare/pages-action@v1 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} projectName: my-blog directory: my-blog/public ``` ### Production Setup ```bash # 1. Build for production cargo build --release # 2. Setup systemd services sudo cp systemd/system/ailog-stream.service /etc/systemd/system/ sudo systemctl enable ailog-stream.service sudo systemctl start ailog-stream.service # 3. Configure Ollama with CORS sudo vim /usr/lib/systemd/system/ollama.service # Add: Environment="OLLAMA_ORIGINS=https://yourdomain.com" # 4. Monitor services journalctl -u ailog-stream.service -f ``` ## 🌍 Translation Support ### Supported Languages | Language | Code | Status | Model | |----------|------|--------|-------| | English | `en` | βœ… Full | qwen2.5 | | Japanese | `ja` | βœ… Full | qwen2.5 | | Chinese | `zh` | βœ… Full | qwen2.5 | | Korean | `ko` | ⚠️ Basic | qwen2.5 | | Spanish | `es` | ⚠️ Basic | qwen2.5 | ### Translation Workflow 1. **Parse**: Analyze markdown structure 2. **Preserve**: Isolate code blocks and technical content 3. **Translate**: Process with Ollama AI 4. **Reconstruct**: Rebuild with original formatting 5. **Validate**: Ensure structural integrity ## 🎯 Use Cases ### Personal Blog - **AI-Enhanced**: Automatic translations and AI insights - **Distributed Comments**: ATProto-based social interaction - **Mobile-First**: Responsive OAuth comment system ### Technical Documentation - **Code Analysis**: Automatic API documentation - **Multi-language**: AI-powered translation - **Structure Analysis**: Project overview generation ### AI Ecosystem Integration - **ai.gpt Connection**: Memory-driven content generation - **MCP Integration**: Claude Code workflow support - **Distributed Identity**: ATProto authentication ## πŸ” Troubleshooting ### Build Issues ```bash # Check Rust version rustc --version # Update dependencies cargo update # Clean build cargo clean && cargo build --release ``` ### Authentication Problems ```bash # Reset authentication ailog auth logout ailog auth init # Test API access ailog stream test ``` ### AI Generation Issues ```bash # Check Ollama status curl http://localhost:11434/api/tags # Test with manual request curl -X POST http://localhost:11434/api/generate \ -d '{"model":"gemma3:4b","prompt":"Test","stream":false}' # Check CORS settings # Ensure OLLAMA_ORIGINS includes your domain ``` ### OAuth App Issues ```bash # Rebuild OAuth assets cd oauth rm -rf dist/ npm run build # Check environment variables cat .env.production # Verify client-metadata.json curl https://yourdomain.com/client-metadata.json ``` ## πŸ“š Documentation ### Core Concepts - **Static Generation**: Rust-powered site building - **JSON Index**: API-compatible blog data - **ATProto Integration**: Distributed social features - **AI Enhancement**: Automatic content generation ### File Structure - `config.toml`: Blog configuration (simplified collection setup) - `content/posts/*.md`: Blog post sources - `templates/*.html`: Tera template files - `public/`: Generated static site + API (index.json) - `oauth/dist/`: Built OAuth assets ### Example config.toml ```toml [site] title = "My Blog" base_url = "https://myblog.com" [oauth] admin = "did:plc:your-admin-did" collection = "ai.myblog.log" # Single base collection [ai] enabled = true auto_translate = true comment_moderation = true model = "gemma3:4b" host = "https://ollama.syui.ai" ``` ## πŸ”— ai.ai Ecosystem ai.log is part of the broader ai.ai ecosystem: - **ai.gpt**: Memory system and AI integration - **ai.card**: ATProto-based card game system - **ai.bot**: Social media automation - **ai.verse**: 3D virtual world integration - **ai.shell**: AI-powered shell interface ### yui System Compliance - **Uniqueness**: Each blog tied to individual identity - **Reality Reflection**: Personal memories β†’ digital content - **Irreversibility**: Published content maintains integrity ## πŸ“ License Β© syui --- **Part of the ai ecosystem**: ai.gpt, ai.card, ai.log, ai.bot, ai.verse, ai.shell