diff --git a/apps/canvas/back/src/github.ts b/apps/canvas/back/src/github.ts
index 7657043..df8eacf 100644
--- a/apps/canvas/back/src/github.ts
+++ b/apps/canvas/back/src/github.ts
@@ -1,34 +1,11 @@
 import axios from "axios";
-import { z } from "zod";
-
-export const GithubRepositorySchema = z.object({
-	id: z.number(),
-	name: z.string(),
-	full_name: z.string(),
-	html_url: z.string(),
-	ssh_url: z.string(),
-});
-
-const DeployKeysSchema = z.array(
-	z.object({
-		id: z.number(),
-		key: z.string(),
-	}),
-);
-
-const WebhookSchema = z.object({
-	id: z.number(),
-	config: z.object({
-		url: z.string().optional(), // url might not always be present
-		content_type: z.string().optional(),
-	}),
-	events: z.array(z.string()),
-	active: z.boolean(),
-});
-
-const ListWebhooksResponseSchema = z.array(WebhookSchema);
-
-export type GithubRepository = z.infer<typeof GithubRepositorySchema>;
+import {
+	GithubRepository,
+	GithubRepositoriesSchema,
+	DeployKeysSchema,
+	ListWebhooksResponseSchema,
+	DeployKeys,
+} from "config";
 
 export class GithubClient {
 	private token: string;
@@ -49,13 +26,13 @@
 		const response = await axios.get("https://api.github.com/user/repos", {
 			headers: this.getHeaders(),
 		});
-		return z.array(GithubRepositorySchema).parse(response.data);
+		return GithubRepositoriesSchema.parse(response.data);
 	}
 
 	async addDeployKey(repoPath: string, key: string) {
 		const sshUrl = repoPath;
 		const repoOwnerAndName = sshUrl.replace("git@github.com:", "").replace(".git", "");
-		let existingKeys: z.infer<typeof DeployKeysSchema> = [];
+		let existingKeys: DeployKeys = [];
 		const response = await axios.get(`https://api.github.com/repos/${repoOwnerAndName}/keys`, {
 			headers: this.getHeaders(),
 		});
diff --git a/apps/canvas/back/src/index.ts b/apps/canvas/back/src/index.ts
index 0ba25b0..82e55fe 100644
--- a/apps/canvas/back/src/index.ts
+++ b/apps/canvas/back/src/index.ts
@@ -12,7 +12,16 @@
 import shell from "shelljs";
 import { RealFileSystem } from "./lib/fs.js";
 import path from "node:path";
-import { Env, generateDodoConfig, ConfigSchema, AppNode, ConfigWithInput, configToGraph, Network } from "config";
+import {
+	Env,
+	generateDodoConfig,
+	ConfigSchema,
+	AppNode,
+	ConfigWithInput,
+	configToGraph,
+	Network,
+	GithubRepository,
+} from "config";
 
 async function generateKey(root: string): Promise<[string, string]> {
 	const privKeyPath = path.join(root, "key");
@@ -325,12 +334,18 @@
 			resp.write(JSON.stringify({ error: "Invalid configuration", issues: config.error.format() }));
 			return;
 		}
+		let repos: GithubRepository[] = [];
+		if (p.githubToken) {
+			const github = new GithubClient(p.githubToken);
+			repos = await github.getRepositories();
+		}
 		const state = req.body.state
 			? JSON.stringify(req.body.state)
 			: JSON.stringify(
 					configToGraph(
 						config.data,
 						getNetworks(resp.locals.username),
+						repos,
 						p.state ? JSON.parse(Buffer.from(p.state).toString("utf8")) : null,
 					),
 				);
diff --git a/apps/canvas/back/src/lib/nodejs.test.ts b/apps/canvas/back/src/lib/nodejs.test.ts
index 5de8423..579cad5 100644
--- a/apps/canvas/back/src/lib/nodejs.test.ts
+++ b/apps/canvas/back/src/lib/nodejs.test.ts
@@ -1,9 +1,7 @@
 import { NodeJSAnalyzer } from "./nodejs.js";
-import { FileSystem, RealFileSystem } from "./fs.js";
+import { FileSystem } from "./fs.js";
 import { Volume, IFs, createFsFromVolume } from "memfs";
 import { test, expect } from "@jest/globals";
-import { expandValue } from "./env.js";
-import shell from "shelljs";
 
 class InMemoryFileSystem implements FileSystem {
 	constructor(private readonly fs: IFs) {}
@@ -19,14 +17,6 @@
 	}
 }
 
-test("canvas", async () => {
-	const fs: FileSystem = new RealFileSystem("/home/gio/code/apps/canvas/back");
-	const analyzer = new NodeJSAnalyzer();
-	expect(analyzer.detect(fs, "/")).toBe(true);
-	const info = await analyzer.analyze(fs, "/");
-	console.log(info);
-});
-
 test("nodejs", async () => {
 	return;
 	const root = "/";
@@ -55,29 +45,3 @@
 	const info = await analyzer.analyze(fs, root);
 	console.log(info);
 });
-
-test("env", () => {
-	console.log(expandValue("${PORT} ${DODO_VOLUME_DB}"));
-	console.log(expandValue("$PORT $DODO_VOLUME_DB"));
-	console.log(expandValue("${UNDEFINED:-${MACHINE}${UNDEFINED:-default}}"));
-});
-
-test("clone", async () => {
-	expect(shell.which("ssh-agent")).toBeTruthy();
-	expect(shell.which("ssh-add")).toBeTruthy();
-	expect(shell.which("git")).toBeTruthy();
-	expect(
-		shell.exec(
-			"GIT_SSH_COMMAND='ssh -i /home/gio/.ssh/key -o IdentitiesOnly=yes' git clone git@github.com:giolekva/dodo-blog.git /tmp/dodo-blog",
-		).code,
-	).toBe(0);
-	const fs: FileSystem = new RealFileSystem("/tmp/dodo-blog");
-	const analyzer = new NodeJSAnalyzer();
-	expect(analyzer.detect(fs, "/")).toBe(true);
-	const info = await analyzer.analyze(fs, "/");
-	console.log(info);
-});
-
-test("keygen", () => {
-	expect(shell.exec(`ssh-keygen -y -t ed25519 -f /tmp/key`).code).toBe(0);
-});
