Skip to content

commeass/libru-doru

Repository files navigation

🎂 Libru d'Oru

Le livre d'or numérique - The open-source digital guestbook

Lascia un ricordu · Laissez un souvenir · Leave a memory

Vos invités laissent un message texte, photo, vidéo ou audio depuis leur navigateur, et le destinataire le reçoit par email le jour que chacun choisit. Pour les anniversaires, mariages, départs et toutes les fêtes.

An open-source digital guestbook. Guests record a text, photo, video or audio message in their browser, scheduled to be delivered by email on a date they choose. For birthdays, weddings, farewells and every celebration.

Next.js React TypeScript Tailwind CSS License: MIT PRs welcome

Libru d'Oru est la traduction corse littérale de livre d'or (libru = livre, oru = or). Un livre d'or, version 2026 : au lieu d'une page écrite à la main, chaque invité laisse une vidéo, une photo, un mot audio ou un texte, rassemblés en un seul cadeau livré au bon moment.


📸 Démo

Démo de Libru d'Oru : écran d'accueil, formulaire de message, options photo/vidéo/audio, envoi programmé et confirmation

✨ Fonctionnalités

  • Messages multimédia : texte, photo (capture directe via la caméra), vidéo et audio, combinables dans un même message.
  • Enregistrement dans le navigateur : aucune application à installer ; l'invité filme, s'enregistre ou prend une photo directement depuis la page.
  • Envoi programmé par email : chaque invité choisit quand le destinataire recevra son message (demain, dans une semaine, ou une date personnalisée).
  • Page d'accueil festive : compte à rebours, confettis, photo d'accueil optionnelle, choix d'un emoji.
  • Dashboard admin : liste des messages, tri, suppression, statistiques, export Excel et génération d'un brouillon de mail.
  • Zéro base de données : stockage en fichier JSON + médias sur disque. Simple à héberger, simple à sauvegarder.
  • SEO intégré : OpenGraph + image de partage générée dynamiquement, sitemap.xml, robots.txt, manifest PWA.
  • 100 % personnalisable sans toucher au code, via des variables d'environnement.

🎯 Cas d'usage

Anniversaire · Mariage · Départ en retraite · Pot de départ · Naissance · Crémaillère · Remise de diplôme Birthday · Wedding · Retirement · Farewell party · New baby · Graduation

🧰 Stack technique

Framework Next.js 14 (App Router)
Langage TypeScript
UI React 18 + Tailwind CSS
Email Nodemailer + node-cron
Export SheetJS / xlsx
Stockage Fichier JSON + médias sur disque (data/)

🚀 Démarrage rapide

git clone https://github.com/commeass/libru-doru.git
cd libru-doru
npm install
cp .env.example .env.local   # puis personnalisez
npm run dev

Ouvrez http://localhost:3000.

  • Page publique : /
  • Dashboard admin : /admin (mot de passe défini par NEXT_PUBLIC_ADMIN_PASSWORD)

⚙️ Configuration

Tout se personnalise via .env.local (voir .env.example). Vous pouvez aussi éditer directement les valeurs par défaut dans src/config.ts.

Variable Rôle
NEXT_PUBLIC_SITE_URL URL publique du site (SEO : OpenGraph, sitemap, canonical)
NEXT_PUBLIC_CELEBRANT_NAME Prénom de la personne mise à l'honneur
NEXT_PUBLIC_WELCOME_HEADLINE Grand titre de l'écran d'accueil
NEXT_PUBLIC_WELCOME_INTRO Phrase d'introduction
NEXT_PUBLIC_EVENT_DATE Date cible du compte à rebours (ISO)
NEXT_PUBLIC_COUNTDOWN_LABEL Libellé sous le compte à rebours
NEXT_PUBLIC_HERO_PHOTO Nom d'une photo dans data/media-landing/ (optionnel)
NEXT_PUBLIC_ADMIN_PASSWORD Mot de passe de la page /admin
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS Serveur d'envoi des emails
RECIPIENT_EMAIL / RECIPIENT_NAME Destinataire des messages

📧 Envoi des emails (optionnel)

L'app fonctionne sans email : les messages sont stockés et consultables dans /admin. Pour activer l'envoi automatique à la date choisie :

  1. Renseignez les variables SMTP_* et RECIPIENT_* (pour Gmail, utilisez un mot de passe d'application).
  2. Réactivez le planificateur en décommentant l'appel startScheduler() dans src/app/api/messages/route.ts.

Sans SMTP, le bouton « Générer le mail » du dashboard ouvre simplement un brouillon dans votre client mail.

⚠️ Sécurité : le mot de passe admin est vérifié côté client, ce n'est donc pas une vraie protection. Ne stockez pas de données sensibles et changez le mot de passe par défaut.

🌐 Déploiement

Le stockage utilise le système de fichiers local (data/). Hébergez donc l'app sur un serveur Node persistant (VPS, Docker, Railway, Render, Fly.io...) plutôt que sur une plateforme serverless à système de fichiers éphémère comme Vercel, où les uploads ne survivraient pas. Pensez à sauvegarder le dossier data/.

npm run build
npm run start

📁 Structure

src/
  config.ts              # personnalisation centralisée (nom, marque, SEO)
  app/
    page.tsx             # page publique (gate, accueil, formulaire, succès)
    admin/page.tsx       # dashboard admin
    layout.tsx           # métadonnées / SEO
    opengraph-image.tsx  # image de partage social générée dynamiquement
    robots.ts            # robots.txt
    sitemap.ts           # sitemap.xml
    manifest.ts          # manifest PWA
    api/                 # messages, upload, media, generate-mail
  components/            # Countdown, Confetti, MediaRecorder, PhotoCapture...
  lib/                   # storage (JSON), mailer, scheduler, types
data/                    # généré à l'exécution (messages + médias), ignoré par git

🇨🇵 Pourquoi un nom corse ?

Why a Corsican name? Libru d'Oru est le calque corse exact de « livre d'or » : libru (livre) + oru (or), distinct de l'italien (libro/oro) et du français. Un clin d'œil à une langue de tradition orale et d'hospitalité, pour une app qui collectionne les voix et les souvenirs.

🤝 Contribuer

Les issues et pull requests sont les bienvenues. Voir CONTRIBUTING.md. Forkez, créez une branche, proposez votre amélioration.

📄 Licence

MIT - utilisez-le, modifiez-le, partagez-le librement.

About

Libru d'Oru - livre d'or numerique open-source (texte, photo, video, audio) livre par email le jour choisi. Open-source digital guestbook in Corsican for birthdays, weddings & farewells. Next.js, React, TypeScript, Tailwind.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors