MuseMVP

MuseMVP Base: Next.js for Node and Cloudflare. MuseMVP Flare: an AI SaaS template that runs entirely on Cloudflare. Authentication, billing and administration included.

Product
  • Home
  • Pricing
  • Templates
Resources
  • Docs
  • Blog
  • Changelog
Legal
  • Privacy
  • Terms
  • Community
Open-Launch Top 1 Daily WinnerOpen-Launch Top 1 Daily WinnerVerified DR - Verified Domain Rating for musemvp.comVerified DR - Verified Domain Rating for musemvp.comMuseMVP - Featured on Startup FameMuseMVP - Featured on Startup FameFazier badgeFazier badgeLiftOff award badgeLiftOff award badge

© 2026 MuseMVP. All rights reserved.

MuseMVP
  • Pricing
  • Docs
  • Blog
  • Changelog
Buy MuseMVP Flare
MuseMVP Docs
MuseMVP Docs
OverviewTech StackGet SourceQuick StartProject Structure
DatabaseAPIAuthenticationBillingObject StorageEmail
AI OverviewImagesVideo and VoiceChat and SummariesCredits and Cost Control
Deployment
AI

Chat and Summaries

Streaming chat on OpenAI, conversation history, document summaries on Queues, prices and limits.

Model

Chat, summaries and prompt enhancement use TEXT_MODEL in packages/ai/src/text.ts: gpt-6-luna. The openaiText adapter in packages/ai/src/openai.ts calls OpenAI Chat Completions with reasoning disabled and streams chat over SSE. Live mode requires the server-side OPENAI_API_KEY; a missing key does not silently fall back to Workers AI. workersAiText and WORKERS_TEXT_MODEL remain explicit alternatives. In mock mode, mockText returns a deterministic answer without calling a provider.

Changing the model means checking its input format, streaming output, context length, cost and the tests together; the template is not a gateway that configures every provider automatically.

Chat

POST /api/chat:

{
  "prompt": "Write three short taglines for an AI image app",
  "requestId": "e60b2e4b-32b1-42a5-bfd0-dbb20ecb37e9",
  "history": [{ "prompt": "Earlier question", "answer": "Earlier answer" }]
}
  • prompt is 1 to 16,000 characters. requestId is optional; when present it must be a UUID, created per message.
  • history holds up to 8 recent turns (4,000 characters per prompt, 8,000 per answer) so the model keeps context. The studio at /app/ai sends it automatically.
  • The response is text/event-stream. Read it chunk by chunk and handle a broken stream; do not call response.json(). The studio renders Markdown as it arrives.

Each message costs quotas.chatCredits (1). The server checks the balance and writes a generation row that reserves the credit before calling the model. A finished answer completes the generation; a failed or broken stream releases the credit once.

Summaries

  1. Upload your own text/plain or text/markdown file at /app/files (up to 1 MiB).
  2. Call POST /api/summary with { "fileId": "your-owned-file-uuid" }.
  3. The response is the scheduled task, not the summary. The job runs on the JOBS queue; follow its state in the workbench.

A summary costs quotas.summaryCredits (5) and reads the first 16,000 characters. It does not split long documents, OCR images or parse arbitrary PDFs.

Verify

  • Empty or overlong prompts, too few credits and files owned by someone else all fail without a charge.
  • A normal chat streams and leaves one ledger line; an interrupted stream leaves the balance unchanged.
  • A summary succeeds once even when the queue redelivers the message.

Continue with Credits and cost control and Testing.

Video and Voice

Asynchronous video on Queues, speech synthesis, prices, limits, the task APIs and provider keys.

Credits and Cost Control

The credit ledger, plans and credit packs, server-side refusals, the daily budget, refunds and admin recovery.

On this page

ModelChatSummariesVerify

One payment. Tax included.

MuseMVP Flare

TanStack Start on Cloudflare, with four AI studios built in.

$69

Buy MuseMVP Flare