# ============================================================ # wtf-was-that-site — environment configuration # ============================================================ # Copy this file to .env, then fill in the values below. # cp .env.example .env # # Required: NOTION_TOKEN / NOTION_DB_ID / GEMINI_API_KEY # Everything else is OPTIONAL — leave blank to skip that feature. # ============================================================ # ──── REQUIRED ──────────────────────────────────────────────── # Notion integration token. Create at https://www.notion.so/profile/integrations # 1. New integration → internal → workspace # 2. Copy the secret (starts with "ntn_") # 3. In your Notion DB → ••• → Connections → enable this integration NOTION_TOKEN=ntn_xxxxxxxxxxxxxxxxxxxxxx # Notion database ID (the DB where each captured site becomes a page). # How to find: open your DB in browser → the URL is # https://notion.so//?v= # Take just the DATABASE_ID part (32 hex chars, with or without dashes). # # Tip: install Notion's official CLI to auto-create the schema for you: # curl -fsSL https://ntn.dev | bash # Then `ntn db create --schema schema/notion-db.json` (see README). NOTION_DB_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # Google Gemini API key (used for screenshot → structured metadata extraction). # Free tier at https://aistudio.google.com/apikey GEMINI_API_KEY=AIzaXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ──── OPTIONAL: Obsidian sync ───────────────────────────────── # If set, each capture also writes a markdown note + screenshot # attachment to //. # Leave OBSIDIAN_VAULT empty to disable. # # OBSIDIAN_VAULT=~/Documents/MyVault # OBSIDIAN_SUBFOLDER=🌐 Website Library # ──── OPTIONAL: tools wall front-end ────────────────────────── # If you build your own Next.js wall to render the captured sites, # point TOOLS_WALL_DIR at its repo (used to write public/covers/{id}.jpg # and run `vercel --prod` after each capture so the new card appears). # TOOLS_WALL_URL is for ISR revalidate + healthcheck. # Leave blank if you only want the Notion DB as the destination. # # TOOLS_WALL_DIR=~/projects/my-tools-wall # TOOLS_WALL_URL=https://my-tools-wall.vercel.app # WALL_REVALIDATE_SECRET=any-long-random-string-shared-with-wall # VERCEL_TOKEN= # https://vercel.com/account/tokens (Full Account) # ──── OPTIONAL: Feishu / Lark bitable sync ──────────────────── # ENABLE_FEISHU=true to also write each capture to a Feishu bitable. # Requires `lark-cli` (https://github.com/everfly/lark-cli) logged in. # # ENABLE_FEISHU=false # FEISHU_BASE_TOKEN= # FEISHU_TABLE_ID=tblxxxxxxxxxxxxxx # LARK_CLI= # leave blank → auto-detect via `which lark-cli` # FEISHU_AS=user # "user" (OAuth) or "tenant" (bot) # NVM_NODE_BIN= # rare: set if brew node + simdjson conflicts # ──── OPTIONAL: misc ────────────────────────────────────────── # SCREENSHOT_DIR=~/Pictures/bookmark-captures # where local screenshots cache # NOTION_DATA_SOURCE_ID= # only for 2025-09-03+ multi-source Notion API # # NOTES_FIELD_NAME: Notion property used for your personal notes (preserved # across re-captures). Defaults to "My Notes" — must EXACTLY match the property # name in your Notion DB. If you set up the DB via schema/notion-db.json with # `ntn db create`, leave this blank. If you already have a DB with a different # field name (e.g. "Notes", "我的备注"), set it here. # NOTES_FIELD_NAME=My Notes