diff --git a/.env.test b/.env.test
index 78ac09f8..ed2cd47f 100644
--- a/.env.test
+++ b/.env.test
@@ -33,3 +33,20 @@ NEXT_PUBLIC_AXELAR_RPC_URL=
 
 # Minimum voting period
 NEXT_PUBLIC_MINIMUM_VOTING_PERIOD=3m
+
+
+# Production (US)
+NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
+NEXT_PUBLIC_POSTHOG_ASSETS_HOST=https://us-assets.i.posthog.com
+
+# Production (EU)
+#NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com
+#NEXT_PUBLIC_POSTHOG_ASSETS_HOST=https://eu-assets.i.posthog.com
+
+# Self-hosted
+#NEXT_PUBLIC_POSTHOG_HOST=https://posthog.yourcompany.com
+NEXT_PUBLIC_POSTHOG_ASSETS_HOST=https://posthog-assets.yourcompany.com
+
+# Local development/testing
+#NEXT_PUBLIC_POSTHOG_HOST=http://localhost:8000
+#NEXT_PUBLIC_POSTHOG_ASSETS_HOST=http://localhost:8001
\ No newline at end of file
diff --git a/bun.lock b/bun.lock
index 8a3d7875..58cae512 100644
--- a/bun.lock
+++ b/bun.lock
@@ -50,6 +50,8 @@
         "octokit": "4.1.2",
         "parse-duration": "2.1.3",
         "postcss": "8.5.3",
+        "posthog-js": "^1.249.5",
+        "posthog-node": "^4.18.0",
         "pretty-format": "29.7.0",
         "qrcode": "1.5.4",
         "react": "19.1.0",
@@ -1639,6 +1641,8 @@
 
     "copyfiles": ["copyfiles@2.4.1", "", { "dependencies": { "glob": "^7.0.5", "minimatch": "^3.0.3", "mkdirp": "^1.0.4", "noms": "0.0.0", "through2": "^2.0.1", "untildify": "^4.0.0", "yargs": "^16.1.0" }, "bin": { "copyfiles": "copyfiles", "copyup": "copyfiles" } }, "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg=="],
 
+    "core-js": ["core-js@3.43.0", "", {}, "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA=="],
+
     "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="],
 
     "cosmiconfig": ["cosmiconfig@6.0.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.1.0", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.7.2" } }, "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg=="],
@@ -2555,6 +2559,10 @@
 
     "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="],
 
+    "posthog-js": ["posthog-js@1.249.5", "", { "dependencies": { "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.4" }, "peerDependencies": { "@rrweb/types": "2.0.0-alpha.17", "rrweb-snapshot": "2.0.0-alpha.17" }, "optionalPeers": ["@rrweb/types", "rrweb-snapshot"] }, "sha512-ynB2bcSZz91xF36Aun2OgAvJ37WPjp8hrUHplZJTdJKhaX7j63CePR+Ved6NVO4YqwhCOVqepxwGGJXG4ROBeA=="],
+
+    "posthog-node": ["posthog-node@4.18.0", "", { "dependencies": { "axios": "^1.8.2" } }, "sha512-XROs1h+DNatgKh/AlIlCtDxWzwrKdYDb2mOs58n4yN8BkGN9ewqeQwG5ApS4/IzwCb7HPttUkOVulkYatd2PIw=="],
+
     "potpack": ["potpack@1.0.2", "", {}, "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ=="],
 
     "preact": ["preact@10.26.4", "", {}, "sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w=="],
@@ -3019,6 +3027,8 @@
 
     "wagmi": ["wagmi@2.14.13", "", { "dependencies": { "@wagmi/connectors": "5.7.9", "@wagmi/core": "2.16.5", "use-sync-external-store": "1.4.0" }, "peerDependencies": { "@tanstack/react-query": ">=5.0.0", "react": ">=18", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["typescript"] }, "sha512-CX+NpyTczVIST5DqLtasKZ3VrhImKQZ9XM9aDUVgOM46MRN/CykgGGAJfuIfpQ80LZ91GCY+JuitGknHUz7MNQ=="],
 
+    "web-vitals": ["web-vitals@4.2.4", "", {}, "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw=="],
+
     "web3-eth-abi": ["web3-eth-abi@1.3.6", "", { "dependencies": { "@ethersproject/abi": "5.0.7", "underscore": "1.12.1", "web3-utils": "1.3.6" } }, "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ=="],
 
     "web3-utils": ["web3-utils@1.3.6", "", { "dependencies": { "bn.js": "^4.11.9", "eth-lib": "0.2.8", "ethereum-bloom-filters": "^1.0.6", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randombytes": "^2.1.0", "underscore": "1.12.1", "utf8": "3.0.0" } }, "sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg=="],
@@ -3645,6 +3655,8 @@
 
     "parse-asn1/hash-base": ["hash-base@3.0.5", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" } }, "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg=="],
 
+    "posthog-js/fflate": ["fflate@0.4.8", "", {}, "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="],
+
     "prop-types/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
 
     "psl/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
diff --git a/config/env.ts b/config/env.ts
index a978b922..c625bfc2 100644
--- a/config/env.ts
+++ b/config/env.ts
@@ -55,6 +55,10 @@ const env = {
    * By default, it is set to 30 minutes.
    */
   minimumVotingPeriod: parseDuration(process.env.NEXT_PUBLIC_MINIMUM_VOTING_PERIOD, 1800),
+
+  // PostHog
+  posthogKey: process.env.NEXT_PUBLIC_POSTHOG_KEY ?? '',
+  posthogApiHost: process.env.NEXT_PUBLIC_POSTHOG_API_HOST ?? '',
 };
 
 export default env;
diff --git a/hooks/__tests__/usePostHog.test.tsx b/hooks/__tests__/usePostHog.test.tsx
new file mode 100644
index 00000000..d7abc666
--- /dev/null
+++ b/hooks/__tests__/usePostHog.test.tsx
@@ -0,0 +1,524 @@
+import { cleanup, waitFor } from '@testing-library/react';
+import { afterEach, beforeEach, describe, expect, jest, test } from 'bun:test';
+import React from 'react';
+
+import { clearAllMocks, mockModule, mockRouter } from '@/tests';
+import { renderWithChainProvider } from '@/tests/render';
+
+import { useManifestPostHog } from '../usePostHog';
+
+// Mock the config/env module
+const mockEnv = {
+  chain: 'manifesttestnet',
+  chainId: 'manifest-ledger-testnet',
+};
+
+function TestComponent({ mockReturnValues }: { mockReturnValues?: any[] }) {
+  const { posthog, trackTransaction, isReady } = useManifestPostHog();
+
+  return (
+    
+      
{isReady ? 'ready' : 'not ready'}
+      
+      
+      
{posthog ? 'available' : 'not available'}
+    
+          
{isReady ? 'ready' : 'not ready'}
+          
{posthog ? 'available' : 'not available'}
+        
+          
{isReady ? 'ready' : 'not ready'}
+          
{posthog ? 'available' : 'not available'}
+        
+      
{isSigning ? 'signing' : 'not signing'}
+      
+      
+      
+      
+      
+      
+      
+      
+