# Facebook Post Tracker

Eine Chrome/Firefox-Extension mit Docker-Backend und Single-Page-Webinterface zum Verwalten und Abhaken von Facebook-Beiträgen über mehrere Browser-Profile hinweg.

## Features

- ✅ **Browser-Extension**: Fügt jedem Facebook-Beitrag Tracking-Funktionalität hinzu
- 📊 **Multi-Profile-Support**: Verwalte 5 verschiedene Browser-Profile
- 🌐 **Web-Interface**: Übersicht über alle zu bearbeitenden Beiträge
- 🔄 **Auto-Check**: Beiträge werden automatisch beim Öffnen abgehakt
- 🐳 **Docker-Setup**: Einfaches Backend-Deployment

## Systemarchitektur

```
┌─────────────────┐
│  Browser        │
│  Extension      │◄─────┐
└────────┬────────┘      │
         │               │
         ▼               │
┌─────────────────┐      │
│  Docker Backend │      │
│  (Node.js API)  │      │
│  + SQLite DB    │      │
└────────┬────────┘      │
         │               │
         ▼               │
┌─────────────────┐      │
│  Web Interface  │──────┘
└─────────────────┘
```

## Installation

### 1. Backend starten (Docker)

```bash
# In das Projektverzeichnis wechseln
cd /mnt/c/fb

# Docker Container bauen und starten
docker-compose up -d

# Logs ansehen (optional)
docker-compose logs -f
```

**Login-Schutz aktivieren:** Setze Benutzername/Passwort in `docker-compose.yml` via `AUTH_USERNAME` und `AUTH_PASSWORD`. Beispiel (bereits eingetragen):
```
  environment:
    - AUTH_USERNAME=admin
    - AUTH_PASSWORD=changeme
```
Denke daran, eigene Werte zu hinterlegen.

Das Backend läuft nun auf `http://localhost:3000`
Das Web-Interface ist erreichbar unter `http://localhost:8080`

### 2. Browser-Extension installieren

#### Chrome:
1. Öffne `chrome://extensions/`
2. Aktiviere "Entwicklermodus" (oben rechts)
3. Klicke auf "Entpackte Erweiterung laden"
4. Wähle den Ordner `/mnt/c/fb/extension`

#### Firefox:
1. Öffne `about:debugging#/runtime/this-firefox`
2. Klicke auf "Temporäres Add-on laden"
3. Wähle die Datei `/mnt/c/fb/extension/manifest.json`

### 3. Extension konfigurieren

1. Klicke auf das Extension-Icon 📋 in der Browser-Toolbar
2. Wähle dein aktuelles Profil (1-5) aus
3. Klicke auf "Speichern"

## Nutzung

### In der Browser-Extension (auf Facebook):

1. **Beitrag hinzufügen**: Bei jedem Facebook-Beitrag erscheint automatisch ein Tracking-UI
   - Gib die Anzahl ein (1-5), wie viele Profile den Beitrag abhaken sollen
   - Klicke auf "Hinzufügen"
   - Der Beitrag wird automatisch für das aktuelle Profil abgehakt

2. **Beitrag abhaken**: Bei bereits getrackten Beiträgen
   - Siehst du den Status: `X/Y Profile ✓/✗`
   - Klicke auf "Abhaken", wenn noch nicht für dein Profil erledigt

### Im Web-Interface (SPA):

Öffne `http://localhost:8080` und nutze die Navigation oben, um zwischen den Views zu wechseln. Die SPA-Views hängen am Query-Parameter `view`:

- `?view=posts` (Standard): Offene/alle Beiträge
- `?view=dashboard`: Kennzahlen & Statistiken
- `?view=settings`: Einstellungen/Schwellwerte
- `?view=bookmarks`: Bookmark-Suche (nicht täglich)
- `?view=automation`: Request-Automationen (HTTP/Email/Flows)
- `?view=daily-bookmarks`: Daily Bookmarks (tägliche Liste mit Platzhaltern)

Direktlinks wie `automation.html` oder `daily-bookmarks.html` leiten nur noch auf die passenden SPA-Views um.

### Daily Bookmarks (SPA-View)

- View: `http://localhost:8080/?view=daily-bookmarks`
- Lege Links mit dynamischen Platzhaltern an (z. B. `{{day}}`, `{{date-1}}`, `{{counter:123}}`)
- Markiere Bookmarks einmal pro Tag als erledigt; Status landet in SQLite
- Links werden pro gewähltem Tag aufgelöst, z. B. `https://www.test.de/tag-{{day}}/`

### Automationen (SPA-View)

