{"id":47585370,"url":"https://github.com/Nyrok/flompt","last_synced_at":"2026-04-16T07:00:37.400Z","repository":{"id":340766871,"uuid":"1164936169","full_name":"Nyrok/flompt","owner":"Nyrok","description":"flow + prompt = flompt - Visual AI Prompt Builder. Decompose, edit as flowchart, recompile into optimized machine-readable prompts","archived":false,"fork":false,"pushed_at":"2026-03-30T09:44:15.000Z","size":1739,"stargazers_count":91,"open_issues_count":2,"forks_count":7,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-03-30T11:36:34.985Z","etag":null,"topics":["ai","ai-tools","browser","chatbot","chatgpt","claude","claude-code","claude-code-plugins","extension","flowchart","gemini","llm","mcp","open-source","prompt","prompt-builder","prompt-engineering","skills","visual-workflow","workflow"],"latest_commit_sha":null,"homepage":"https://flompt.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nyrok.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Nyrok"}},"created_at":"2026-02-23T16:42:53.000Z","updated_at":"2026-03-30T09:44:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Nyrok/flompt","commit_stats":null,"previous_names":["nyrok/flompt"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/Nyrok/flompt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nyrok%2Fflompt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nyrok%2Fflompt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nyrok%2Fflompt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nyrok%2Fflompt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nyrok","download_url":"https://codeload.github.com/Nyrok/flompt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nyrok%2Fflompt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31875183,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-tools","browser","chatbot","chatgpt","claude","claude-code","claude-code-plugins","extension","flowchart","gemini","llm","mcp","open-source","prompt","prompt-builder","prompt-engineering","skills","visual-workflow","workflow"],"created_at":"2026-04-01T08:00:24.243Z","updated_at":"2026-04-16T07:00:37.392Z","avatar_url":"https://github.com/Nyrok.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Nyrok"],"categories":["Prompt Engineering Tools"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"app/public/favicon.svg\" width=\"80\" height=\"80\" alt=\"flompt logo\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eflompt\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eflow + prompt = flompt\u003c/strong\u003e\u003cbr/\u003e\n  Turn any AI prompt into a visual flow. Decompose, edit as a flowchart, recompile.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://flompt.dev\"\u003e\u003cimg src=\"https://img.shields.io/badge/🌐_Live-flompt.dev-FF3570?style=for-the-badge\" alt=\"Live Demo\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/Nyrok/flompt?style=for-the-badge\u0026color=FFFF00\" alt=\"Stars\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/Nyrok/flompt?style=for-the-badge\" alt=\"License\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt/stargazers\"\u003e\n    \u003cimg src=\"https://flompt.dev/stars-svg\" alt=\"Star goal progress\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sponsors/Nyrok\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Sponsor-❤-ea4aaa?style=for-the-badge\u0026logo=githubsponsors\u0026logoColor=white\" alt=\"Sponsor Nyrok\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/Nyrok/flompt/ci.yml?branch=master\u0026style=for-the-badge\u0026label=CI\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"CONTRIBUTING.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/contributions-welcome-brightgreen?style=for-the-badge\" alt=\"Contributions welcome\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://chrome.google.com/webstore/detail/mbobfapnkflkbcflmedlejpladileboc\"\u003e\u003cimg src=\"https://img.shields.io/badge/Chrome_Web_Store-Add_to_Chrome-4285F4?style=for-the-badge\u0026logo=googlechrome\u0026logoColor=white\" alt=\"Chrome Web Store\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://addons.mozilla.org/addon/flompt-visual-prompt-builder/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Firefox_Add--ons-Add_to_Firefox-FF6611?style=for-the-badge\u0026logo=firefox\u0026logoColor=white\" alt=\"Firefox Add-ons\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://glama.ai/mcp/servers/Nyrok/flompt\"\u003e\n    \u003cimg width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/Nyrok/flompt/badge\" alt=\"Glama MCP\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt\"\u003e\u003cimg src=\"https://img.shields.io/badge/TypeScript-3178C6?style=flat-square\u0026logo=typescript\u0026logoColor=white\" alt=\"TypeScript\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt\"\u003e\u003cimg src=\"https://img.shields.io/badge/React_18-61DAFB?style=flat-square\u0026logo=react\u0026logoColor=black\" alt=\"React\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt\"\u003e\u003cimg src=\"https://img.shields.io/badge/React_Flow-FF0072?style=flat-square\u0026logo=reactflow\u0026logoColor=white\" alt=\"React Flow\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt\"\u003e\u003cimg src=\"https://img.shields.io/badge/FastAPI-009688?style=flat-square\u0026logo=fastapi\u0026logoColor=white\" alt=\"FastAPI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt\"\u003e\u003cimg src=\"https://img.shields.io/badge/Vite-646CFF?style=flat-square\u0026logo=vite\u0026logoColor=white\" alt=\"Vite\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 🎥 Demo\n\n**[Try it live at flompt.dev](https://flompt.dev)**, free, no account needed.\n\n\u003e Paste any prompt. The AI breaks it into typed blocks. Drag, reorder, compile to Claude-optimized XML.\n\n![flompt demo](https://flompt.dev/app/og-image.png)\n\n---\n\n## ✨ What is flompt?\n\n**flompt** is a visual prompt engineering tool.\n\nInstead of writing one long block of text, flompt lets you:\n\n1. Paste any prompt and let the AI break it into structured blocks\n2. Drag, connect, and reorder blocks in a flowchart editor\n3. Compile to a Claude-optimized, machine-ready XML prompt\n\n---\n\n## 🧩 Block Types\n\n16 specialized blocks that map directly to Claude's prompt engineering best practices:\n\n| Block | Purpose | Claude XML |\n|-------|---------|-----------|\n| **Document** | External content grounding | `\u003cdocuments\u003e\u003cdocument\u003e` |\n| **Role** | AI persona \u0026 expertise | `\u003crole\u003e` |\n| **Tools** | Callable functions the agent can use | `\u003ctools\u003e` |\n| **Audience** | Who the output is written for | `\u003caudience\u003e` |\n| **Context** | Background information | `\u003ccontext\u003e` |\n| **Environment** | System context: OS, paths, date, runtime | `\u003cenvironment\u003e` |\n| **Objective** | What to DO | `\u003cobjective\u003e` |\n| **Goal** | End goal \u0026 success criteria | `\u003cgoal\u003e` |\n| **Input** | Data you're providing | `\u003cinput\u003e` |\n| **Constraints** | Rules \u0026 limitations | `\u003cconstraints\u003e` |\n| **Guardrails** | Hard limits and safety refusals | `\u003cguardrails\u003e` |\n| **Examples** | Few-shot demonstrations | `\u003cexamples\u003e\u003cexample\u003e` |\n| **Chain of Thought** | Step-by-step reasoning | `\u003cthinking\u003e` |\n| **Output Format** | Expected output structure | `\u003coutput_format\u003e` |\n| **Response Style** | Verbosity, tone, prose, markdown (structured UI) | `\u003cformat_instructions\u003e` |\n| **Language** | Response language | `\u003clanguage\u003e` |\n\nBlocks are automatically ordered following Anthropic's recommended prompt structure.\n\n---\n\n## 🚀 Try It Now\n\n**[flompt.dev](https://flompt.dev)**, free and open-source, no account needed.\n\n---\n\n## 🧩 Browser Extension\n\nUse flompt directly inside ChatGPT, Claude, and Gemini without leaving your tab.\n\n- Injects an Enhance button into the AI chat input\n- Bidirectional sync between the sidebar and the chat\n- Works on ChatGPT, Claude, and Gemini\n\n\u003cp\u003e\n  \u003ca href=\"https://chrome.google.com/webstore/detail/mbobfapnkflkbcflmedlejpladileboc\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Chrome_Web_Store-Add_to_Chrome-4285F4?style=for-the-badge\u0026logo=googlechrome\u0026logoColor=white\" alt=\"Add to Chrome\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://addons.mozilla.org/addon/flompt-visual-prompt-builder/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Firefox_Add--ons-Add_to_Firefox-FF6611?style=for-the-badge\u0026logo=firefox\u0026logoColor=white\" alt=\"Add to Firefox\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 🤖 Claude Code Integration (MCP)\n\nflompt exposes its core capabilities as native tools inside **Claude Code** via the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/).\n\nOnce configured, you can call `decompose_prompt`, `compile_prompt`, and `list_block_types` directly from any Claude Code conversation, no browser, no copy-paste.\n\n### Installation\n\n**Option 1: CLI (recommended)**\n\n```bash\nclaude mcp add --transport http --scope user flompt https://flompt.dev/mcp/\n```\n\nThe `--scope user` flag makes flompt available in all your Claude Code projects.\n\n**Option 2: `~/.claude.json`**\n\n```json\n{\n  \"mcpServers\": {\n    \"flompt\": {\n      \"type\": \"http\",\n      \"url\": \"https://flompt.dev/mcp/\"\n    }\n  }\n}\n```\n\n### Available Tools\n\nOnce connected, 3 tools are available in Claude Code:\n\n#### `decompose_prompt(prompt: str)`\n\nBreaks down a raw prompt into structured blocks (role, objective, context, constraints, etc.).\n\n- Uses Claude or GPT on the server if an API key is configured\n- Falls back to keyword-based heuristic analysis otherwise\n- Returns a list of typed blocks + full JSON to pass to `compile_prompt`\n\n```\nInput:  \"You are a Python expert. Write a function that parses JSON and handles errors.\"\nOutput: ✅ 3 blocks extracted:\n          [ROLE] You are a Python expert.\n          [OBJECTIVE] Write a function that parses JSON…\n          [CONSTRAINTS] handles errors\n        📋 Full blocks JSON: [{\"id\": \"...\", \"type\": \"role\", ...}, ...]\n```\n\n#### `compile_prompt(blocks_json: str)`\n\nCompiles a list of blocks into a Claude-optimized XML prompt.\n\n- Takes the JSON from `decompose_prompt` (or manually crafted blocks)\n- Reorders blocks following Anthropic's recommended structure\n- Returns the final XML prompt with an estimated token count\n\n```\nInput:  [{\"type\": \"role\", \"content\": \"You are a Python expert\", ...}, ...]\nOutput: ✅ Prompt compiled (142 estimated tokens):\n\n        \u003crole\u003eYou are a Python expert.\u003c/role\u003e\n        \u003cobjective\u003eWrite a function that parses JSON and handles errors.\u003c/objective\u003e\n```\n\n#### `list_block_types()`\n\nLists all 16 available block types with descriptions and the recommended canonical ordering. Useful when manually crafting blocks.\n\n### Typical Workflow\n\n```\n1. decompose_prompt(\"your raw prompt here\")\n   → get structured blocks as JSON\n\n2. (optionally edit the JSON to add/remove/modify blocks)\n\n3. compile_prompt(\"\u003cjson from step 1\u003e\")\n   → get Claude-optimized XML prompt, ready to use\n```\n\n### Technical Details\n\n| Property | Value |\n|----------|-------|\n| Transport | Streamable HTTP (POST) |\n| Endpoint | `https://flompt.dev/mcp/` |\n| Session | Stateless (each call is independent) |\n| Auth | None required |\n| DNS rebinding protection | Enabled (`flompt.dev` explicitly allowed) |\n\n---\n\n## 🛠️ Self-Hosting (Local Dev)\n\n### Requirements\n\n- Python 3.12+\n- Node.js 18+\n- An Anthropic or OpenAI API key (optional, heuristic fallback works without one)\n\n### Setup\n\n**Backend:**\n```bash\ncd backend\npython -m venv .venv \u0026\u0026 source .venv/bin/activate\npip install -r requirements.txt\ncp .env.example .env   # add your API key\nuvicorn app.main:app --reload --port 8000\n```\n\n**App (Frontend):**\n```bash\ncd app\ncp .env.example .env   # optional: add PostHog key\nnpm install\nnpm run dev\n```\n\n**Blog:**\n```bash\ncd blog\nnpm install\nnpm run dev   # available at http://localhost:3000/blog\n```\n\n| Service | URL |\n|---------|-----|\n| App | http://localhost:5173 |\n| Backend API | http://localhost:8000 |\n| API Docs (Swagger) | http://localhost:8000/docs |\n| MCP endpoint | http://localhost:8000/mcp/ |\n\n---\n\n## ⚙️ AI Configuration\n\nflompt supports multiple AI providers. Copy `backend/.env.example` to `backend/.env`:\n\n```env\n# Anthropic (recommended)\nANTHROPIC_API_KEY=sk-ant-...\nAI_PROVIDER=anthropic\nAI_MODEL=claude-3-5-haiku-20241022\n\n# or OpenAI\nOPENAI_API_KEY=sk-...\nAI_PROVIDER=openai\nAI_MODEL=gpt-4o-mini\n```\n\nWithout an API key, flompt uses a keyword-based heuristic decomposer and still compiles structured XML.\n\n---\n\n## 🚢 Production Deployment\n\nThis section documents the exact production setup running at **flompt.dev**. Everything lives in `/projects/flompt`.\n\n### Architecture\n\n```\nInternet\n   │\n   ▼\nCaddy (auto-TLS, reverse proxy)    ← port 443/80\n   ├── /app*         → Vite SPA static files (app/dist/)\n   ├── /blog*        → Next.js static export (blog/out/)\n   ├── /api/*        → FastAPI backend (localhost:8000)\n   ├── /mcp/*        → FastAPI MCP server (localhost:8000, no buffering)\n   ├── /docs*        → Reverse proxy to GitBook\n   └── /             → Static landing page (landing/)\n         ↓\n   FastAPI (uvicorn, port 8000)\n         ↓\n   Anthropic / OpenAI API\n```\n\nBoth Caddy and the FastAPI backend are managed by **supervisord**, itself watched by a **keepalive** loop.\n\n---\n\n### 1. Prerequisites\n\n```bash\n# Python 3.12+ with pip\npython --version\n\n# Node.js 18+\nnode --version\n\n# Caddy binary placed at /projects/flompt/caddy\n# (not committed to git, download from https://caddyserver.com/download)\ncurl -o caddy \"https://caddyserver.com/api/download?os=linux\u0026arch=amd64\"\nchmod +x caddy\n\n# supervisor installed in a Python virtualenv\npip install supervisor\n```\n\n---\n\n### 2. Environment Variables\n\n**Backend** (`backend/.env`):\n```env\nANTHROPIC_API_KEY=sk-ant-...       # or OPENAI_API_KEY\nAI_PROVIDER=anthropic              # or: openai\nAI_MODEL=claude-3-5-haiku-20241022 # model to use for decompose/compile\n```\n\n**App frontend** (`app/.env`):\n```env\nVITE_POSTHOG_KEY=phc_...           # optional analytics\nVITE_POSTHOG_HOST=https://eu.i.posthog.com\n```\n\n**Blog** (`blog/.env.local`):\n```env\nNEXT_PUBLIC_POSTHOG_KEY=phc_...\nNEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com\n```\n\n---\n\n### 3. Build\n\nAll assets must be built before starting services. Use the deploy script or manually:\n\n**Full deploy (build + restart + health check):**\n```bash\ncd /projects/flompt\n./deploy.sh\n```\n\n**Build only (no service restart):**\n```bash\n./deploy.sh --build-only\n```\n\n**Restart only (no rebuild):**\n```bash\n./deploy.sh --restart-only\n```\n\n**Manual build steps:**\n\n```bash\n# 1. Vite SPA → app/dist/\ncd /projects/flompt/app\nnpm run build\n# Output: app/dist/ (pre-compressed with gzip, served by Caddy)\n\n# 2. Next.js blog → blog/out/\ncd /projects/flompt/blog\nrm -rf .next out   # clear cache to avoid stale builds\nnpm run build\n# Output: blog/out/ (full static export, no Node server needed)\n```\n\n---\n\n### 4. Process Management\n\nProduction processes are managed by **supervisord** (`supervisord.conf`):\n\n| Program | Command | Port | Log |\n|---------|---------|------|-----|\n| `flompt-backend` | `uvicorn app.main:app --host 0.0.0.0 --port 8000` | 8000 | `/tmp/flompt-backend.log` |\n| `flompt-caddy` | `caddy run --config /projects/flompt/Caddyfile` | 443/80 | `/tmp/flompt-caddy.log` |\n\nBoth programs have `autorestart=true` and `startretries=5`, they automatically restart on crash.\n\n**Start supervisord (first boot or after a full restart):**\n```bash\nsupervisord -c /projects/flompt/supervisord.conf\n```\n\n**Common supervisorctl commands:**\n```bash\n# Check status of all programs\nsupervisorctl -c /projects/flompt/supervisord.conf status\n\n# Restart backend only (e.g. after a code change)\nsupervisorctl -c /projects/flompt/supervisord.conf restart flompt-backend\n\n# Restart Caddy only (e.g. after a Caddyfile change)\nsupervisorctl -c /projects/flompt/supervisord.conf restart flompt-caddy\n\n# Restart everything\nsupervisorctl -c /projects/flompt/supervisord.conf restart all\n\n# Stop everything\nsupervisorctl -c /projects/flompt/supervisord.conf stop all\n\n# Read real-time logs\ntail -f /tmp/flompt-backend.log\ntail -f /tmp/flompt-caddy.log\ntail -f /tmp/flompt-supervisord.log\n```\n\n---\n\n### 5. Keepalive Watchdog\n\n`keepalive.sh` is an infinite bash loop (running as a background process) that:\n\n1. Checks every **30 seconds** whether supervisord is alive\n2. If supervisord is down, kills any zombie process occupying port 8000 (via inode lookup in `/proc/net/tcp`)\n3. Restarts supervisord\n4. Logs all events to `/tmp/flompt-keepalive.log`\n\n**Start keepalive (should be running at all times):**\n```bash\nnohup /projects/flompt/keepalive.sh \u003e\u003e /tmp/flompt-keepalive.log 2\u003e\u00261 \u0026\necho $!   # note the PID\n```\n\n**Check if keepalive is running:**\n```bash\nps aux | grep keepalive.sh\ntail -f /tmp/flompt-keepalive.log\n```\n\n\u003e **Note:** `keepalive.sh` uses the same Python virtualenv path as supervisord.\n\u003e If you reinstall supervisor in a different venv, update `SUPERVISORD` and `SUPERVISORCTL` paths at the top of `keepalive.sh`.\n\n---\n\n### 6. Caddy Configuration\n\n`Caddyfile` handles all routing for `flompt.dev`. Key rules (in priority order):\n\n```\n/blog*      → Static Next.js export at blog/out/\n/api/*      → FastAPI backend at localhost:8000\n/health     → FastAPI health check\n/mcp/*      → FastAPI MCP server (flush_interval -1 for streaming)\n/mcp        → 308 redirect to /mcp/ (avoids upstream 307 issues)\n/docs*      → Reverse proxy to GitBook (external)\n/app*       → Vite SPA at app/dist/ (gzip precompressed)\n/           → Static landing page at landing/\n```\n\n**Reload Caddy after a Caddyfile change:**\n```bash\nsupervisorctl -c /projects/flompt/supervisord.conf restart flompt-caddy\n# or directly:\n/projects/flompt/caddy reload --config /projects/flompt/Caddyfile\n```\n\nCaddy auto-manages TLS certificates via Let's Encrypt, no manual SSL setup needed.\n\n---\n\n### 7. Health Checks\n\nThe deploy script runs these checks automatically. You can run them manually:\n\n```bash\n# Backend API\ncurl -s https://flompt.dev/health\n# → {\"status\":\"ok\",\"service\":\"flompt-api\"}\n\n# Landing page\ncurl -s -o /dev/null -w \"%{http_code}\" https://flompt.dev/\n# → 200\n\n# Vite SPA\ncurl -s -o /dev/null -w \"%{http_code}\" https://flompt.dev/app\n# → 200\n\n# Blog\ncurl -s -o /dev/null -w \"%{http_code}\" https://flompt.dev/blog/en\n# → 200\n\n# MCP endpoint (requires Accept header)\ncurl -s -o /dev/null -w \"%{http_code}\" \\\n  -X POST https://flompt.dev/mcp/ \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Accept: application/json, text/event-stream\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"tools/list\",\"id\":1}'\n# → 200\n```\n\n---\n\n### 8. Updating the App\n\n**After a backend code change:**\n```bash\ncd /projects/flompt\ngit pull\nsupervisorctl -c supervisord.conf restart flompt-backend\n```\n\n**After a frontend change:**\n```bash\ncd /projects/flompt\ngit pull\ncd app \u0026\u0026 npm run build\n# No service restart needed, Caddy serves static files directly\n```\n\n**After a blog change:**\n```bash\ncd /projects/flompt\ngit pull\ncd blog \u0026\u0026 rm -rf .next out \u0026\u0026 npm run build\n# No service restart needed\n```\n\n**After a Caddyfile change:**\n```bash\nsupervisorctl -c /projects/flompt/supervisord.conf restart flompt-caddy\n```\n\n**Full redeploy from scratch:**\n```bash\ncd /projects/flompt \u0026\u0026 ./deploy.sh\n```\n\n---\n\n### 9. Log Files Reference\n\n| File | Content |\n|------|---------|\n| `/tmp/flompt-backend.log` | FastAPI/uvicorn stdout + stderr |\n| `/tmp/flompt-caddy.log` | Caddy access + error logs |\n| `/tmp/flompt-supervisord.log` | supervisord daemon logs |\n| `/tmp/flompt-keepalive.log` | keepalive watchdog events |\n\n---\n\n## 🏗️ Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| **Frontend** | React 18, TypeScript, React Flow v11, Zustand, Vite |\n| **Backend** | FastAPI, Python 3.12, Uvicorn |\n| **MCP Server** | FastMCP (streamable HTTP transport) |\n| **AI** | Anthropic Claude / OpenAI GPT (pluggable) |\n| **Reverse Proxy** | Caddy (auto-TLS via Let's Encrypt) |\n| **Process Manager** | Supervisord + keepalive watchdog |\n| **Blog** | Next.js 15 (static export), Tailwind CSS |\n| **Extension** | Chrome \u0026 Firefox MV3 (content script + sidebar) |\n| **i18n** | 10 languages: EN FR ES DE PT JA TR ZH AR RU |\n\n---\n\n## 🌍 Features\n\n- 🎨 Visual flowchart editor with drag-and-drop blocks (React Flow)\n- 📋 Dual-view editor: toggle between canvas and card list at any time\n- 👁️ Hide/show any block; hidden blocks are excluded from the assembled prompt\n- 📑 Duplicate any block in one click from the List View\n- 🤖 AI-powered decomposition: paste a prompt, get structured blocks\n- 🔄 Async job queue for non-blocking decomposition with live progress\n- 🦾 XML output structured following Anthropic best practices\n- 🧩 Browser extension for ChatGPT, Claude, and Gemini (Chrome + Firefox)\n- 🔌 Claude Code MCP: native tool integration via Model Context Protocol\n- 📱 Responsive with full touch support\n- 🌙 Dark theme\n- 🌐 10 languages: EN, FR, ES, DE, PT, JA, TR, ZH, AR, RU, each with a dedicated indexed page for SEO\n- 💾 Auto-save via local Zustand persistence\n- ⌨️ Keyboard shortcuts\n- 📋 Export as TXT or JSON\n- 🔓 MIT licensed, self-hostable\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome: bug reports, features, translations, and docs!\n\nRead [`CONTRIBUTING.md`](CONTRIBUTING.md) to get started. The full changelog is in [`CHANGELOG.md`](CHANGELOG.md).\n\n---\n\n## 📄 License\n\n[MIT](LICENSE), built by [Nyrok](https://github.com/Nyrok)\n\n---\n\n\u003c!-- GitHub Topics (set in repo Settings \u003e About):\n     prompt-engineering, ai-tools, visual-editor, react-flow, claude-ai,\n     fastapi, browser-extension, mcp, typescript, open-source\n--\u003e\n\n\u003cp align=\"center\"\u003e\n  If flompt saves you time, a ⭐ on GitHub helps a lot.\u003cbr/\u003e\n  \u003ca href=\"https://github.com/Nyrok/flompt/stargazers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/Nyrok/flompt?style=social\" alt=\"GitHub Stars\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNyrok%2Fflompt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNyrok%2Fflompt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNyrok%2Fflompt/lists"}