diff --git a/admin/package-lock.json b/admin/package-lock.json
index bd038a4..5bc6b6c 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -12,6 +12,7 @@
"@prisma/client": "^7.7.0",
"@prisma/config": "^7.7.0",
"@types/bcryptjs": "^2.4.6",
+ "afrohub": "file:..",
"bcryptjs": "^3.0.3",
"dotenv": "^17.4.1",
"lucide-react": "^1.8.0",
@@ -35,6 +36,42 @@
"typescript": "^5"
}
},
+ "..": {
+ "name": "afrohub",
+ "version": "0.0.0",
+ "dependencies": {
+ "@google/genai": "^1.30.0",
+ "@prisma/adapter-pg": "^7.6.0",
+ "@prisma/client": "^7.6.0",
+ "@prisma/config": "^7.6.0",
+ "@tailwindcss/postcss": "^4.2.2",
+ "@tailwindcss/typography": "^0.5.19",
+ "@types/bcryptjs": "^2.4.6",
+ "@types/node": "^22.14.0",
+ "@types/pg": "^8.16.0",
+ "autoprefixer": "^10.4.27",
+ "bcryptjs": "^3.0.3",
+ "dotenv": "^17.3.1",
+ "lucide-react": "^0.554.0",
+ "next": "^16.1.6",
+ "pg": "^8.19.0",
+ "postcss": "^8.5.10",
+ "prisma": "^7.6.0",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0",
+ "react-hot-toast": "^2.6.0",
+ "recharts": "^3.8.1",
+ "tailwindcss": "^4.2.2",
+ "tsx": "^4.21.0",
+ "typescript": "~5.8.2"
+ },
+ "devDependencies": {
+ "concurrently": "^9.2.1"
+ },
+ "engines": {
+ "node": "24.x"
+ }
+ },
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
@@ -2599,6 +2636,10 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/afrohub": {
+ "resolved": "..",
+ "link": true
+ },
"node_modules/ajv": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
diff --git a/admin/package.json b/admin/package.json
index be231bb..c88fc02 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -13,6 +13,7 @@
"@prisma/client": "^7.7.0",
"@prisma/config": "^7.7.0",
"@types/bcryptjs": "^2.4.6",
+ "afrohub": "file:..",
"bcryptjs": "^3.0.3",
"dotenv": "^17.4.1",
"lucide-react": "^1.8.0",
@@ -35,4 +36,4 @@
"tailwindcss": "^4",
"typescript": "^5"
}
-}
\ No newline at end of file
+}
diff --git a/admin/src/app/metrics/page.tsx b/admin/src/app/metrics/page.tsx
index d09e1d0..cc8f1e6 100644
--- a/admin/src/app/metrics/page.tsx
+++ b/admin/src/app/metrics/page.tsx
@@ -136,6 +136,7 @@ async function getMetrics(range: string = 'week', from?: string, to?: string) {
const recentIPs = await Promise.all(
recentUniqueIPs.map(async (item) => {
+ if (!item.ip || !item._max.createdAt) return null;
return await prisma.analyticsEvent.findFirst({
where: {
ip: item.ip,
diff --git a/app/register/page.tsx b/app/register/page.tsx
index e92b7ad..c5cb771 100644
--- a/app/register/page.tsx
+++ b/app/register/page.tsx
@@ -4,6 +4,7 @@ import React, { useState } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { User, Mail, Lock, ArrowRight, CheckCircle, AlertCircle } from 'lucide-react';
+import { useUser } from '../../components/UserProvider';
const RegisterPage = () => {
const { settings } = useUser();
diff --git a/next-env.d.ts b/next-env.d.ts
index c4b7818..9edff1c 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/dev/types/routes.d.ts";
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.