- View: `http://localhost:8080/?view=automation`
- HTTP-/Email-/Flow-Automationen mit Platzhaltern, Intervalen, Jitter
- Echtzeit-Updates via SSE (`/api/events`)

## API-Endpunkte

Das Backend stellt folgende REST-API bereit:

- `GET /api/posts` - Alle Beiträge abrufen
- `GET /api/posts/by-url?url=...` - Beitrag über URL abrufen
- `POST /api/posts` - Neuen Beitrag erstellen
- `POST /api/posts/:id/check` - Beitrag für Profil abhaken
- `POST /api/check-by-url` - Beitrag über URL abhaken
- `DELETE /api/posts/:id` - Beitrag löschen

## Datenbankstruktur

```sql
posts:
  - id (TEXT, PRIMARY KEY)
  - url (TEXT, UNIQUE)
  - title (TEXT)
  - target_count (INTEGER)
  - created_at (DATETIME)

checks:
  - id (INTEGER, PRIMARY KEY)
  - post_id (TEXT, FOREIGN KEY)
  - profile_number (INTEGER)
  - checked_at (DATETIME)
  - UNIQUE(post_id, profile_number)
```

## Docker-Befehle

```bash
# Container starten
docker-compose up -d

# Container stoppen
docker-compose down

# Logs ansehen
docker-compose logs -f

# Container neu bauen
docker-compose build

# Datenbank zurücksetzen (ACHTUNG: Löscht alle Daten!)
docker-compose down -v
```

## Entwicklung

### Backend lokal entwickeln (ohne Docker):

```bash
cd backend
npm install
npm run dev
```

### Extension während Entwicklung neu laden:

- **Chrome**: Gehe zu `chrome://extensions/` und klicke auf das Reload-Symbol
- **Firefox**: Gehe zu `about:debugging` und klicke auf "Neu laden"

## Agenten-Workflow fuer UI-Verbesserungen

Fuer iterative Verbesserungen der Weboberflaeche stehen zwei Agenten bereit:

- `gui-developer`: Implementiert kleine, testbare UI-Verbesserungen in `web/*`
- `ui-critic`: Prueft jeden Schritt auf UX-, Accessibility- und Regressionsrisiken

Details zum Ablauf: `docs/ui-iteration-loop.md`  
Agenten-Definitionen: `.claude/agents/gui-developer.md`, `.claude/agents/ui-critic.md`

## Troubleshooting

### Backend nicht erreichbar

- Prüfe, ob Docker läuft: `docker ps`
- Prüfe die Logs: `docker-compose logs backend`
- Stelle sicher, dass Port 3000 nicht bereits belegt ist

### Extension funktioniert nicht

- Öffne die Browser-Konsole (F12) und prüfe auf Fehler
- Stelle sicher, dass das Backend läuft
- Lade die Extension neu
- Prüfe, ob du auf Facebook.com bist

### CORS-Fehler

- Das Backend hat CORS aktiviert
- Stelle sicher, dass du `http://localhost:3000` verwendest (nicht `127.0.0.1`)

### Icons fehlen in Extension

- Die Extension verwendet Emoji-Icons als Fallback
- Für richtige Icons kannst du PNG-Dateien in den Größen 16x16, 48x48, 128x128 erstellen und in `extension/icons/` ablegen

## Technologie-Stack

- **Backend**: Node.js, Express, SQLite (better-sqlite3)
- **Web-Interface**: Vanilla JavaScript, HTML, CSS (SPA)
- **Extension**: Manifest V3 (Chrome & Firefox kompatibel)
- **Deployment**: Docker, docker-compose

## Updates & Abhängigkeiten

- **NPM-Dependencies (Backend)**: `cd backend && npm install && npm outdated` prüfen. Upgrade per `npm update` oder gezielt Versionen anheben, anschließend Tests/Manuallauf.
- **Frontend-Libs**: `web/vendor/list.min.js` wird lokal gebundled; bei Update die neue Version in `web/vendor` legen und Caching beachten.
- **Browser-Extension**: Manifest V3, Icons/Assets im Ordner `extension/`. Bei Browser-Updates ggf. Permissions/Manifest anpassen, danach in Chrome/Firefox neu laden.
- **Docker-Images**: `docker-compose build` neu bauen nach Dependency-Updates. Basis-Images im `backend/Dockerfile` prüfen.
- **SPA-Views**: Navigation über `?view=`; direkte HTML-Seiten (`automation.html`, `daily-bookmarks.html`, `bookmarks.html`, `dashboard.html`, `settings.html`) sind Redirect-Stubs. Neue Views sollten in `index.html` + `app.js` (Navigation) ergänzt werden.

## Lizenz

MIT
