CorePulse is a distributed web monitoring system that tracks Core Web Vitals (LCP, CLS, FID) over time. It uses a Chrome Extension to trigger audits and view data, while a Cloud Worker runs headless Lighthouse audits in the background 24/7.
- 🌐 Distributed Architecture: Hybrid setup with a local Chrome Extension and a Cloud-based Worker.
- 📊 Real-time Visualization: View historical performance trends directly in your browser toolbar using Chart.js.
- 🤖 Automated Audits: A Dockerized worker runs Puppeteer & Lighthouse every hour to track performance changes.
- ☁️ Cloud Ready: Fully configured for deployment on Railway (Node.js + PostgreSQL + Docker).
- 🔒 Secure: Uses environment variables and SSL connections for production databases.
- Frontend: React (Vite), Chart.js, Chrome Extension API (Manifest V3)
- Backend: Node.js, Express, PostgreSQL (pg)
- Worker: Puppeteer, Google Lighthouse, Docker
- DevOps: Docker Compose, Railway
core-pulse/
├── extension/ # Chrome Extension (React + Vite)
├── server/ # REST API (Express + PostgreSQL)
└── worker/ # Background Job (Puppeteer + Lighthouse)
Follow these steps to run the entire system on your local machine.
- Node.js (v16+)
- Docker & Docker Compose
- Git
git clone https://github.com/TouseefQ/core-pulse.git
cd core-pulse
We use Docker to spin up a local PostgreSQL instance.
docker-compose up -d
The server handles requests from the extension and saves data to the DB.
cd server
npm install
node index.js
Server runs on: http://localhost:5000
The worker runs Lighthouse audits.
# Open a new terminal
cd worker
npm install
node index.js
The worker will run an immediate audit and then sleep for 60 minutes.
- Navigate to extension/ and build the project:
cd extension
npm install
npm run build
-
Open Chrome and go to
chrome://extensions. -
Enable Developer Mode (top right).
-
Click Load Unpacked and select the
extension/distfolder.
This project is optimized for deployment on Railway.
-
Create a new Project on Railway from your GitHub repo.
-
Add a PostgreSQL database service.
-
Link the Database to the Server using the DATABASE_URL variable.
-
Set the Server Root Directory to /server.
-
Set the Start Command to npm install && node index.js.
-
Add a second service from the same GitHub repo.
-
Set the Root Directory to /worker.
-
Add the DATABASE_URL variable (use the Public URL of your Railway DB).
-
Railway will automatically detect the Dockerfile and build the worker with Chrome installed.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
