Adds Coolify one-click template support — 320+ vetted apps deployable
in one MCP call (Twenty, n8n, Supabase, Ghost, etc).
- apps.create gains a 4th pathway: { template: "<slug>", ... }. Auto-
rewrites the Coolify-assigned sslip URL to the workspace FQDN and
applies user envs before starting.
- apps.templates.list / apps.templates.search expose the catalog so
agents can discover slugs. Catalog is fetched from upstream GitHub
and cached in-memory for 1h.
- lib/coolify.ts: + setServiceDomains, updateService, listService-
Templates, searchServiceTemplates. Reuses existing createService.
- next.config.ts: externalize ssh2 + cpu-features from turbopack so
`next build` can complete (native .node binaries can't be ESM-bundled).
Made-with: Cursor
30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import type { NextConfig } from "next";
|
|
import path from "path";
|
|
import { fileURLToPath } from "url";
|
|
|
|
// This app lives in vibn-frontend; a lockfile under $HOME can make Turbopack pick the wrong root
|
|
// and hydrate with a mismatched client bundle (e.g. different JustineNav markup).
|
|
const turbopackRoot = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
// Google OAuth on localhost: NextAuth must build the same callback URL Google expects.
|
|
// If NEXTAUTH_URL is unset in dev, default it (set explicitly if you use 127.0.0.1 or another port).
|
|
if (process.env.NODE_ENV === "development" && !process.env.NEXTAUTH_URL?.trim()) {
|
|
process.env.NEXTAUTH_URL = "http://localhost:3000";
|
|
}
|
|
|
|
const nextConfig: NextConfig = {
|
|
turbopack: {
|
|
root: turbopackRoot,
|
|
},
|
|
output: "standalone",
|
|
// ssh2 ships native .node binaries; turbopack can't bundle them
|
|
// ("non-ecmascript placeable asset"). Externalize so they're loaded
|
|
// at runtime via Node's require, the same way @prisma/client works.
|
|
serverExternalPackages: ["@prisma/client", "prisma", "ssh2", "cpu-features"],
|
|
typescript: {
|
|
ignoreBuildErrors: true,
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|