Quick start
Run Adcraft on your own machine with no keys and no database, make a sample ad, then add provider keys and PostgreSQL as you need them.
3 min readUpdated Oct 17, 2026Applies to Adcraft 1.0.0
On this page
This gets Adcraft running on your laptop. You need Node.js 22 or newer; pnpm is installed for you by Corepack. Nothing else is required for a first look.
1. Install and start
From the folder you unzipped:
corepack enable
pnpm install --frozen-lockfile
cp .env.example .envOpen .env and set the one required value:
# paste the output of: openssl rand -base64 32
AUTH_SECRET=Then start the app:
pnpm --filter @adcraft/app devOpen http://localhost:3000. The marketing site is at /, and the product starts at /sign-in.
Note
With no DATABASE_URL, the app runs an embedded PostgreSQL (PGlite) that keeps its data in .data/pglite in the project folder, and creates its tables on first use. It survives restarts on your machine, but it is meant for evaluation only.
2. Sign in
In development the sign-in page shows a development sign-in box: type any email address and you are signed in, with no email sent. It is never shown in production. Set DEV_LOGIN=0 to hide it locally too.
The first sign-in takes you to /welcome: name your workspace and your first brand, optionally give the brand's website, and you start with 10 trial credits.
3. Make a sample ad
With no AI keys, you can walk through the whole flow:
- Add a product under Library: upload a photo, or paste a product page address. Without
FAL_KEYthe background is not removed; the original photo is kept. - Write a brief under Briefs. Suggest and Improve return a labelled sample without a text key.
- Generate ideas. Without
ANTHROPIC_API_KEYyou get eight "[Sample]" concepts. A run costs 1 credit, sample or not. - Select an idea and choose Make the ad, Make a video or Make the UGC video.
What you see next depends on keys:
| Step | Without keys |
|---|---|
| Static ad (single) | Generation is disabled until an image provider is connected; the form says which key to add |
| Bulk static ads | Placeholder gradient scenes behind your layout |
| Product video | Placeholder stills with a slow zoom, assembled into a real video file |
| Presenter video | A "presenter card" placeholder with a silent voice track |
| Character Studio | Needs fal.ai and HeyGen before it can generate |
| Publishing | Built-in sandbox ad accounts with simulated campaigns and metrics |
Placeholder runs still spend credits, so you may run out of trial credits quickly. Make yourself an admin (next step) and add credits under Admin → Organisations.
4. Make yourself an admin
Add your address to .env and restart the dev server:
ADMIN_EMAILS=you@example.comSign in with that address and open /admin. First admin and the admin panel explains how this works in production.
5. Turn on the AI
Add keys to .env and restart. The two that matter most:
# Concepts, copy and brief help (Claude)
ANTHROPIC_API_KEY=sk-ant-...
# Images, background removal and video (default models run on fal.ai)
FAL_KEY=...Add HEYGEN_API_KEY and ELEVENLABS_API_KEY for presenter videos and Character Studio. AI models and providers lists every key and what it switches on. Admin → Providers shows which are set.
6. Use a real database (optional)
Point the app at PostgreSQL so your data lives somewhere durable. A local Docker container is enough:
docker run -d --name adcraft-db -p 5433:5432 \
-e POSTGRES_PASSWORD=postgres postgres:18DATABASE_URL=postgres://postgres:postgres@localhost:5433/postgresApply the schema, then restart the app:
pnpm --filter @adcraft/db db:migrate
pnpm --filter @adcraft/app devThe migration command reads DATABASE_URL from .env at the project root.
Good to know in development
- Jobs run inside the dev server unless Inngest is configured. To try Inngest locally, run
pnpm inngest(the Inngest Dev Server on port 8288) and setINNGEST_DEV=1together withINNGEST_EVENT_KEY; jobs are only sent to Inngest when an event key is set. - Stripe is off by default. In development, plan and top-up buttons simulate the purchase and add credits, which is handy for testing. A production install without Stripe refuses purchases instead. See Running without Stripe.
- Uploads and generated files are written to
.data/filesin the project folder. - Checks:
pnpm typecheck,pnpm testandpnpm buildrun across the monorepo.
Next steps
- Installation and deployment for a real server.
- Configuration for every variable.