Initial implementation of Bluetooth toy control app
CI / Static checks (push) Successful in 1m27s
CI / Build and push image (push) Skipped

Next.js app with a browser-side buttplug/buttplug-wasm control layer
(server never touches real-time device commands), SQLite storage via
Drizzle, single-secret auth, recordings/replay with device remapping,
a usage stats dashboard, Docker deployment, and Gitea CI.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W8WkFF5ppURBAB918593Eb
This commit is contained in:
2026-08-25 07:51:38 +02:00
co-authored by Claude Sonnet 5
commit 1119c8eea0
112 changed files with 15522 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { DevicesTable } from "@/components/devices/DevicesTable";
import { listDevices } from "@/lib/db/queries/devices";
export const dynamic = "force-dynamic";
export default async function DevicesPage() {
const devices = await listDevices();
return (
<div className="flex flex-col gap-6">
<div>
<h1 className="font-display text-2xl font-semibold">Devices</h1>
<p className="text-sm text-muted-foreground">Devices seen across past sessions. Give them friendlier names.</p>
</div>
<Card className="bp-glass">
<CardHeader>
<CardTitle className="text-base">Known devices</CardTitle>
</CardHeader>
<CardContent>
<DevicesTable devices={devices} />
</CardContent>
</Card>
</div>
);
}