Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
killianpieyns authored Oct 13, 2024
0 parents commit d598a1b
Show file tree
Hide file tree
Showing 63 changed files with 12,928 additions and 0 deletions.
14 changes: 14 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
NUXT_APP_NAME=Example
NUXT_APP_URL=http://localhost:3000

NUXT_MAIL_KEY=
NUXT_MAIL_FROM=[email protected]

NUXT_OAUTH_GITHUB_CLIENT_ID=
NUXT_OAUTH_GITHUB_CLIENT_SECRET=

NUXT_OAUTH_TWITCH_CLIENT_ID=
NUXT_OAUTH_TWITCH_CLIENT_SECRET=
NUXT_OAUTH_TWITCH_REDIRECT_URL=http://localhost

NUXT_SESSION_PASSWORD=
28 changes: 28 additions & 0 deletions .github/workflows/autofix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: autofix.ci # needed to securely identify the workflow

on:
pull_request:
push:
branches: [main]

permissions:
contents: read

jobs:
autofix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
- run: corepack enable
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4
with:
node-version: 20.5
cache: pnpm

- name: Install dependencies
run: pnpm install

- name: Lint & Fix
run: pnpm run lint:fix

- uses: autofix-ci/action@ff86a557419858bb967097bfc916833f5647fa8c
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist

# Node dependencies
node_modules

# Logs
logs
*.log

# Misc
.DS_Store
.fleet
.idea

# Local env files
.env
.env.*
!.env.example
108 changes: 108 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
{
"prettier.enable": false,
"editor.formatOnSave": false,
// Auto fix
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never"
},
// Silent the stylistic rules in you IDE, but still auto fix them
"eslint.rules.customizations": [
{
"rule": "style/*",
"severity": "off",
"fixable": true
},
{
"rule": "format/*",
"severity": "off",
"fixable": true
},
{
"rule": "*-indent",
"severity": "off",
"fixable": true
},
{
"rule": "*-spacing",
"severity": "off",
"fixable": true
},
{
"rule": "*-spaces",
"severity": "off",
"fixable": true
},
{
"rule": "*-order",
"severity": "off",
"fixable": true
},
{
"rule": "*-dangle",
"severity": "off",
"fixable": true
},
{
"rule": "*-newline",
"severity": "off",
"fixable": true
},
{
"rule": "*quotes",
"severity": "off",
"fixable": true
},
{
"rule": "*semi",
"severity": "off",
"fixable": true
}
],
// Enable eslint for all supported languages
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
"html",
"markdown",
"json",
"jsonc",
"yaml",
"toml",
"xml",
"gql",
"graphql",
"astro",
"svelte",
"css",
"less",
"scss",
"pcss",
"postcss"
],
"files.associations": {
"*.css": "tailwindcss"
},
"editor.quickSuggestions": {
"strings": true
},
"tailwindCSS.experimental.classRegex": [
[
"ui:\\s*{([^)]*)\\s*}",
"[\"'`]([^\"'`]*).*?[\"'`]"
],
[
"/\\*\\s?ui\\s?\\*/\\s*{([^;]*)}",
":\\s*[\"'`]([^\"'`]*).*?[\"'`]"
]
],
"tailwindCSS.classAttributes": [
"class",
"className",
"ngClass",
"ui"
]
}
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2024 Estéban Soubiran <https://github.com/barbapapazes>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
55 changes: 55 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Gavarnie

