Modulify

Changelog

New features, improvements and fixes, newest first.

removedchanged

Webflow is gone from the dashboard

The Webflow builder, its editor and everything branded around it are removed. Legacy projects stay, and converting them into a Modulify site is the one thing left to do with them.

The Webflow builder is removed

The composer under the prompt no longer offers a second builder. There is one way to start a project and it makes a Modulify site. The Use legacy Webflow builder button, the design system picker and the language picker that came with it are all gone, along with the retired editor route.

Nothing about creating a site changed. The prompt, attachments, voice input and Create blank site all behave exactly as they did.

Legacy projects keep their one job

A project made with the old builder still appears on your dashboard, now marked with a Legacy badge instead of a Webflow one. Its card menu still leads with Convert to Modulify, which rebuilds it as a real Modulify site from the original prompt plus a copy of every page and image as they look today.

Converting still deletes the legacy project once the new site exists, along with its pages, images, backups and publish history. That has not changed and it still cannot be undone.

Copy to Webflow and the old exports are gone

Copying a page or a component into Webflow, the Webflow app authorization dialog and the Figma export that lived beside them are all removed. Publishing, custom domains, code export and the site editor are untouched.

Plans no longer list legacy features

Plan cards dropped the Show legacy Webflow features toggle and the second feature list behind it. Every plan now shows one list, describing what the plan does for sites. No plan changed price, limit or entitlement.

addedchanged

Share and Earn, image animation and suggested next steps

An invite link that pays you in credits, a picture on your site turned into a short looping video, chips proposing what to do next, and legacy Webflow projects rebuilt as real Modulify sites.

Share and Earn

Every account now has an invite link that pays in credits. It is the Modulify address with /invite/ and your code on the end, and it opens from a new Spread the word card at the bottom of the sidebar, reading 5 now, 50 when they pay.

https://modulify.ai/invite/YOURCODE

Your code is created with your account, so there is nothing to apply for. It is 7 characters of uppercase letters and digits, with I, O, 0 and 1 left out of the alphabet entirely so no code is ever misread out loud.

When someone creates an account through your link, their new workspace is given 5 credits and 5 land in your default workspace at the same moment. The first time that person is actually charged, whether that is a new subscription, a renewal or a credit pack, another 50 credits land in your default workspace.

The 50 is paid once per person, not once per payment. Whichever payment they make first earns it and everything after that earns nothing, so inviting more people is the only way to earn more. A plan a discount code takes all the way to $0.00 bills nothing, so it earns nothing, and it does not use up the one reward that person can earn you.

Rewards arrive as top up credits, the same pool a credit pack lands in, so the monthly reset never clears them. They always go to your default workspace, the one carrying the filled star in the switcher, and they are never split across the workspaces you own. You cannot invite yourself, and a person can only ever be invited once.

The window shows the link with a QR code beside it and a Copy link button. Once at least one person has signed up it also reports Signed up, Paid and Credits earned.

The name moved. Share and Earn used to be the sidebar link for the cash affiliate program. That program has not changed, still a 20 percent commission paid to your PayPal address on a referred paid subscription, and it is now reached as Affiliates in the user menu. The two are separate systems with separate codes, and being in one changes nothing about the other.

See Share and Earn and Affiliates.

Turn a picture on your site into a short video

Chat can now animate an image that is already in your site into a 4 second, 720p, silent video that loops. It costs 2 credits.

It is image to video, so there is always a source picture. Point it at a file in the project or a public image URL, and describe the motion rather than the scene, since the still already says what the scene is. Name what should stay still in the same breath.

Animate this hero image. Slow push in, mist drifting across the treeline,
everything else still.

It is off unless you ask for it by name. It spends money and it is rarely the right answer, so it is never suggested and never folded into a broader request. "Make this section feel more alive" gets you design work, not a video. Aspect ratio is 16:9 or 9:16 only, so a square slot wants 16:9 cropped in CSS.

The clip is stored on the CDN rather than in the project, so it does not appear in the File Explorer beside your images. It goes onto the page as a muted looping <video> with the original picture as its poster frame, because browsers refuse to autoplay video with sound. Generation is usually under a minute and can take several. If it fails, nothing is charged.

Most motion on a website should still be CSS. A fade, a slide, a parallax scroll or a hover state is free, stays sharp at any size and adds no page weight. Reach for this when the content of the picture itself needs to move, like drifting mist, rippling water or a flickering flame.

See Images.

Suggestions after a run

When a run finishes, a Suggestions row can now appear above the chat box holding up to 3 short chips proposing something worth doing next.

They are built from the state of your own site rather than from a fixed menu. Add project details when the project has no description, Publish your site when there is a version that is not live yet, Add a database when the site has none, Add another language when it only has one, Schedule a task when it is live with no scheduled jobs, Review your analytics when it is live with analytics installed, Add custom images, and one chip for a connector you have already connected. A turn that stopped before finishing offers Continue where it stopped on its own.

