# Quickstart

From nothing to a running app at its own address.

## The short way: launch it

With the [command line](/docs/cli), in your code's directory:

```bash
curl -fsSL https://runalf.com/cli.sh | sh    # macOS, Linux
alf launch
```

On Windows, install it from PowerShell or the Command Prompt with `powershell -c "irm https://runalf.com/cli.ps1 | iex"`; the rest is the same.

`launch` works out what the code is, writes a Dockerfile if it has none, asks once about each database it uses, makes the project and deploys it: see [launching an app](/docs/launch). New here? It signs you in first, in your browser, where you make your account (with GitHub, Google or your email), and when your organization needs a payment method before its first deploy, it opens Stripe's page and waits for it. The rest of this page does the same in the dashboard.

## 1. Create an account

[Sign up](/signup) with your email, and open the link we send to confirm it. Next, start an organization (your workspace; you can invite people later under **Members**), or skip that and join your team's when they invite you.

## 2. Create a project

A project holds the services of one app, say a website, an API and a database. On the **Overview**, choose **Create → Empty project** and name it.

## 3. Add a service

In the project, choose **+ Create**:

- **Your code**: run `alf deploy` in your code's directory (the page has the line with the project filled in, or a one-time line with nothing to install). It finds the docker-compose file or the Dockerfile, sends the code, and Alf builds and runs it. `alf ci github` sets up the same on every push. See [Deploying your code](/docs/deploying-code).
- **Service → Container image**: any public image, or one the server can pull, e.g. `nginx:1.27` or `ghcr.io/you/app:1.2`. Set the port your app listens on (or leave it empty to use the one the image declares) and choose **Create service**: it's deployed at once.

## 4. Open it

The service card on the canvas shows its address. Open it: the first request wakes the app, and everything after that is as fast as usual.

## Next steps

- Add [variables and secrets](/docs/variables-and-secrets).
- Point [your own domain](/docs/domains) at it.
- Add a database as a [private service](/docs/networking).
- Turn on [notifications](/docs/notifications) for failed deploys.
