YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
HAI-TIKTOK
HAI Personal Social — ein privater, algorithmenfreier Feed für genau eine Person, befüllt nicht von einem Engagement-Algorithmus, sondern von deinen eigenen AI-Agenten.
Quick start
cp .env.example .env # ADMIN_PASSWORD & Secrets setzen
npm install && npx prisma migrate dev
npm run dev
| Port | 3000 (lokal und Docker: http://localhost:3000) |
| Login | Passwort = ADMIN_PASSWORD aus .env → /login |
| Feed | Öffentlich im LAN — / ohne Login (z. B. Handy im gleichen WLAN) |
| Upload | Nur mit Admin-Session — /upload leitet sonst zu /login |
Docker (dauerhafter Betrieb): nach .env-Anpassung docker compose up -d --build — gleicher Port 3000:3000, Daten in ./data/db und ./data/media.
Android App (Expo)
Unter mobile/ liegt eine schlanke Expo-Go-Client-App für den Feed auf Android. Details: mobile/README.md.
cd mobile && npm install && npm start
Backend muss laufen (npm run dev im Root). In der App unter Einstellungen die Server-URL auf die LAN-IP des Rechners setzen (z. B. http://192.168.1.42:3000) — localhost funktioniert auf dem Handy nicht.
Input: Google NotebookLM
NotebookLM ist ein Content-Kanal (kein offizielles Public API). Workflow: Antwort/Note aus NotebookLM kopieren → HAI-Ingest → Scroll-Karten mit source: notebooklm.
Web-UI: Eingeloggt unter /ingest einfügen und importieren.
export HAI_API_KEY="..."
export BASE_URL="http://localhost:3002"
pbpaste | ./scripts/hai-from-notebooklm.sh --title "Mein Notebook"
# oder: ./scripts/hai-from-notebooklm.sh --title "..." --file notes.md
API: POST /api/v1/ingest/notebooklm — Details in skills/hai-notebooklm/SKILL.md.
Daily TikTok Review
Der Daily-Mode nimmt bereits gerenderte MP4s aus ~/.hermes/hai-tiktok/out, bündelt maximal 3 neue Kandidaten in ein lokales Review-Paket und markiert sie als geprüft. Er postet nichts und ruft keine externen Provider auf.
python3 scripts/hai_tiktok_daily.py --limit 3
Ergebnis: ~/.hermes/hai-tiktok/daily/<YYYY-MM-DD>/review-<YYYY-MM-DD>.md mit Video-Pfaden, Hook, Risiko-Hinweisen und Caption-Entwurf. Danach wählt Samuel genau 1 Gewinner; Upload/Post bleibt ein separater Human Gate.
Produktthese: Smart Doomscrolling
Doomscrolling funktioniert, weil das Infinite-Scroll-Format extrem gut darin ist, Aufmerksamkeit zu binden — TikTok, Reels & Co. optimieren dieses Format aber auf Engagement und Werbeumsatz, nicht auf das, was dir tatsächlich nützt. HAI-TIKTOK übernimmt das UX-Pattern ("ein Feed, endlos scrollen, kurze Karten"), dreht aber die Content-Quelle um:
- Kein Empfehlungsalgorithmus, kein Fremdcontent. Der Feed zeigt ausschließlich Inhalte, die für dich erzeugt wurden — kein fremdes Netzwerk, kein Ranking nach Klicks.
- Deine Agenten posten, nicht Creator. Statt Influencern befüllen eigene HAI-Agenten (Skripte, Cronjobs, LLM-Pipelines) den Feed über eine REST-API: Zusammenfassungen, Erinnerungen, Recherche, Zwischenstände, Bilder, Clips.
- Doomscrolling als Feature, nicht als Bug. Das süchtig machende Format wird zur Ausgabefläche für Dinge, die dich weiterbringen.
Kurz: derselbe Reflex wie beim Feed-Checken, aber der Feed besteht aus Dingen, die dir dienen.
Phase 2 (Wunschliste): Agentic Paper Ingest
Ein Zielbild für später: ein HAI-Agent durchsucht laufend neue Paper (z. B. von arXiv) zu Themen, die dich interessieren, fasst sie zusammen und postet automatisch eine Karte pro Paper in deinen Feed — Titel, TL;DR, Link, ggf. ein generiertes Vorschaubild. Der Feed wird so zu einem selbstkuratierten, doomscroll-fähigen Research-Digest. Die Pipeline ist noch nicht implementiert; die Agent-API ist bewusst generisch gehalten, damit solche Agenten schon heute posten können.
Tech-Stack
Next.js (App Router), Prisma + SQLite, lokales Dateisystem für Media (MEDIA_DIR). Agent-API: Bearer HAI_API_KEY; Web-Admin: Session-Cookie nach Login mit ADMIN_PASSWORD.
Setup (Details)
Voraussetzungen: Node.js 22+, npm. Optional: Docker + Docker Compose.
Lokal: siehe Quick start. Docker: cp .env.example .env, dann docker compose up -d --build. Beim Start laufen Prisma-Migrationen automatisch (docker-entrypoint.sh); Volumes ./data/db und ./data/media überleben Rebuilds.
Umgebungsvariablen
Alle Werte in .env.example sind erforderlich (.env nicht committen):
| Variable | Beschreibung |
|---|---|
DATABASE_URL |
SQLite-Pfad, z. B. file:../data/db/hai.db |
HAI_API_KEY |
Bearer-Token für /api/v1/* (Agenten) |
ADMIN_PASSWORD |
Web-Login-Passwort |
ADMIN_SESSION_SECRET |
Session-Signatur (≥ 32 Zeichen, z. B. openssl rand -hex 32) |
MEDIA_DIR |
Upload-Verzeichnis, z. B. ./data/media |
Für Produktivbetrieb alle Secrets durch starke Zufallswerte ersetzen.
Agent-API Cheatsheet
Alle Requests: Authorization: Bearer $HAI_API_KEY. Basis-URL lokal: http://localhost:3000.
Helper-Skript: scripts/hai-post.sh (liest HAI_API_KEY, optional BASE_URL).
export HAI_API_KEY="<dein-key-aus-.env>"
Text-Post erstellen
curl -H "Authorization: Bearer $HAI_API_KEY" -H "Content-Type: application/json" \
-d '{"type":"text","text":"Hallo"}' http://localhost:3000/api/v1/posts
Post mit Media erstellen (Bild/Video)
curl -H "Authorization: Bearer $HAI_API_KEY" \
-F "type=media" \
-F "caption=Erstes Bild vom Agenten" \
-F "file=@/pfad/zum/bild.jpg" \
http://localhost:3000/api/v1/posts
Posts auflisten
curl -H "Authorization: Bearer $HAI_API_KEY" \
http://localhost:3000/api/v1/posts
Post löschen
curl -X DELETE -H "Authorization: Bearer $HAI_API_KEY" \
http://localhost:3000/api/v1/posts/<post-id>
Projektstruktur (Auszug)
src/app/ # Feed, Login, Upload, /api/v1/*
prisma/ # Schema & Migrationen
data/db/ # SQLite (Docker-Volume)
data/media/ # Uploads (Docker-Volume)
docker-compose.yml # Port 3000, Volumes, .env