diff --git a/.github/workflows/cf-pages.yml b/.github/workflows/cf-pages.yml
index 2e2661c..80d3d23 100644
--- a/.github/workflows/cf-pages.yml
+++ b/.github/workflows/cf-pages.yml
@@ -23,11 +23,8 @@ jobs:
- name: Install dependencies
run: npm install
- - name: Fetch content from ATProto
- run: npm run fetch
-
- - name: Generate static site
- run: npm run generate
+ - name: Build content from ATProto
+ run: npm run build
- name: Deploy to Cloudflare Pages
uses: cloudflare/pages-action@v1
diff --git a/Cargo.toml b/Cargo.toml
index 79929ea..bc37255 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "ailog"
-version = "0.2.0"
+version = "0.0.1"
edition = "2021"
description = "ATProto blog CLI"
authors = ["syui"]
diff --git a/config.json b/config.json
deleted file mode 100644
index a5358af..0000000
--- a/config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "title": "syui.ai",
- "handle": "syui.syui.ai",
- "collection": "ai.syui.log.post",
- "network": "syu.is",
- "color": "#EF454A",
- "siteUrl": "https://syui.ai"
-}
diff --git a/index.html b/index.html
index 140ef9a..e172358 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
- ailog
+ syui.ai
diff --git a/lexicon/ai.syui.log.post.json b/lexicons/ai.syui.log.post.json
similarity index 100%
rename from lexicon/ai.syui.log.post.json
rename to lexicons/ai.syui.log.post.json
diff --git a/network.json b/network.json
deleted file mode 100644
index 62de6a3..0000000
--- a/network.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "bsky.social": {
- "plc": "https://plc.directory",
- "bsky": "https://public.api.bsky.app",
- "web": "https://bsky.app"
- },
- "syu.is": {
- "plc": "https://plc.syu.is",
- "bsky": "https://bsky.syu.is",
- "web": "https://syu.is"
- }
-}
diff --git a/package.json b/package.json
index 5fd75e0..95821ae 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ailog",
- "version": "0.2.0",
+ "version": "0.0.1",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/readme.md b/readme.md
index a2fb7bf..4fa9092 100644
--- a/readme.md
+++ b/readme.md
@@ -1,346 +1,7 @@
# ailog
-ATProto-based blog platform built on at-browser.
-
-## Concept
-
-**Data lives in ATProto, not on this server.**
-
-This is not a traditional blog generator. It's a **viewer (client)** for ATProto records.
-
-```
-Traditional blog:
- Server DB ← article data ← user
-
-ATProto blog:
- User's PDS ← article data (ai.syui.log.post)
- ↓
- at-browser (this site) → displays records
+```sh
+$ vim public/config.json
+$ npm run build
```
-## Architecture
-
-```
-┌─────────────────────────────────────────┐
-│ at-browser │
-│ (ATProto record viewer/editor) │
-├─────────────────────────────────────────┤
-│ │
-│ / → admin (config.json) │
-│ /@alice → user page │
-│ /@bob.bsky → user page │
-│ │
-└─────────────────────────────────────────┘
-```
-
-## Roles
-
-| Role | Path | Data Source |
-|------|------|-------------|
-| **admin** | `/` (root) | local + remote |
-| **user** | `/@handle` | remote only |
-
-### Admin (Site Owner)
-
-- Defined in `config.json`
-- Has root (`/`) access
-- Can reference **local files** (static assets, custom styles)
-- Can reference **remote** (ATProto records)
-
-### User (Any ATProto User)
-
-- Accessed via `/@handle` path
-- **Remote only** (ATProto records from their PDS)
-- No registration required
-- Anyone with an ATProto account can be displayed
-
-## Features
-
-### 1. at-browser (Core)
-
-- Search by handle/DID
-- Browse PDS collections
-- Navigate ATProto records
-
-### 2. ai.syui.log.post View
-
-- Markdown rendering
-- Syntax highlighting
-- Blog-style display
-
-### 3. OAuth
-
-- Login with ATProto
-- Post to ai.syui.log.post collection
-
-## Use Cases
-
-### Personal Blog
-
-```json
-// config.json
-{
- "did": "did:plc:xxxxx",
- "handle": "syui.syui.ai"
-}
-```
-
-- Deploy to `syui.ai`
-- Root shows your profile + posts
-- You are the admin (local + remote)
-- Others can view via `/@handle`
-
-### Blog Service
-
-```json
-// config.json
-{
- "admin": "service.example.com",
- "handle": null
-}
-```
-
-- Deploy to `blog.example.com`
-- Root shows landing/search
-- All users via `/@handle` (remote only)
-- Platform for any ATProto user
-
-## Data Flow
-
-```
-┌──────────────┐ ┌──────────────┐
-│ User's PDS │────→│ at-browser │
-│ (ATProto) │←────│ (this site) │
-└──────────────┘ └──────────────┘
- ↑ │
- │ ↓
- ai.syui.log.post ┌──────────┐
- collection │ Display │
- │ - Profile│
- │ - Posts │
- └──────────┘
-```
-
-## Local = Remote (Same Format)
-
-**Critical design principle: local files use the exact same format as ATProto API responses.**
-
-This allows the same code to handle both data sources.
-
-### Remote (ATProto API)
-
-```bash
-curl "https://syu.is/xrpc/com.atproto.repo.listRecords?repo=did:plc:xxx&collection=ai.syui.log.post"
-```
-
-```json
-{
- "records": [
- {
- "uri": "at://did:plc:xxx/ai.syui.log.post/3xxx",
- "cid": "bafyrei...",
- "value": {
- "title": "Hello World",
- "content": "# Hello\n\nThis is my post.",
- "createdAt": "2025-01-01T00:00:00Z"
- }
- }
- ]
-}
-```
-
-### Local (Static File)
-
-```
-content/
-└── did:plc:xxx/
- ├── describe.json # describeRepo (special)
- ├── app.bsky.actor.profile/
- │ └── self.json # {collection}/{rkey}.json
- └── ai.syui.log.post/
- └── 3xxx.json # {collection}/{rkey}.json
-```
-
-```json
-// content/did:plc:xxx/ai.syui.log.post/3xxx.json
-{
- "uri": "at://did:plc:xxx/ai.syui.log.post/3xxx",
- "cid": "bafyrei...",
- "value": {
- "title": "Hello World",
- "content": "# Hello\n\nThis is my post.",
- "createdAt": "2025-01-01T00:00:00Z"
- }
-}
-```
-
-### ATProto API Reference
-
-| API | Path | Description |
-|-----|------|-------------|
-| getRecord | `/xrpc/com.atproto.repo.getRecord` | Get single record |
-| listRecords | `/xrpc/com.atproto.repo.listRecords` | List records in collection |
-| describeRepo | `/xrpc/com.atproto.repo.describeRepo` | Get repo info + collections list |
-
-See: [com.atproto.repo.describeRepo](https://docs.bsky.app/docs/api/com-atproto-repo-describe-repo)
-
-### Resolution Strategy
-
-```
-at-browser
- │
- ├── admin (config.json user)
- │ ├── 1. Check local: /content/{did}/{collection}/{rkey}.json
- │ └── 2. Fallback to remote: PDS API
- │
- └── user (/@handle)
- └── remote only: PDS API
-```
-
-### Why Same Format?
-
-- **One codebase**: No branching logic for local vs remote
-- **Easy testing**: Copy API response to local file
-- **Offline support**: Admin can work with local files
-- **Migration**: Local → Remote (just POST to PDS)
-
-## Config
-
-### config.json
-
-```json
-{
- "did": "did:plc:xxxxx",
- "handle": "syui.syui.ai",
- "pds": "syu.is",
- "collection": "ai.syui.log.post"
-}
-```
-
-## Tech Stack
-
-- **CLI**: Rust (ailog)
-- **Frontend**: Vite + TypeScript
-- **ATProto**: @atproto/api
-- **OAuth**: @atproto/oauth-client-browser
-- **Markdown**: marked + highlight.js
-
-## CLI (ailog)
-
-### Install
-
-```bash
-cargo build --release
-cp target/release/ailog ~/.local/bin/
-```
-
-### Commands
-
-```bash
-# Login to ATProto PDS
-ailog login -p [-s ]
-
-# Post a record
-ailog post -c [-r ]
-
-# Get records from collection
-ailog get -c [-l ]
-
-# Delete a record
-ailog delete -c -r
-
-# Sync PDS data to local content directory
-ailog sync [-o