Skip to content

UTDallasEPICS/nuxt-template

Repository files navigation

Nuxt Template (Better Auth + Drizzle + SQLite)

A modern, production-ready Nuxt 4 template featuring a robust authentication system, ORM integration, and a clean UI foundation.

Features

  • Nuxt 4: The latest and greatest from the Nuxt team.
  • Better Auth: Comprehensive authentication with Email OTP support.
  • Drizzle: Type-safe ORM for interacting with the database.
  • SQLite: Lightweight, zero-configuration database, ideal for development and small-to-medium projects.
  • Nuxt UI v3: Beautiful, accessible, and customizable UI components built with Tailwind CSS.
  • Nodemailer: Pre-configured for sending verification emails via Gmail.

Stack

Getting Started

Want to use the template?

See the Template Usage docs. Otherwise, feel free to keep moving with the setup steps!

1. Clone the repository

git clone <your-repo-url>
cd nuxt-template

2. Install dependencies

This project uses pnpm, but you can use npm as well.

pnpm install

3. Setup Environment Variables

Copy the example environment file and fill in your details.

cp .env.example .env

Open .env and configure the following:

  • DATABASE_URL: The SQLite connection string (default: file:./dev.db).
  • BETTER_AUTH_SECRET: A secure random string for encryption. You can generate one using openssl rand -hex 32.
  • BETTER_AUTH_URL: The base URL of your application (default: http://localhost:3000).
  • EMAIL_USER: Your Gmail address (for OTP delivery).
  • EMAIL_PASS: Your Gmail App Password. How to generate an App Password.

4. Database Setup

Initialize your SQLite database and run migrations. You will need to run this command anytime you need to change or create a database.

pnpm db:migrate

During development, if there are any database changes since the last migration, you will need to generate a new migration.

pnpm db:generate

5. Start the development server

pnpm dev

Your application will be available at http://localhost:3000.

6. How to Login

Login requires an email address that already exists in the database.

  • Option A: Use the seeded user Go to /auth and log in with email@example.com.
  • Option B: Use your own email Update server/db/seed.ts with your email, then run pnpm db:seed to re-seed.

To get your OTP:

  • Check your configured email inbox.
  • Or, run pnpm db:studio to open Drizzle Studio and look in the verification table.

Project Structure

  • app/: Frontend code (pages, components, assets, composables).
  • server/: Backend code (API routes, authentication logic, database utilities).
  • server/db/: Database schema and seed scripts.
  • drizzle/: Generated migrations.
  • public/: Static assets.

GitHub Actions Configuration

Important: You must update the GitHub Actions workflow to point to your own repository and AWS configuration.

Update GitHub Actions

Add the following Secrets and Variables to your repository:

  1. ACTIONS_ROLE_ARN (Secret):

    arn:aws:iam::YOUR-AWS-ACCOUNT-ID:role/YOUR-ROLE-NAME
  2. REPOSITORY (Variable):

    your-repository-name

Optionally, you may update the AWS region.

  1. AWS Region (line 26 in .github/workflows/main.yml):
    aws-region: your-aws-region

Required AWS Setup

Before the GitHub Actions will work, you need:

  1. AWS ECR Repository: Create a repository in Amazon ECR
  2. IAM Role: Create a role with GitHub Actions OIDC provider and ECR permissions
  3. GitHub Secrets: Ensure your repository has the necessary AWS permissions

License

MIT

Releases

Packages

Contributors

Languages