update with all missing files and legal info + Dockerfile

This commit is contained in:
Thomas Fransolet 2026-04-08 16:45:04 +02:00
parent 8173049966
commit 43694e1d98
9 changed files with 212 additions and 4 deletions

5
.dockerignore Normal file
View File

@ -0,0 +1,5 @@
node_modules
.next
.git
.gitignore
README.md

17
Dockerfile Normal file
View File

@ -0,0 +1,17 @@
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]

View File

@ -1,7 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
output: "standalone",
reactCompiler: true,
};

5
public/robots.txt Normal file
View File

@ -0,0 +1,5 @@
User-agent: *
Allow: /
Disallow: /api/
Sitemap: https://myinfomate.be/sitemap.xml

View File

@ -0,0 +1,74 @@
import type { Metadata } from "next";
import Link from "next/link";
export const metadata: Metadata = {
title: "Politique de confidentialité | MyInfoMate",
description: "Politique de confidentialité et traitement des données personnelles de MyInfoMate.",
alternates: { canonical: "/confidentialite" },
};
export default function Confidentialite() {
return (
<main className="min-h-screen bg-white">
<div className="max-w-3xl mx-auto px-6 py-16">
<Link href="/" className="text-sm text-slate-400 hover:text-slate-600 mb-8 inline-block">
Retour
</Link>
<h1 className="text-3xl font-bold text-slate-900 mb-10">Politique de confidentialité</h1>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Responsable du traitement</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Thomas Fransolet UNOV<br />
Rue René Copette 3, 5020 Namur, Belgique<br />
Email : <a href="mailto:contact@unov.be" className="text-cyan-500 hover:underline">contact@unov.be</a>
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Données collectées</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Le formulaire de contact collecte les données suivantes : prénom, nom, adresse email, et le message saisi. Ces données sont transmises à UNOV à des fins de réponse à votre demande.
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Finalité et base légale</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Les données collectées sont traitées uniquement pour répondre à votre prise de contact. La base légale est l&apos;intérêt légitime (art. 6.1.f du RGPD).
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Conservation des données</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Les données ne sont pas stockées sur nos serveurs. Elles sont transmises par email via le service <strong>Formspree</strong> (formspree.io) et ne sont pas conservées au-delà de la réception du message.
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Sous-traitant</h2>
<p className="text-slate-600 text-sm leading-relaxed">
L&apos;envoi du formulaire utilise le service <strong>Formspree, Inc.</strong> (États-Unis), qui agit en qualité de sous-traitant. Le transfert est encadré par les clauses contractuelles types de la Commission européenne. Pour plus d&apos;informations : <a href="https://formspree.io/legal/privacy-policy" target="_blank" rel="noopener noreferrer" className="text-cyan-500 hover:underline">politique de confidentialité de Formspree</a>.
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Vos droits</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Conformément au RGPD, vous disposez d&apos;un droit d&apos;accès, de rectification, d&apos;effacement, de limitation, d&apos;opposition et de portabilité de vos données. Pour exercer ces droits, contactez-nous à <a href="mailto:contact@unov.be" className="text-cyan-500 hover:underline">contact@unov.be</a>.<br /><br />
Vous avez également le droit d&apos;introduire une réclamation auprès de l&apos;Autorité de protection des données (APD) belge : <a href="https://www.autoriteprotectiondonnees.be" target="_blank" rel="noopener noreferrer" className="text-cyan-500 hover:underline">autoriteprotectiondonnees.be</a>.
</p>
</section>
<section>
<h2 className="text-lg font-semibold text-slate-800 mb-3">Cookies</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Ce site n&apos;utilise pas de cookies de traçage ou publicitaires. Aucun outil d&apos;analyse comportementale n&apos;est actif.
</p>
</section>
</div>
</main>
);
}

View File

