Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions web/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
36 changes: 36 additions & 0 deletions web/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).

## Getting Started

First, run the development server:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```

Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.

You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.

This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.

## Learn More

To learn more about Next.js, take a look at the following resources:

- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.

You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!

## Deploy on Vercel

The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.

Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
25 changes: 25 additions & 0 deletions web/components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "radix-nova",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"iconLibrary": "hugeicons",
"rtl": false,
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"menuColor": "default",
"menuAccent": "subtle",
"registries": {}
}
18 changes: 18 additions & 0 deletions web/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { defineConfig, globalIgnores } from "eslint/config";
import nextVitals from "eslint-config-next/core-web-vitals";
import nextTs from "eslint-config-next/typescript";

const eslintConfig = defineConfig([
...nextVitals,
...nextTs,
// Override default ignores of eslint-config-next.
globalIgnores([
// Default ignores of eslint-config-next:
".next/**",
"out/**",
"build/**",
"next-env.d.ts",
]),
]);

export default eslintConfig;
23 changes: 23 additions & 0 deletions web/knip.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"$schema": "https://unpkg.com/knip@latest/schema.json",
"entry": [
"src/app/**/*.{ts,tsx}",
"src/pages/**/*.{ts,tsx}",
"src/components/**/*.{ts,tsx}",
"next.config.ts"
],
"project": [
"src/**/*.{ts,tsx,js,jsx}"
],
"$comment": "src/components/ui is temporarily ignored — shadcn/ui generated components not yet fully imported. Remove once component set is reviewed.",
"ignore": [
"public/**",
".next/**",
"node_modules/**",
"src/components/ui/**"
],
"ignoreDependencies": [
"tw-animate-css",
"@tailwindcss/postcss"
]
}
42 changes: 42 additions & 0 deletions web/messages/de.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"cookie": {
"message": "Wir verwenden Cookies, um Ihre Erfahrung auf unserer Website zu verbessern.",
"accept": "Alle akzeptieren",
"decline": "Ablehnen",
"learnMore": "Mehr erfahren"
},
"Login": {
"heading": "Anmeldung erforderlich",
"description": "Bitte melden Sie sich an, um mit der Kontolöschung fortzufahren.",
"emailLabel": "E-Mail",
"emailPlaceholder": "Geben Sie Ihre E-Mail-Adresse ein",
"passwordLabel": "Passwort",
"passwordPlaceholder": "Passwort",
"processingTitle": "Verarbeitung",
"processingDescription": "Sie werden angemeldet.",
"successTitle": "Anmeldung erfolgreich",
"successDescription": "Weiterleitung zur Kontolöschung.",
"failedTitle": "Anmeldung fehlgeschlagen",
"failedDefaultDescription": "Bitte überprüfen Sie Ihre Angaben und versuchen Sie es erneut.",
"serverErrorTitle": "Serverfehler",
"submitButton": "Anmelden",
"submitButtonLoading": "Anmeldung läuft..."
},
"NotFound": {
"title": "Seite nicht gefunden",
"heading": "404",
"description": "Die gesuchte Seite scheint nicht mehr zu existieren. Wir helfen dir, den Weg zurück zu finden.",
"goHome": "Zur Startseite",
"browseArticles": "Artikel durchsuchen",
"medicalGlossary": "Medizinisches Glossar"
},
"ErrorPage": {
"title": "Etwas ist schiefgelaufen",
"heading": "Hoppla!",
"description": "Beim Laden dieser Seite ist ein unerwarteter Fehler aufgetreten. Unser Team wurde bereits informiert. Bitte versuche es erneut.",
"tryAgain": "Erneut versuchen",
"goHome": "Zur Startseite"
}

}

43 changes: 43 additions & 0 deletions web/messages/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"cookie": {
"message": "We use cookies to improve your browsing experience, analyze site traffic, and personalize content.",
"accept": "Accept All",
"decline": "Decline",
"learnMore": "Learn More"
},
"Login": {
"heading": "Login Required",
"description": "Please log in to continue to account deletion.",
"emailLabel": "Email",
"emailPlaceholder": "Enter your email",
"passwordLabel": "Password",
"passwordPlaceholder": "Password",
"processingTitle": "Processing",
"processingDescription": "Signing you in.",
"successTitle": "Login successful",
"successDescription": "Redirecting to account deletion.",
"failedTitle": "Login failed",
"failedDefaultDescription": "Please check your details and try again.",
"serverErrorTitle": "Server error",
"submitButton": "Login",
"submitButtonLoading": "Logging in..."
},
"NotFound": {
"title": "Page Not Found",
"heading": "404",
"description": "The page you're looking for seems to have wandered off. Let's help you find your way back to good health information.",
"goHome": "Go Home",
"browseArticles": "Browse Articles",
"medicalGlossary": "Medical Glossary"
},
"ErrorPage": {
"title": "Something Went Wrong",
"heading": "Oops!",
"description": "We hit an unexpected error while loading this page. Don't worry, our team has been notified. Please try again.",
"tryAgain": "Try Again",
"goHome": "Go Home"
}

}


42 changes: 42 additions & 0 deletions web/messages/es.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"cookie": {
"message": "Utilizamos cookies para mejorar su experiencia en nuestro sitio.",
"accept": "Aceptar todo",
"decline": "Rechazar",
"learnMore": "Más información"
},
"Login": {
"heading": "Inicio de sesión requerido",
"description": "Inicia sesión para continuar con la eliminación de la cuenta.",
"emailLabel": "Correo electrónico",
"emailPlaceholder": "Ingresa tu correo electrónico",
"passwordLabel": "Contraseña",
"passwordPlaceholder": "Contraseña",
"processingTitle": "Procesando",
"processingDescription": "Iniciando sesión.",
"successTitle": "Inicio de sesión exitoso",
"successDescription": "Redirigiendo a la eliminación de la cuenta.",
"failedTitle": "Error al iniciar sesión",
"failedDefaultDescription": "Verifica tus datos e inténtalo de nuevo.",
"serverErrorTitle": "Error del servidor",
"submitButton": "Iniciar sesión",
"submitButtonLoading": "Iniciando sesión..."
},
"NotFound": {
"title": "Página no encontrada",
"heading": "404",
"description": "Parece que la página que buscas se ha perdido. Te ayudamos a volver al buen camino de la información de salud.",
"goHome": "Ir al inicio",
"browseArticles": "Ver artículos",
"medicalGlossary": "Glosario médico"
},
"ErrorPage": {
"title": "Algo salió mal",
"heading": "¡Ups!",
"description": "Ocurrió un error inesperado al cargar esta página. No te preocupes, nuestro equipo ya fue notificado. Por favor, inténtalo de nuevo.",
"tryAgain": "Intentar de nuevo",
"goHome": "Ir al inicio"
}

}

41 changes: 41 additions & 0 deletions web/messages/fr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"cookie": {
"message": "Nous utilisons des cookies pour améliorer votre expérience sur notre site.",
"accept": "Tout accepter",
"decline": "Refuser",
"learnMore": "En savoir plus"
},
"Login": {
"heading": "Connexion requise",
"description": "Veuillez vous connecter pour continuer la suppression du compte.",
"emailLabel": "E-mail",
"emailPlaceholder": "Entrez votre e-mail",
"passwordLabel": "Mot de passe",
"passwordPlaceholder": "Mot de passe",
"processingTitle": "Traitement en cours",
"processingDescription": "Connexion en cours.",
"successTitle": "Connexion réussie",
"successDescription": "Redirection vers la suppression du compte.",
"failedTitle": "Échec de la connexion",
"failedDefaultDescription": "Veuillez vérifier vos informations et réessayer.",
"serverErrorTitle": "Erreur serveur",
"submitButton": "Connexion",
"submitButtonLoading": "Connexion en cours..."
},
"NotFound": {
"title": "Page introuvable",
"heading": "404",
"description": "La page que vous recherchez semble s'être égarée. Laissez-nous vous aider à retrouver votre chemin vers de bonnes informations de santé.",
"goHome": "Retour à l'accueil",
"browseArticles": "Parcourir les articles",
"medicalGlossary": "Glossaire médical"
},
"ErrorPage": {
"title": "Une erreur est survenue",
"heading": "Oups !",
"description": "Une erreur inattendue s'est produite lors du chargement de cette page. Ne vous inquiétez pas, notre équipe a été informée. Veuillez réessayer.",
"tryAgain": "Réessayer",
"goHome": "Retour à l'accueil"
}
}

41 changes: 41 additions & 0 deletions web/messages/hr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"cookie": {
"message": "Koristimo kolačiće kako bismo poboljšali vaše iskustvo na našoj stranici.",
"accept": "Prihvati sve",
"decline": "Odbij",
"learnMore": "Saznaj više"
},
"Login": {
"heading": "Potrebna prijava",
"description": "Prijavite se za nastavak brisanja računa.",
"emailLabel": "E-pošta",
"emailPlaceholder": "Unesite svoju e-poštu",
"passwordLabel": "Lozinka",
"passwordPlaceholder": "Lozinka",
"processingTitle": "Obrada u tijeku",
"processingDescription": "Prijava u tijeku.",
"successTitle": "Prijava uspješna",
"successDescription": "Preusmjeravanje na brisanje računa.",
"failedTitle": "Prijava neuspješna",
"failedDefaultDescription": "Provjerite svoje podatke i pokušajte ponovno.",
"serverErrorTitle": "Greška poslužitelja",
"submitButton": "Prijava",
"submitButtonLoading": "Prijava u tijeku..."
},
"NotFound": {
"title": "Stranica nije pronađena",
"heading": "404",
"description": "Čini se da je stranica koju tražite nestala. Pomoći ćemo vam pronaći put natrag do korisnih zdravstvenih informacija.",
"goHome": "Idi na početnu",
"browseArticles": "Pregledaj članke",
"medicalGlossary": "Medicinski pojmovnik"
},
"ErrorPage": {
"title": "Nešto je pošlo po zlu",
"heading": "Ups!",
"description": "Došlo je do neočekivane pogreške prilikom učitavanja ove stranice. Ne brinite, naš tim je obaviješten. Pokušajte ponovno.",
"tryAgain": "Pokušaj ponovno",
"goHome": "Idi na početnu"
}
}

32 changes: 32 additions & 0 deletions web/next.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import type { NextConfig } from "next";
import createNextIntlPlugin from "next-intl/plugin";

const withNextIntl = createNextIntlPlugin();

const nextConfig: NextConfig = {
images: {
formats: ["image/avif", "image/webp"],
qualities: [25, 50, 75],
remotePatterns: [
{
protocol: "https",
hostname: "raw.githubusercontent.com",
},
{
protocol: "https",
hostname: "github.com",
pathname: "/user-attachments/assets/**",
},
{
protocol: "https",
hostname: "user-images.githubusercontent.com",
},
{
protocol: "https",
hostname: "avatars.githubusercontent.com",
},
],
},
};

export default withNextIntl(nextConfig);
Loading
Loading