2025-06-15 15:23:32 +09:00
2025-06-15 15:23:32 +09:00
2025-06-14 15:56:25 +09:00
2025-06-15 15:23:32 +09:00
2025-06-15 15:23:32 +09:00
2025-06-15 15:23:32 +09:00
2025-06-15 15:23:32 +09:00
2025-06-14 13:17:09 +09:00
2025-06-06 03:18:20 +09:00
2025-06-14 13:17:08 +09:00
2025-06-15 15:23:32 +09:00
2025-06-04 23:53:05 +09:00
2025-06-14 13:17:08 +09:00
2025-06-11 12:53:31 +09:00
2025-06-15 15:23:32 +09:00
2025-06-14 13:17:08 +09:00
2025-06-11 12:53:31 +09:00
2025-06-11 18:27:58 +09:00

ai.log

AI-powered static blog generator with ATProto integration, part of the ai.ai ecosystem.

🚀 Quick Start

Installation & Setup

# 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

cargo install --path .
# Now you can use `ailog` command globally

📖 Core Commands

Blog Management

# Project setup
ailog init <project-name>           # Initialize new blog project
ailog new <title>                   # 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

# 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

# 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)
# 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:

# 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:

# 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:

# 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

# 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.aiai.syui.log)
  4. Default: ai.syui.log

Stream Monitoring

# 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

cd oauth

# Development
npm run dev

# Production build
npm run build

# Preview production
npm run preview

Environment Variables:

# 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:

[
  {
    "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:

# 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

# 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

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

# 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

# Check Rust version
rustc --version

# Update dependencies
cargo update

# Clean build
cargo clean && cargo build --release

Authentication Problems

# Reset authentication
ailog auth logout
ailog auth init

# Test API access
ailog stream test

AI Generation Issues

# 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

# 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

[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

Description
No description provided
Readme 66 MiB
Languages
Rust 56.4%
JavaScript 27%
CSS 9.3%
HTML 6%
Shell 1.3%