---
title: "Brutal"
description: "Brutal is based on Neobrutalist Web Design, a movement that aims to create websites with a minimalistic and functional design. "
url: "https://vercel.com/templates/astro/brutal"
links:
  repository: "https://github.com/eliancodes/brutal"
  demo: "https://brutal.elian.codes/"
  deploy: "https://vercel.com/new/clone?demo-title=Brutal&demo-description=Brutal+is+based+on+Neobrutalist+Web+Design%2C+a+movement+that+aims+to+create+websites+with+a+minimalistic+and+functional+design.+&demo-url=https%3A%2F%2Fbrutal.elian.codes%2F&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F68x6iNUJDWU1cWQ9oAdoEj%2F894236972df83e4b01e9aa48a32bf18e%2Fbrutal_2x.png&project-name=Brutal&repository-name=brutal&repository-url=https%3A%2F%2Fgithub.com%2Feliancodes%2Fbrutal&from=templates&skippable-integrations=1"
---

# Brutal

Brutal is based on Neobrutalist Web Design, a movement that aims to create websites with a minimalistic and functional design.

# Brutal - The neobrutalist Astro theme

Brutal is a minimal neobrutalist theme for [Astro](https://astro.build/). It's based on Neobrutalist Web Design, a movement that aims to create websites with a minimalistic and functional design. It has some integrations like Image Optimization, RSS, Sitemap, ready to get your SEO done right.

The theme has no JavaScript integration out of the box, but can always be added of course.

This template is based on [my own personal website](<https://www.elian.codes/>), with some more generic things added.

## Usage

You can bootstrap a new Astro project using Brutal with the following command:

```bash
# npm
npm create astro@latest -- --template eliancodes/brutal

# pnpm
pnpm create astro@latest --template eliancodes/brutal

# yarn
yarn create astro --template eliancodes/brutal
```

### Commands

All commands are run from the root of the project, from a terminal:

(Here I use PNPM, no problem if you use NPM or Yarn)

| Command             | Action                                             |
| :------------------ | :------------------------------------------------- |
| `pnpm install`      | Installs dependencies                              |
| `pnpm dev`          | Starts local dev server at `localhost:4321`        |
| `pnpm lint`         | Runs Biome lint checks                             |
| `pnpm format`       | Formats the project with Biome                     |
| `pnpm check`        | Runs Astro checks plus `biome check`               |
| `pnpm build`        | Build your production site to `./dist/`            |
| `pnpm preview`      | Preview your build locally, before deploying       |
| `pnpm astro ...`    | Run CLI commands like `astro add`, `astro preview` |
| `pnpm astro --help` | Get help using the Astro CLI                       |

## Tooling

This project uses [Biome](https://biomejs.dev/) for formatting, linting, and import organization.
Astro-specific diagnostics still run through `astro check`, so CI and local validation use both:

```bash
pnpm run check
```

## Integrations

### Tailwind CSS

In this theme, I'm using [Tailwind CSS](https://tailwindcss.com/) to generate the utility classes. The project uses Astro's Tailwind setup with the Vite plugin, plus a small amount of regular CSS for the theme-specific scrollbar and shadow styling.

### Sitemap

To generate the sitemap, you don't need to do anything. It's automatically generated when you build your site. You'll just need to switch out the `site` on `astro.config.ts` to your own.

```js title="astro.config.mjs"
import { defineConfig } from 'astro/config';

export default defineConfig({
  site: 'https://example.com',
});
```

### RSS

The RSS feed is automatically generated from the Markdown files in the `src/content/blog` folder. You can ofcourse completely change this to your own needs.

The RSS will output to `https://example.com/feed.xml` by default. You can change this, by renaming `src/pages/feed.xml.js`.

### Image

## Components

### `components/blog/`

This directory contains all components for the blog.

### `components/errors/`

This directory contains all error components.

#### `components/errors/404.astro`

This component is used when a page is not found.

### `components/generic/`

This directory contains all generic components, reused over multiple pages.

### `components/home/`

This directory contains all components for the home page.

### `components/layout/`

This directory contains all layout components. For instance, the header and footer and `<head>` section.

If you need more from this theme, don't hesitate to open an issue or reach out to me!

## Related Templates

### [Astro Boilerplate](https://vercel.com/templates/astro/astro-boilerplate)

An Astro site, using the basics starter kit.

### [AstroWind](https://vercel.com/templates/astro/astrowind)

Free, customizable and production-ready template for Astro using Tailwind CSS.

---

## Additional documentation

The [Vercel Knowledge Base](https://vercel.com/kb) contains guides and answers to common questions about Vercel, including deployment, framework configuration, domains, caching, and troubleshooting.
