# What the AI can and can't build

> What you can ask for in the chat, what needs you to step in, and what isn't possible on Draftship.


Draftship builds web apps with Next.js and TypeScript on its built-in backend. If you ask for something outside that, the AI tells you and offers the closest alternative.

## What you can ask for

| Ask for | How it works |
|---|---|
| Websites and web apps | Next.js App Router, TypeScript and Tailwind CSS. Responsive on phones, and installable to the home screen |
| Saving data | Database tables with row- and field-level permissions, live updates, trash and backups |
| Accounts and login | Email and password, Google, SSO, invitations, roles and private apps |
| Server code | Backend functions in TypeScript, for example to call another service with a secret key |
| Automation | Workflows with schedules, data changes, sign-ups, webhooks, waits and conditions |
| AI features | Text and JSON generation, image generation and chat agents that can use your app's data |
| Files and email | File uploads and sending email |
| Other services | Google Calendar, Gmail, Sheets and Drive, Slack, Notion, GitHub, HubSpot and Linear, or any API through a backend function |
| Quality | SEO, a security scan and browser tests |

## What needs you

Some steps need you, so the AI asks in the chat with a form or a button:

- **API keys:** Enter the key in the form that appears. It's encrypted and saved as a [secret](/docs/logic/secrets), and the AI only ever sees its name.
- **Connecting an account:** Choose the connect button and sign in to the service.
- **Dashboard settings:** The AI opens the right panel for things like adding a custom domain or changing who can open your app.

If you paste a recognized key into a message, Draftship saves it as a secret and removes it from the message before the AI reads it. Keys from less common services may not be recognized, so use the form or add them under **Dashboard > Secrets**.

## What isn't possible

| Request | Why | What to do instead |
|---|---|---|
| Python, Ruby, PHP, Java or Go code | Apps run only as TypeScript on Node.js | Write the logic in a backend function, or host that code elsewhere and call its API |
| Native iOS, Android or desktop apps | Draftship builds web apps | A responsive web app that installs to the home screen |
| npm packages that run code when installed, like `canvas` or `bcrypt` | Installing never runs package code | The AI uses a plain JavaScript alternative, such as `bcryptjs` |
| Your own database, Docker or shell commands | Apps run in a locked-down container | Use the built-in database, or call an outside service |
| WebSocket servers or always-on background processes | Apps may stop when idle | Live updates and workflows |
| Schedules more often than every 5 minutes | This is the minimum interval | Run every 5 minutes, or react to data changes |
| Saving files to disk | The app's disk isn't kept for this | File uploads and database tables |
| Heavy processing, such as video editing or training models | Each app has 512 MB of memory and 1 CPU | Call an outside API from a backend function |

## What the chat can't do yet

- **Read every page:** Sites that need a sign-in, block automated visitors, or build their content with JavaScript can't be read. The chat says so, and you can paste the text instead.
- **Change your data without asking:** The AI only proposes changes to your records, and you apply them. See [below](#your-apps-data).
- **Change your settings directly:** To change settings, use the dashboard. The AI can open the right panel for you.

## It checks its own work

After each build, Draftship opens your app in a real browser, at desktop and phone widths. The AI looks at the screenshots and at errors you wouldn't see, like console errors, broken images and pages that scroll sideways. If something's clearly broken, it spends one round fixing it, without undoing anything you explicitly asked for. If that fix doesn't build, your app keeps the version that worked.

It only opens pages, and doesn't click anything, so it can't change your data. When your app is already running, the AI also gets a screenshot with each message, so you can say things like "the button at the top looks wrong."

## It reads current documentation

Libraries change, and an AI's memory goes out of date. Before writing code against a library, like a chart or PDF library, the AI reads its current documentation with [Context7](https://context7.com). You'll see "Read current docs" in the chat log. This is on for every account, and only sends library names and a short topic, never your request or code. To turn it off, open **Settings → AI tools (MCP)**.

## Big projects

On a large project, the AI reads the files your request needs, instead of every file. It also knows your recent requests. To point it at the right place, name the page or file in your message.

## npm packages

When a package is the better choice, like one for charts, maps or markdown, the AI adds it to your app. It lists packages in `draftship/packages.json`, and Draftship installs them before the build and pins their versions, so a rebuild or a clone gets the same code. You'll see "Installed recharts" in the chat log.

To keep your app and our servers safe:

- **No install scripts:** Nothing runs during installation. Packages that need it, like `canvas`, `bcrypt` or `puppeteer`, are refused, and the AI uses something else.
- **No brand-new releases:** A version has to be at least 3 days old, because malicious releases are usually caught by then.
- **Limits:** Up to 15 packages and 150 MB per app, and 250 MB once their dependencies are included.
- **npm only:** Git and URL versions aren't allowed. Deprecated versions are skipped unless a specific version is pinned.

A package runs inside your app's own container, so it can't reach other apps. It can still see what your app can, like its secrets and its users' data in your backend functions, so only add ones you trust. When you export to GitHub or Vercel, your packages go in `package.json` as usual.

## Images and files

Attach up to 3 files to a message: PNG, JPEG, GIF or WebP images up to 5 MB, or text files such as CSV, JSON, Markdown and code. The AI can see your images, for example to follow a screenshot of a design. If you ask it to use one in your app, like a logo, it adds it to the app.

## Your app's data

Ask about your records in the chat, like "How many bookings came in this week?" or "Delete the test users." The AI reads up to 30 of the newest records from up to 3 tables when your message is about them. These records go to the AI model, so they may include your users' personal data.

When the AI suggests a change, you see a card with exactly what will change. Nothing changes until you choose **Apply this change**, and a backup is saved first. Each card can change up to 50 records, and deleted records go to the trash.

## Links and web search

The AI uses the web in two ways, and the chat shows each one as a step:

- **Links:** Put up to 3 links in a message, such as a site whose style you like or an API's documentation, and the AI reads them. This works on every plan.
- **Web search:** On Pro and Pro+, the AI searches the web when a request needs current information, such as a service's latest prices or documentation.

The AI reads a page's text, colors, fonts and image addresses, but it doesn't see the page as a picture. It uses what it reads as reference and writes original text, unless you say the site is yours. Links to private addresses, such as `localhost` or your home network, are refused.

## How a new app is built

The first prompt for a new app starts with a written plan: goal, roles, pages, data, backend and design, all based on Draftship's stack. The plan also names your project, and your app's address and browser tab use that name. You can watch the AI write the plan in the chat as it works, and on Pro and Pro+ you can also follow its reasoning.

The plan ends with a checklist of tasks. The AI builds from the plan and ticks off each task as it reports finishing it, then the build is checked. Every new project also gets a `README.md` that explains how to edit and publish it. Later messages go straight to the change you ask for. To plan a later change first, use [Plan mode](/docs/building/chat-modes).
