Commit ·
9d77c83
1
Parent(s): 57be6ff
v 0.1
Browse files- frontend/app/games/[game_id]/page.tsx +6 -3
- frontend/app/games/page.jsx +70 -22
- frontend/app/layout.tsx +45 -19
- frontend/app/page.tsx +143 -51
- frontend/next.config.mjs +10 -0
- frontend/public/images/logo.jpg +0 -0
frontend/app/games/[game_id]/page.tsx
CHANGED
|
@@ -5,9 +5,12 @@ import { useParams } from 'next/navigation';
|
|
| 5 |
export default function GamePage() {
|
| 6 |
const { game_id } = useParams();
|
| 7 |
return (
|
| 8 |
-
<main className="pt-24">
|
| 9 |
-
<section className="px-6 max-w-6xl mx-auto">
|
| 10 |
-
<div
|
|
|
|
|
|
|
|
|
|
| 11 |
{game_id}
|
| 12 |
</div>
|
| 13 |
</section>
|
|
|
|
| 5 |
export default function GamePage() {
|
| 6 |
const { game_id } = useParams();
|
| 7 |
return (
|
| 8 |
+
<main className="pt-24" data-oid="r2vzs0_">
|
| 9 |
+
<section className="px-6 max-w-6xl mx-auto" data-oid="0s10fd8">
|
| 10 |
+
<div
|
| 11 |
+
className="flex flex-col md:flex-row items-center gap-12 text-gray-200"
|
| 12 |
+
data-oid="zcmrkag"
|
| 13 |
+
>
|
| 14 |
{game_id}
|
| 15 |
</div>
|
| 16 |
</section>
|
frontend/app/games/page.jsx
CHANGED
|
@@ -1,42 +1,90 @@
|
|
| 1 |
'use client';
|
|
|
|
|
|
|
| 2 |
import Link from 'next/link';
|
|
|
|
| 3 |
|
| 4 |
function GameCard({ game }) {
|
| 5 |
return (
|
| 6 |
<Link
|
| 7 |
href={`/games/${game.id}`}
|
| 8 |
-
className="
|
|
|
|
| 9 |
>
|
| 10 |
-
<
|
| 11 |
-
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
</Link>
|
| 14 |
);
|
| 15 |
}
|
| 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
export default function GamesPage() {
|
|
|
|
| 18 |
const dummyDataGames = [
|
| 19 |
-
{
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
},
|
| 24 |
-
{ id: '
|
| 25 |
-
{ id: '9745127', name: 'Game 3', thumbnail: 'https://placehold.in/200/dark' },
|
| 26 |
-
{ id: '5215644', name: 'Game 4', thumbnail: 'https://placehold.in/200/dark' },
|
| 27 |
-
{ id: '8941561', name: 'Game 5', thumbnail: 'https://placehold.in/200/dark' },
|
| 28 |
-
{ id: '2654145', name: 'Game 6', thumbnail: 'https://placehold.in/200/dark' },
|
| 29 |
];
|
| 30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
return (
|
| 32 |
-
<main className="pt-24">
|
| 33 |
-
<section className="px-6 max-w-6xl mx-auto">
|
| 34 |
-
<h1
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
</
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
</section>
|
| 41 |
</main>
|
| 42 |
);
|
|
|
|
| 1 |
'use client';
|
| 2 |
+
|
| 3 |
+
import { useState } from 'react';
|
| 4 |
import Link from 'next/link';
|
| 5 |
+
import Image from 'next/image';
|
| 6 |
|
| 7 |
function GameCard({ game }) {
|
| 8 |
return (
|
| 9 |
<Link
|
| 10 |
href={`/games/${game.id}`}
|
| 11 |
+
className="group block bg-gray-900/50 p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-800/50 hover:border-gray-700/50"
|
| 12 |
+
data-oid="-pw15tw"
|
| 13 |
>
|
| 14 |
+
<div className="overflow-hidden rounded" data-oid="vdjdonj">
|
| 15 |
+
<Image
|
| 16 |
+
src={game.thumbnail}
|
| 17 |
+
alt={game.name}
|
| 18 |
+
width={400}
|
| 19 |
+
height={300}
|
| 20 |
+
className="w-full h-auto group-hover:scale-105 transition-transform"
|
| 21 |
+
data-oid="xqg0_7e"
|
| 22 |
+
/>
|
| 23 |
+
</div>
|
| 24 |
+
<h2 className="mt-4 text-xl font-bold text-center text-gray-300" data-oid="52yzjaz">
|
| 25 |
+
{game.name}
|
| 26 |
+
</h2>
|
| 27 |
</Link>
|
| 28 |
);
|
| 29 |
}
|
| 30 |
|
| 31 |
+
function SearchBar({ searchQuery, setSearchQuery }) {
|
| 32 |
+
return (
|
| 33 |
+
<input
|
| 34 |
+
type="text"
|
| 35 |
+
value={searchQuery}
|
| 36 |
+
onChange={(e) => setSearchQuery(e.target.value)}
|
| 37 |
+
placeholder="Find Game"
|
| 38 |
+
className="w-full mb-8 text-xl font-bold text-center text-gray-300 bg-gray-900/50 p-4 rounded-xl shadow-lg transition-shadow border border-gray-800/50 hover:border-gray-700/50 focus:outline-none"
|
| 39 |
+
data-oid="tbh4i8z"
|
| 40 |
+
/>
|
| 41 |
+
);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
export default function GamesPage() {
|
| 45 |
+
const [searchQuery, setSearchQuery] = useState('');
|
| 46 |
const dummyDataGames = [
|
| 47 |
+
{ id: '6516255', name: 'Game 1', thumbnail: 'https://placehold.in/400x300/dark' },
|
| 48 |
+
{ id: '6286722', name: 'Game 2', thumbnail: 'https://placehold.in/400x300/dark' },
|
| 49 |
+
{ id: '9745127', name: 'Game 3', thumbnail: 'https://placehold.in/400x300/dark' },
|
| 50 |
+
{ id: '5215644', name: 'Game 4', thumbnail: 'https://placehold.in/400x300/dark' },
|
| 51 |
+
{ id: '8941561', name: 'Game 5', thumbnail: 'https://placehold.in/400x300/dark' },
|
| 52 |
+
{ id: '2654145', name: 'Game 6', thumbnail: 'https://placehold.in/400x300/dark' },
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
];
|
| 54 |
|
| 55 |
+
const filteredGames = dummyDataGames.filter((game) =>
|
| 56 |
+
game.name.toLowerCase().includes(searchQuery.toLowerCase()),
|
| 57 |
+
);
|
| 58 |
+
|
| 59 |
return (
|
| 60 |
+
<main className="pt-24 min-h-screen" data-oid="zs-c6nn">
|
| 61 |
+
<section className="px-6 max-w-6xl mx-auto" data-oid="y:pdqim">
|
| 62 |
+
<h1
|
| 63 |
+
className="text-3xl font-bold mb-8 text-center text-indigo-400"
|
| 64 |
+
data-oid="028mndl"
|
| 65 |
+
>
|
| 66 |
+
Games
|
| 67 |
+
</h1>
|
| 68 |
+
<SearchBar
|
| 69 |
+
searchQuery={searchQuery}
|
| 70 |
+
setSearchQuery={setSearchQuery}
|
| 71 |
+
data-oid="a498wx2"
|
| 72 |
+
/>
|
| 73 |
+
|
| 74 |
+
{filteredGames.length > 0 ? (
|
| 75 |
+
<div
|
| 76 |
+
className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6"
|
| 77 |
+
data-oid=":uri6s2"
|
| 78 |
+
>
|
| 79 |
+
{filteredGames.map((game) => (
|
| 80 |
+
<GameCard key={game.id} game={game} data-oid="gbidxtf" />
|
| 81 |
+
))}
|
| 82 |
+
</div>
|
| 83 |
+
) : (
|
| 84 |
+
<p className="text-center text-gray-400 text-xl" data-oid="zjxr2rg">
|
| 85 |
+
No games found.
|
| 86 |
+
</p>
|
| 87 |
+
)}
|
| 88 |
</section>
|
| 89 |
</main>
|
| 90 |
);
|
frontend/app/layout.tsx
CHANGED
|
@@ -8,49 +8,75 @@ const inter = Inter({ subsets: ['latin'] });
|
|
| 8 |
|
| 9 |
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
| 10 |
return (
|
| 11 |
-
<html lang="en">
|
| 12 |
-
<
|
| 13 |
-
<
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
CAM
|
| 20 |
</h1>
|
| 21 |
</div>
|
| 22 |
-
<div className="
|
| 23 |
<Link
|
| 24 |
href="/"
|
| 25 |
className="text-gray-300 hover:text-indigo-400 transition-colors"
|
|
|
|
| 26 |
>
|
| 27 |
Home
|
| 28 |
</Link>
|
| 29 |
<Link
|
| 30 |
href="/games"
|
| 31 |
className="text-gray-300 hover:text-indigo-400 transition-colors"
|
|
|
|
| 32 |
>
|
| 33 |
Games
|
| 34 |
</Link>
|
| 35 |
<Link
|
| 36 |
href="#"
|
| 37 |
className="text-gray-300 hover:text-indigo-400 transition-colors"
|
| 38 |
-
|
| 39 |
-
Community
|
| 40 |
-
</Link>
|
| 41 |
-
<Link
|
| 42 |
-
href="#"
|
| 43 |
-
className="text-gray-300 hover:text-indigo-400 transition-colors"
|
| 44 |
>
|
| 45 |
About
|
| 46 |
</Link>
|
| 47 |
</div>
|
| 48 |
</div>
|
| 49 |
</nav>
|
| 50 |
-
<div className="flex-grow pt-[60px] pb-12">
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
</div>
|
| 55 |
</footer>
|
| 56 |
</div>
|
|
|
|
| 8 |
|
| 9 |
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
| 10 |
return (
|
| 11 |
+
<html lang="en" className="overflow-x-hidden" data-oid="y_yy_gm">
|
| 12 |
+
<head data-oid="o:gkfmp">
|
| 13 |
+
<meta
|
| 14 |
+
name="viewport"
|
| 15 |
+
content="width=device-width, initial-scale=1.0"
|
| 16 |
+
data-oid="gc:ebrh"
|
| 17 |
+
/>
|
| 18 |
+
</head>
|
| 19 |
+
<body className={`${inter.className} overflow-x-hidden`} data-oid="30z3_82">
|
| 20 |
+
<div
|
| 21 |
+
className="min-h-screen bg-gradient-to-br from-[var(--gradient-start)] via-[var(--gradient-middle)] to-[var(--gradient-end)] flex flex-col overflow-x-hidden"
|
| 22 |
+
data-oid="h4_ibmx"
|
| 23 |
+
>
|
| 24 |
+
<nav
|
| 25 |
+
className="px-2 py-4 bg-gray-950/90 backdrop-blur-sm fixed w-full z-50 border-b border-gray-800/50"
|
| 26 |
+
data-oid="dy.0t:f"
|
| 27 |
+
>
|
| 28 |
+
<div className="flex justify-between items-center" data-oid="00o_-1z">
|
| 29 |
+
<div className="flex items-center space-x-2" data-oid="xt0_pl6">
|
| 30 |
+
<img
|
| 31 |
+
className="w-auto h-12 rounded-full"
|
| 32 |
+
src="images/logo.jpg"
|
| 33 |
+
alt="Logo"
|
| 34 |
+
data-oid="jtersvl"
|
| 35 |
+
/>
|
| 36 |
+
|
| 37 |
+
<h1
|
| 38 |
+
className="text-xl font-bold bg-gradient-to-r from-indigo-400 to-purple-400 bg-clip-text text-transparent"
|
| 39 |
+
data-oid="q-amsu2"
|
| 40 |
+
>
|
| 41 |
CAM
|
| 42 |
</h1>
|
| 43 |
</div>
|
| 44 |
+
<div className="md:flex space-x-6" data-oid=":s.vlw7">
|
| 45 |
<Link
|
| 46 |
href="/"
|
| 47 |
className="text-gray-300 hover:text-indigo-400 transition-colors"
|
| 48 |
+
data-oid="ojq1h-9"
|
| 49 |
>
|
| 50 |
Home
|
| 51 |
</Link>
|
| 52 |
<Link
|
| 53 |
href="/games"
|
| 54 |
className="text-gray-300 hover:text-indigo-400 transition-colors"
|
| 55 |
+
data-oid="x2ichuj"
|
| 56 |
>
|
| 57 |
Games
|
| 58 |
</Link>
|
| 59 |
<Link
|
| 60 |
href="#"
|
| 61 |
className="text-gray-300 hover:text-indigo-400 transition-colors"
|
| 62 |
+
data-oid="309-whb"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
>
|
| 64 |
About
|
| 65 |
</Link>
|
| 66 |
</div>
|
| 67 |
</div>
|
| 68 |
</nav>
|
| 69 |
+
<div className="flex-grow pt-[60px] pb-12" data-oid="zz7b04t">
|
| 70 |
+
{children}
|
| 71 |
+
</div>
|
| 72 |
+
<footer className="mt-auto bg-gray-900 py-6" data-oid="rpdqbl3">
|
| 73 |
+
<div
|
| 74 |
+
className="max-w-6xl mx-auto px-6 text-center text-gray-400"
|
| 75 |
+
data-oid="31a0u89"
|
| 76 |
+
>
|
| 77 |
+
<p data-oid="mlr636_">
|
| 78 |
+
© 2025 Community for Active Mathematics. All rights reserved.
|
| 79 |
+
</p>
|
| 80 |
</div>
|
| 81 |
</footer>
|
| 82 |
</div>
|
frontend/app/page.tsx
CHANGED
|
@@ -6,60 +6,121 @@ export default function Page() {
|
|
| 6 |
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
| 7 |
|
| 8 |
return (
|
| 9 |
-
<main className="pt-24">
|
| 10 |
-
<section className="px-6 max-w-6xl mx-auto">
|
| 11 |
-
<div className="flex flex-col md:flex-row items-center gap-12">
|
| 12 |
-
<div className="flex-1 space-y-6">
|
| 13 |
-
<h2 className="text-5xl font-bold text-gray-100">
|
| 14 |
Making Math
|
| 15 |
-
<span className="text-indigo-400"
|
|
|
|
|
|
|
|
|
|
| 16 |
and
|
| 17 |
-
<span className="text-purple-400"
|
|
|
|
|
|
|
|
|
|
| 18 |
</h2>
|
| 19 |
-
<p className="text-lg text-gray-300">
|
| 20 |
Join our vibrant community of math enthusiasts and discover a new way to
|
| 21 |
learn mathematics through interactive games and creative tools.
|
| 22 |
</p>
|
| 23 |
-
<div className="flex gap-4">
|
| 24 |
-
<button
|
|
|
|
|
|
|
|
|
|
| 25 |
Start Learning
|
| 26 |
</button>
|
| 27 |
-
<button
|
|
|
|
|
|
|
|
|
|
| 28 |
Explore Games
|
| 29 |
</button>
|
| 30 |
</div>
|
| 31 |
</div>
|
| 32 |
-
<div className="flex-1 relative">
|
| 33 |
-
<div
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
Interactive learning through play
|
| 43 |
</p>
|
| 44 |
</div>
|
| 45 |
-
<div
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
Smart calculators & visualizers
|
| 50 |
</p>
|
| 51 |
</div>
|
| 52 |
-
<div
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
Learn together, grow together
|
| 57 |
</p>
|
| 58 |
</div>
|
| 59 |
-
<div
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
Track your learning journey
|
| 64 |
</p>
|
| 65 |
</div>
|
|
@@ -70,37 +131,68 @@ export default function Page() {
|
|
| 70 |
</div>
|
| 71 |
</section>
|
| 72 |
|
| 73 |
-
<section className="mt-32 px-6 max-w-6xl mx-auto">
|
| 74 |
-
<h2
|
|
|
|
|
|
|
|
|
|
| 75 |
Why Choose Us?
|
| 76 |
</h2>
|
| 77 |
-
<div className="grid md:grid-cols-3 gap-8">
|
| 78 |
-
<div
|
| 79 |
-
|
| 80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
</div>
|
| 82 |
-
<h3 className="font-bold text-xl mb-2 text-gray-100"
|
| 83 |
-
|
|
|
|
|
|
|
| 84 |
Interactive games and puzzles that make learning mathematics enjoyable
|
| 85 |
</p>
|
| 86 |
</div>
|
| 87 |
-
<div
|
| 88 |
-
|
| 89 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
</div>
|
| 91 |
-
<h3 className="font-bold text-xl mb-2 text-gray-100"
|
| 92 |
-
|
|
|
|
|
|
|
| 93 |
Connect with fellow learners and share your mathematical journey
|
| 94 |
</p>
|
| 95 |
</div>
|
| 96 |
-
<div
|
| 97 |
-
|
| 98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
</div>
|
| 100 |
-
<h3 className="font-bold text-xl mb-2 text-gray-100">
|
| 101 |
Accessible Learning
|
| 102 |
</h3>
|
| 103 |
-
<p className="text-gray-300">
|
| 104 |
Learn anytime, anywhere with our mobile-friendly platform
|
| 105 |
</p>
|
| 106 |
</div>
|
|
|
|
| 6 |
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
| 7 |
|
| 8 |
return (
|
| 9 |
+
<main className="pt-24" data-oid="suia.sz">
|
| 10 |
+
<section className="px-6 max-w-6xl mx-auto" data-oid="2-lkb6_">
|
| 11 |
+
<div className="flex flex-col md:flex-row items-center gap-12" data-oid="5_cs3qr">
|
| 12 |
+
<div className="flex-1 space-y-6" data-oid="22w2g86">
|
| 13 |
+
<h2 className="text-5xl font-bold text-gray-100" data-oid="a5tp9dq">
|
| 14 |
Making Math
|
| 15 |
+
<span className="text-indigo-400" data-oid="wyyhz:q">
|
| 16 |
+
{' '}
|
| 17 |
+
Fun{' '}
|
| 18 |
+
</span>
|
| 19 |
and
|
| 20 |
+
<span className="text-purple-400" data-oid="r.en8ru">
|
| 21 |
+
{' '}
|
| 22 |
+
Engaging
|
| 23 |
+
</span>
|
| 24 |
</h2>
|
| 25 |
+
<p className="text-lg text-gray-300" data-oid="1:-n1tn">
|
| 26 |
Join our vibrant community of math enthusiasts and discover a new way to
|
| 27 |
learn mathematics through interactive games and creative tools.
|
| 28 |
</p>
|
| 29 |
+
<div className="flex gap-4" data-oid="6ea:zb_">
|
| 30 |
+
<button
|
| 31 |
+
className="px-6 py-3 bg-indigo-500 text-white rounded-full hover:bg-indigo-400 transform hover:scale-105 transition-all"
|
| 32 |
+
data-oid="1iossc7"
|
| 33 |
+
>
|
| 34 |
Start Learning
|
| 35 |
</button>
|
| 36 |
+
<button
|
| 37 |
+
className="px-6 py-3 border-2 border-indigo-400 text-indigo-400 rounded-full hover:bg-indigo-950/50 transform hover:scale-105 transition-all"
|
| 38 |
+
data-oid="zhnvplg"
|
| 39 |
+
>
|
| 40 |
Explore Games
|
| 41 |
</button>
|
| 42 |
</div>
|
| 43 |
</div>
|
| 44 |
+
<div className="flex-1 relative" data-oid="j2k6f07">
|
| 45 |
+
<div
|
| 46 |
+
className="absolute -top-10 -left-10 w-40 h-40 bg-purple-500 rounded-full mix-blend-screen filter blur-xl opacity-20 animate-blob"
|
| 47 |
+
data-oid="f2fmu7t"
|
| 48 |
+
></div>
|
| 49 |
+
<div
|
| 50 |
+
className="absolute -bottom-10 -right-10 w-40 h-40 bg-indigo-500 rounded-full mix-blend-screen filter blur-xl opacity-20 animate-blob animation-delay-2000"
|
| 51 |
+
data-oid=".2r-tpi"
|
| 52 |
+
></div>
|
| 53 |
+
<div className="relative" data-oid="yvx_1_b">
|
| 54 |
+
<div
|
| 55 |
+
className="bg-gray-900/50 p-8 rounded-2xl shadow-xl transform rotate-3 hover:rotate-0 transition-transform border border-gray-800/50"
|
| 56 |
+
data-oid="ffx:.9u"
|
| 57 |
+
>
|
| 58 |
+
<div className="grid grid-cols-2 gap-4" data-oid="4-kokh_">
|
| 59 |
+
<div
|
| 60 |
+
className="bg-indigo-950/50 p-4 rounded-lg border border-indigo-800/20 hover:border-indigo-700/30 transition-colors"
|
| 61 |
+
data-oid="btu80g-"
|
| 62 |
+
>
|
| 63 |
+
<span className="text-2xl" data-oid="b.dgg1n">
|
| 64 |
+
🎮
|
| 65 |
+
</span>
|
| 66 |
+
<h3
|
| 67 |
+
className="font-bold text-gray-300 mt-2"
|
| 68 |
+
data-oid="gp6c-69"
|
| 69 |
+
>
|
| 70 |
+
Math Games
|
| 71 |
+
</h3>
|
| 72 |
+
<p className="text-sm text-gray-400" data-oid="5536hbh">
|
| 73 |
Interactive learning through play
|
| 74 |
</p>
|
| 75 |
</div>
|
| 76 |
+
<div
|
| 77 |
+
className="bg-purple-950/50 p-4 rounded-lg border border-purple-800/20 hover:border-purple-700/30 transition-colors"
|
| 78 |
+
data-oid="-f1-lsb"
|
| 79 |
+
>
|
| 80 |
+
<span className="text-2xl" data-oid="ogg:3ik">
|
| 81 |
+
🧮
|
| 82 |
+
</span>
|
| 83 |
+
<h3
|
| 84 |
+
className="font-bold text-gray-300 mt-2"
|
| 85 |
+
data-oid="-33yy7v"
|
| 86 |
+
>
|
| 87 |
+
Tools
|
| 88 |
+
</h3>
|
| 89 |
+
<p className="text-sm text-gray-400" data-oid="a4-ywx.">
|
| 90 |
Smart calculators & visualizers
|
| 91 |
</p>
|
| 92 |
</div>
|
| 93 |
+
<div
|
| 94 |
+
className="bg-pink-950/50 p-4 rounded-lg border border-pink-800/20 hover:border-pink-700/30 transition-colors"
|
| 95 |
+
data-oid=".jdekr."
|
| 96 |
+
>
|
| 97 |
+
<span className="text-2xl" data-oid="v29xal7">
|
| 98 |
+
👥
|
| 99 |
+
</span>
|
| 100 |
+
<h3
|
| 101 |
+
className="font-bold text-gray-300 mt-2"
|
| 102 |
+
data-oid="q:7swf-"
|
| 103 |
+
>
|
| 104 |
+
Community
|
| 105 |
+
</h3>
|
| 106 |
+
<p className="text-sm text-gray-400" data-oid="jqxkzcy">
|
| 107 |
Learn together, grow together
|
| 108 |
</p>
|
| 109 |
</div>
|
| 110 |
+
<div
|
| 111 |
+
className="bg-blue-950/50 p-4 rounded-lg border border-blue-800/20 hover:border-blue-700/30 transition-colors"
|
| 112 |
+
data-oid=".vx7_k:"
|
| 113 |
+
>
|
| 114 |
+
<span className="text-2xl" data-oid="pngnsr4">
|
| 115 |
+
📈
|
| 116 |
+
</span>
|
| 117 |
+
<h3
|
| 118 |
+
className="font-bold text-gray-300 mt-2"
|
| 119 |
+
data-oid="dmwcu5_"
|
| 120 |
+
>
|
| 121 |
+
Progress
|
| 122 |
+
</h3>
|
| 123 |
+
<p className="text-sm text-gray-400" data-oid="x26n:l3">
|
| 124 |
Track your learning journey
|
| 125 |
</p>
|
| 126 |
</div>
|
|
|
|
| 131 |
</div>
|
| 132 |
</section>
|
| 133 |
|
| 134 |
+
<section className="mt-32 px-6 max-w-6xl mx-auto" data-oid="-tclr59">
|
| 135 |
+
<h2
|
| 136 |
+
className="text-3xl font-bold text-center mb-12 text-gray-100"
|
| 137 |
+
data-oid="s4q-vmm"
|
| 138 |
+
>
|
| 139 |
Why Choose Us?
|
| 140 |
</h2>
|
| 141 |
+
<div className="grid md:grid-cols-3 gap-8" data-oid="tj8uck6">
|
| 142 |
+
<div
|
| 143 |
+
className="bg-gray-900/50 p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-800/50 hover:border-gray-700/50"
|
| 144 |
+
data-oid="7nzukhb"
|
| 145 |
+
>
|
| 146 |
+
<div
|
| 147 |
+
className="w-12 h-12 bg-indigo-950/50 rounded-full flex items-center justify-center mb-4 border border-indigo-800/20"
|
| 148 |
+
data-oid="czzu3n."
|
| 149 |
+
>
|
| 150 |
+
<span className="text-2xl" data-oid="iyv1b_0">
|
| 151 |
+
🎯
|
| 152 |
+
</span>
|
| 153 |
</div>
|
| 154 |
+
<h3 className="font-bold text-xl mb-2 text-gray-100" data-oid="-w8s6l7">
|
| 155 |
+
Engaging Content
|
| 156 |
+
</h3>
|
| 157 |
+
<p className="text-gray-300" data-oid="-97m7ti">
|
| 158 |
Interactive games and puzzles that make learning mathematics enjoyable
|
| 159 |
</p>
|
| 160 |
</div>
|
| 161 |
+
<div
|
| 162 |
+
className="bg-gray-900/50 p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-800/50 hover:border-gray-700/50"
|
| 163 |
+
data-oid="3npj5te"
|
| 164 |
+
>
|
| 165 |
+
<div
|
| 166 |
+
className="w-12 h-12 bg-purple-950/50 rounded-full flex items-center justify-center mb-4 border border-purple-800/20"
|
| 167 |
+
data-oid="tyjb-ir"
|
| 168 |
+
>
|
| 169 |
+
<span className="text-2xl" data-oid="vk38yl7">
|
| 170 |
+
🤝
|
| 171 |
+
</span>
|
| 172 |
</div>
|
| 173 |
+
<h3 className="font-bold text-xl mb-2 text-gray-100" data-oid="81nzq.h">
|
| 174 |
+
Active Community
|
| 175 |
+
</h3>
|
| 176 |
+
<p className="text-gray-300" data-oid=".11ais9">
|
| 177 |
Connect with fellow learners and share your mathematical journey
|
| 178 |
</p>
|
| 179 |
</div>
|
| 180 |
+
<div
|
| 181 |
+
className="bg-gray-900/50 p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-800/50 hover:border-gray-700/50"
|
| 182 |
+
data-oid="yk80-ll"
|
| 183 |
+
>
|
| 184 |
+
<div
|
| 185 |
+
className="w-12 h-12 bg-pink-950/50 rounded-full flex items-center justify-center mb-4 border border-pink-800/20"
|
| 186 |
+
data-oid="itm_4uq"
|
| 187 |
+
>
|
| 188 |
+
<span className="text-2xl" data-oid="zq-aobf">
|
| 189 |
+
📱
|
| 190 |
+
</span>
|
| 191 |
</div>
|
| 192 |
+
<h3 className="font-bold text-xl mb-2 text-gray-100" data-oid="v6qecuk">
|
| 193 |
Accessible Learning
|
| 194 |
</h3>
|
| 195 |
+
<p className="text-gray-300" data-oid="yxyzs3b">
|
| 196 |
Learn anytime, anywhere with our mobile-friendly platform
|
| 197 |
</p>
|
| 198 |
</div>
|
frontend/next.config.mjs
CHANGED
|
@@ -2,5 +2,15 @@ import path from 'path';
|
|
| 2 |
/** @type {import('next').NextConfig} */
|
| 3 |
const nextConfig = {
|
| 4 |
output: 'standalone',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
};
|
| 6 |
export default nextConfig;
|
|
|
|
| 2 |
/** @type {import('next').NextConfig} */
|
| 3 |
const nextConfig = {
|
| 4 |
output: 'standalone',
|
| 5 |
+
images:{
|
| 6 |
+
remotePatterns: [
|
| 7 |
+
{
|
| 8 |
+
protocol: 'https',
|
| 9 |
+
hostname: 'placehold.in',
|
| 10 |
+
port: '',
|
| 11 |
+
pathname: '/**',
|
| 12 |
+
}
|
| 13 |
+
]
|
| 14 |
+
}
|
| 15 |
};
|
| 16 |
export default nextConfig;
|
frontend/public/images/logo.jpg
ADDED
|