NuxtVuePortfolio

bentolio — Nuxt Portfolio Template

By oneminch

Bentolio is a minimal portfolio template built with Nuxt that can also be reused as a Nuxt Layer. Content and base styles are configured centrally in app/app.config.ts, with Tailwind CSS and GSAP handling the interface and entrance animations.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-02View source

What stands out

A quick read of the recorded project description.

01

Supports both cloning as a standalone template and reuse as a Nuxt Layer via extends

02

Page content and base styles are centralized in app/app.config.ts, with accompanying type definitions

03

Uses Tailwind CSS and CSS theme variables to control the primary color and other styles

04

Entrance animations and micro-interactions are implemented through a GSAP plugin, with the animate-element class controlling animated elements

05

Provides dark mode toggle using the class strategy of @nuxtjs/color-mode

06

Configured for static generation by default via routeRules, making it easy to deploy to static hosting

Template Details

Bentolio is a Nuxt template for personal portfolio sites, and the repository supports both cloning it as a template and using it as a Nuxt Layer. Page content, social links, CTAs, and some style toggles are centralized in app/app.config.ts, with type hints and validation provided through app/utils/types.ts. It supports four social entries by default: X, LinkedIn, Bluesky, and GitHub. The layout is designed for four links; adding more networks requires modifying the type definitions and mappings.

For styling, the Tailwind entry point is app/assets/css/tailwind.css, and the primary color is adjusted via the CSS theme variable --color-primary. Dark mode is toggled by @nuxtjs/color-mode using the class strategy. Icons use @nuxt/icon with Iconify collections. Animations are provided by a GSAP plugin: elements with the animate-element class run entrance animations on page load, and the waving emoji animation is controlled by #wave in CSS.

For build and deployment, the template is configured for static generation via routeRules in nuxt.config.ts. Pages are prerendered and can be deployed directly to static hosting. OG images can be generated by the nuxt-og-image module. The repository also contains an Astro version branch that is no longer actively updated. The design is inspired by Hover.dev's Bento Grid.

NuxtPortfolio

Is it right for your project?

Use Cases

  • Building a personal portfolio or developer homepage to centrally display a bio, social links, and contact information
  • Introducing the Layer via extends in an existing Nuxt project to quickly get a portfolio page and styles
  • Using it as a reference project for learning Nuxt content configuration, Tailwind theme variables, and GSAP entrance animations
  • Personal sites that need static generation and deployment to a static hosting service

Suitable For

  • Developers who want to quickly build a personal portfolio page with Nuxt
  • Teams that need to reuse the same portfolio interface and configuration across multiple Nuxt projects
  • Users who prefer to manage page content centrally through a configuration file rather than writing templates page by page
  • Users planning to deploy the site statically to a static hosting platform

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    When using as a template, clone the repository and modify the example content in app/app.config.ts; when using as a Layer, install @minch/bentolio and include it in the extends array in nuxt.config.ts

  2. 2

    Replace the avatar at public/profile.jpg, and update public/favicon.svg, public/og-image.png, and public/logo.svg as needed

  3. 3

    The primary color is adjusted via the --color-primary theme variable in app/assets/css/tailwind.css, which is also the Tailwind entry point

  4. 4

    By default, only four social links are supported: X, LinkedIn, Bluesky, and GitHub. Adding other networks requires modifying SocialMediaKey and the socials mapping in app/utils/types.ts

  5. 5

    The Astro version in the repository is on the astro branch, and it is stated that it is no longer actively updated

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This listing covers the free version under the MIT license in the public repository; the free scope applies to that version's code and does not imply that external services or third-party assets are free.

Must comply with when using

  • You are allowed to use, modify, commercialize, and distribute the code of this version for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • The Astro version in the repository is on the astro branch, and the README explicitly states that this branch is no longer actively updated. If you need that version, you bear the maintenance risk yourself.
  • The design is inspired by Hover.dev's Bento Grid. If you need to use its original design assets, you should independently verify the licensing of those third-party assets.
  • The default layout is designed to display only 4 social links. Adding more networks requires modifying SocialMediaKey and the socials mapping in app/utils/types.ts.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; they cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

