Modulify

Site chat

The one continuous conversation that builds and edits your site, and what happens while it runs.

On this page

Chat is how you build in Modulify. It lives in the panel down the left of the editor, beside the live preview, and every change you make by describing it starts there.

One conversation per project

There is one chat per project and it never resets. There is no new chat button, no session list and no way to open a second thread beside the first.

The transcript belongs to the site rather than to you. Everyone who can reach the workspace that owns the project reads the same messages, each one carrying the name and avatar of whoever sent it, and a run a teammate starts streams into your panel too.

That continuity is the point. Context you gave three messages ago is still in play, so "make that section wider" is a complete request with nothing to re-describe.

The panel

The panel opens on the most recent 10 messages and pulls older ones in as you scroll up. When there is nothing left to load, the top reads Start of conversation. A project nobody has written in yet reads No messages, under it Send a message to start this session.

The strip directly above the chat box reports what is happening rather than carrying a running balance. It holds the working indicator while a message generates, and it shows your credit count only once the balance reaches zero, reading 0 credits, with an Upgrade now or Add credits button beside it when one applies. Click the count to open the plan and credits modal. See Credits.

Collapsing the panel, and where it goes on a phone, are covered in Tabs and visibility.

Send a message

The box reads Describe what you want to build or change.... Enter sends and Shift + Enter starts a new line.

Along the bottom of the box, left to right:

  • + opens the attach menu: Manage connectors, Manage skills, Attach file, Take a screenshot, Pick a file and Pick an attachment.
  • The mode picker, Build or Plan. See Plan and Build modes.
  • How each message is sized. See How work is sized.
  • A microphone. It records up to 2 minutes behind a level meter and a timer, then transcribes into the box at your cursor. Under a second is refused with Recording too short. The first recording asks for your browser's microphone permission, and while that permission is blocked nothing records at all: you get a Microphone blocked warning telling you to enable it in your browser site settings and try again. Transcription only fills the box. It never sends, so you read the text and fix it yourself before pressing send.
  • The send button.

The whole toolbar goes inactive while the preview is still syncing and while a version is being restored, so nothing is sent into a project that is mid change.

Whatever you leave unsent in the box is saved for you on that project as you type: the text, its chips, attachments that have finished uploading and any referenced log or error. Close the tab, or open the project on another device, and it is waiting in the box. With the project open on two devices at once, the box on the one you are not typing on follows along. The saved copy is yours alone, so teammates never see it. Sending the message or clearing the box clears it everywhere.

For what a message can carry beyond text, see Attachments and context, Skills and Connectors. For how to phrase the request itself, see Writing prompts.

What a running message looks like

An animated indicator sits in the strip above the chat box for as long as the run lasts, with a line that rotates as it works, Working on it..., Fine-tuning..., Polishing the details.... Once the model starts producing output, whether that is text, reasoning or a tool call, a live timer counts up beside it. Two phases name themselves instead: Requesting... and Compacting context.... Your credit count gives up that spot until the run finishes.

Then the reply builds itself in place.

Thinking

A Thinking... row appears while the model reasons, and settles into Thought for 12s when it stops. Click it to read the reasoning in full.

Actions

Each thing Modulify does shows as a row naming the action and, for file work, the file. Several actions running together collapse into a single row that names the one currently running with a 3/7 counter beside it, and reads Did 7 actions once the batch finishes. A row says what it is doing while it runs, such as Creating cron, and what it did once it finishes, such as Created cron. A failed action turns that row's icon red and reads Couldn't create cron instead, and a stopped one reads the same way. When only part of an action went through, the row says so, such as Made files private, 2 failed or Updated 2 of 3 secrets.

Click any row to open the activity view, which lists everything the message did, with a Back button and an N actions count in its header.

Task list

Work with more than a couple of steps gets a checklist panel headed 3/5 tasks, striking each step through as it completes. It adds · all done and folds itself away when the last one lands.

The message menu

