Dante: a single-author Astro theme for blogs and portfolios
Dante, a single-author blog and portfolio theme for Astro.js.
At a glance
- What is it?
- Dante is an Astro theme for a personal blog or portfolio, built with Tailwind CSS, MDX and Astro content collections, with dark and light modes, pagination, tags, a newsletter form, view transitions, sitemap and RSS support. It is GPL-3.0 licensed and deployable to Netlify in one click from the repository.
- Who is it for?
- Adopt Dante if you want a personal blog or portfolio on Astro with a minimal design and a single configuration file to edit. Skip it if you need a multi-author publication, since the theme is explicitly built for a single author.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 25 days ago.
- What is it written in?
- Mainly Astro, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the theme is and who it is for
Dante is described as a single-author blog and portfolio theme for Astro.js, featuring a minimal, slick, responsive and content-focused design. The single-author framing is the first thing to notice, because it decides what the theme optimises for. A personal blog is one writer, one voice, one navigation structure and a list of posts, and a theme built for that can make assumptions a multi-author publication cannot, such as a single home page, a simple about section and a page layout chosen by the author rather than by a role. The theme is published by justgoodui.com, and the README points at that site for more Astro themes. The primary language is Astro, the homepage is a Netlify-hosted demo at dante-astro-theme.netlify.app, and the last push to the repository was on 2026-09-28, the same day as the 2.1.0 release, with 2.0.0 in July 2026 and 1.0.0 in November 2025. The licence is GPL-3.0, which is worth knowing early, since it is a copyleft licence and a theme that a person modifies and publishes inherits obligations. The project carries a Netlify deploy button, and clicking it creates a new repository that looks like the original and is set up for deployment on Netlify immediately, which is the fastest way to evaluate the theme.
The feature list
The theme features list is short enough to read in one pass and each line names a decision rather than a buzzword. There is a dark and light colour mode, a hero section with a bio, a portfolio collection, pagination support, post tags support, a subscription form and view transitions. The styling is Tailwind CSS and the layout is mobile-first responsive. For search and sharing there is SEO-friendly output with canonical URLs and OpenGraph data, a sitemap and an RSS feed. Content comes in both Markdown and MDX, and images go through the optimised path using Astro's Image component. The dark and light mode and the view transitions are the two that most affect the feel of a site, and both are the kind of thing a theme can offer in a few lines while a from-scratch implementation takes a day. The OpenGraph and canonical URL support matters more than it looks, because a theme that ships them correctly saves every user from the most commonly forgotten part of a personal site. The template integrations are Tailwind through the Vite plugin, the sitemap integration, MDX and the RSS integration.
One configuration file holds the whole site
The configuration section explains that all site-wide data and theme options are stored in src/data/site-config.ts, in a single configuration object used throughout the theme for navigation, branding, hero content, social links and more. That is a design choice worth pausing on, because configuration scattered across a dozen files is a common way a theme becomes hard to customise. The README then enumerates what that one file controls. Site identity covers the title, the description, the avatar, the subtitle and the default social share image. Navigation covers the header and footer links. Social links cover URLs for supported platforms. The hero section covers the title, text, image and action buttons. The newsletter subscription covers form settings suitable for Mailchimp, Formspree, ConvertKit or other form-based providers, with a custom action URL, configurable email and hidden fields, and an optional honeypot field for spam protection. Pagination covers the posts per page for blog and projects listings. The honeypot is a small but thoughtful detail, since a public form on a personal site attracts spam and a hidden field that bots fill in and humans ignore removes most of it without a captcha.
How images are handled
Images get their own section because the theme makes a distinction that trips people up. The theme uses a CustomImage component that automatically displays images using Astro's optimised Image element or a standard img tag depending on the source, so the author does not have to decide which to write. The rule is about where the file lives. Content collection images, the ones used in posts or pages, must be stored in src/assets/ since they use Astro's image() schema. Site-config images, such as the avatar, the hero image or the social preview, can either be imported from src/assets/ for optimisation or referenced directly from public/ if you would rather not optimise them. Images can therefore be referenced either as imports from src/assets/ or as string paths from the public/ directory. The distinction between an import and a string path is the one thing to remember, because a public path cannot be optimised, since the optimiser works on files at build time and a string in a config file is not something it can resolve.
The project layout
The README prints the folder and file structure, and it is the standard Astro layout with a few theme-specific pieces. The public/ directory holds static assets, and src/ holds the working code, with assets/ split into icons/ and images/, a components/ directory for Astro components, a content/ directory for the content collections, a data/ directory for the configuration, layouts/, pages/, styles/ and utils/, alongside content.config.ts and types.ts at the root of src/. Outside src/ there is astro.config.mjs, package.json, the README and tsconfig.json. The README explains the conventions Astro expects. Pages are found in src/pages/ as .astro or .md files, and each page becomes a route named after its file. The components directory holds the .astro components. The content directory holds collections of related Markdown and MDX documents, and getCollection() retrieves posts from src/content/blog/, with an optional schema to type-check the frontmatter. The presence of utils/ and types.ts is the part worth noting, since it means the theme has a place for shared helpers and for its own type declarations, which is where a customisation is most likely to need to go.
Commands and dependency versions
The theme requires Node.js 22.12.0 or newer, and the commands table lists what each npm script does. Installing dependencies is npm install, the local dev server runs on localhost:4321 with npm run dev, the production build goes to the dist directory with npm run build, npm run preview serves the built site locally before deploying, and npm run check type-checks the project with astro check. There is also npm run astro for CLI commands such as astro add and astro check, and npm run astro -- --help for the CLI's own help.
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run check` | Type-check the project with `astro check` |The scripts in the package manifest are thin wrappers around the Astro CLI, so nothing is hidden.
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview",
"check": "astro check",
"astro": "astro"
},The dependency list tells you which generation of the toolchain the theme targets, and it is a recent one. Astro is at 7.3.5, with the MDX integration at 8.0.2, the RSS integration at 4.0.19 and the sitemap integration at 3.7.4. Tailwind CSS is at 4.3.3 and is used through the Vite plugin, which is the Tailwind 4 approach rather than the older PostCSS setup. Two variable font packages are included, Inter for the interface and Newsreader for reading, both from the fontsource variable packages. The marked library is a dependency for markdown parsing.
"@astrojs/mdx": "^8.0.2",
"@astrojs/rss": "^4.0.19",
"@astrojs/sitemap": "^3.7.4",
"@fontsource-variable/inter": "^5.3.0",
"@fontsource-variable/newsreader": "^5.3.0",
"@tailwindcss/vite": "^4.3.3",
"astro": "^7.3.5",
"marked": "^18.0.14",
"tailwindcss": "^4.3.3"The development dependencies complete the picture, with the Astro check package, the Tailwind typography plugin, TypeScript, Prettier and two Prettier plugins, one for Astro files and one for sorting Tailwind class names.
Where Dante is the wrong choice
The first limit is the single-author assumption, which is stated plainly but has consequences beyond the obvious. There is no author archive, no byline handling and no role-based navigation, and while nothing stops you from building those on top, the theme gives you no head start on them. The second is the GPL-3.0 licence, which is a genuine constraint for some users. A personal blog is usually fine, since you publish the source of the site you publish, but a site that embeds the theme in a larger product, or a theme you modify and then want to keep closed, runs into copyleft obligations that the README does not discuss beyond the link to the licence file. The third is the coupling to a specific generation of the toolchain. Astro 7 with Tailwind 4 through the Vite plugin and a TypeScript 6 dev dependency is a stack that will move, and a theme that upgrades its own dependencies on each release can leave a user on an older Astro unable to apply an update without resolving conflicts themselves. The fourth is that the design is fixed in the sense that the theme is one look. The README says it is minimal and slick, which is a matter of taste, but there is no theming layer described, so a different visual identity means rewriting the components rather than setting variables. The fifth is the demo content, which the credits say was generated with Chat GPT and uses images from Unsplash, so a new installation starts with placeholder writing and stock photographs that have to be replaced before the site is anyone's own.
Editorial conclusion
Adopt Dante if you want a personal blog or portfolio on Astro with a minimal design and a single configuration file to edit. Skip it if you need a multi-author publication, since the theme is explicitly built for a single author. Verify first that you are on Node 22.12.0 or newer, that the theme's Markdown and MDX content collections are where you expect your posts, and that the newsletter form provider you plan to use matches the form configuration the theme expects.
Frequently asked questions
What does the Dante Astro theme include?
Dante is a single-author blog and portfolio theme for Astro.js with dark and light colour modes, a hero section with a bio, a portfolio collection, pagination, post tags, a subscription form, view transitions, Tailwind CSS, a mobile-first responsive layout, canonical URLs and OpenGraph data, a sitemap, an RSS feed, Markdown and MDX support and optimised images through Astro's Image component.
How do you customise the Dante theme's content and branding?
All site-wide data and theme options live in a single configuration object in src/data/site-config.ts. It controls the site identity, the header and footer navigation, the social links, the hero section, the newsletter form settings including a custom action URL, configurable email and hidden fields and an optional honeypot, and the posts per page for pagination. Images can be imported from src/assets/ for optimisation or referenced as string paths from public/.
What are the requirements and commands for the Dante Astro theme?
It requires Node.js 22.12.0 or newer. The commands are npm install for dependencies, npm run dev for the local server on localhost:4321, npm run build for the production output in dist, npm run preview to check the build before deploying, and npm run check for type-checking with astro check. The theme is licensed under GPL-3.0 and can be deployed to Netlify with one click from the repository.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/justgoodui-dante-astro-theme)Was this useful?