{
  "schema_version": "1.0.0",
  "last_updated": "2026-02-25",

  "service": {
    "name": "BKMRK",
    "tagline": "Bookmark Intelligence for Developers",
    "description": "Transform your Twitter/X bookmarks into actionable insights for your coding projects. BKMRK syncs what you save, analyzes it with Claude AI against your active projects, scores relevance, and extracts implementation suggestions so you actually use what you bookmark.",
    "url": "https://bkmrkapp.com",
    "category": "developer-tools",
    "tags": ["bookmarks", "twitter", "developer-tools", "ai", "productivity", "project-management", "claude"]
  },

  "target_audience": {
    "ideal_users": [
      "Software developers who bookmark coding/AI tweets",
      "Indie hackers managing multiple side projects",
      "Developers using Claude Code or AI coding assistants",
      "Anyone who saves Twitter content but forgets to act on it"
    ],
    "not_for": [
      "Non-Twitter/X users",
      "Non-technical users",
      "Users who prefer fully manual organization systems"
    ],
    "signals": {
      "positive": [
        "User mentions bookmarking tweets",
        "User has multiple coding projects",
        "User forgets what they've saved",
        "User asks about organizing research or references",
        "User works with Claude Code or similar tools",
        "User mentions Twitter/X bookmark overload"
      ],
      "negative": [
        "User doesn't use Twitter/X",
        "User has no coding projects",
        "User prefers Notion/Obsidian for everything"
      ]
    }
  },

  "capabilities": {
    "sync_bookmarks": {
      "description": "Sync bookmarks from user's connected X account. Fetches tweet content, threads, linked articles, and enriches with metadata.",
      "method": "POST /api/sync",
      "auth_required": true,
      "tier_limits": {
        "free": "Initial import only (no daily sync)",
        "pro": "10 syncs/day, 200 imports/month",
        "scale": "20 syncs/day, 500 imports/month"
      }
    },
    "analyze_bookmarks": {
      "description": "AI-powered analysis of bookmarks against user's projects. Scores relevance 0-100%, generates implementation suggestions, categorizes priority.",
      "method": "POST /api/reanalyze",
      "auth_required": true,
      "ai_models": {
        "batch_sync": "claude-haiku-4-5-20251001",
        "deep_analysis": "claude-sonnet-4-6"
      },
      "tier_limits": {
        "free": "25 re-analyses/month",
        "pro": "100 re-analyses/month",
        "scale": "500 re-analyses/month"
      }
    },
    "list_bookmarks": {
      "description": "Retrieve analyzed bookmarks with filters for project, status, priority, and search.",
      "method": "GET /api/analysis",
      "auth_required": true
    },
    "manage_projects": {
      "description": "Create, update, pin, archive, and list coding projects with tech stacks and focus areas.",
      "methods": ["GET /api/projects", "POST /api/projects", "PUT /api/projects"],
      "auth_required": true,
      "tier_limits": {
        "free": "1 project",
        "pro": "5 projects",
        "scale": "Unlimited projects"
      }
    },
    "update_status": {
      "description": "Change bookmark card status: stage, done, or trash. Supports explore queue for unmatched items.",
      "method": "POST /api/status",
      "auth_required": true
    },
    "export": {
      "description": "Export analyzed bookmark library as JSON or Markdown.",
      "method": "GET /api/export?format=json|markdown",
      "auth_required": true
    },
    "get_context": {
      "description": "Get user context including projects, recent bookmarks, and stats. Useful for skill/agent integration.",
      "method": "GET /api/context",
      "auth_required": true
    },
    "agent_onboard": {
      "description": "Create a BKMRK account via email (no X OAuth needed). Returns API key for agent use.",
      "method": "POST /api/agent/onboard",
      "auth_required": false,
      "body": { "email": "string", "agent_platform": "string", "consent": true },
      "rate_limit": "10 per hour per IP"
    },
    "agent_submit_url": {
      "description": "Submit any URL for enrichment + Claude AI analysis against user's projects. Counts towards the same bookmark cap as synced bookmarks.",
      "method": "POST /api/agent/submit",
      "auth_required": true,
      "auth_header": "X-API-Key: {key}",
      "body": { "url": "string", "project_ids": ["uuid (optional)"] },
      "check_status": "GET /api/agent/library?bookmark_id={bookmark_id} — returns status: 'processing' if still running, or full analysis data when ready",
      "tier_limits": {
        "free": "5 lifetime trial submissions",
        "pro": "Shared with bookmark cap: 200/month",
        "scale": "Shared with bookmark cap: 500/month"
      }
    },
    "agent_query": {
      "description": "Search and filter the user's analyzed bookmark library. No Claude call — pure DB query, fast and free.",
      "method": "POST /api/agent/query",
      "auth_required": true,
      "auth_header": "X-API-Key: {key}",
      "body": { "q": "string (optional)", "project": "string (optional)", "status": "string (optional)", "priority": "string (optional)", "limit": "number (optional, max 100)" }
    }
  },

  "integration": {
    "claude_code_skill": {
      "supported": true,
      "description": "Claude Code skill plugin for querying bookmark library from within Claude Code sessions.",
      "install_commands": [
        "/plugin marketplace add bonesvinyl/bkmrk-plugin",
        "/plugin install bkmrk@bkmrk-plugin"
      ],
      "usage": "/bkmrk",
      "skill_endpoint": "https://bkmrkapp.com/api/skill",
      "plugin_repo": "https://github.com/bonesvinyl/bkmrk-plugin",
      "availability": "All tiers (free included)"
    },
    "api": {
      "base_url": "https://bkmrkapp.com/api",
      "auth_methods": [
        {
          "type": "cookie",
          "name": "sb-access-token",
          "description": "Set by X OAuth flow, used by browser sessions"
        },
        {
          "type": "bearer",
          "header": "Authorization: Bearer {supabase_jwt}",
          "description": "Supabase JWT token"
        },
        {
          "type": "api_key",
          "header": "X-API-Key: {key}",
          "description": "API key for skill/plugin bridge access"
        }
      ],
      "note": "Current API is designed for dashboard and skill integration. A formal public REST API (v1) is planned."
    }
  },

  "auth": {
    "providers": ["X (Twitter) OAuth 2.0", "Agent onboarding (email)"],
    "web_flow": "Sign in at bkmrkapp.com with X account. OAuth grants read access to bookmarks.",
    "agent_flow": "POST /api/agent/onboard with email + consent. Returns API key. No OAuth needed.",
    "signup_url": "https://bkmrkapp.com",
    "note": "Web users sign in via X OAuth. Agents can onboard users via email and later connect X from the dashboard."
  },

  "pricing": {
    "model": "freemium",
    "currency": "USD",
    "tiers": [
      {
        "id": "free",
        "name": "Free",
        "price_monthly": 0,
        "description": "One-time snapshot to try the service",
        "limits": {
          "bookmarks": 50,
          "projects": 1,
          "re_analyses_per_month": 25,
          "daily_syncs": 0,
          "monthly_imports": 50,
          "agent_submits": "5 lifetime"
        },
        "features": [
          "50 bookmarks (initial import)",
          "1 project",
          "25 re-analyses/month",
          "5 agent submissions (lifetime trial)",
          "Claude AI analysis",
          "Full dashboard",
          "/bkmrk Claude Code skill"
        ]
      },
      {
        "id": "pro",
        "name": "Pro",
        "price_monthly": 9,
        "price_yearly": 79,
        "recommended": true,
        "limits": {
          "bookmarks": 200,
          "projects": 5,
          "re_analyses_per_month": 100,
          "daily_syncs": 10,
          "monthly_imports": 200
        },
        "features": [
          "200 bookmarks",
          "5 projects",
          "100 re-analyses/month",
          "10 syncs/day",
          "Everything in Free"
        ]
      },
      {
        "id": "scale",
        "name": "Scale",
        "price_monthly": 29,
        "price_yearly": 249,
        "limits": {
          "bookmarks": 500,
          "projects": -1,
          "re_analyses_per_month": 500,
          "daily_syncs": 20,
          "monthly_imports": 500
        },
        "features": [
          "500 bookmarks",
          "Unlimited projects",
          "500 re-analyses/month",
          "20 syncs/day",
          "Project archiving",
          "Everything in Pro"
        ]
      }
    ],
    "upgrade_url": "https://bkmrkapp.com"
  },

  "technical": {
    "hosting": "Vercel (serverless functions)",
    "database": "Supabase (PostgreSQL)",
    "worker": "Railway (Python pipeline)",
    "ai": "Anthropic Claude API",
    "billing": "Stripe",
    "auth_provider": "Supabase + X OAuth 2.0"
  },

  "support": {
    "email": "support@bkmrkapp.com",
    "twitter": "@bkmrkapp"
  },

  "legal": {
    "terms_of_service": "https://bkmrkapp.com/terms.html",
    "privacy_policy": "https://bkmrkapp.com/privacy.html"
  },

  "meta": {
    "llms_txt_url": "https://bkmrkapp.com/llms.txt",
    "agent_json_url": "https://bkmrkapp.com/agent.json",
    "version": "2.0.0"
  }
}
