diff --git a/bun.lock b/bun.lock index ea8d6b4..f405aee 100644 --- a/bun.lock +++ b/bun.lock @@ -5,6 +5,7 @@ "": { "name": "fullstack-starter", "dependencies": { + "@t3-oss/env-core": "^0.13.10", "@tanstack/react-query": "^5.90.18", "@tanstack/react-query-devtools": "^5.91.2", "@tanstack/react-router": "^1.150.0", @@ -388,6 +389,8 @@ "@solid-primitives/utils": ["@solid-primitives/utils@6.3.2", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ=="], + "@t3-oss/env-core": ["@t3-oss/env-core@0.13.10", "", { "peerDependencies": { "arktype": "^2.1.0", "typescript": ">=5.0.0", "valibot": "^1.0.0-beta.7 || ^1.0.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["arktype", "typescript", "valibot", "zod"] }, "sha512-NNFfdlJ+HmPHkLi2HKy7nwuat9SIYOxei9K10lO2YlcSObDILY7mHZNSHsieIM3A0/5OOzw/P/b+yLvPdaG52g=="], + "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="], "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="], diff --git a/opencode.jsonc b/opencode.jsonc new file mode 100644 index 0000000..3724905 --- /dev/null +++ b/opencode.jsonc @@ -0,0 +1,13 @@ +{ + "$schema": "https://opencode.ai/config.json", + "mcp": { + "shadcn": { + "type": "local", + "command": ["bunx", "--bun", "shadcn", "mcp"] + }, + "tanstack": { + "type": "remote", + "url": "https://tanstack.com/api/mcp" + } + } +} diff --git a/package.json b/package.json index 85dfb9e..30b31e6 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "typecheck": "tsc -b" }, "dependencies": { + "@t3-oss/env-core": "^0.13.10", "@tanstack/react-query": "^5.90.18", "@tanstack/react-query-devtools": "^5.91.2", "@tanstack/react-router": "^1.150.0", diff --git a/src/env.ts b/src/env.ts index 5354b99..2465614 100644 --- a/src/env.ts +++ b/src/env.ts @@ -1,7 +1,14 @@ +import { createEnv } from '@t3-oss/env-core' import { z } from 'zod' -const envSchema = z.object({ - DATABASE_URL: z.url(), +export const env = createEnv({ + server: { + DATABASE_URL: z.url(), + }, + clientPrefix: 'VITE_', + client: { + VITE_APP_TITLE: z.string().min(1).optional(), + }, + runtimeEnv: import.meta.env, + emptyStringAsUndefined: true, }) - -export const env = envSchema.parse(process.env) diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..e69de29