How to use Events Logger
Events Logger
Run a private event dashboard, publish your first event and back up the local SQLite data.
Free to read. You can explore the guide before buying the app.
On this page
Events Logger is a self-hosted dashboard for events such as signups, orders and deploys. The included interface still says Events Dashboard in some places. It is the same application.
Install and run locally
After buying, connect GitHub in Polar and accept the invitation. Clone the customer repository. You need Node.js 18 or later and npm.
From the repository root, install dependencies, create the data directory and start the server:
npm install
mkdir -p data
npm run dev
Open http://localhost:4321. The application creates data/events.db and its tables on first startup.
Keep this installation local or behind an authenticated private gateway. The shipped dashboard has no login, displays the global API key on its home page, and has unauthenticated reading and dashboard mutation routes. The ingestion API key does not protect the whole application. Do not expose it directly to the public internet.
Create your first event
Create a project named Garden Shop from the home page. Open that project’s Playground to publish a test event through its form.
Use orders as the category, First order received as the title and Order **#1001** is ready to pack as the description. Publish it, then open the project’s feed to see the result. New categories are created as events arrive.
The Playground shows request examples for your installation, so it is a useful place to check the project ID and payload before integrating a backend.
Read and organize the feed
The feed refreshes while you work. Search titles, descriptions and tags to find an event, filter by category, or star events to find them in the favorites filter.
Use Charts to see event frequency by category. Use Insights for values you want to display as cards, such as open orders or deploys today. Posting an insight with an existing title updates that card within the project.
Descriptions support bold text and links. An event’s optional URL makes its title a link to a related order, deployment or other resource.
Send events from your backend
Copy your installation’s API key into your server’s secret configuration as EVENTS_API_KEY. Store the Garden Shop project ID as EVENTS_PROJECT_ID. This example runs in a Node.js backend with built-in fetch:
const response = await fetch('http://localhost:4321/api/events', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${process.env.EVENTS_API_KEY}`,
},
body: JSON.stringify({
project: process.env.EVENTS_PROJECT_ID,
category: 'orders',
title: 'Order packed',
tags: { order: '1001' },
}),
})
if (!response.ok) throw new Error(`Event request failed: ${response.status}`)
Change the URL if the dashboard is on a private server. Keep the API key in backend code, outside browser bundles. The required event fields are project, category and title; optional fields include description, icon, tags, url, user_id and notify.
The repository also includes node cli/index.js push and insight commands. Run node cli/index.js --help to inspect their options. These commands take the key as an argument, so avoid using them in logs or shared terminal recordings that could reveal it.
Back up and try sample data
Export projects, categories, events and insights to JSON:
node cli/index.js export --file garden-shop-backup.json
This command reads SQLite directly and does not need the server running. Run it from the repository root, or provide --db for another database location. For a full backup including application settings and the API key, stop the server and copy its data/ directory to protected storage.
The repository includes generated e-commerce, SaaS, DevOps and content demo datasets. Use a disposable installation when trying them. load replaces existing data by default; export first. --merge requests merging instead. Restart the server after loading.
Hosting and troubleshooting
A hosted copy needs the Astro Node server, HTTPS, persistent storage for data/, and an authentication gateway protecting every dashboard and API route. Build with npm run build; the standalone Node entry is dist/server/entry.mjs.
When SQLite cannot open the database, check that data/ exists and is writable. A 401 from an integration means you should check the global API key. For events going to the wrong project, compare the request’s project ID with the Playground.
See Events Logger → · $20 including tax, with full source code.