feat(docker): enhance development setup with reactive_resume service and health checks

This commit is contained in:
Amruth Pillai
2026-05-13 15:35:08 +02:00
parent 42fc78dca1
commit 1294d3354a
22 changed files with 301 additions and 189 deletions
+1 -1
View File
@@ -31,7 +31,7 @@
},
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+3 -3
View File
@@ -36,10 +36,10 @@
"ai": "^6.0.180",
"bcrypt": "^6.0.0",
"better-auth": "1.6.11",
"drizzle-orm": "1.0.0-beta.22",
"drizzle-orm": "1.0.0-rc.2",
"drizzle-zod": "1.0.0-beta.14-a36c63d",
"es-toolkit": "^1.46.1",
"ollama-ai-provider-v2": "^3.5.0",
"ollama-ai-provider-v2": "^3.5.1",
"react": "^19.2.6",
"sharp": "^0.34.5",
"ts-pattern": "^5.9.0",
@@ -48,7 +48,7 @@
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@types/bcrypt": "^6.0.0",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+2 -2
View File
@@ -28,7 +28,7 @@
"@tanstack/react-start": "^1.167.65",
"bcrypt": "^6.0.0",
"better-auth": "1.6.11",
"drizzle-orm": "1.0.0-beta.22",
"drizzle-orm": "1.0.0-rc.2",
"jose": "^6.2.3",
"react": "^19.2.6",
"zod": "^4.4.3"
@@ -37,7 +37,7 @@
"@reactive-resume/config": "workspace:*",
"@types/bcrypt": "^6.0.0",
"@types/react": "^19.2.14",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+3 -3
View File
@@ -25,14 +25,14 @@
"@reactive-resume/env": "workspace:*",
"@reactive-resume/schema": "workspace:*",
"@reactive-resume/utils": "workspace:*",
"drizzle-orm": "1.0.0-beta.22",
"drizzle-orm": "1.0.0-rc.2",
"pg": "^8.20.0"
},
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@types/pg": "^8.20.0",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"drizzle-kit": "1.0.0-beta.22",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"drizzle-kit": "1.0.0-rc.2",
"typescript": "^6.0.3"
}
}
+2 -4
View File
@@ -3,11 +3,10 @@ import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
import { env } from "@reactive-resume/env/server";
import { relations } from "./relations";
import * as schema from "./schema";
declare global {
var __pool: Pool | undefined;
var __drizzle: NodePgDatabase<typeof schema> | undefined;
var __drizzle: NodePgDatabase<typeof relations> | undefined;
}
export function getPool() {
@@ -18,8 +17,7 @@ export function getPool() {
}
function makeDrizzleClient() {
const pool = getPool();
return drizzle({ client: pool, schema, relations });
return drizzle({ client: getPool(), relations });
}
export function createDatabase() {
+1 -1
View File
@@ -26,7 +26,7 @@
"@reactive-resume/config": "workspace:*",
"@types/nodemailer": "^8.0.0",
"@types/react": "^19.2.14",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+1 -1
View File
@@ -22,7 +22,7 @@
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@types/node": "^25.7.0",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+1 -1
View File
@@ -19,7 +19,7 @@
},
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+1 -1
View File
@@ -22,7 +22,7 @@
},
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+1 -1
View File
@@ -32,7 +32,7 @@
"@react-pdf/types": "^2.11.1",
"@reactive-resume/config": "workspace:*",
"@types/react": "^19.2.14",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
@@ -0,0 +1,11 @@
import { readFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import { describe, expect, it } from "vitest";
describe("ScizorPage", () => {
it("does not override configured text color with the template muted gray", () => {
const source = readFileSync(fileURLToPath(new URL("./ScizorPage.tsx", import.meta.url)), "utf8");
expect(source).not.toMatch(/color:\s*muted/);
});
});
@@ -110,7 +110,6 @@ const useScizorTemplate = (): ScizorTemplate => {
const background = rgbaStringToHex(metadata.design.colors.background);
const primary = rgbaStringToHex(metadata.design.colors.primary);
const divider = "#D8DCE2";
const muted = "#536174";
const colors: TemplateColorRoles = { foreground, background, primary };
const metrics = getTemplateMetrics(metadata.page);
const bodyText = {
@@ -118,7 +117,7 @@ const useScizorTemplate = (): ScizorTemplate => {
fontSize: metadata.typography.body.fontSize,
fontWeight: metadata.typography.body.fontWeights[0] ?? "400",
lineHeight: metadata.typography.body.lineHeight,
color: muted,
color: foreground,
} satisfies Style;
const baseStyles = StyleSheet.create({
@@ -144,7 +143,7 @@ const useScizorTemplate = (): ScizorTemplate => {
},
div: { rowGap: metrics.gapY(0.125), columnGap: metrics.gapX(1 / 3) },
inline: { flexDirection: "row", alignItems: "center", columnGap: metrics.gapX(1 / 3) },
link: { textDecoration: "none", color: muted },
link: { textDecoration: "none", color: foreground },
small: { fontSize: metadata.typography.body.fontSize * 0.875 },
bold: { fontWeight: metadata.typography.body.fontWeights.at(-1) ?? "700", color: foreground },
richParagraph: { margin: 0, ...bodyText },
@@ -194,7 +193,7 @@ const useScizorTemplate = (): ScizorTemplate => {
borderBottomWidth: 2,
borderBottomColor: divider,
},
headerHeadline: { color: muted },
headerHeadline: { color: foreground },
headerContactRow: {
flexDirection: "row",
flexWrap: "wrap",
@@ -205,7 +204,7 @@ const useScizorTemplate = (): ScizorTemplate => {
flexDirection: "row",
alignItems: "center",
columnGap: metrics.gapX(1 / 6),
color: muted,
color: foreground,
},
picture: {
width: picture.size,
+1 -1
View File
@@ -22,7 +22,7 @@
},
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}
+2 -2
View File
@@ -12,8 +12,8 @@
"@reactive-resume/config": "workspace:*",
"@reactive-resume/env": "workspace:*",
"@types/pg": "^8.20.0",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"drizzle-orm": "1.0.0-beta.22",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"drizzle-orm": "1.0.0-rc.2",
"pg": "^8.20.0",
"tsx": "^4.21.0"
}
+2 -2
View File
@@ -29,7 +29,7 @@
"next-themes": "^0.4.6",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"react-resizable-panels": "^4.11.0",
"react-resizable-panels": "^4.11.1",
"shadcn": "^4.7.0",
"sonner": "^2.0.7",
"tw-animate-css": "^1.4.0"
@@ -41,7 +41,7 @@
"@types/js-cookie": "^3.0.6",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"postcss": "^8.5.14",
"tailwindcss": "^4.3.0",
"typescript": "^6.0.3"
+2 -2
View File
@@ -35,7 +35,7 @@
"@uiw/color-convert": "^2.10.1",
"clsx": "^2.1.1",
"docx": "^9.6.1",
"dompurify": "^3.4.2",
"dompurify": "^3.4.3",
"fast-json-patch": "^3.1.1",
"tailwind-merge": "^3.6.0",
"unique-names-generator": "^4.7.1",
@@ -45,7 +45,7 @@
"devDependencies": {
"@reactive-resume/config": "workspace:*",
"@types/node": "^25.7.0",
"@typescript/native-preview": "7.0.0-dev.20260512.1",
"@typescript/native-preview": "7.0.0-dev.20260513.1",
"typescript": "^6.0.3"
}
}