Locallytics

LocallyticsData

Server-side function to fetch your analytics.

Fetch analytics from your database.

Basic Usage

app/dashboard/page.tsx
import { LocallyticsData } from "locallytics";

export default async function Dashboard() {
  const data = await LocallyticsData(process.env.DATABASE_URL!, "last7d");

  return (
    <div>
      <p>{data.pageviews} pageviews</p>
      <p>{data.uniqueVisitors} visitors</p>
    </div>
  );
}

Parameters

LocallyticsData(databaseUrl, range, format?)
ParameterTypeDefault
databaseUrlstring
range"last24h" | "last7d" | "last30d"
format"json" | "csv""json"

Return Value

JSON format returns:

{
  pageviews: number;           // Total pageviews
  uniqueVisitors: number;      // Unique sessions
  topPages: Array<{            // Top 10 pages
    page: string;
    count: number;
  }>;
  dailyStats: Array<{          // Daily breakdown
    date: string;
    views: number;
  }>;
}

CSV format returns a formatted string.

Examples

Full dashboard:

app/dashboard/page.tsx
import { LocallyticsData } from "locallytics";

export default async function Dashboard() {
  const data = await LocallyticsData(process.env.DATABASE_URL!, "last7d");

  return (
    <div>
      <h1>Analytics</h1>
      <p>{data.pageviews} pageviews</p>
      <p>{data.uniqueVisitors} visitors</p>

      <h2>Top Pages</h2>
      <ul>
        {data.topPages.map((page) => (
          <li key={page.page}>{page.page}: {page.count}</li>
        ))}
      </ul>
    </div>
  );
}

CSV export:

app/api/export/route.ts
import { LocallyticsData } from "locallytics";

export async function GET() {
  const csv = await LocallyticsData(process.env.DATABASE_URL!, "last30d", "csv");

  return new Response(csv, {
    headers: {
      "Content-Type": "text/csv",
      "Content-Disposition": "attachment; filename=analytics.csv",
    },
  });
}

On this page