@ -2,11 +2,29 @@ import type { Metadata } from "next";
import "./globals.css";
export const metadata: Metadata = {
metadataBase: new URL("https://myinfomate.be"),
title: "MyInfoMate | La technologie au service de l'expérience visiteur",
description: "La solution SaaS pour digitaliser l'expérience de vos visiteurs. Créativité et technologie au service de l'expérience visiteur.",
icons: {
icon: "/myinfomate-logo.png",
},
openGraph: {
title: "MyInfoMate | La technologie au service de l'expérience visiteur",
description: "La solution SaaS pour digitaliser l'expérience de vos visiteurs. Créativité et technologie au service de l'expérience visiteur.",
url: "https://myinfomate.be",
siteName: "MyInfoMate",
locale: "fr_BE",
type: "website",
images: [{ url: "/myinfomate-logo.png" }],
},
twitter: {
card: "summary_large_image",
title: "MyInfoMate | La technologie au service de l'expérience visiteur",
description: "La solution SaaS pour digitaliser l'expérience de vos visiteurs. Créativité et technologie au service de l'expérience visiteur.",
},
alternates: {
canonical: "/",
},
};
export default function RootLayout({

View File

@ -0,0 +1,65 @@
import type { Metadata } from "next";
import Link from "next/link";
export const metadata: Metadata = {
title: "Mentions légales | MyInfoMate",
description: "Mentions légales du site MyInfoMate.",
alternates: { canonical: "/mentions-legales" },
};
export default function MentionsLegales() {
return (
<main className="min-h-screen bg-white">
<div className="max-w-3xl mx-auto px-6 py-16">
<Link href="/" className="text-sm text-slate-400 hover:text-slate-600 mb-8 inline-block">
Retour
</Link>
<h1 className="text-3xl font-bold text-slate-900 mb-10">Mentions légales</h1>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Éditeur du site</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Le présent site est édité par :<br />
<strong>Thomas Fransolet</strong>, personne physique exerçant une activité sous l&apos;enseigne <strong>UNOV</strong><br />
Numéro d&apos;entreprise BCE : 0776.895.467<br />
Rue René Copette 3, 5020 Namur, Belgique<br />
Email : <a href="mailto:contact@unov.be" className="text-cyan-500 hover:underline">contact@unov.be</a><br />
Téléphone : +32 498 07 95 35
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Hébergement</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Ce site est hébergé par :<br />
<strong>OVH SAS</strong><br />
2 rue Kellermann, 59100 Roubaix, France<br />
<a href="https://www.ovh.com" target="_blank" rel="noopener noreferrer" className="text-cyan-500 hover:underline">www.ovh.com</a>
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Propriété intellectuelle</h2>
<p className="text-slate-600 text-sm leading-relaxed">
L&apos;ensemble des contenus présents sur ce site (textes, images, logos, graphismes) sont la propriété exclusive de Thomas Fransolet / UNOV, sauf mention contraire. Toute reproduction, distribution ou utilisation sans autorisation préalable est interdite.
</p>
</section>
<section className="mb-8">
<h2 className="text-lg font-semibold text-slate-800 mb-3">Responsabilité</h2>
<p className="text-slate-600 text-sm leading-relaxed">
UNOV s&apos;efforce de maintenir les informations publiées sur ce site à jour et exactes. Nous déclinons toute responsabilité en cas d&apos;erreurs, d&apos;omissions ou de résultats obtenus par un usage inapproprié de ces informations.
</p>
</section>
<section>
<h2 className="text-lg font-semibold text-slate-800 mb-3">Droit applicable</h2>
<p className="text-slate-600 text-sm leading-relaxed">
Le présent site est soumis au droit belge. Tout litige relatif à son utilisation relève de la compétence exclusive des tribunaux de Namur, Belgique.
</p>
</section>
</div>
</main>
);
}

View File

@ -1027,7 +1027,7 @@ export default function Home() {
<ul className="space-y-4">
<li className="flex items-start gap-3 text-sm text-slate-500">
<span className="material-symbols-outlined text-primary text-sm">location_on</span>
UNOV, 5020 Vedrin
UNOV, 5020 Namur
</li>
<li className="flex items-center gap-3 text-sm text-slate-500">
<span className="material-symbols-outlined text-primary text-sm">mail</span>
@ -1043,8 +1043,8 @@ export default function Home() {
<div className="pt-8 border-t border-slate-200 flex flex-col md:flex-row justify-between items-center gap-4">
<p className="text-xs text-slate-400">{t.footer.copyright}</p>
<div className="flex gap-8">
<a className="text-xs text-slate-400 hover:text-slate-600" href="#">{t.footer.legal}</a>
<a className="text-xs text-slate-400 hover:text-slate-600" href="#">{t.footer.privacy}</a>
<a className="text-xs text-slate-400 hover:text-slate-600" href="/mentions-legales">{t.footer.legal}</a>
<a className="text-xs text-slate-400 hover:text-slate-600" href="/confidentialite">{t.footer.privacy}</a>
</div>
</div>
</div>

24
src/app/sitemap.ts Normal file
View File

@ -0,0 +1,24 @@
import { MetadataRoute } from "next";
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: "https://myinfomate.be",
lastModified: new Date(),
changeFrequency: "monthly",
priority: 1,
},
{
url: "https://myinfomate.be/mentions-legales",
lastModified: new Date(),
changeFrequency: "yearly",
priority: 0.3,
},
{
url: "https://myinfomate.be/confidentialite",
lastModified: new Date(),
changeFrequency: "yearly",
priority: 0.3,
},
];
}