Anything the run just did is dropped before the rest are ranked, and the check runs again every time the panel loads, so a chip you have since acted on is gone when you come back. A chip is never offered for something unavailable on your project, and a connector chip only reaches the person whose account is connected.

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 reword it or clear it first.

The row is occasional rather than constant. It stays hidden while a run is going, while a message is waiting in the queue, while a question is waiting on your answer, while a version is being restored, while the preview is still syncing, after a run that failed or was stopped, and when the workspace is out of credits. It clears the moment you send your next message.

See Site chat.

Legacy Webflow projects convert into a Modulify site

A legacy Webflow project can no longer be opened. Its editor route now reads Webflow projects are retired, and clicking the card on the dashboard offers the conversion instead. The card menu leads with Convert to Modulify and drops Open Project, Copy Project Link and Settings, because none of them apply any more.

Converting renders every page that still has components exactly as it looks today, downloads the images those pages reference and rewrites the markup to point at the local copies, packages that as an archive, and starts a brand new AI site from your original prompt plus that archive. So you get real editable components rather than a copy of the old markup. Image copying takes the first 400 distinct URLs and skips any image over 15MB or slower than 20 seconds.

The new site takes a site slot and spends AI credits like any other build, so the conversion is refused when you are already at your site limit or out of credits, and nothing is deleted when it is refused. Once the new site exists the old project, its pages, images and backups are permanently deleted. That is why the confirmation is titled Convert "<name>" to Modulify? and its button reads Convert and delete.

See Projects overview.

addedimproved

Everything in Modulify, from an AI client

The MCP server now reaches the whole product, from the editor and storage to workspaces, your account, direct file writes, SQL, publish diagnostics and exports.

Everything in the editor is now reachable over MCP

A connected AI client could already read your sites, send prompts and publish. It could not create a scheduled job, edit a webhook, read a comment or see a single line of your server logs. That is fixed across the whole editor.

Scheduled jobs. create_site_cron, update_site_cron, delete_site_cron and delete_all_site_crons manage the jobs, and preview_cron_schedule checks a schedule before it is saved so a job cannot be committed firing more often than intended. delete_site_cron_run and clear_site_cron_runs clean the history, and export_site_crons copies a set of jobs between sites.

Webhooks. create_site_webhook, update_site_webhook, delete_site_webhook and delete_all_site_webhooks, plus delete_webhook_delivery and clear_webhook_deliveries for the log.

Environment variables. set_secrets applies a whole .env in one call, creating, replacing and deleting together. set_secret gained the public/plaintext option for NEXT_PUBLIC_ style variables.

Visitor analytics. query_site_analytics answers anything the fixed reports do not: top pages, sources, countries, browsers, operating systems, devices, or a series over time. set_analytics_enabled and clear_site_analytics cover the settings and the danger zone.

The database. create_site_database gives a site a database, list_reference_options and list_enum_options mean a value written to a reference or enum column is no longer a guess, and clear_site_database empties every collection.

Folders. The whole feature, from nothing: create, list, rename, change the slug, reorder, delete, move sites in and out, and move a folder to another workspace.

Comments. Also from nothing. A client can read what reviewers asked for, reply to say it is done, resolve a thread, react, and read the screenshots attached to a request. It can only edit or delete comments it wrote itself.

Server logs. get_site_logs returns the same lines the Logs panel shows, for the preview machine or the published site. This is the one an agent debugging a site needed most: it could read your code and change your code, but never see what the server actually printed.

Site settings. The project category and server location joined rename_site, check_subdomain_available tests a free subdomain before it is taken, set_site_thumbnail and clear_site_thumbnail handle the dashboard card, and clear_site_chat covers the Delete chat action in the danger zone.

Storage over MCP is no longer read-only

A connected AI client could already browse your storage, organise it and delete from it, but it could never put a file in. That is fixed, along with the rest of the Storage panel.

Five tools are new:

  • upload_storage_file puts a file into the bucket and returns its permanent public CDN address, ready to embed in a page. Up to 100MB, sent base64 encoded.
  • read_storage_file returns the contents of a stored file, so a client can read back a JSON, CSV or SVG it placed there. Files over 5MB are refused, since a tool result is capped.
  • clear_storage empties the whole bucket in one call, the same action as Clear all storage in the Configuration sub-tab.
  • get_storage_key reveals the private storage key in plain text.
  • rotate_storage_key replaces it with a new one and re-syncs the live site.

Workspaces, members and roles

A connected client could see your workspaces but nothing inside them. Now list_workspace_members reads the people and the pending invitations, invite_workspace_member, resend_workspace_invite, cancel_workspace_invite and remove_workspace_member manage them, and assign_member_role moves someone between roles. Custom roles can be created, changed and deleted, with the grantable permissions listed for you so a role cannot be built out of names that do not exist.

create_workspace, rename_workspace, set_default_workspace and leave_workspace cover the workspace itself. get_workspace_credits and get_workspace_credit_usage answer where your AI credits went rather than only how many are left.

