A personal AI prompt capture and organization system. Paste a URL, text, or screenshot into a Discord channel — PromptCorder extracts the prompt, classifies it with AI, and stores it in a structured Notion database.
Discord Capture → AI Processing (OpenRouter/MiniMax) → Notion Database
AI power users encounter 3-4 high-value prompts daily across Twitter, Substack, newsletters, and other platforms. These get saved in unstructured ways — copy-pasted into flat documents with no tagging or searchability. Within days, the collection becomes a digital junk drawer.
The problem is not capture. The problem is that saving feels like the finish line when it is actually the starting line.
- Paste a URL, text, or screenshot into a dedicated Discord channel
- PromptCorder fetches the content, extracts the prompt, and sends it to AI for classification
- AI generates a title, assigns a category, and infers tags
- The structured record is written to a Notion database
- A confirmation is posted in Discord with the classification details
| Input | Behavior |
|---|---|
| URL | Fetches page content, extracts prompt text, detects source type (Twitter, Substack, Newsletter, Other) |
| Text | Classifies directly, source type = Manual |
| Screenshot | OCR extracts text from image, then classifies |
| Property | Type | Details |
|---|---|---|
| Prompt Title | Title | AI-generated, 5-10 words |
| Prompt Text | Rich Text | Full extracted prompt content |
| Category | Select | Marketing, Business Strategy, Coding, Writing, Research, Uncategorized |
| Tags | Multi-Select | 1-5 AI-inferred tags, lowercase hyphenated |
| Source URL | URL | Original URL (null for text input) |
| Source Type | Select | Twitter, Newsletter, Substack, Manual, Screenshot, Other |
| Date Captured | Date | Auto-set at capture time |
- Python 3.10+
- Discord bot with Message Content Intent enabled
- OpenRouter API key
- Notion integration connected to a parent page
git clone https://github.com/dhroovmehta/PromptCorder.git
cd PromptCorder
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Fill in all values in .env| Variable | Description |
|---|---|
DISCORD_BOT_TOKEN |
Discord bot token |
DISCORD_CHANNEL_ID |
ID of the capture channel |
DISCORD_OWNER_ID |
Your Discord user ID |
OPENROUTER_API_KEY |
OpenRouter API key |
OPENROUTER_MODEL |
Model identifier (default: minimax/minimax-01) |
NOTION_API_KEY |
Notion integration token |
NOTION_DATABASE_ID |
Notion database ID |
python3 bot.pypm2 start ecosystem.config.js
pm2 savePromptCorder follows a "never lose anything" philosophy:
- URL fetch fails → stores the URL with fallback values
- AI API fails → stores raw content with title = first 50 chars, category = Uncategorized
- Notion API fails → retries 3x with exponential backoff, then logs to
logs/failed_writes.jsonfor manual recovery - OCR fails → stores image reference with partial text
No content is ever silently discarded.
- Python 3.10+ — discord.py, httpx, BeautifulSoup4, notion-client
- OpenRouter — AI classification via MiniMax model
- Notion API — Structured storage
- PM2 — Process management on DigitalOcean VPS
- Hosting: $0 incremental (shared VPS)
- Discord: Free
- Notion API: Free
- AI Processing: ~$5/month at 3-4 prompts/day
MIT