For the original Astro version (not actively updated), check the [`astro`](https://github.com/oneminch/bentolio/tree/astro) branch.

Original README

The design is inspired by [@TomIsLoading](https://twitter.com/TomIsLoading)'s Bento Grid from [Hover.dev](https://hover.dev).

Original README

The layout is designed to only display 4 social links by default.

Original README
https://github.com/oneminch/bentolio/blob/main/LICENSEhttps://github.com/oneminch/bentolio/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 87 / 100
Technologies
Nuxt · Vue
Website type
Portfolio
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-08-14
Screenshot last checked
2026-10-02

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Nuxt as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: c6ee504290805644eec7a93a9054b758d3dda54e13e0a10968ff145a9d23cbd6

2026-10-02T17:22:47.836Z

Source file / repository
# Bentolio

A minimal portfolio template and Nuxt layer built with Nuxt 4, Tailwind CSS 4, and GSAP.

All content and basic styling are configured via `app/app.config.ts`.

![Screenshot](/public/screenshot.png)

> For the original Astro version (not actively updated), check the [`astro`](https://github.com/oneminch/bentolio/tree/astro) branch.

## Features

- **Nuxt Layer**: Modern DX, serverless-friendly, and SSG by default
- **Tailwind CSS 4**: Zero-config utility classes with CSS-first authoring
- **GSAP animations**: Smooth entrance animations and micro‑interactions
- **Dark Mode**: Toggle via `@nuxtjs/color-mode` (class strategy)
- **Icons**: `@nuxt/icon` with Iconify collections (e.g., `ph`, `simple-icons`)
- **Type‑safe app config**: Autocompletion and validation for your site data
- **Static generation**: Pre‑rendered pages for easy deployment to any static host
- **OG Image**: Automatically generated OG image via `nuxt-og-image`

## Configure Your Portfolio

To use as a template, you can simply clone and update the files to your liking.

Alternatively, you can also use it as a Nuxt layer:

```bash
npm i -D @minch/bentolio
```

```ts
export default defineNuxtConfig({
  extends: ["@minch/bentolio"]
});
```

Have a look at [.playground](/.playground/) to see how to set up as a layer.

All page content lives in `app/app.config.ts` and is fully typed (see `app/utils/types.ts`). Edit the example values to your own:

```ts
// app/app.config.ts (excerpt)
export default defineAppConfig({
  style: {
    roundedItems: false
  },
  portfolio: {
    name: "Your Name",
    subtitle: "What you do",
    // company: "[COMPANY]",
    avatar: "/profile.jpg",
    bio: {
      // Prefer html for rich content; fallback to text if html is empty
      html: "I'm a <span class='font-bold text-primary'>Full‑Stack</span> Dev...",
      text: "I'm a Full‑Stack Dev..."
    },
    socials: {
      GitHub: {
        socialMediaIcon: "simple-icons:github",
        profileUrl: "https://github.com/your-handle",
        socialMediaBgColor: "bg-black!",
        socialMediaBorderColor: "border-black!",
        socialMediaTextColor: "text-white!"
      }
      // X, LinkedIn, Bluesky are also supported
    },
    cta: {
      contact: "[email protected]",
      location: "Your City",
      link: { url: "https://your-site.com", label: "Portfolio" }
    }
  }
});
```

Supported social keys by default: `"X" | "LinkedIn" | "Bluesky" | "GitHub"`. To add more networks, extend the `SocialMediaKey` union and the `socials` mapping in `app/utils/types.ts`. The layout is designed to only display 4 social links by default.

### Assets

- Replace `public/profile.jpg` with your own avatar.
- Update `public/favicon.svg`, `public/og-image.png`, `public/logo.svg` and `public/logo.svg` if desired.
- OG image can be auto-generated using the `nuxt-og-image` module.

### Theming and Styles

- Tailwind entry is `app/assets/css/tailwind.css`.
- Primary color is set via CSS theme variable:

```css
@import "@minch/bentolio/tailwind";

/*  Change `--color-primary` to customize your accent. */
@theme {
  --color-primary: var(--color-lime-500);
}
```

### Animations

- GSAP is provided via a Nuxt plugin (`$gsap`). See `app/layouts/default.vue` for entrance animations.
- Elements with the `animate-element` utility class will animate in on page load. The initial state and transitions are defined in `app/assets/css/tailwind.css`.
- The waving hand emoji animation is controlled via the `#wave` id in CSS.

## Deployment

This template is configured for static generation via `routeRules` in `nuxt.config.ts`.

## Credit

The design is inspired by [@TomIsLoading](https://twitter.com/TomIsLoading)'s Bento Grid from [Hover.dev](https://hover.dev).
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.