Setup docker for production and development

Change ./init.sh to be an executable then run it.

The default inner container ports are as followed:
- Postgres: 5432:5432
- Backend: 3001:3000
- Frontend: 3000:3000

- Frontend dev: 8000

The backend image needs to be built:

docker compose up -d --build
This commit is contained in:
cdricms
2025-01-14 13:44:28 +01:00
parent a71b9a0fa2
commit fd834ea84a
74 changed files with 526 additions and 398 deletions

View File

@@ -0,0 +1,5 @@
import Contact from "@/components/contact";
export default function ContactPage() {
return <Contact />;
}

View File

@@ -0,0 +1,31 @@
"use server";
import { BlogInterface, posts } from "@/components/blog";
import BlogItem, { BlogItemParams } from "@/components/blogItem";
export default async function HistoryDetails({
params,
}: {
params: Promise<{ slug: string }>;
}) {
const { slug } = await params;
const blog_item: BlogInterface = posts.find(
(value) => value.slug == slug,
) as BlogInterface;
const blog_item_params: BlogItemParams = {
slug: slug,
title_style:
"py-12 mb-3 text-pretty text-xl font-semibold md:mb-4 md:text-4xl lg:mb-6 lg:max-w-3xl lg:text-3xl",
subtitle_style:
"py-12 mb-3 text-pretty text-xl font-semibold md:mb-4 md:text-4xl lg:mb-6 lg:max-w-3xl lg:text-3xl",
p_style:
"blog-paragraph mb-5 text-muted-foreground md:text-base lg:max-w-2xl lg:text-lg",
default_img:
"https://shadcnblocks.com/images/block/placeholder-dark-1.svg",
blog_content: blog_item,
};
return <BlogItem params={blog_item_params} />;
}

View File

@@ -0,0 +1,9 @@
import Blog from "@/components/blog";
export default function History() {
return (
<div className="flex flex-col">
<Blog />
</div>
);
}

View File

@@ -0,0 +1,38 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "@/app/globals.css";
import Navbar from "@/components/nav-bar";
import Footer from "@/components/footer";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="fr">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
<Navbar />
{children}
<Footer />
</body>
</html>
);
}

View File

@@ -0,0 +1,24 @@
import { GalleryVerticalEnd } from "lucide-react";
import { LoginForm } from "@/components/login-form";
export default function LoginPage() {
return (
<div className="grid min-h-svh lg:grid-cols-2">
<div className="flex flex-col gap-4 p-6 md:p-10">
<div className="flex flex-1 items-center justify-center">
<div className="w-full max-w-xs">
<LoginForm />
</div>
</div>
</div>
<div className="relative hidden bg-muted lg:block">
<img
src="/placeholder.svg"
alt="Image"
className="absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale"
/>
</div>
</div>
);
}

View File

@@ -0,0 +1,121 @@
"use server";
import Features, { FeatureItem } from "@/components/features";
import Gallery from "@/components/gallery";
import Hero from "@/components/hero";
import Testimonial from "@/components/testimonial";
export default async function Home() {
return (
<main>
<Hero />
<div className="flex flex-col p-12">
<Features
title="DÉVELOPPEMENT DU SYSTÈME"
description="Latosa Escrima Concepts est un système martial dynamique et en constante évolution. Ce système repose sur une approche logique, qui progresse au fil du développement des compétences techniques des pratiquants."
cta="Envie de découvrir Latosa Escrima ?"
>
<FeatureItem
title="Les Fondements de Latosa Escrima Concepts"
position="left"
image="https://shadcnblocks.com/images/block/placeholder-2.svg"
>
<ol className="list-decimal text-justify flex flex-col gap-4">
<li>
Un Système Centré sur les Concepts{" "}
<ul className="list-disc list-inside">
<li>
Étude et application des meilleurs
concepts et stratégies issus de
différentes approches martiales.
</li>
<li>
Comprendre ce que lon fait, comment on
le fait et pourquoi on le fait.
</li>
</ul>
</li>
<li>
Éducation au Mouvement et à lEfficacité
<ul className="list-disc list-inside">
<li>
Plus quun enchaînement de techniques :
une véritable éducation aux mouvements
corporels et à lefficacité des armes.
</li>
<li>
Priorité à lauthenticité et à la
réalité.
</li>
</ul>
</li>
</ol>
</FeatureItem>
<FeatureItem
title="LÉvolution du Système"
position="right"
image="https://shadcnblocks.com/images/block/placeholder-2.svg"
>
<ol className="list-none text-justify flex flex-col gap-4">
<li>
<span className="font-bold">
Les Premières Étapes
</span>
<ul className="list-disc list-inside">
<li>
Initialement centré sur les techniques
et mouvements, le système sest montré
efficace mais incomplet.
</li>
<li>
Recherche de ce qui différencie les arts
martiaux philippins des autres
disciplines.
</li>
</ul>
</li>
<li>
<span className="font-bold">
La Découverte des Concepts Clés
</span>{" "}
<ul className="list-disc list-inside">
<li>
Rôle central des concepts de combat :
<ul className="list-disc list-inside pl-4">
<li>Puissance dans les frappes.</li>
<li>Blocage ferme.</li>
<li>Équilibre et attitude.</li>
</ul>
</li>
<li>
Restructuration des exercices pour
intégrer et transmettre ces concepts
fondamentaux.
</li>
</ul>
</li>
</ol>
</FeatureItem>
<FeatureItem
title="Les Principes du Système Aujourdhui"
position="left"
image="https://shadcnblocks.com/images/block/placeholder-2.svg"
>
Latosa Escrima Concepts repose sur cinq concepts
fondamentaux :
<ul className="list-disc list-inside">
<li>Équilibre</li>
<li>Vitesse (Timing et Distance)</li>
<li>Puissance</li>
<li>Concentration</li>
<li>Transition</li>
</ul>
</FeatureItem>
</Features>
<Gallery />
<Gallery />
<Testimonial />
</div>
</main>
);
}