_[Read the announcement](https://soubiran.dev/posts/introducing-gavarnie-launch-your-saas-with-nuxt-and-assurance)_

Preconfigured and ready-to-use features designed to help you kickstart your full-stack NuxtHub project **quickly**.

> [!NOTE]
> My aim with Gavarnie is not just to create another starter kit, but to contribute to the initiative of advancing Nuxt and NuxtHub.
> Therefore, Gavarnie serves as a starting point, rather than an end, and it's up to us to foster its development. Please join me in enhancing it.
[⛰️ Gavarnie in action](https://gavarnie.barbapapazes.com)

Crafted with [Nuxt UI Pro](https://ui.nuxt.com/pro), [NuxtHub](https://hub.nuxt.com), [Nuxt Auth Utils](https://github.com/atinux/nuxt-auth-utils), and [Nuxt Security](https://nuxt.com/modules/security).

[![Deploy to NuxtHub](https://hub.nuxt.com/button.svg)](https://hub.nuxt.com/new?template=gavarnie)

## Features

- 🎨 **Nuxt UI**: Design stunning and responsive user interfaces swiftly with Nuxt UI
- 💻 **NuxtHub**: Access an extensive array of full-stack capabilities with NuxtHub
- 🔑 **Nuxt Auth Utils**: Simplified social authentication using Nuxt Auth Utils, seamlessly integrated with NuxtHub
- 🚪 **Login & Signup**: Comes with built-in login and signup pages
- 🧑 **Profile**: Ready-to-use profile page, with email modification and account removal options.

## Setup

Ensure to install the dependencies:

```bash
pnpm install
```

Next, set up a `.env` file based on the `.env.example` template. Modify the values as necessary.

## Development Server

Launch the development server at `http://localhost:3000`:

```bash
pnpm run dev
```

## Production

This application is intended for deployment on [Cloudflare](https://cloudflare.com). You can effortlessly utilize [NuxtHub Admin](https://hub.nuxt.com/docs/getting-started/deploy#nuxthub-admin) for a smooth deployment process or use the CLI:

```bash
npx nuxthub deploy
```

You will also need a [Nuxt UI Pro License](https://ui.nuxt.com/pro) to build the application for production.

## License

[MIT License](./LICENSE)
46 changes: 46 additions & 0 deletions app/app.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
export default defineAppConfig({
ui: {
primary: 'green',
gray: 'stone',
},
app: {
logo: '/favicon.ico',
},
footer: {
notice: 'A Starter Template by Estéban "Barbapapazes"',
smallLinks: [
{
label: 'Privacy Policy',
to: '/privacy',
},
{
label: 'Terms of Service',
to: '/terms',
},
{
label: 'Contact',
to: 'mailto:[email protected]',
},
],
},
socials: [
{
title: 'GitHub',
icon: 'i-simple-icons-github',
to: 'https://github.com/barbapapazes/gavarnie',
target: '_blank',
},
{
title: 'X',
icon: 'i-simple-icons-x',
to: 'https://x.soubiran.dev',
target: '_blank',
},
{
title: 'LinkedIn',
icon: 'i-simple-icons-linkedin',
to: 'https://linkedin.soubiran.dev',
target: '_blank',
},
],
})
17 changes: 17 additions & 0 deletions app/app.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<script lang="ts" setup>
useHead({
titleTemplate: title => title ? `${title} - Gavarnie` : 'Gavarnie',
})
</script>

<template>
<div>
<NuxtRouteAnnouncer />

<NuxtLayout>
<NuxtPage />
</NuxtLayout>

<UNotifications />
</div>
</template>
22 changes: 22 additions & 0 deletions app/components/AppAvatar.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<script lang="ts" setup>
const props = defineProps<{
src: string | null
}>()
const src = computed(() => {
if (!props.src) {
return
}
if (props.src.startsWith('http') || props.src.startsWith('data')) {
return props.src
}
// Prefix the image path with the images folder
return `images/${props.src}`
})
</script>

<template>
<UAvatar :src />
</template>
30 changes: 30 additions & 0 deletions app/components/AppFooter.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<script lang="ts" setup>
const title = useRuntimeConfig().app.name
const appConfig = useAppConfig()
const notice = appConfig.footer.notice
const smallLinks = appConfig.footer.smallLinks
const socials = appConfig.socials
</script>

<template>
<UFooter
:links="smallLinks"
:ui="{ bottom: { left: 'text-sm text-gray-600 dark:text-gray-300' } }"
>
<template #left>
{{ title }} - {{ notice }}
</template>

<template #right>
<UButton
v-for="social in socials"
:key="social.title"
square
color="gray"
variant="ghost"
v-bind="social"
/>
</template>
</UFooter>
</template>
Loading

0 comments on commit d598a1b

Please sign in to comment.