Deleting a workspace is deliberately not available to a client, because it cancels the subscription.

Your account and referrals

get_account and update_account read and change your name, phone, avatar and notification preferences. get_site_usage reports how close you are to your plan's site limit, and list_pending_invitations shows what is waiting for you. list_referrals, list_payouts, check_affiliate_code and update_affiliate cover the referral programme.

Changing your email address still needs the confirmation link and can only be done in the product.

Writing files directly

write_file replaces source files straight in the running preview, without going through the AI. It is the fast path for a mechanical edit, a typo, a colour token, a config line, where asking the AI would spend credits and run a whole generation for one line.

Each file is confirmed individually by the preview, so the response tells you which paths were written and which failed and why, rather than reporting a blanket success.

It is deliberately blunt. It replaces the whole file rather than patching it, it needs the preview to be running, and the change is not captured in version history, so it cannot be undone by restoring a version. Take a backup first for anything substantial, and keep using the chat when you want a change described rather than dictated.

Run SQL against your database

execute_sql runs a statement against a site's database and returns the rows. It covers everything the collection tools cannot express: a join, an aggregate, a migration, a bulk update, adding a column, creating an index.

It runs whatever it is given. There is no read-only mode and nothing blocks DROP, TRUNCATE or a DELETE without a WHERE. It therefore sits behind its own data:sql permission, and needs the same role permission as deleting a site, so an ordinary member cannot use it.

Values go through params as $1, $2 rather than being pasted into the statement. Statements are capped at 20,000 characters and time out after 15 seconds, and at most 200 rows come back, so put your own LIMIT in the query.

Find out why a publish failed

get_publish_status told you a publish failed and nothing more. get_publish_logs returns the actual build output, paged, with the error alongside it.

get_publish_timeline returns the publish step by step, from provisioning through compiling and uploading to the health check and the switch, with how long each step took. Those per-step durations were recorded but had never been shown anywhere.

stop_publish stops a publish that is still running. The build is abandoned and its machines are torn down; whatever was already live stays up untouched. A publish that has passed the point of switching over is refused rather than half-cancelled.

Exports

export_collection reads a whole collection in one call with its column types, where list_rows pages 50 at a time. export_site_analytics returns the all-time breakdowns in one response. export_site_webhooks returns your whole webhook setup, with signing secrets excluded and destinations shown as hosts, matching how webhooks are already listed.

The storage and code archives stay browser downloads. A connected client receives structured data rather than files, and it can already reach the same content through list_storage_files with get_storage_file_url, or list_files with read_file.

Ten new permissions

comments:read, logs:read and account:read are ticked by default, being ordinary reads of your own site and account.

comments:write is not, because it can delete a comment. workspaces:write, members:write, account:write and code:write are not either, and members:write is worth its own thought before you grant it: it sends real email to real colleagues and can remove someone's access to every site in a workspace.

data:sql is unticked because the statement it runs is not inspected. credentials:reveal is unticked because it is the only permission that hands a client a live credential in plain text, covering environment variable values, the private storage key and webhook signing secrets.

Two existing labels were widened to match what they always did. data:read now reads Read CMS collections and stored files and data:write reads Change CMS rows and stored files.

A safer default on every call

Every tool now has to resolve to a workspace before it runs. A call that names neither a site nor a workspace, or names one that does not exist, is refused before it reaches the endpoint behind it rather than being left to that endpoint to catch. list_workspaces and list_templates are the only exceptions, because neither belongs to a workspace.

See MCP tools and Tokens and scopes.

addedimproved

Documentation, MCP beta and a message queue

Full product documentation, an MCP server in beta, queued chat messages, and reworked inputs across the product.

Documentation

There is now a documentation site covering the product end to end, at modulify.ai/docs.

It opens with a getting-started path that takes you from signing up to a published site, then goes feature by feature: building with AI, the editor, projects, data, publishing and domains, automations, analytics, plans and credits.

Every page can be copied as Markdown for an AI assistant, or opened as its raw source.

MCP, in beta

Modulify now exposes an MCP server. Connect an AI client such as Claude Code, Claude Desktop or Cursor and it can list your sites, send prompts to them, read their code and publish them, limited to the permissions you grant.

Access is controlled by tokens you create yourself. A token acts as you, so by default it reaches every workspace you are a member of, and you can narrow it to specific workspaces when you create it. You pick its permissions, and you can revoke it at any time.

See What is MCP and Connect a client.

Queue messages while the AI is working

You no longer have to wait for a generation to finish before sending your next instruction.

Send a message while the AI is still working and it queues rather than being rejected. Queued messages run in order once the current generation finishes, and you can reorder them, edit one before it runs, or remove it entirely.

Improved inputs

Inputs across the product were reworked so they look and behave the same wherever they appear. That covers the prompt box, form fields, search boxes and pickers. Focus, validation and disabled states are now consistent, and the layouts hold together at narrow widths.