English: README.en.md
OffFeed est une interface minimale inspirée d’Instagram, centrée uniquement sur votre propre contenu.
Le projet part d’un constat simple : publier une photo est devenu indissociable d’un environnement saturé. Aujourd’hui, utiliser Instagram ne se limite plus à créer et partager — cela implique aussi de naviguer dans un flux infini, entre publications, suggestions et contenus sponsorisés. Avec le temps, ce contexte a pris le dessus sur l’acte lui-même.
OffFeed ne cherche pas à remplacer Instagram. Il cherche à en extraire une partie précise : l’expérience de publier et de voir son propre contenu, sans tout le reste.
L’application propose une version volontairement limitée :
- accès à votre profil et à votre grille de photos
- publication et édition de contenu
- édition du profil (description, image)
- pas de fil externe, stories, messagerie ni suggestions
L’interface reprend les codes familiers du profil Instagram, mais supprime ce qui détourne l’attention.
Vous pouvez connecter un compte Instagram via des jetons d’accès (Instagram Graph API) pour :
- publier depuis OffFeed
- dupliquer des publications sur Instagram
Vous continuez à alimenter votre présence publique sans passer par l’application mobile pour l’essentiel du flux.
Le projet ne repose pas sur une opposition au partage, mais sur une critique du contexte dans lequel il se fait aujourd’hui. OffFeed propose un espace où votre contenu existe seul, tout en restant partageable ailleurs.
- Mur public — grille façon Instagram sur
/, accessible publiquement ou protégée par mot de passe - Détail d’une publication —
/p/[id]avec légende, tags et date - Admin —
/admin: création, édition, suppression des posts - Import d’archive — dépôt d’un export Instagram (ZIP) pour reconstruire l’historique en local
- Publication vers Instagram — optionnelle, par post, via l’API Graph
- Next.js 14 (App Router, API routes)
- SQLite + Prisma
- NextAuth.js
- Tailwind CSS
- sharp — traitement d’images
- adm-zip — import ZIP
- Node.js 18 ou plus récent
- npm (ou pnpm / yarn)
git clone https://github.com/VOTRE_COMPTE/VOTRE_REPO.git
cd VOTRE_REPO
npm install(Remplacez l’URL et le dossier par ceux de votre fork ou dépôt.)
cp .env.example .env.localÉditez .env.local :
NEXTAUTH_URL— en local :http://localhost:3000; en prod : l’URL publique du siteNEXTAUTH_SECRET— secret long et aléatoire (en production, au moins 32 caractères)
openssl rand -base64 32DATABASE_URL— par défaut :file:./dev.db(fichier SQLite à côté du schéma Prisma ; en pratiqueprisma/dev.dbà la racine du projet)
Les clés Instagram (INSTAGRAM_*) sont optionnelles tant que vous n’utilisez pas la publication vers Instagram.
Le mot de passe administrateur n’est pas dans
.env: il est défini au premier lancement (voir étape 5).
npx prisma db push
npm run db:seednpm run devOuvrez http://localhost:3000 pour le mur public et http://localhost:3000/admin pour l’administration.
- Allez sur
/admin: vous êtes redirigé vers/admin/setuppour créer le mot de passe administrateur. - Connectez-vous, puis activez la 2FA (TOTP) depuis l’interface d’admin — elle est requise pour accéder au tableau de bord.
- Sur Instagram : Paramètres → Votre activité → Télécharger vos informations — demandez une exportation au format JSON (ZIP).
- Dans l’admin : Import — déposez le ZIP.
- Les photos et légendes sont stockées localement sous
public/uploads/. - Réimporter est sans danger : les doublons sont ignorés.
Admin → Nouveau post : image, légende, tags.
Configurer les jetons dans Admin → Paramètres, puis utiliser l’action de publication sur la fiche d’un post (image ou carrousel).
Dans Admin → Paramètres, décochez Site public pour protéger tout le mur par le flux de connexion admin.
| Commande | Description |
|---|---|
npm run dev |
Serveur de développement |
npm run build |
Build de production |
npm run start |
Serveur de production |
npm run db:push |
Appliquer le schéma Prisma sur la base |
npm run db:migrate |
Migrations Prisma |
npm run db:studio |
Prisma Studio |
npm run db:seed |
Valeurs par défaut des réglages |
L’application tourne sur tout hébergeur Node.js (VPS, Railway, Coolify, etc.).
Checklist production
NODE_ENV=productionNEXTAUTH_URL= URL publique- Persister
public/uploads/et le fichier SQLite (DATABASE_URL)
En conteneur, montez des volumes pour ces chemins.
src/
├── app/
│ ├── page.tsx # Mur public
│ ├── p/[id]/page.tsx # Détail d’un post
│ ├── admin/ # Admin, setup, import, paramètres…
│ └── api/ # Posts, upload, import, réglages, Instagram…
├── components/
└── lib/ # prisma, auth, réglages, Instagram…
prisma/
└── schema.prisma
docs/
└── banner.png # Bannière README (GitHub)
MIT
