npm install @trailbase/sdk// app/lib/trailbase.server.ts
import { TrailbaseClient } from '@trailbase/sdk';
export const trailbase = new TrailbaseClient({
apiKey: process.env.TRAILBASE_API_KEY!,
region: 'us-east-1',
});In Remix, use the .server.ts suffix to ensure the Trailbase client and API key are never sent to the browser. Track events in actions (mutations) and loaders (reads) as needed.
// app/routes/api.documents.tsx
import { trailbase } from '~/lib/trailbase.server';
export async function action({ request }: ActionFunctionArgs) {
const session = await getSession(request);
const formData = await request.formData();
const doc = await createDocument(formData);
await trailbase.track('document.create', {
actor: session.userId,
target: doc.id,
metadata: { title: doc.title },
});
return redirect(`/documents/${doc.id}`);
}// app/routes/audit.tsx
export async function loader({ request }: LoaderFunctionArgs) {
const url = new URL(request.url);
const events = await trailbase.search({
actor: url.searchParams.get('userId') ?? undefined,
});
return json({ events });
}Join the waitlist for early access. Five-minute setup, no infrastructure changes.
Get Early Access