src/
├── app/
│ ├── page.tsx
│ ├── globals.css
│
├── components/
│ ├── Navbar.tsx
│ ├── Sidebar.tsx
│ ├── ImageCard.tsx
│ └── Gallery.tsx
src/components/Navbar.tsx
export default function Navbar(){
return(
)
}src/components/Sidebar.tsx
export default function Sidebar(){
return(
🏠 Accueil
🌸 Explorer
❤️ Favoris
📁 Collections
👤 Profil
⚙️ Paramètres
)
}src/components/ImageCard.tsx
type Props={
image:string,
title:string
}
export default function ImageCard({
image,
title
}:Props){
return(
{title}
❤️
📌
)
}src/components/Gallery.tsx
import ImageCard from "./ImageCard";
const images=[
{
image:"https://picsum.photos/400/600",
title:"🌸 Pink Dream"
},
{
image:"https://picsum.photos/400/500",
title:"🧸 Cute Bear"
},
{
image:"https://picsum.photos/400/700",
title:"🎀 Coquette"
},
{
image:"https://picsum.photos/400/450",
title:"🌷 Flowers"
}
]
export default function Gallery(){
return(
{
images.map((img,index)=>(
))
}
)
}src/app/page.tsx
import Navbar from "@/components/Navbar";
import Sidebar from "@/components/Sidebar";
import Gallery from "@/components/Gallery";
export default function Home(){
return(
)
}
@tailwind base;
@tailwind components;
@tailwind utilities;
body{
background:#fff5fa;
font-family:
Arial,
sans-serif;
}
.navbar{
height:80px;
background:white;
display:flex;
align-items:center;
justify-content:space-around;
box-shadow:
0 5px 20px #ffd1e6;
position:sticky;
top:0;
}
.navbar h1{
color:#ff79b8;
}
.navbar input{
padding:15px;
width:300px;
border-radius:30px;
border:none;
background:#ffe4f1;
}
.navbar button{
background:#ff9dcc;
border:none;
padding:12px 25px;
border-radius:30px;
color:white;
}
.layout{
display:flex;
}
.sidebar{
width:220px;
padding:30px;
background:white;
min-height:100vh;
}
.sidebar p{
padding:15px;
border-radius:20px;
cursor:pointer;
}
.sidebar p:hover{
background:#ffe3f1;
}
main{
padding:30px;
flex:1;
}
.gallery{
columns:4 250px;
column-gap:20px;
}
.card{
background:white;
border-radius:25px;
overflow:hidden;
margin-bottom:20px;
box-shadow:
0 5px 20px #ffd6e8;
break-inside:avoid;
}
.card img{
width:100%;
}
.card h3{
color:#ff72b2;
padding:10px;
}
.actions{
display:flex;
justify-content:space-around;
padding:10px;
}
.actions button{
border:none;
background:#ffe8f3;
border-radius:20px;
padding:10px;
}
import { initializeApp } from "firebase/app";
import {
getAuth
} from "firebase/auth";
import {
getFirestore
} from "firebase/firestore";
import {
getStorage
} from "firebase/storage";
const firebaseConfig = {
apiKey:"TON_API_KEY",
authDomain:"TON_DOMAINE",
projectId:"TON_PROJECT_ID",
storageBucket:"TON_STORAGE",
messagingSenderId:"TON_ID",
appId:"TON_APP_ID"
};
const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
export const db = getFirestore(app);
export const storage = getStorage(app);
"use client";
import {useState} from "react";
import {
createUserWithEmailAndPassword
} from "firebase/auth";
import {auth} from "@/lib/firebase";
export default function Register(){
const [email,setEmail]=useState("");
const [password,setPassword]=useState("");
async function register(){
await createUserWithEmailAndPassword(
auth,
email,
password
);
alert("Bienvenue dans CuteCloud 🌸");
}
return(
🎀 Créer un compte
setEmail(e.target.value)
}
/>
setPassword(e.target.value)
}
/>
Créer mon compte 💗
)
}"use client";
import {useState} from "react";
import {
signInWithEmailAndPassword
}
from "firebase/auth";
import {
auth
}
from "@/lib/firebase";
export default function Login(){
const [email,setEmail]=useState("");
const [password,setPassword]=useState("");
async function login(){
await signInWithEmailAndPassword(
auth,
email,
password
);
alert("Connexion réussie 🌸");
}
return(
🌸 Connexion
setEmail(e.target.value)
}
/>
setPassword(e.target.value)
}
/>
Entrer 💕
)
}.auth{
min-height:100vh;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
gap:20px;
}
.auth h1{
color:#ff75b5;
font-size:35px;
}
.auth input{
padding:15px;
width:300px;
border-radius:30px;
border:none;
background:#ffe5f2;
}
.auth button{
padding:15px 40px;
border:none;
border-radius:30px;
background:#ff8fc8;
color:white;
font-size:18px;
}