Initial vault setup
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
---
|
||||
title: Panora
|
||||
created: 2026-06-07
|
||||
updated: 2026-06-07
|
||||
type: app
|
||||
tags: [catalogue, development, integration, api-unified, saas, etl, no-code, typescript]
|
||||
confidence: high
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=Development, https://github.com/panoratech/Panora]
|
||||
---
|
||||
|
||||
# 💻 Panora
|
||||
|
||||
> **L'API unifiée pour intégrations SaaS** : connectez votre app à 30+ services (CRM, Helpdesk, ATS, Storage) en quelques lignes de code, sans réécrire une intégration par client — l'open source answer à Merge.dev et Apideck.
|
||||
|
||||
## 📋 Informations Générales
|
||||
|
||||
| Champ | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | [panora.dev](https://panora.dev/) |
|
||||
| **GitHub** | [panoratech/Panora](https://github.com/panoratech/Panora) |
|
||||
| **License** | MIT (Community) + Commercial (Cloud) |
|
||||
| **Langage** | TypeScript (NestJS + Next.js) |
|
||||
| **Étoiles GitHub** | 1k ⭐ |
|
||||
| **Dernière MAJ** | 2026-06-07 |
|
||||
| **Catégorie** | [[cat-development\|Development]], Unified API / Integration |
|
||||
|
||||
## 📝 Description
|
||||
|
||||
**Panora** est une **plateforme d'intégration open source** qui expose une **API unifiée** pour se connecter à des dizaines de SaaS tiers (CRM, Helpdesk, ATS, Storage, etc.). L'idée : **vous codez une seule intégration Panora**, et Panora se charge de parler à **HubSpot, Salesforce, Pipedrive, Zendesk, Intercom, Greenhouse, Lever, Notion, Airtable, Google Drive, Dropbox**… à votre place.
|
||||
|
||||
Le problème que résout Panora : chaque SaaS a sa propre API, ses propres schémas, ses propres rate limits, ses propres webhooks, ses propres OAuth flows. Pour une startup B2B qui veut **supporter plusieurs CRM côté client**, cela signifie réécrire la même intégration 5 fois. Panora mutualise ce travail : **un seul schéma unifié** (Common Model), des **transformations automatiques** vers les formats natifs de chaque provider, et un système de **sync bidirectionnel** (webhooks + polling).
|
||||
|
||||
C'est l'**open source alternative à Merge.dev** (leader du marché, $100k+/an) et **Apideck**. La version community couvre les intégrations les plus demandées ; la version cloud payante ajoute des providers enterprise, du support, et un SLA.
|
||||
|
||||
**Public cible** : **startups B2B, équipes produit SaaS, intégrateurs** qui veulent **scaler leurs intégrations tierces** sans y passer un dev à plein temps.
|
||||
|
||||
### Fonctionnalités principales
|
||||
|
||||
- ✅ **API unifiée** : un seul schéma pour 30+ SaaS
|
||||
- ✅ **Catégories couvertes** : CRM, Helpdesk, ATS, HRIS, Accounting, Storage, Calendar
|
||||
- ✅ **Sync bidirectionnel** : webhooks + polling, déduplication
|
||||
- ✅ **Common Model** : entités normalisées (Contact, Company, Deal, Ticket, etc.)
|
||||
- ✅ **Authentification déléguée** : OAuth flows gérés par Panora
|
||||
- ✅ **Rate limit handling** : backoff intelligent, queue
|
||||
- ✅ **Field mapping** : configuration par client des champs custom
|
||||
- ✅ **Webhooks sortants** : votre app est notifiée des changements
|
||||
- ✅ **API REST + TypeScript SDK** typé
|
||||
- ✅ **Logs d'audit** : qui a synchro quoi, quand
|
||||
- ✅ **Self-hosted** : 100% on-prem, données chez vous
|
||||
- ✅ **Extensible** : ajouter un provider custom (TypeScript)
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Via Docker (recommandé)
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: '3.8'
|
||||
services:
|
||||
panora-api:
|
||||
image: panoratech/panora-api:latest
|
||||
container_name: panora-api
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
DATABASE_URL: "postgresql://panora:password@db:5432/panora"
|
||||
REDIS_URL: "redis://redis:6379"
|
||||
NEXTAUTH_SECRET: "changez-moi-en-production-50-chars"
|
||||
NEXTAUTH_URL: "https://panora.example.com"
|
||||
PANORA_ENCRYPTION_KEY: "32-chars-encryption-key-aes-256"
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.panora.rule=Host(`panora.example.com`)"
|
||||
- "traefik.http.routers.panora.entrypoints=websecure"
|
||||
- "traefik.http.routers.panora.tls.certresolver=letsencrypt"
|
||||
|
||||
panora-web:
|
||||
image: panoratech/panora-web:latest
|
||||
container_name: panora-web
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3001:3000"
|
||||
environment:
|
||||
NEXT_PUBLIC_API_URL: "https://panora.example.com/api"
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: panora-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: panora
|
||||
POSTGRES_PASSWORD: changez-moi
|
||||
POSTGRES_DB: panora
|
||||
volumes:
|
||||
- panora_db:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: panora-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
panora_db:
|
||||
```
|
||||
|
||||
### Installation manuelle
|
||||
|
||||
```bash
|
||||
git clone https://github.com/panoratech/Panora.git
|
||||
cd Panora
|
||||
docker compose -f deploy/docker-compose.yaml up -d
|
||||
```
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
1. **Créer le compte admin** : `https://panora.example.com/web`
|
||||
2. **Configurer un provider** : Settings > Providers > ajouter credentials OAuth (HubSpot, Salesforce, etc.)
|
||||
3. **Définir les connecteurs actifs** par client : vertical, sync mode (immediate/scheduled)
|
||||
4. **Map custom fields** : pour chaque client, mapper ses champs custom
|
||||
5. **Webhooks** : configurer l'URL de votre backend pour recevoir les events
|
||||
6. **Chiffrement** : `PANORA_ENCRYPTION_KEY` obligatoire (AES-256 des tokens)
|
||||
7. **API Keys** : créer des clés par client, scope par catégorie
|
||||
|
||||
### Exemple d'usage (API unifiée)
|
||||
|
||||
```bash
|
||||
# Récupérer les contacts de tous les CRM d'un client
|
||||
curl -H "Authorization: Bearer <API_KEY>" \
|
||||
-H "x-connection-id: <hubspot-connection-id>" \
|
||||
"https://panora.example.com/api/crm/contacts"
|
||||
# → schéma unifié, identique quel que soit le CRM
|
||||
```
|
||||
|
||||
## 🔗 Alternatives
|
||||
|
||||
- **Merge.dev** — Leader du marché, propriétaire, $100k+/an
|
||||
- **Apideck** — Concurrent direct, plus accessible en pricing
|
||||
- **Unify** — Alternative européenne, plus orienté EU
|
||||
- **Nango** — Open source (MIT), focus sur OAuth + sync, plus bas niveau
|
||||
- **Kombo** — Concurrent européen, focus marché DACH
|
||||
- **Tray.io** — Plateforme iPaaS plus large, plus complexe
|
||||
- **Workato** — iPaaS enterprise, hors budget PME
|
||||
|
||||
## 🔒 Sécurité
|
||||
|
||||
- **🔐 NEXTAUTH_SECRET + PANORA_ENCRYPTION_KEY robustes** : `openssl rand -hex 32` (32 chars pour AES-256)
|
||||
- **🛡️ HTTPS obligatoire via [[app-traefik]]** : Panora manipule des tokens OAuth, des données CRM, et des secrets
|
||||
- **🔒 Chiffrement des credentials** : tous les tokens provider sont chiffrés en base (AES-256)
|
||||
- **🛡️ API Keys** : scope par client, rotation régulière
|
||||
- **🛡️ Webhooks sortants** : signature HMAC, secret partagé
|
||||
- **🛡️ RGPD** : Panora accède à des données CRM → DPA, registre des traitements
|
||||
- **🛡️ Audit log** : conserver l'historique des synchronisations
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [Site officiel](https://panora.dev/)
|
||||
- [Documentation](https://docs.panora.dev/)
|
||||
- [GitHub panoratech/Panora](https://github.com/panoratech/Panora)
|
||||
- [Démo en ligne](https://app.panora.dev/)
|
||||
- [Liste des providers](https://docs.panora.dev/core-concepts/providers/overview)
|
||||
|
||||
## 🔗 Pages Liées
|
||||
|
||||
- [[cat-development]] — Catégorie Development
|
||||
- [[app-nango]] — Concurrent open source (plus bas niveau)
|
||||
- [[app-supabase]] — BaaS (Panora peut être utilisé par-dessus)
|
||||
- [[app-traefik]] — Reverse proxy HTTPS
|
||||
- [[securisation-home-lab]] — Bonnes pratiques
|
||||
- [[recettes-docker-compose]] — Templates Docker
|
||||
Reference in New Issue
Block a user