feat: scaffold nuxt app

This commit is contained in:
2026-06-10 07:49:40 +00:00
parent 42d01f0673
commit 935ff5b757
6 changed files with 2164 additions and 0 deletions

20
.env.example Normal file
View File

@@ -0,0 +1,20 @@
# --- Server (API) ---
# Shared Postgres. Internal Docker host within Coolify network, or SSH-tunnel locally.
DATABASE_URL=postgres://mika:CHANGEME@l8kogcggsc80sgcgk8kswww4:5432/claudedo
# Zitadel OIDC
ZITADEL_ISSUER=https://auth.kuns.dev
# Comma-separated accepted audiences: web client id, desktop client id, project id
ZITADEL_AUDIENCE=
# Comma-separated owner Zitadel user ids (the single owner's `sub`)
ALLOWED_USER_IDS=
# CORS: the web client origin (the app's own origin)
WEB_ORIGIN=https://claudedo.kuns.dev
# --- Web client (public, exposed to browser) ---
NUXT_PUBLIC_ZITADEL_ISSUER=https://auth.kuns.dev
NUXT_PUBLIC_ZITADEL_CLIENT_ID=
# --- Provisioning script only (not needed at runtime) ---
# Zitadel Management API PAT (from ~/.secrets/coolify-tokens.env: ZITADEL_SERVICE_TOKEN)
ZITADEL_SERVICE_TOKEN=

3
app/app.vue Normal file
View File

@@ -0,0 +1,3 @@
<template>
<NuxtPage />
</template>

2085
bun.lock Normal file

File diff suppressed because it is too large Load Diff

27
nuxt.config.ts Normal file
View File

@@ -0,0 +1,27 @@
export default defineNuxtConfig({
compatibilityDate: "2026-06-10",
ssr: false,
devtools: { enabled: false },
// Single-user private inbox: no SSR/SEO needs; SPA so @kuns/zitadel-auth runs in-browser.
runtimeConfig: {
// server-only
databaseUrl: process.env.DATABASE_URL,
zitadelIssuer: process.env.ZITADEL_ISSUER || "https://auth.kuns.dev",
zitadelAudience: process.env.ZITADEL_AUDIENCE || "",
allowedUserIds: process.env.ALLOWED_USER_IDS || "",
webOrigin: process.env.WEB_ORIGIN || "",
public: {
zitadelIssuer: process.env.NUXT_PUBLIC_ZITADEL_ISSUER || "https://auth.kuns.dev",
zitadelClientId: process.env.NUXT_PUBLIC_ZITADEL_CLIENT_ID || "",
},
},
app: {
head: {
title: "ClaudeDo Inbox",
meta: [
{ name: "viewport", content: "width=device-width, initial-scale=1, viewport-fit=cover" },
{ name: "color-scheme", content: "light dark" },
],
},
},
});

26
package.json Normal file
View File

@@ -0,0 +1,26 @@
{
"name": "claudedo-online",
"private": true,
"type": "module",
"scripts": {
"dev": "nuxt dev",
"build": "nuxt build",
"preview": "node .output/server/index.mjs",
"migrate": "tsx server/db/migrate.ts",
"test": "vitest run",
"provision:zitadel": "tsx scripts/provision-zitadel.ts"
},
"dependencies": {
"@kuns/zitadel-auth": "file:../kuns-zitadel/js",
"jose": "^5.9.6",
"nuxt": "^4.4.8",
"oidc-client-ts": "^3.5.0",
"postgres": "^3.4.8",
"vue": "^3.5.0",
"vue-router": "^4.4.0"
},
"devDependencies": {
"tsx": "^4.21.0",
"vitest": "^2.1.0"
}
}

3
tsconfig.json Normal file
View File

@@ -0,0 +1,3 @@
{
"extends": "./.nuxt/tsconfig.json"
}