3c6e8c42c2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
118 lines
3.4 KiB
Markdown
118 lines
3.4 KiB
Markdown
# prompt-gen
|
|
|
|
A local web app for building and reusing prompt templates. Write a prompt once with `{{variable}}` placeholders, save it as a preset, then fill in the fields to generate new prompts on demand.
|
|
|
|

|
|
|
|
## Features
|
|
|
|
- **Presets** — save any number of named templates with descriptions
|
|
- **Live variable filling** — input fields are generated automatically from `{{variable_name}}` placeholders in your template
|
|
- **AI rewrite** — send the filled prompt to GPT for improvement with one click
|
|
- **Persistent storage** — everything saved to a local `settings.json`, no database
|
|
|
|
## Quick start (Docker)
|
|
|
|
```bash
|
|
docker compose up --build
|
|
```
|
|
|
|
Open [http://localhost:8000](http://localhost:8000).
|
|
|
|
Data persists in a Docker named volume. To back it up:
|
|
|
|
```bash
|
|
docker compose cp app:/app/data/settings.json ./settings.json
|
|
```
|
|
|
|
## Quick start (local dev)
|
|
|
|
**Requirements:** Python 3.11+, Node 18+
|
|
|
|
```bash
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
cd frontend && npm install && npm run build && cd ..
|
|
|
|
# Run
|
|
uvicorn backend.main:app --host 127.0.0.1 --port 8001
|
|
```
|
|
|
|
Open [http://localhost:8001](http://localhost:8001).
|
|
|
|
### Hot-reload dev mode
|
|
|
|
```bash
|
|
# Terminal 1 — backend
|
|
uvicorn backend.main:app --port 8001 --reload
|
|
|
|
# Terminal 2 — frontend
|
|
cd frontend && npm run dev
|
|
```
|
|
|
|
Frontend dev server runs on [http://localhost:5173](http://localhost:5173) and proxies `/api` to port 8001.
|
|
|
|
## AI rewrite
|
|
|
|
Click the ⚙ icon and enter your OpenAI API key. The key is stored in `settings.json` and never sent to the frontend. Once set, the **✦ Rewrite with AI** button becomes active in the prompt runner.
|
|
|
|
The model defaults to `gpt-4.1`. Override it with the `OPENAI_MODEL` environment variable:
|
|
|
|
```bash
|
|
OPENAI_MODEL=gpt-4o uvicorn backend.main:app --port 8001
|
|
# or in docker-compose.yml under environment:
|
|
```
|
|
|
|
## Template syntax
|
|
|
|
Use `{{variable_name}}` anywhere in your template. Variable names must start with a letter or underscore and contain only letters, numbers, and underscores.
|
|
|
|
```
|
|
Resolve {{issue_id}} in {{repo}}. Create the PR as {{author}}.
|
|
```
|
|
|
|
Duplicate variable names collapse to a single input field. Variables appear in the order they first appear in the template.
|
|
|
|
## Configuration
|
|
|
|
All settings are stored in `settings.json` at the project root (or at `$SETTINGS_PATH` when set).
|
|
|
|
```json
|
|
{
|
|
"openai_api_key": "sk-...",
|
|
"presets": [
|
|
{
|
|
"id": "a1b2c3d4",
|
|
"name": "My template",
|
|
"description": "optional",
|
|
"template": "Resolve {{issue_id}} in {{repo}}.",
|
|
"variables": ["issue_id", "repo"],
|
|
"created_at": "2026-06-26T10:00:00Z",
|
|
"updated_at": "2026-06-26T10:00:00Z"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## API
|
|
|
|
The FastAPI backend exposes a simple REST API at `/api`.
|
|
|
|
| Method | Path | Description |
|
|
|--------|------|-------------|
|
|
| `GET` | `/api/presets` | List all presets |
|
|
| `POST` | `/api/presets` | Create a preset |
|
|
| `PUT` | `/api/presets/{id}` | Update a preset |
|
|
| `DELETE` | `/api/presets/{id}` | Delete a preset |
|
|
| `GET` | `/api/settings` | Check if OpenAI key is set |
|
|
| `POST` | `/api/settings` | Save OpenAI API key |
|
|
| `POST` | `/api/rewrite` | Rewrite a prompt with AI |
|
|
|
|
Interactive docs available at [http://localhost:8001/docs](http://localhost:8001/docs) when running locally.
|
|
|
|
## Stack
|
|
|
|
- **Frontend** — React 18, Tailwind CSS v3, Vite
|
|
- **Backend** — FastAPI, uvicorn
|
|
- **Storage** — `settings.json` (flat file, no database)
|