Every message in the transcript carries its own three dots menu, the assistant's replies and the ones people send alike. It sits under the message and stays hidden until you hover, so the panel reads clean, and it is always visible on a touch screen. On an assistant reply it waits until the reply has finished, so a message still generating has no menu.

  • Copy message is on every menu.
  • Download assets is there only on a message that actually carried attachments or screenshots. A single file saves on its own and several are packaged into one zip.
  • Reattach to input is there only on a message a person sent, yours or a teammate's, under a separator. It loads that message back into the chat box as it was sent, chips and all, replacing whatever the box was holding.
  • Info is there only on a finished assistant reply that has something to show. It opens a submenu where Thinking names the depth the turn ran at, Quick, Brief, Steady, Deep or Full, and Duration and Credits record what that turn took and what it charged. See How work is sized.

What Copy message copies

Copy takes the message with the context it carried, not only the wording that was typed. The elements you pinned in the preview and the files you attached come with it, so pasting into a Modulify chat box rebuilds them as chips in the same places, and pasting anywhere else gives plain text with a marker such as [Image #1] sitting where each chip was. The toast says so: The text and its attached context are on your clipboard. See Attachments and context for what a chip and a marker are.

Two things stay behind. An error or console line you pinned comes across only when you sent it on its own with nothing typed beside it, so a message where you also wrote a sentence copies the sentence. And on an assistant reply it is the reply text you get: the thinking and the action rows are separate from the message and are not copied.

If your browser refuses clipboard access, nothing is copied and the toast reads Could not copy.

Suggestions after a run

When a run finishes, a Suggestions row can appear above the chat box: a lightbulb, the word Suggestions, then up to 4 short chips proposing what to do next.

Up to 3 of them are written for the run that just finished. They read what you asked for, what the AI says it did, the files it changed and your recent messages, then propose what that work still needs:

  • A security check of the exact feature, when the run built or changed sign-in, accounts, an admin or private page, a form, payments, stored data, file uploads, API keys, emails or webhooks. The chip asks for anything it finds to be fixed.
  • The missing piece before visitors can rely on it, such as password reset after a sign-in form, or somewhere a contact form's messages end up.
  • An improvement to what was just built, such as how it works on phones or how it shows in search results.
  • The next feature the work leads to. When the AI ended its reply by offering a next step, that step is the first chip.

These chips are written in the language you wrote in. They leave out what the AI already did or could not do, and they never repeat a chip from the previous run word for word. After a small change or a question there may be one chip, or none.

One more chip can be a step in Modulify itself, such as publishing your latest changes or using an app you connected. Those are checked against your own project before they are offered, so they never propose something unavailable or something the AI is not allowed to do for you, and a chip that depends on a connector is offered only to the person whose account is connected. The check runs again every time the panel loads, so a step you have since taken is gone when you come back.

Clicking a chip writes that request into the chat box and puts the cursor there. Nothing is sent and no credits are spent until you press send yourself, so you are free to edit the wording first or clear it. Writing the chips costs no credits either. When the chips run wider than the panel you can drag the row sideways, or scroll it with a trackpad or wheel.

The row stays hidden when nothing applies, when the AI ended by asking you for something or said it could not do what you asked, when the workspace is out of credits, while a run is going, while a message is waiting in the message queue, while a question is waiting on your answer, while a version is being restored, while the preview is still syncing, and after a run that failed, was stopped or stopped before it finished. It also clears the moment you send your next message.

Stop a run

A Stop button appears next to the send button while a run is active, taking the microphone's place.

Stopping ends the job for everyone in the project, marks any action still running as stopped, clears the task list and drops a Generation stopped divider into the transcript.

It does not roll anything back. Files already written stay written, and they are saved to Backups as a Preview sync entry once the preview confirms the run stopped, or the next time the editor opens. To get back to an earlier state, restore a snapshot from Backups.

Leave while it runs

A run happens on Modulify's side, not in your browser. Closing the tab, reloading the page or losing your connection does not stop it. Open the project again while it is still going and the reply comes back with everything it has done so far, then carries on live.

It also carries on through a short drop in the link between Modulify and your preview, and through an update to Modulify itself, picking up where it was instead of failing. Generation interrupted is left for a run that really could not continue.

When it asks you something

A run can pause and put a question to you rather than guess. The question appears in a panel with its options lettered a., b., c., and clicking one answers it and lets the run continue.

You can ignore the options and type your own answer in the chat box instead. Sending it resolves the question rather than starting a new run. Anything sitting in the message queue waits until you answer.

Markers in the transcript

Thin dividers mark things that happened to the conversation rather than to the site. Several carry an info icon with the full explanation.

Marker What it means
Context compacted The conversation grew too long, so everything above it was summarized into a shorter context
New session started The assistant stops carrying the messages above and continues fresh from there, which keeps generations fast
Generation stopped Somebody pressed Stop
Switched to Plan mode, Switched to Build mode The mode changed partway through
Approval requested A plan was presented and is waiting

Neither compaction nor a new session touches your chat history. Every message stays where it was and stays readable. What changes is how much of it the assistant still carries forward, so detail from far back is worth restating.

When a run fails

A failed run replaces its reply with a red block titled Generation failed!, the reason underneath and Error code: with a code like SC-3001. A Retry button sits under the code. Retry deletes that reply and runs the same request again.

It does not roll anything back either. Files a failed run already wrote stay written, and they are saved to Backups as a Preview sync entry once the preview confirms the run ended, or the next time the editor opens.

That button is rarer than it looks. It is only ever on the most recent reply, and only when that reply is one that errored or was stopped. A reply that finished normally never carries one, an older failure loses its button as soon as a newer reply lands below it, and no button shows while a run is going.

One outcome comes back amber rather than red, because it is not really a failure. Generation interrupted reads This generation stopped before it finished. Retry to run it again.

A turn that ran but stopped part way through keeps its reply and adds an amber Generation stopped early notice below it, with the reason and a code. Whatever it already changed was kept, so this is not a failed run and it is billed like any other.

One of the reasons handles itself. A reply cut off at the assistant's output ceiling picks itself back up where it stopped and carries on, up to twice, inside the same run. That is one reply and one charge covering the whole thing rather than a second run, and the notice only appears if the turn is still unfinished after that.

A Continue button on that notice picks the work up where it stopped, as a new run. It only appears on the most recent reply, and it is disabled while another run is going. If you have queued messages, the queue waits rather than stepping over the unfinished work.

With no credits left the message is not sent at all, and reads You are out of AI credits, so this message was not sent. That block carries no Retry button, because nothing ran and there is nothing to run again. What to do about it sits in the strip above the chat box instead, already reading 0 credits, with Upgrade now or Add credits beside it when one applies. See Credits.

A run that empties the balance while it is still going is stopped there and then rather than allowed to finish past zero. Its reply is kept, with an amber Out of AI credits notice under it reading No AI credits remaining. Pick a plan or add credits to continue., or No AI credits remaining. Pick a plan to continue. on a Free workspace that cannot buy credit packs yet, and Code: SC-6001. That notice carries no Retry button either, because a retry would have nothing to spend, and you are charged only what the balance could cover.

What chat can and cannot change

Beyond writing your site's files, chat reaches most of the editor. It can run SQL and create a database, read and write storage, set, rename and delete secrets, create, edit and run crons, manage deploy hooks, read, change and send the site's outgoing email, generate and edit images, call your connectors, query the site's analytics and build pages that show them through the analytics API, add and remove languages, publish, rename the project, change its description, change its free subdomain, change the site's own settings such as the badge, the server location, its custom domains and its webhooks (see Site settings from chat), and read or change the site's AI media preferences when you ask it to.

Deploy hooks are covered in full: chat can list them, create, rename, turn on or off and delete one, rotate a hook's URL, start a build through a hook, and read both the call log and the daily counts from the Insights tab. It never shows a hook's URL, even one it just created or rotated, and sends you to the copy button on the hook row in the Deploy hooks tab instead. It can also clear the call log and delete every hook, the last only after you confirm, and both need the Delete projects permission. Exporting stays yours. Before it deletes a hook, rotates a URL or starts a build, it asks you first, unless your message asked for exactly that or chat created that hook in the same reply. See Deploy hooks.

Webhooks are covered too. Chat lists your endpoints, their recent delivery attempts and their daily counts when you ask, so "did my webhook fire?" and "why did Modulify turn this endpoint off?" are answered in chat, and it adds, edits, turns on or off, tests and deletes an endpoint and clears the delivery log when you ask. It asks you first before deleting one or clearing the delivery log. It can delete every webhook at once too, after you confirm. It is never handed a signing secret, so showing and rotating one stay yours, along with exporting the webhooks.

Email is covered in full, and chat can send real email. It works through ten tools:

  • Read the setup and the history. Whether sending is on, the sender name and whether it follows the site's name, the exact sending address and whether it is on the built-in domain or one of your email domains, each email domain with its status, whether the site sends from it and whether it receives mail, whether the workspace can add one, where replies go, this month's usage with what is left and the reset date, the limits, whether the live site still needs a publish, why sending was switched off if it was, the blocked addresses with why and since when, whether one address is blocked, whether open and click tracking is on, whether forwarding of the mail sent to the site is on, off or not set up, with the confirmed addresses it goes to, and the messages the site sent, filtered by status, recipient or engagement (opened, clicked or not-opened), with the opens and clicks of each tracked one and, with no filter set, the open and click rates and the most clicked links.
  • Open one email. Who it reached, who it did not and why, the delivery timeline, what it said, and for a tracked email its opens and clicks with the first and last time of each and the links that were clicked. It reports these for the whole email, never for one recipient, and treats opens as approximate.
  • Send an email. Only when you ask it to send a specific email now, to people you name. It never picks, looks up or invents a recipient, never sends bulk or marketing mail, and shows you the subject and text first when it wrote them. It counts against the month's allowance like any other email, and opening it in the History tab shows Chat under Sent by.
  • Send a test email to your own account address and nowhere else. A test is free: it uses none of the month's sends.
  • Change the settings. It turns sending on and off, and changes the sender name, the sending address and the reply-to. Changing the part in front of the @ while one of your domains is chosen as the sending domain needs the Manage domains permission. Ask for the site's name back as the sender and it clears the custom sender name. It asks you first before turning sending off or changing the sending address, and before turning sending back on after anyone turned it off, and tells you when the live site needs a publish before its email works. Sending and open and click tracking are both on by default, and chat says so when you ask. It turns tracking off when you ask and back on only when you ask, with a row reading Turned open and click tracking off or Turned open and click tracking on, and when it turns it on it tells you that opens are approximate, that links go through a tracking address, and that your site should tell its recipients, for example in its privacy policy. When tracking is not set up on the platform, turning it on is refused with Open and click tracking is not set up on this server yet!
  • Block and unblock addresses. It blocks addresses or whole domains you name, and unblocks only ones that were added by hand, which also needs the Delete projects permission.
  • Manage your email domains. It adds a domain you name on a paid plan, then gives you the DNS records to add at your DNS provider, or a one-click setup link when your provider supports it. It checks a domain again, makes the site send from it or from the built-in address again, turns its receiving on or off, restarts a failed verification and removes it. It asks you first before removing a domain, switching the sending domain, turning receiving on or off or restarting a verification. These need the Manage domains permission, receiving needs Delete projects, and checking a domain again needs neither. While the domains are paused it can still remove one, but choosing one to send from or restarting its verification is refused.
  • Manage forwarding. It turns forwarding on or off, adds addresses you give it, which get their confirmation link straight away unless they are confirmed at once, sends a link again and removes an address. It asks you first before turning forwarding off or removing an address, and it needs the Delete projects permission.
  • Tidy the history. It removes emails from the history or clears it, after asking you first, with the Delete projects permission.
  • Fetch the email helper. When the site itself should send, from a contact form or a checkout, chat writes that code with the site's email helper, adds the current helper to a site that does not have it yet, and puts ses:no-track on links that carry a token, such as a password reset link.

When it builds a form that someone has to act on, such as a contact, booking or quote form, chat makes the form email you each submission by default. The site sends the notification to its own sending address, so forwarding delivers it to the site's forwarding addresses, which start with the workspace owner's account email, or, when the site sends from one of your domains without receiving its mail, to that domain's own mailboxes. The visitor's address goes in the reply-to so you can answer them straight away. Ask for a different address and it sends there instead.

It is never handed the sending key, and it cannot turn sending back on after Modulify switched it off for bounces or spam reports: that stays in the Emails tab, with showing and copying the key, unblocking an address that bounced or reported spam and downloading the history. It can rotate the key when you ask, with the Delete projects permission. On Free it tells you that adding a domain needs a paid plan, and that a mail service of your own works as well. See What the AI can do. The built-in email is only the default: ask for Resend, SendGrid or another mail service of your own and chat recommends the built-in email once and asks which to use, then sets yours up as soon as you pick it, see Use your own mail service.

It can also list your storage and database backups, take a manual one, delete one or all of them after asking you first, and turn daily backups on or off for the site, though the database switch is refused on a site on the older database, which has no daily backup to stop. It browses a storage backup too, tells you which of its files are missing from your storage now and which have changed, reads a text file out of it, and restores it whole or in part. A restore always takes two steps: chat reads back the plan first, saying what is put back, overwritten and deleted, and starts nothing until you say yes, which needs a paid plan and the Delete projects permission. It never downloads a backup, or a file out of one, and never hands you a link to one, and a database backup still cannot be browsed or restored at all. While a storage restore is running, chat cannot change storage or take a storage backup until it finishes. See Backups from chat and MCP.

Site settings from chat

Chat changes the site's own settings when you ask, through the same checks the editor applies. A setting that needs a paid plan is refused on a Free workspace, an action your role is not allowed is refused too, and chat tells you which and what fixes it, such as the workspace Plans page.

  • The Modulify badge. It hides or shows it. Hiding it needs a paid plan. See Built with Modulify badge.
  • The server location. It moves the site to another region. That needs a paid plan. See Server location.
  • Visitor analytics. It turns collection off or back on, checks whether the live site carries the tracking script, and clears the collected data, which needs the Delete projects permission. See Analytics.
  • Custom domains. It adds a domain and its www variant, which needs a paid plan and the Manage domains permission, reads each domain's status and the DNS records to add at your DNS provider, gets you a one-click setup link when your provider supports it, and removes a domain or its www variant. Adding the records at your DNS provider stays yours. See Custom domains.
  • Publishing. It takes the site offline, stops a publish that is running, and reads the publish history and how long each step of a publish took. See Publish history.
  • Content. It adds, changes and removes CMS items through the same checks as the CMS, and empties a collection or clears the whole database, both needing the Delete projects permission. See CMS.
  • Comments. It reads the comments and their threads, replies under your name, and resolves or reopens one. See Comments.
  • Skills and connectors. It lists the skills and connectors the project can use and turns them on or off for the project, up to 10 skills and 10 connectors, from your next message. It turns on only a connector you connected your own account for, and installing a connector stays yours. See Skills and Connectors.
  • Secrets. It renames a secret and keeps its value without reading it, and changes the code that reads the old name. See Secrets.
  • Storage, logs and keys. It sets the top level default for new files, reads the CDN delivery stats, clears all of storage, clears or prunes the call logs and run histories of deploy hooks, crons and webhooks, deletes all of them at once, and rotates the site's email key, each with the permission the tab asks for.

The badge, the server location and analytics collection reach your live site with the next publish, so chat says so and offers to publish. It publishes only when you say yes. It asks you first before anything that removes something or takes the site offline, such as removing a domain, deleting a webhook, deleting a CMS item, clearing storage or clearing the analytics data.

Storage from chat

Chat covers most of the Storage panel and leaves a few pieces of it to you. It can put a file it has in the workspace into storage, for example an image it just generated or a file it downloaded for you, and hand back the link when that file is public; list and search what is stored; look up the link of a file that is already there; report how much is stored and how much of it is public or private; create folders; move files and folders; rename one file at a time by moving it to a new name; delete files and folders; and make files and folders public or private. Before it moves, renames, deletes or changes the visibility of anything you did not just hand it in that same message, it asks you first and names exactly what it is about to touch. Folders keep their names: it cannot rename one, only move it. It can also change the top level default for new files, read the CDN delivery stats, and clear all of storage after you confirm, which needs the Delete projects permission. Chat cannot:

  • Show or rotate the storage key. Both sit under Connection in the Configuration sub-tab. Chat never reads the key and never prints it.
  • Export storage. That is Export .zip under Export in the same sub-tab, and chat refuses to zip or bundle your files in its place.
  • Read a private file. It has no tool that returns a stored file's contents, and a private file has no link it could fetch, so it writes the site code that reads private files through the storage helper rather than reading them itself.

On a project's first build, chat names the project and gives it a matching free subdomain, for example lisbon-pottery-studio for a site it named Lisbon Pottery Studio. When that exact name is already taken it adds a short suffix such as -k13 instead of failing. The address in your browser follows the change on its own, and you can ask chat to change the free subdomain later in plain words. See Your web address.

Three things are deliberately out of its reach, and asking gets you told to do them yourself.

  • Visibility and sharing. Chat refuses with visibility and sharing cannot be changed from chat and points you at the site settings.
  • Plans, credits and workspace members. It cannot move you to another plan, buy credits, or add and remove members, though it can tell you what your plan allows, below.
  • Deleting the project, restoring a code backup, and downloading a storage or database backup. All of these stay manual. Browsing and restoring a storage backup are not: chat does both, after showing you the plan and waiting for your yes.

What it can report

When you ask, chat also looks things up and tells you in plain words:

  • Your live web addresses. The free .modulify.website one, plus every custom domain that is connected and each one's connected www version, with the primary domain marked. It says at the same time whether a custom domain is available on this site's plan and whether the "Made with Modulify" badge can be hidden, and on a paid plan it connects the domain or hides the badge for you when you ask. Before a first publish it says the addresses will not resolve yet. See Your web address, Custom domains and Settings.
  • The in-editor preview link. That address loads only inside the Modulify preview panel. It is not public and will not open in a normal browser tab. To show someone your work in progress, choose Share in the editor header and turn on Share a read-only link instead. See Preview and Sharing and cloning.
  • Whether a publish is running. Including the case where the site cannot publish because it is over the plan's site limit.
  • How your publishes went. For the last one, whether it succeeded, when it started and finished, and who published it. For earlier ones, whether each succeeded and when it ran, and how long each step of a publish took. See Publish history.
  • How Modulify works. Ask how to do something, where a setting lives or what your plan includes, and chat answers from these docs rather than guessing.

It reads these only because your message asked. Chat does not check them to verify its own work, does not open or fetch your site with them, and never polls them in the background, so none of it happens quietly during a build.

Delete the transcript

There are two ways in, and they do the same thing.

The quick one is the broom button in the top left of the editor, next to the button that shows and hides the chat panel. Its tooltip reads Delete chat.

The other is the Settings tab under Danger zone, where the Delete chat row holds the same button.

Both are disabled while a generation is running (Wait for the current generation to finish.) and when there is nothing to delete (You have no chat to delete.), and both open the same confirmation.

The confirmation reads Delete this chat? and warns that it deletes the transcript for everyone in the project and throws away whatever the team had queued. Your project, its pages and its content stay exactly as they are. It cannot be undone.

Next