diff --git a/Dockerfile b/Dockerfile index 2a11e7d..654ff21 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,8 @@ RUN yarn fetch --immutable && yarn cache clean COPY . . +RUN yarn postinstall + ENV NEXT_PUBLIC_MATOMO_SITE_ID="34" ENV NEXT_PUBLIC_MATOMO_URL="https://matomo.fabrique.social.gouv.fr/" ENV NODE_ENV=production diff --git a/app/StartDsfr.tsx b/app/StartDsfr.tsx new file mode 100644 index 0000000..2439e7a --- /dev/null +++ b/app/StartDsfr.tsx @@ -0,0 +1,19 @@ +"use client" + +import { startReactDsfr } from "@codegouvfr/react-dsfr/next-appdir" +import { defaultColorScheme } from "./defaultColorScheme" +import Link from "next/link" + +declare module "@codegouvfr/react-dsfr/next-appdir" { + // eslint-disable-next-line no-unused-vars + interface RegisterLink { + Link: typeof Link + } +} + +startReactDsfr({ defaultColorScheme, Link }) + +export function StartDsfr() { + //Yes, leave null here. + return null +} diff --git a/app/blog/[blog]/page.tsx b/app/blog/[blog]/page.tsx index 8d7aafc..6750a86 100644 --- a/app/blog/[blog]/page.tsx +++ b/app/blog/[blog]/page.tsx @@ -17,7 +17,7 @@ export default async function Blog({ params }) { const components = { DownloadButtons: () => ( -
+
+
@@ -45,7 +45,7 @@ export default async function Blog() {
- +
) } diff --git a/app/defaultColorScheme.ts b/app/defaultColorScheme.ts new file mode 100644 index 0000000..e9a9ae2 --- /dev/null +++ b/app/defaultColorScheme.ts @@ -0,0 +1,3 @@ +import type { DefaultColorScheme } from "@codegouvfr/react-dsfr/next-appdir" + +export const defaultColorScheme: DefaultColorScheme = "system" diff --git a/app/fb-redirection/layout.tsx b/app/fb-redirection/layout.tsx new file mode 100644 index 0000000..e093170 --- /dev/null +++ b/app/fb-redirection/layout.tsx @@ -0,0 +1,43 @@ +import { DsfrProvider } from "@codegouvfr/react-dsfr/next-appdir/DsfrProvider" +import Head from "next/head" +import { StartDsfr } from "~/app/StartDsfr" +import { DsfrHead } from "@codegouvfr/react-dsfr/next-appdir/DsfrHead" +import Link from "next/link" + +/* +Note: normally we can't use with next 14 +but here we don't want to use react dsfr in our whole appn because it's breaking all the styles +so we use it only in this nested layout + +this breaks the pattern for which it was designed so we need to +- use +- patch package @codegouvfr/react-dsfr + + +*/ +export default function Layout({ children }) { + const lang = "fr" + return ( + <> + + + + + {children} + + ) +} diff --git a/app/fb-redirection/page.tsx b/app/fb-redirection/page.tsx new file mode 100644 index 0000000..eaeb18f --- /dev/null +++ b/app/fb-redirection/page.tsx @@ -0,0 +1,409 @@ +"use client" +import { ANDROID_URL, IOS_URL, ROOT_URL } from "~/constants" +import { Header } from "@codegouvfr/react-dsfr/Header" +import { fr } from "@codegouvfr/react-dsfr" +import { Badge } from "@codegouvfr/react-dsfr/Badge" +import { Button } from "@codegouvfr/react-dsfr/Button" +import { Card } from "@codegouvfr/react-dsfr/Card" +import { Quote } from "@codegouvfr/react-dsfr/Quote" +import { Footer } from "@codegouvfr/react-dsfr/Footer" +import testimonies from "./testimonies" +import { push } from "@socialgouv/matomo-next" + +export default function Page() { + function onDownloadClick() { + function redirect() { + let userAgent = + // @ts-expect-error navigator is read-only + navigator.userAgent || window.opera + let ios = + // @ts-expect-error navigator is read-only + /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream + if (ios) { + // window.location = myapp://element/{ELEMENT_ID}; + window.setTimeout(() => { + window.location.replace(IOS_URL) + push(["adSpecialLandingPage", "appStoreRedirect", "iOS"]) + }, 25) + return + } + let macos = + // @ts-expect-error navigator is read-only + /Mac/.test(userAgent) && !window.MSStream + if (macos) { + // window.location = myapp://element/{ELEMENT_ID}; + window.setTimeout(() => { + window.location.replace(IOS_URL) + push(["adSpecialLandingPage", "appStoreRedirect", "macOS"]) + }, 25) + return + } + let android = /android/i.test(userAgent) + if (android) { + // window.location = myapp://element/{ELEMENT_ID}; + window.setTimeout(() => { + window.location.replace(ANDROID_URL) + push(["adSpecialLandingPage", "appStoreRedirect", "android"]) + }, 25) + return + } + push(["adSpecialLandingPage", "appStoreRedirect", "no-redirect"]) + window.location.replace(ROOT_URL) + } + redirect() + } + + return ( + <> +
+ LA FABRIQUE +
+ DES MINISTÈRES SOCIAUX + + } + homeLinkProps={{ + href: "/", + title: "Oz Ensemble", + }} + id="fr-header-header-with-quick-access-items" + quickAccessItems={[ + { + iconId: "fr-icon-download-line", + text: "Télécharger l'application", + buttonProps: { + onClick: onDownloadClick, + }, + }, + ]} + serviceTagline="L'application mobile pour maitriser sa consommation d'alcool" + serviceTitle="Oz Ensemble" + /> +
+
+
+
+ + 100% gratuit + + + Entièrement anonyme + + + Sécurisé + +
+

+ Maitrisez votre consommation d’alcool +

+

+ Oz Ensemble est la première application qui vous permet de + maîtriser votre consommation d’alcool facilement +

+ +
+
+
+ 3 affichages écrans décoratifs :
+              - l'écran suivi composé de graphiques et du récapitulatif des badges
+              - l'écran calendrier indiquant par des icones la réusite d'objectifs quotidiens
+              - l'écran mes activités regroupant les activités disponibles +
+
+
+
+
+
+

+ Suivi de consommation +

+

+ Oz Ensemble permet aux utilisateurs de suivre leur consommation + d'alcool au quotidien, offrant une visualisation claire des + habitudes de consommation, avec des statistiques pour encourager + la maitrise de votre consommation d’alcool. +

+ +
+
+ Écran de l'app avec un quizz pour évaluer sa consommation d'alcool +
+
+
+
+
+
+

+ Evaluation du risque alcool individuel +

+

+ Oz Ensemble offre la possibilité d’évaluer votre niveau de risque + lié à la consommation d’alcool grâce à un questionnaire + interactif. +

+ +
+
+ Écran de l'app avec un quizz pour évaluer sa consommation d'alcool +
+
+
+
+
+ + Me renseigner sur les aides pour diminuer + + } + size="medium" + title="Je suis en recherche d’aide pour diminuer" + titleAs="h3" + /> + + Prendre contact avec un professionnel de santé + + } + size="medium" + title="Je souhaite me sevrer complètement (abstinence à l’alcool)" + titleAs="h3" + /> + + Commencer un test de consommation + + } + size="medium" + title="Je me pose des questions sur ma consommation" + titleAs="h3" + /> +
+
+
+
+ +
+
+
+
+
+

+ Maîtrisez votre consommation d’alcool dès maintenant ! +

+
+
+ +
+
+
+