# Deploy Apps with Next.js Static Boilerplate

import Tag from '~/components/webkit/Tag.vue';

<Tag severity="info">
Preview
</Tag>

The Azion **Next.js Static Boilerplate** enables the creation and deployment of a **Next.js Single-Page Application (SPA)** directly on the edge of the network. By executing the boilerplate, several steps are automated, from repository management to edge deployment.

This template uses Next.js version `14.1.4`.

---

## About static exports

The core of Next.js supports static exports. This allows you to initiate your project either as a static site or a SPA and then add features that require a server. By using these advanced features, Next.js generates one HTML file per route, breaking a strict SPA into individual HTML files, and your project can be deployed and hosted on any web server that can serve HTML/CSS/JS static assets.

This capability includes *supported and unsupported features*, listed below, which you must take into account when developing and managing your project.

Go to Next.js documentation for more details on [Static exports](https://nextjs.org/docs/app/building-your-application/deploying/static-exports).

### Supported features

- Server components
- Client components
- Image optimization
- Image optimization (through `next/image` can be used with a static export by defining a custom image loader in `next.config.js`)
- Route handlers
- Browser APIs

### Unsupported features

These features require a Node.js server or dynamic logic that can't be computed during the build process and aren't supported:

- Dynamic routes with `dynamicParams: true`
- Dynamic routes without `generateStaticParams()`
- Route handlers that rely on request
- Cookies
- Rewrites
- Redirects
- Headers
- Middleware
- Incremental static regeneration
- Image optimization (with the default loader)
- Draft mode

---

## Requirements

- A [GitHub account](https://github.com/signup) to connect with Azion and create your new repository.
  - Every push will be deployed automatically to this repository to keep your project updated.
- This template uses [Functions](/en/documentation/products/build/applications/functions/), and it may generate usage-related costs. Check the [pricing page](https://www.azion.com/en/pricing/) for more information.

---

## Deploying the template

You can obtain and configure your template through the Azion Console. To easily deploy it at the edge, click the button below.

<DocButton
    label="Deploy"
    href="https://console.azion.com/create/nextjs/next-static-boilerplate"
    icon="ai ai-azion"
    size="medium"
/>

---

## Setting up the template

In the configuration form, you must provide the information to configure your Angular application. Fill in the presented fields. 

Fields identified with an asterisk are mandatory.

1. Connect Azion with your GitHub account.
- A pop-up window will open to confirm the installation of the [Azion GitHub App](https://www.azion.com/en/documentation/products/guides/azion-github-app/), a tool that connects your GitHub account with Azion's platform.
- Define your permissions and repository access as desired.
2. Select the **Git Scope** to work with.
3. Define a name for your application.
- The bucket for storage and the function will use the same name.
- Use a unique and easy-to-remember name. If the name has already been used, the platform returns an error message.
4. Click the **Deploy** button to start the deployment process.

During the deployment, you'll be able to follow the process through a window showing the logs. When it's complete, the page shows information about the application and some options to continue your journey.

:::note
The link to the application allows you to see it on the browser. However, it takes a certain time to propagate and configure the application in Azion's edge locations. It may be necessary to wait a few minutes for the URL to be activated and for the application page to be effectively displayed in the browser.
:::

### Key configurations

The application undergoes an optimized build process, emphasizing optimal performance and efficiency, employing **Azion Web Platform** resources.

The script creates a [GitHub repository](https://github.com/aziontech/azion-samples/tree/dev/templates/nextjs-boilerplate) to manage the source code and then it installs all required dependencies. Besides that, your application is deployed on Azion's platform and while carrying out multiple configurations, such as setting up the application and its domain to host your Next.js project and an function for custom logic.

The script also commits deployment details to the user's GitHub repository to maintain a transparent and trackable deployment history, including information related to the version deployed and the timestamp of the deployment. The template also includes a GitHub Action to enable continuous deployment.

---

## Managing the template

Considering that this initial setup may not be optimal for your specific application, all settings can be customized any time you need by using Azion Console.

To manage and edit your application's settings, follow these steps:

1. [Access Console](https://console.azion.com).
2. On the upper-left corner, select **Products menu** > **Applications**.
- You'll be redirected to the **Applications** page. It lists all the applications you've created.
3. Find the application related to the **Next.js Static Boilerplate** and select it. 
- The list is organized alphabetically. You can also use the **search bar** located in the upper-left corner of the list; currently, it filters only by **Application Name**.

After selecting the application you'll work on, you'll be directed to a page containing all the settings you can configure.

:::tip
Read the documentation about [managing applications](/en/documentation/products/build/applications/first-steps/) for more details.
:::

### Adding a custom domain

The application created during the deployment has an assigned Azion Workload domain to make it accessible through the browser. The domain has the following format: `xxxxxxxxxx.map.azionedge.net`. However, you can add a custom domain for users to access your application through it.

import DocButton from '~/components/webkit/DocButton.vue';

<DocButton href="/en/documentation/products/build/applications/domains/" label="go to Workloads reference" kind="secondary" size="medium" />