🎉 Initial Commit

This commit is contained in:
2025-09-18 23:50:44 +08:00
commit 773cc220e0
15 changed files with 2681 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@@ -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

5
.prettierrc Normal file
View File

@@ -0,0 +1,5 @@
{
"trailingComma": "none",
"semi": false,
"singleQuote": false
}

75
README.md Normal file
View File

@@ -0,0 +1,75 @@
# Nuxt Minimal Starter
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
## Setup
Make sure to install dependencies:
```bash
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
```
## Production
Build the application for production:
```bash
# npm
npm run build
# pnpm
pnpm build
# yarn
yarn build
# bun
bun run build
```
Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm preview
# yarn
yarn preview
# bun
bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.

10
app/app.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<nuxt-layout>
<nuxt-page />
</nuxt-layout>
</template>
<script lang="ts">
import "@fontsource-variable/nunito"
import "@mdi/font/css/materialdesignicons.css"
</script>

View File

@@ -0,0 +1,22 @@
import { useDark, useToggle } from "@vueuse/core"
// composables/useCustomTheme.ts
export function useCustomTheme(): {
isDark: WritableComputedRef<boolean, boolean>
toggle: (value?: boolean | undefined) => boolean
} {
const { $vuetify } = useNuxtApp()
const isDark = useDark({
valueDark: "dark",
valueLight: "light",
initialValue: "light",
onChanged: (dark: boolean) => {
$vuetify.theme.global.name.value = dark ? "dark" : "light"
}
})
const toggle = useToggle(isDark)
return { isDark, toggle }
}

41
app/layouts/default.vue Normal file
View File

@@ -0,0 +1,41 @@
<template>
<v-app :theme="isDark ? 'dark' : 'light'">
<v-app-bar flat>
<v-container class="mx-auto d-flex align-center justify-center">
<v-btn
v-for="link in links"
:key="link.title"
:text="link.title"
:to="link.href"
:prepend-icon="link.icon"
variant="text"
/>
<v-spacer />
<v-responsive max-width="160">
<v-avatar class="me-4" color="grey-darken-1" size="32" />
</v-responsive>
</v-container>
</v-app-bar>
<v-main>
<slot />
</v-main>
</v-app>
</template>
<script lang="ts" setup>
import { useCustomTheme } from "~/composables/useCustomTheme"
import type { NavLink } from "~/types/navlink"
const { isDark } = useCustomTheme()
const links: NavLink[] = [
{
title: "Explore",
href: "/",
icon: "mdi-compass"
}
]
</script>

5
app/pages/index.vue Normal file
View File

@@ -0,0 +1,5 @@
<template>
<v-container>
<h1>Welcome!</h1>
</v-container>
</template>

5
app/types/navlink.ts Normal file
View File

@@ -0,0 +1,5 @@
export interface NavLink {
title: string
href: string
icon: string
}

2400
bun.lock Normal file

File diff suppressed because it is too large Load Diff

11
eslint.config.mjs Normal file
View File

@@ -0,0 +1,11 @@
// @ts-check
import withNuxt from './.nuxt/eslint.config.mjs'
export default withNuxt(
// Your custom configs here
{
rules: {
'vue/multi-word-component-names': 'off'
}
}
)

16
nuxt.config.ts Normal file
View File

@@ -0,0 +1,16 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: "2025-07-15",
devtools: { enabled: true },
modules: [
"@nuxt/image",
"@nuxt/eslint",
"@nuxtjs/tailwindcss",
"@pinia/nuxt",
"vuetify-nuxt-module",
"@nuxtjs/i18n"
],
features: {
inlineStyles: false
}
})

35
package.json Normal file
View File

@@ -0,0 +1,35 @@
{
"name": "nuxt-app",
"type": "module",
"private": true,
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"dependencies": {
"@date-io/luxon": "^3.2.0",
"@fingerprintjs/fingerprintjs": "^4.6.2",
"@fontsource-variable/nunito": "^5.2.7",
"@nuxt/eslint": "1.9.0",
"@nuxt/image": "1.11.0",
"@nuxtjs/i18n": "10.1.0",
"@nuxtjs/tailwindcss": "6.14.0",
"@pinia/nuxt": "0.11.2",
"@vueuse/core": "^13.9.0",
"cfturnstile-vue3": "^2.0.0",
"eslint": "^9.0.0",
"luxon": "^3.7.2",
"marked": "^16.3.0",
"nuxt": "^4.1.2",
"pinia": "^3.0.3",
"vue": "^3.5.21",
"vue-router": "^4.5.1",
"vuetify-nuxt-module": "0.18.7"
},
"devDependencies": {
"@mdi/font": "^7.4.47"
}
}

2
public/robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-Agent: *
Disallow:

18
tsconfig.json Normal file
View File

@@ -0,0 +1,18 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"files": [],
"references": [
{
"path": "./.nuxt/tsconfig.app.json"
},
{
"path": "./.nuxt/tsconfig.server.json"
},
{
"path": "./.nuxt/tsconfig.shared.json"
},
{
"path": "./.nuxt/tsconfig.node.json"
}
]
}

12
vuetify.config.ts Normal file
View File

@@ -0,0 +1,12 @@
import { defineVuetifyConfiguration } from "vuetify-nuxt-module/custom-configuration";
import { md3 } from "vuetify/blueprints";
export default defineVuetifyConfiguration({
blueprint: md3,
icons: {
defaultSet: 'mdi'
},
date: {
adapter: 'luxon'
}
});