# LinkedIn Post Formatter

![Node.js](https://img.shields.io/badge/Node.js-20+-339933?logo=node.js&logoColor=white)
![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker&logoColor=white)
![License](https://img.shields.io/badge/License-MIT-green)
![Self-hosted](https://img.shields.io/badge/Self--hosted-yes-blueviolet)

**Self-hosted Alternative zu Taplio & AuthoredUp — kostenlos, kein Login, kein Abo.**

LinkedIn unterstützt keine echte Textformatierung. Dieser Formatter löst das Problem mit Unicode-Mathematik-Zeichen, die in jedem Browser und auf jedem Gerät korrekt dargestellt werden — inklusive Zeilenumbruch-Fix für den LinkedIn-Editor.

![Screenshot](pictures/screen1.png)

---

## Features

- **6 Schriftvarianten** als LinkedIn-Karten-Vorschau (Sans, Bold, Italic, Bold Italic, Monospace, Plain)
- **Copy text** — ein Klick, fertig — Text direkt in LinkedIn einfügen
- **Zeilenumbruch-Fix** — Leerzeilen überleben den Paste in LinkedIn (Zero-Width-Space-Trick)
- **Zeichen-Counter** mit Farbindikator (LinkedIn-Limit: 3000 Zeichen)
- **25+ Emoji-Schnellauswahl** für IT- und Business-Posts
- **Keyboard Shortcuts** — `Strg+B`, `Strg+I`, `Strg+Enter`
- **Keine externen Abhängigkeiten** im Frontend — reines HTML/CSS/JS
- **HTTPS-ready** — Clipboard API funktioniert hinter jedem Reverse Proxy mit SSL

---

## Schnellstart

### Node.js

```bash
git clone https://github.com/DEIN-USERNAME/linkedin-formatter.git
cd linkedin-formatter
npm install
npm start
# → http://localhost:3000
```

### Docker

```bash
docker compose up -d
# → http://localhost:3000
```

### Eigener Port

```bash
PORT=8080 node server.js
```

---

## Formatting-Syntax

| Eingabe          | Ausgabe             |
|-----------------|---------------------|
| `**fett**`      | 𝗨𝗻𝗶𝗰𝗼𝗱𝗲 𝗕𝗼𝗹𝗱       |
| `_kursiv_`      | 𝘜𝘯𝘪𝘤𝘰𝘥𝘦 𝘐𝘵𝘢𝘭𝘪𝘤     |
| Leerzeile       | Absatz in LinkedIn  |
| `Strg+B`        | Selektion fett      |
| `Strg+I`        | Selektion kursiv    |
| `Strg+Enter`    | Vorschau generieren |

---

## Hinter Reverse Proxy (Zoraxy / nginx / Traefik)

Port 3000 proxyen, SSL terminieren — fertig. Die Clipboard API (`navigator.clipboard`) erfordert HTTPS oder `localhost`.

**Zoraxy Beispiel:** Proxy Rule auf `localhost:3000`, TLS über Let's Encrypt aktivieren.

---

## Warum kein Markdown / HTML in LinkedIn?

LinkedIn akzeptiert ausschließlich Unicode-Plaintext. Fettschrift funktioniert über mathematische Unicode-Blöcke (z.B. `U+1D5D4`–`U+1D5ED` für Sans-Serif Bold), die LinkedIn wie normale Zeichen behandelt — aber im Feed fett dargestellt werden. Zeilenumbrüche werden beim Einfügen über die Zwischenablage von LinkedIn normalisiert; der eingesetzte Zero-Width-Space (`U+200B`) verhindert das.

---

## Stack

- **Backend:** Node.js + Express (1 Datei, ~20 Zeilen)
- **Frontend:** Vanilla HTML/CSS/JS, keine Frameworks, keine npm-Abhängigkeiten im Browser
- **Container:** Alpine-based Docker Image (~180 MB)

---

## License

MIT — fork it, self-host it, ship it.
