Skip to content

An opinionated Astro 5 template with built-in support for Tailwind CSS, prettier, and import aliases.

Notifications You must be signed in to change notification settings

Smart-Ace-Designs/Astro-Major-Tom

Repository files navigation

Astro Template: Major Tom

Major Tom is an opinionated Astro 5 starter template with built-in support for Tailwind CSS, Prettier, view transitions, and import aliases and includes a basic starter component.

Using bunx create-astro@latest or npx create-astro@latest provides everything you need to create a basic Astro application. However, it is missing a few useful items that I found myself manually adding to every Astro project I created. To address this problem, I created this template to automatically include these items. Additionally, a custom PowerShell function was created to deploy this template and provide some additional functionality that the template cannot.

The template includes:

  • Tailwind CSS (v3)
  • Prettier
  • Astro View Transitions
  • Astro Import Aliases
  • A default MainLayout.astro layout file
  • A default global.css file
  • Default .vscode files to properly handle Tailwind CSS, recommended extensions, and default Prettier formatters
  • A starter component to showcase Tailwind CSS
  • The dev script set to "astro dev --open"

The PowerShell function:

  • Creates an additional empty folder: assets
  • Blanks out the README.md file
  • Runs the prettier CLI to provide an intial format of all project files
  • Initializes a Git repository
  • Automatically navigates to the project folder and peforms an initial install
  • Runs astro update to update the core Astro packages to the latest versions and runs your preferred package manager (npm or bun) to update the other packages
  • Provides an option to launch the site and/or open the project folder with VS Code post deployment

Deployment Methods

Using bunx create-astro@latest is dependent on npm being present in the path. It is recommended to install Node.js even if Bun is used exclusively.

bun

bunx create-astro@latest -- --template smart-ace-designs/astro-major-tom project-name

npm

npx create-astro@latest -- --template smart-ace-designs/astro-major-tom project-name

PowerShell

Bun 1.2.0 is not currently supported with this function due to compatibility issues between the new text-based bun.lock file and astro install.

Add this function to your PowerShell profile or a PowerShell module:

function New-AstroProject
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory = $true)] [string]$ProjectName,
        [Parameter(Mandatory = $true)] [string]$Location,
        [Parameter(Mandatory = $true)] [ValidateSet("astro-major-tom", "astro-moonbase", "astro-space")] [string]$Template,
        [Parameter(Mandatory = $false)] [switch]$StartApp,
        [Parameter(Mandatory = $false)] [switch]$StartCode,
        [Parameter(Mandatory = $false)] [ValidateSet("bun", "npm")] [string]$PackageManager = "bun"
    )

    switch ($PackageManager)
    {
        "bun" {$PackageManagerX = "bunx"}
        "npm" {$PackageManagerX = "npx"}
    }

    Clear-Host
    $Message = "Astro Deployment Tool"
    $Width = $Host.UI.RawUI.WindowSize.Width
    Write-Host
    Write-Host ((" " * ($Width - $Message.Length)) + $Message) -ForegroundColor Green
    Write-Host ("=" * $Width)

    if (Test-Path -Path "$Location\$ProjectName")
    {
        Write-Host "`nProject folder ($ProjectName) already exists."
        Write-Host "Operation cancelled...liftoff failed!"
        return
    }

    Set-Location $Location
    & $PackageManagerX create-astro@latest -- --template smart-ace-designs/$($Template) `
        --git --no-install $ProjectName

    if (!(Test-Path -Path $ProjectName))
    {
        Write-Host "`nProject folder ($ProjectName) was not created."
        Write-Host "Operation cancelled...liftoff failed!"
        Write-Host "`nIf using Bun please run `"bun pm cache rm`" to clear the cache and try again."
        return
    }
    
    Write-Host
    Set-Location $ProjectName
    switch ($PackageManager)
    {
        "bun" {& $PackageManager install --no-summary}
        "npm" {& $PackageManager install --silent}
    }

    & $PackageManagerX @astrojs/upgrade
    & $PackageManager update --silent --save

    if (!(Test-Path -Path "src/components")) {[void](New-Item -Name "components" -Path src -ItemType Directory)}
    if (!(Test-Path -Path "src/assets")) {[void](New-Item -Name "assets" -Path src -ItemType Directory)}
    Clear-Content -Path "README.md"

    Write-Host
    & $PackageManagerX prettier . --write --log-level silent
    & $PackageManagerX prettier . --check
    if ($StartCode -and (Get-Command code -ErrorAction SilentlyContinue)) {code .}
    Write-Host
    Write-Host ("=" * $Width)
    if ($StartApp) {& $PackageManager run dev}
}
New-AstroProject -ProjectName project-name -Location project-parent-folder -Template astro-major-tom
astro-majortom.mp4

Project Structure

Inside of your Astro project you will see the following folders and files:

/
├── .vscode/
│       └── extensions.json
│       └── launch.json
│       └── settings.json
├── public/
│       └── favicon.svg
├── src/
|   ├── components/
│       └── AstroWelcome.astro
|   ├── layouts/
│       └── MainLayout.astro
│   ├── pages/
│       └── index.astro
|   ├── styles/
│       └── global.css
├── .gitignore
├── .prettierrc.mjs
├── astro.config.mjs
├── package.json
├── README.md
├── tailwind.config.mjs
└── tsconfig.json

When deployed with the custom New-AstroProject PowerShell function, you will see the following folders and files:

/
├── .vscode/
│       └── extensions.json
│       └── launch.json
│       └── settings.json
├── public/
│       └── favicon.svg
├── src/
|   ├── assets/
|   ├── components/
│       └── AstroWelcome.astro
|   ├── layouts/
│       └── MainLayout.astro
│   ├── pages/
│       └── index.astro
|   ├── styles/
│       └── global.css
├── .gitignore
├── .prettierrc.mjs
├── astro.config.mjs
├── package.json
├── README.md
├── tailwind.config.mjs
└── tsconfig.json

About

An opinionated Astro 5 template with built-in support for Tailwind CSS, prettier, and import aliases.

Topics

Resources

Stars

Watchers

Forks