diff --git a/client/apps/landing-page/package.json b/client/apps/landing-page/package.json
index c4b7f127..97cb625b 100644
--- a/client/apps/landing-page/package.json
+++ b/client/apps/landing-page/package.json
@@ -43,6 +43,7 @@
"dependencies": {
"@astrojs/check": "^0.9.4",
"@astrojs/mdx": "^4.3.1",
+ "@hatchgrid/logger": "workspace:*",
"@astrojs/rss": "^4.0.12",
"@astrojs/sitemap": "^3.4.1",
"@astrojs/vue": "^5.1.0",
diff --git a/client/apps/landing-page/src/components/cta-email/CTAEmail.vue b/client/apps/landing-page/src/components/cta-email/CTAEmail.vue
index bda1e06b..966bfe03 100644
--- a/client/apps/landing-page/src/components/cta-email/CTAEmail.vue
+++ b/client/apps/landing-page/src/components/cta-email/CTAEmail.vue
@@ -1,4 +1,5 @@
diff --git a/client/apps/landing-page/src/i18n/ui.ts b/client/apps/landing-page/src/i18n/ui.ts
index 98f9a47e..c8fc4848 100644
--- a/client/apps/landing-page/src/i18n/ui.ts
+++ b/client/apps/landing-page/src/i18n/ui.ts
@@ -1,6 +1,8 @@
+import { LogManager } from "@hatchgrid/logger";
import type { Lang, UIDict, UIMultilingual } from "./types";
// Use import.meta.glob to get all translation files
+const logger = LogManager.getLogger("landing-page:i18n-ui");
const translationModules = import.meta.glob<
Record>
>("./translations/*.ts", { eager: true });
@@ -38,8 +40,8 @@ export const ui: UIMultilingual = Object.values(translationModules).reduce(
// Enhanced debug log to check what was loaded
if (process.env.NODE_ENV === "development") {
- console.log(
- "㊙︎ Loaded translations:",
+ logger.debug(
+ "Loaded translations",
Object.keys(ui)
.map((lang) => `${lang}: ${Object.keys(ui[lang as Lang]).length} keys`)
.join(", "),
diff --git a/client/apps/landing-page/src/models/category/category.service.ts b/client/apps/landing-page/src/models/category/category.service.ts
index 301142ed..9599b802 100644
--- a/client/apps/landing-page/src/models/category/category.service.ts
+++ b/client/apps/landing-page/src/models/category/category.service.ts
@@ -4,11 +4,14 @@
*/
import { getCollection, getEntry } from "astro:content";
+import { LogManager } from "@hatchgrid/logger";
import { parseEntityId } from "@/utils/collection.entity";
import type { CategoryCriteria } from "./category.criteria";
import { toCategories, toCategory } from "./category.mapper";
import type Category from "./category.model";
+const logger = LogManager.getLogger("landing-page:category-service");
+
/**
* Retrieves categories from the content collection with filtering options
* @async
@@ -70,7 +73,7 @@ export const getCategoryById = async (
const entry = await getEntry("categories", categoryId);
return entry ? toCategory(entry) : undefined;
} catch (error) {
- console.error(`Failed to fetch category ${categoryId}:`, error);
+ logger.error(`Failed to fetch category ${categoryId}`, { error });
throw new Error(`Failed to fetch category ${categoryId}`);
}
};
diff --git a/client/apps/landing-page/src/models/tag/tag.service.ts b/client/apps/landing-page/src/models/tag/tag.service.ts
index e064263d..a6895a7b 100644
--- a/client/apps/landing-page/src/models/tag/tag.service.ts
+++ b/client/apps/landing-page/src/models/tag/tag.service.ts
@@ -4,11 +4,13 @@
*/
import { getCollection, getEntry } from "astro:content";
+import { LogManager } from "@hatchgrid/logger";
import { parseEntityId } from "@/utils/collection.entity";
import type { TagCriteria } from "./tag.criteria";
import { toTag, toTags } from "./tag.mapper";
import type Tag from "./tag.model";
+const logger = LogManager.getLogger("landing-page:tag-service");
const tagsCache: Record = {};
/**
@@ -58,7 +60,7 @@ export async function getTags(criteria?: TagCriteria): Promise {
tagsCache[cacheKey] = mappedTags;
return mappedTags;
} catch (error) {
- console.error("Failed to fetch tags:", error);
+ logger.error("Failed to fetch tags", { error });
throw new Error("Failed to fetch tags");
}
}
@@ -74,7 +76,7 @@ export async function getTagById(id: string): Promise {
const entry = await getEntry("tags", id);
return entry ? toTag(entry) : undefined;
} catch (error) {
- console.error(`Failed to fetch tag with id ${id}:`, error);
+ logger.error(`Failed to fetch tag with id ${id}`, { error });
throw new Error(`Failed to fetch tag with id ${id}`);
}
}
diff --git a/client/apps/landing-page/src/utils/test/mockEmailApi.ts b/client/apps/landing-page/src/utils/test/mockEmailApi.ts
index ba1347f7..3da3da87 100644
--- a/client/apps/landing-page/src/utils/test/mockEmailApi.ts
+++ b/client/apps/landing-page/src/utils/test/mockEmailApi.ts
@@ -3,6 +3,8 @@
* This simulates the backend API responses for email submissions
*/
+import { LogManager } from "@hatchgrid/logger";
+
export interface MockApiConfig {
delay?: number;
successRate?: number;
@@ -94,6 +96,7 @@ export class MockEmailApi {
}
// Global mock setup for fetch in development
+const logger = LogManager.getLogger("landing-page:mock-email-api");
export function setupMockApi(config?: MockApiConfig) {
if (typeof window !== "undefined" && process.env.NODE_ENV === "development") {
const mockApi = new MockEmailApi(config);
@@ -132,7 +135,7 @@ export function setupMockApi(config?: MockApiConfig) {
return originalFetch(url, options);
};
- console.log("🚀 Mock Email API enabled for development");
+ logger.info("Mock Email API enabled for development");
// return mockApi // This return is not strictly necessary if not used elsewhere after setup
}
}
diff --git a/client/apps/web/package.json b/client/apps/web/package.json
index 1287412a..ba8331d0 100644
--- a/client/apps/web/package.json
+++ b/client/apps/web/package.json
@@ -15,6 +15,7 @@
"test:coverage": "vitest run --coverage"
},
"dependencies": {
+ "@hatchgrid/logger": "workspace:*",
"@hatchgrid/utilities": "workspace:*",
"@internationalized/date": "^3.8.2",
"@tailwindcss/vite": "^4.1.11",
diff --git a/client/apps/web/src/App.vue b/client/apps/web/src/App.vue
index 798d673d..1bf7fbf3 100644
--- a/client/apps/web/src/App.vue
+++ b/client/apps/web/src/App.vue
@@ -6,12 +6,14 @@
diff --git a/client/apps/web/src/account/register/register.vue b/client/apps/web/src/account/register/register.vue
index 7ad72906..ea7b1269 100644
--- a/client/apps/web/src/account/register/register.vue
+++ b/client/apps/web/src/account/register/register.vue
@@ -102,6 +102,7 @@