Repo: sax3l/c0py (created on Gitea, code pushed) Initial scaffolding includes: - apps/api: Fastify API server (typecheck, build, test pass) - apps/web: Next.js UI (build passes) - packages/c0py-core: Crawler, registry assembler, analyzer (6 tests pass) - packages/config: Zod-validated env loader - packages/types: Shared TypeScript types CI/CD: .gitea/workflows/ci.yml + deploy.yml Dockerfile for Coolify deployment mise.toml (toolchain contract) lefthook.yml, renovate.json docs/architecture/OVERVIEW.md, docs/PLATFORM.md Platform setup required (see docs/PLATFORM.md): 1. Coolify app provision (c0py on server5/6) 2. Postgres database (dedicated, not shared) 3. Infisical secrets (DATABASE_URL, CL0UD, ZITADEL, AUD0, ST0RE, INF0, N0D) 4. DNS c0py.siax.io A-record 5. Zitadel OIDC project (Simon-decision) Status: dev (repo live, code pushable, platform infra pending)
20 lines
699 B
TypeScript
20 lines
699 B
TypeScript
import { z } from "zod";
|
|
|
|
export const envSchema = z.object({
|
|
PORT: z.coerce.number().default(3000),
|
|
NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
|
|
CL0UD_BASE_URL: z.string().url(),
|
|
ZITADEL_ISSUER: z.string().url(),
|
|
ZITADEL_AUDIENCE: z.string(),
|
|
DATABASE_URL: z.string(),
|
|
AUD0_BASE_URL: z.string().url().optional(),
|
|
AUD0_API_KEY: z.string().optional(),
|
|
ST0RE_BASE_URL: z.string().url().optional(),
|
|
INF0_BASE_URL: z.string().url().optional(),
|
|
N0D_BASE_URL: z.string().url().optional(),
|
|
CRAWL_TIMEOUT_MS: z.coerce.number().default(30000),
|
|
MAX_REGISTRY_PAGES: z.coerce.number().default(1000),
|
|
});
|
|
|
|
export type Env = z.infer<typeof envSchema>;
|