ContentSeed is a client-side content repurposing app built with React, TypeScript, and Vite. It helps turn one technical post into platform-specific drafts for X/Twitter, LinkedIn, Reddit, and Substack.
- Platform-native generation for:
- Twitter/X (thread-style output)
- Substack
- Multi-provider support: Anthropic, OpenAI, and Gemini
- Demo mode with sample post + pre-generated outputs (no API key required)
- Quick edit controls:
- Tone: Casual, Professional, Technical, Storytelling
- Length: Shorter, Default, Longer
- Hashtags: on/off
- Emojis: on/off
- Per-platform actions:
- Copy
- Copy all
- Regenerate
- Export
- Export options:
- PNG
- JPG
- PDF (single or all-platform output)
- Privacy-first architecture:
- No backend
- No telemetry
- API keys stored locally (with client-side encryption)
- In-app demo:
- Click
Try Demoon landing, or - Click
Try Sample Postin the app - This loads sample content and demo outputs without calling any LLM API.
- Click
- YouTube demo:
- Parse markdown into structure (headings, paragraphs, code, key points).
- Apply platform-specific prompt templates.
- Generate output via selected provider.
- Refine with quick-edit controls and export in shareable formats.
- Active pre-1.0 development.
- Contributions are welcome for docs, bug fixes, and tests.
- No backward compatibility guarantee before
v1.0.0(breaking changes will be called out in release notes).
- Node.js
20+(LTS recommended) pnpm10+
pnpm install
cp .env.example .env
pnpm devOpen http://localhost:5173.
ContentSeed uses .env / .env.example for provider selection, model switching, and local URLs.
| Variable | Purpose | Default |
|---|---|---|
VITE_APP_URL |
App base URL used by frontend config | http://localhost:5173 |
PLAYWRIGHT_BASE_URL |
Base URL for Playwright use.baseURL and webServer.url |
http://localhost:5173 |
VITE_DEFAULT_PROVIDER |
Provider used when no browser-stored config exists (anthropic, openai, gemini) |
anthropic |
VITE_ANTHROPIC_MODEL_FAST |
Anthropic model for fast mode | claude-sonnet-4-6-20250514 |
VITE_ANTHROPIC_MODEL_BALANCED |
Anthropic model for balanced mode | claude-sonnet-4-6-20250514 |
VITE_ANTHROPIC_MODEL_QUALITY |
Anthropic model for quality mode | claude-sonnet-4-6-20250514 |
VITE_OPENAI_MODEL_FAST |
OpenAI model for fast mode | gpt-5.2 |
VITE_OPENAI_MODEL_BALANCED |
OpenAI model for balanced mode | gpt-5.2 |
VITE_OPENAI_MODEL_QUALITY |
OpenAI model for quality mode | gpt-5.2 |
VITE_GEMINI_MODEL_FAST |
Gemini model for fast mode | gemini-3.0-pro |
VITE_GEMINI_MODEL_BALANCED |
Gemini model for balanced mode | gemini-3.0-pro |
VITE_GEMINI_MODEL_QUALITY |
Gemini model for quality mode | gemini-3.0-pro |
VITE_ANTHROPIC_API_KEY |
Optional Anthropic key fallback when no saved key exists | empty |
VITE_OPENAI_API_KEY |
Optional OpenAI key fallback when no saved key exists | empty |
VITE_GEMINI_API_KEY |
Optional Gemini key fallback when no saved key exists | empty |
Any VITE_* environment variable is exposed to the client bundle by Vite.
Use the fallback key variables only for local development convenience, not for production secrets.
pnpm lint
pnpm test
pnpm test:e2e:smoke
pnpm test:e2eIf Playwright browsers are missing locally:
pnpm exec playwright install chromiumSee CONTRIBUTING.md for workflow, DCO signoff requirements, and review expectations.
- Intended for technical content repurposing workflows.
- Best results come from well-structured markdown input.
- Pre-
v1.0.0: prompts, output formats, and behavior can change.
See SECURITY.md for responsible disclosure instructions.
See SUPPORT.md for where to ask questions and how to report issues.