AutoCua
Automate with computer-use agent (ComputerUse / CUA) for macOS, Windows, Linux, Browser, iOS & Android. It sees the screen, clicks, types, browses and writes the code too. One agent, every computer.
Fragen an deine Quellen – mit Belegen, die zur Textstelle springen.
Translation pending
ProductivityTypeScript · PLpgSQLGitHub @EldridgeJrOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
NotebookLM-Klon: Fragen an eigene Quellen, Antworten mit klickbaren Belegen. Next.js, Supabase, OpenAI.
Translation pending
Loading the full README. The saved excerpt is shown below.
Faden ist eine Web-App nach dem Vorbild von NotebookLM. Du lädst Quellen hoch (PDF, Webseite, Text) und stellst Fragen. Faden antwortet nur aus diesen Quellen. Jede Aussage hat einen Beleg wie [1]. Ein Klick auf den Beleg zeigt die markierte Stelle in der Quelle. Live: · Demo-Zugang mit fertigem Notebook „Bauhaus“ auf Anfrage (es gibt keine offene Registrierung).Read the full README ↗
Faden ist eine Web-App nach dem Vorbild von NotebookLM. Du lädst Quellen hoch (PDF, Webseite, Text) und stellst Fragen.
Faden antwortet nur aus diesen Quellen. Jede Aussage hat einen Beleg wie [1]. Ein Klick auf den Beleg zeigt die markierte Stelle in der Quelle.
Live: https://faden-one.vercel.app · Demo-Zugang mit fertigem Notebook „Bauhaus“ auf Anfrage (es gibt keine offene Registrierung).
[1], [2] sind klickbar. Die Beleg-Ansicht zeigt den Text der Quelle mit der markierten Stelle, bei PDFs auf der richtigen Seite.flowchart LR
B[Browser] -->|Seiten, Server Actions, /api/chat| N[Next.js auf Vercel<br/>Region fra1]
B -->|PDF direkt per signierter URL| S[(Supabase Storage)]
N -->|SQL mit RLS| P[(Supabase Postgres<br/>+ pgvector)]
N --> S
N -->|Embeddings, Chat, Skripte| O[OpenAI]
N -->|Sprache| E[ElevenLabs]
N -->|Rate Limit| U[(Upstash Redis)]
Alles mit Daten liegt in Frankfurt: Vercel-Region fra1, Supabase eu-central-1.
after(): Text extrahieren (unpdf für PDF, Readability für Webseiten) → in Abschnitte teilen → Embeddings in Bündeln von 100 berechnen → in chunks speichern, mit Seite und Position.cl100k_base, demselben Tokenizer wie text-embedding-3-small.sources. Die Oberfläche fragt ihn regelmäßig ab./api/chat)text-embedding-3-small, 1.536 Dimensionen).match_chunks): Vektorsuche (Kosinus, <=>) und Volltextsuche (websearch_to_tsquery('german', …)), je Top 20. Beide Listen führt Reciprocal Rank Fusion (k = 60) zu den besten 8 zusammen.<quelle nr="1"> bis <quelle nr="8">. Der Text der Quellen ist Daten, keine Anweisung.Abschnitte aus allen ausgewählten Quellen wählen (höchstens 16, gleichmäßig verteilt) → Skript mit Belegen schreiben (20 bis 24 Redebeiträge) → jeden Redebeitrag einzeln vertonen (ElevenLabs eleven_v3, 3 Aufrufe gleichzeitig) → die MP3-Frames zu einer Datei zusammenfügen → in Storage speichern. Dauer: ca. 40–60 s für 3–4 Minuten Audio.
| Entscheidung | Warum | Alternative |
|---|---|---|
| Upload direkt in Storage | Vercel begrenzt den Request auf ca. 4,5 MB. PDFs dürfen 20 MB groß sein. | Upload über die API-Route, mit kleinem Größenlimit |
Hintergrund mit after() | Einfach, keine weitere Infrastruktur. Reicht für Einlesen (Sekunden) und Podcast (ca. 1 Min.). | Echte Warteschlange (siehe „Nächste Schritte“) |
| Suche in einer SQL-Funktion | Eine Abfrage statt zwei. RRF direkt in Postgres. Läuft als security invoker, also gilt RLS. | Zwei Abfragen und RRF in TypeScript |
| Volltextsuche mit ODER | websearch_to_tsquery verbindet alle Wörter mit UND. Bei echten Fragen („Wann ist …“) fand sie deshalb fast nie etwas. | Nur Vektorsuche |
| Belege serverseitig prüfen | Das Modell kann [9] schreiben, obwohl es nur 8 Abschnitte gab. Solche Nummern fallen weg. | Dem Modell vertrauen |
| Ein Modell an einer Stelle | src/lib/ai/models.ts. Chat mit gpt-6-luna (Reasoning „low“, schnelle erste Wörter), Studio mit „medium“. | Modellnamen verteilt im Code |
| ElevenLabs für die Stimmen | Deutsche Muttersprachler-Stimmen und Audio-Tags wie [laughs]. | OpenAI TTS (amerikanischer Akzent im Deutschen) |
| Echte APIs im E2E-Test | Mocks würden Suche, Streaming und Belegprüfung überspringen. Ein Lauf kostet ca. 0,001 $. | Gemockte API-Antworten |
Mehr Details, Fehler und echte Messwerte stehen in NOTIZEN.md.
(select auth.uid()). Die Rolle anon hat gar keine Rechte auf die Tabellen.src/lib/supabase/admin.ts mit server-only). Er steht nie im Client und nie im Repo.<quelle>-Blöcken. Ein </quelle> im Text wird unschädlich gemacht. Die Regeln sagen dem Modell, dass Quellen Daten sind.dangerouslySetInnerHTML.| Was | Womit | Umfang |
|---|---|---|
| Kernlogik | Vitest (src/**/*.test.ts) | 193 Tests in 20 Dateien: Abschnitte, Belege, Prompt, PDF-Erkennung, Lesetext, URL-Schutz, Podcast-Skript, MP3-Zusammenfügen, Karteikarten, Status |
| Ganze App im Browser | Playwright (e2e/) | 6 Tests, siehe unten |
| Datenbank | SQL-Skripte (supabase/checks/) | RLS mit zwei Testnutzern, hybride Suche. Beide enden mit rollback. |
Die Playwright-Tests laufen gegen den lokalen Server mit echten Diensten:
/api/chat antwortet ohne Login mit 401.npm test # Vitest, unter 1 s
npm run e2e # Playwright, ca. 30 s
npm run e2e braucht einen Testnutzer in Supabase und dessen Zugangsdaten in .env.local (siehe .env.example). Die Test-PDFs entstehen im Speicher (src/test/make-pdf.ts). Jeder Test räumt seine Daten selbst wieder auf.
Voraussetzung: Node 24 (siehe .nvmrc) und ein Supabase-Projekt mit den Migrationen aus supabase/migrations/.
nvm use
npm install
cp .env.example .env.local # Werte eintragen
npm run dev
Dann http://localhost:3000 öffnen.
| Variable | Wofür |
|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Supabase im Browser und auf dem Server |
SUPABASE_SECRET_KEY | Nur Server: Hintergrund-Jobs und E2E-Prüfungen |
OPENAI_API_KEY | Embeddings, Chat, Podcast-Skript, Karteikarten |
ELEVENLABS_API_KEY | Stimmen für den Podcast |
UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN | Rate Limits |
TEST_USER_EMAIL, TEST_USER_PASSWORD | Testnutzer für Playwright, nie ein echtes Konto |
| Befehl | Was er tut |
|---|---|
npm run dev | Entwicklungsserver starten |
npm run build | Produktions-Build erstellen |
npm run lint | ESLint ausführen |
npm run typecheck | Routen-Typen erzeugen und TypeScript prüfen |
npm test | Unit-Tests mit Vitest |
npm run e2e | End-to-End-Tests mit Playwright (braucht den Testnutzer und SUPABASE_SECRET_KEY in .env.local, startet den Dev-Server bei Bedarf selbst) |
npm run db:types | TypeScript-Typen aus dem Datenbankschema neu erzeugen (braucht supabase login). Achtung: Schlägt der Befehl fehl, ist die Typdatei trotzdem leer. Dann git checkout src/lib/supabase/database.types.ts |
src/
app/
api/chat/ Chat: Suche, Prompt, Streaming, Belege
api/sources/[id]/text/ Text einer Quelle für die Beleg-Ansicht
login/ Anmeldung
notebooks/ Übersicht, Notebook mit drei Spalten, Studio-Seiten
lib/
ai/ Modelle (eine Stelle) und Quellen-Blöcke für Prompts
chat/ Suche, Prompt, Belege, Nachrichten
ingest/ PDF, Webseite, Abschnitte, Embeddings, Verarbeitung
studio/ Podcast, Karteikarten, MP3
supabase/ Clients für Browser, Server und Admin, Typen
e2e/ Playwright-Tests
supabase/migrations/ Das komplette Schema als SQL
supabase/checks/ SQL-Prüfungen für RLS und Suche
docs/erklaerungen/ Eine Erklärseite pro Bauschritt
docs/screenshots/ Bilder für dieses README
after() für Einlesen und Studio, mit Wiederholung bei Fehlern.docs/erklaerungen/: eine interaktive Erklärseite zu jedem Bauschritt (im Browser öffnen).NOTIZEN.md: Fehler, falsche Annahmen, Entscheidungen und echte Messwerte während der Entwicklung.