Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
6de50e8
wip: hero section
iamcerebrocerberus Feb 28, 2026
bc4b33d
wip: footer section
iamcerebrocerberus Feb 28, 2026
9e83739
style: add "Built with love by …" to footer
iamcerebrocerberus Feb 28, 2026
6996d45
wip: cta section and add customizable button
iamcerebrocerberus Feb 28, 2026
22a8858
refactor: changes and fixes
iamcerebrocerberus Feb 28, 2026
7830ada
feat: add WhatWeOffer section
iamcerebrocerberus Feb 28, 2026
e0099e5
feat: 'site under contruction' banner
iamcerebrocerberus Feb 28, 2026
d42cad3
fix: linting reports
iamcerebrocerberus Feb 28, 2026
df2d62d
feat: add 404 page
iamcerebrocerberus Mar 3, 2026
29b2087
fix: linting report
iamcerebrocerberus Mar 3, 2026
3ff8780
refactor: liniting and styling
iamcerebrocerberus Mar 3, 2026
e3e344b
feat: add our impact section
iamcerebrocerberus Mar 4, 2026
0f99ad1
chore: add stats and bunch of changes
iamcerebrocerberus Mar 4, 2026
efbec65
feat: add newsletter section and other..
iamcerebrocerberus Mar 4, 2026
f2dd56f
refactor: make newsletter section wider
iamcerebrocerberus Mar 4, 2026
664fb53
style(cards): add box shadow outline to cards
iamcerebrocerberus Mar 4, 2026
43a0a2b
chore: changes and fixes
iamcerebrocerberus Mar 4, 2026
53812bd
fix: our impact section
iamcerebrocerberus Mar 4, 2026
01b7600
fix: CODEOWNERS to remove a nonexisting member
iamcerebrocerberus Mar 4, 2026
acda4bc
fix: linting reports
iamcerebrocerberus Mar 4, 2026
9517d3b
Merge branch 'dev' of github-personal:codetopiacommunity/community-we…
iamcerebrocerberus Mar 4, 2026
38cb3d3
feat: add media and gallery link to impact card
iamcerebrocerberus Mar 4, 2026
7e54eaa
revamp our impact cards
iamcerebrocerberus Mar 5, 2026
c79b7f3
revamp our impact cards
iamcerebrocerberus Mar 5, 2026
979f683
chore; bunch of changes
iamcerebrocerberus Mar 5, 2026
c950116
chore: linting
iamcerebrocerberus Mar 7, 2026
c6cf672
style: bump partner logos up
iamcerebrocerberus Mar 9, 2026
96c8aa9
feat: add sponsers, worked-with org, partners section
iamcerebrocerberus Mar 9, 2026
5c38c85
fix: marquees
iamcerebrocerberus Mar 10, 2026
f27d4df
feat: add 'a codetopia initiative' and styles
iamcerebrocerberus Mar 10, 2026
d92561d
chore: linting
iamcerebrocerberus Mar 10, 2026
5db8751
chore: change hero text and style for partner section
iamcerebrocerberus Mar 10, 2026
c4faf05
chore: change community logo
iamcerebrocerberus Mar 10, 2026
10b2420
refactor: change year in footer
iamcerebrocerberus Mar 10, 2026
589f2a6
chore: linting
iamcerebrocerberus Mar 10, 2026
67f6fd5
chore: add links and comment out some sections
iamcerebrocerberus Mar 12, 2026
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
4 changes: 2 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Global — core team reviews everything by default
* @cerebrocerberus @ichigo-k @khali-physi-hacker @papayankey @seth-mensah
* @cerebrocerberus @ichigo-k @khali-physi-hacker @papayankey

# App directory — critical, needs at least 2 eyes
/app/ @cerebrocerberus @ichigo-k @khali-physi-hacker @papayankey
Expand All @@ -16,4 +16,4 @@ next.config.js @cerebrocerberus @ichigo-k @khali-physi-hacker @papayankey
/public/ @cerebrocerberus @ichigo-k @khali-physi-hacker @papayankey

# Docs
/docs/ @cerebrocerberus @ichigo-k @khali-physi-hacker @papayankey
/docs/ @cerebrocerberus @ichigo-k @khali-physi-hacker @papayankey
60 changes: 60 additions & 0 deletions docs/cta-button.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# CTA Button Documentation

The `CtaButton` component (`src/components/ui/cta-button.tsx`) provides a highly customizable button component featuring the signature decorative "offset" background typical of the Codetopia design language.

It is completely polymorphic, meaning it can render as a standard `<button>` or as any other component (like a Next.js `<Link>`) while retaining all its complex styling logic.

## Props

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `className` | `string` | `undefined` | Classes applied directly to the button element (foreground). You can pass standard Tailwind text and background colors here to easily reskin it. |
| `offsetClassName` | `string` | `undefined` | Classes applied to the decorative offset div behind the button. Useful for changing the drop-shadow color or making it hidden on mobile. |
| `wrapperClassName` | `string` | `undefined` | Space-separated CSS classes extending the parent `div` that wraps the offset element and the actual button. |
| `asChild` | `boolean` | `false` | When true, passes the styles to its immediate child rather than rendering a `<button>`. Essential for creating styled text links instead of actual buttons. |

## Usage Examples

### Custom Styled Button
You can quickly apply your own colors to the foreground block and the background offset block.
```tsx
import { CtaButton } from "@/components/ui/cta-button";

<CtaButton
className="bg-white text-black hover:bg-zinc-200"
offsetClassName="bg-zinc-700 hidden sm:block"
>
JOIN OUR COMMUNITY
</CtaButton>
```

### Using as a Next.js Link
Because this component implements Radix UI's `Slot`, you can pass the `asChild` prop to render it as another component, such as a navigational `Link`, instead of a standard `button` element.
```tsx
import Link from "next/link";
import { CtaButton } from "@/components/ui/cta-button";

<CtaButton
asChild
className="bg-purple-600 text-white hover:bg-purple-700"
offsetClassName="bg-purple-900"
>
<Link href="/about">
READ MORE ABOUT US
</Link>
</CtaButton>
```

### Complex Outlined Buttons
You can use standard Tailwind classes to create borders and outlined variations of the CTA button since it is fully customizable through classes.
```tsx
import { CtaButton } from "@/components/ui/cta-button";

<CtaButton
className="border-zinc-600 text-white hover:bg-zinc-900 border-[1px] sm:border-2 !bg-transparent border-solid !px-10"
offsetClassName="border-zinc-600 hidden sm:block"
>
LEARN MORE
</CtaButton>
```

4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,15 @@
"dependencies": {
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"embla-carousel-auto-scroll": "^8.6.0",
"embla-carousel-autoplay": "^8.6.0",
"embla-carousel-react": "^8.6.0",
"lucide-react": "^0.575.0",
"next": "16.1.6",
"radix-ui": "^1.4.3",
"react": "19.2.3",
"react-dom": "19.2.3",
"react-icons": "^5.5.0",
"tailwind-merge": "^3.5.0"
},
"devDependencies": {
Expand Down
64 changes: 64 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 37 additions & 0 deletions src/app/about/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import Image from "next/image";
import logo from "@/assets/images/logos/codetopia-community.png";
import { Container } from "@/components/layout/Container";

export default function AboutPage() {
return (
<div className="flex-1 flex flex-col items-center justify-center py-24 md:py-32 bg-[#09090b]">
<Container className="flex flex-col items-center text-center px-4 max-w-4xl font-sans">
{/* Community Logo */}
<div className="mb-12">
<Image
src={logo}
alt="Codetopia Community"
width={400}
height={240}
priority
className="object-contain"
/>
</div>

{/* Heading */}
<h1 className="text-3xl md:text-5xl lg:text-6xl font-black text-white tracking-tighter uppercase mb-10 leading-none">
ABOUT CODETOPIA COMMUNITY
</h1>

{/* Description */}
<p className="text-zinc-400 text-lg md:text-xl lg:text-2xl font-normal leading-relaxed max-w-3xl">
Launched in 2020 as <a href="https://codetopia.org/">Codetopia</a>
's first initiative, Codetopia Community has grown from a small group
of passionate developers into a thriving ecosystem of tech
professionals, students, and enthusiasts, united by a commitment to
collaborative learning and innovation.
</p>
</Container>
</div>
);
}
1 change: 1 addition & 0 deletions src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
--color-foreground: var(--foreground);
--font-sans: var(--font-space-grotesk);
--font-mono: var(--font-inter);

--color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
Expand Down
8 changes: 6 additions & 2 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import type { Metadata } from "next";
import { Inter, Space_Grotesk } from "next/font/google";
import { ContributionBanner } from "@/components/layout/ContributionBanner";
import { Footer } from "@/components/layout/Footer"; // Added import for Footer
import { Header } from "@/components/layout/Header";
import "./globals.css";

Expand All @@ -26,10 +28,12 @@ export default function RootLayout({
return (
<html lang="en">
<body
className={`${spaceGrotesk.variable} ${inter.variable} antialiased min-h-screen bg-grey-900 flex flex-col`}
className={`${spaceGrotesk.variable} ${inter.variable} antialiased min-h-screen bg-[#09090b] text-white flex flex-col`}
>
<ContributionBanner />
<Header />
<main className="flex-1 w-full">{children}</main>
<main className="flex-1 w-full flex flex-col">{children}</main>
<Footer /> {/* Added Footer component */}
</body>
</html>
);
Expand Down
45 changes: 45 additions & 0 deletions src/app/not-found.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { MoveRight } from "lucide-react";
import Image from "next/image";
import Link from "next/link";
import logo from "@/assets/images/logos/codetopia-community.png";
import { Container } from "@/components/layout/Container";
import { CtaButton } from "@/components/ui/cta-button";

export default function NotFound() {
return (
<div className="flex-1 flex flex-col items-center justify-center py-24 md:py-32 relative overflow-hidden bg-[#09090b]">
{/* Watermark Background */}
<div className="absolute inset-0 z-0 flex items-center justify-center pointer-events-none opacity-5">
<Image
src={logo}
alt="Codetopia Watermark"
className="w-[150%] max-w-none md:w-full object-cover"
/>
</div>

<Container className="flex flex-col items-center justify-center text-center px-4 max-w-2xl font-sans relative z-10">
<h1 className="text-8xl md:text-[120px] font-black text-white tracking-tighter uppercase leading-none mb-6">
404
</h1>
<h2 className="text-2xl md:text-3xl font-bold text-zinc-200 mb-6 uppercase tracking-wider">
Page Not Found
</h2>
<p className="text-zinc-400 text-lg md:text-xl font-mono mb-12">
The page you are looking for does not exist or has been moved.
</p>

<Link href="/">
<CtaButton
className="bg-white text-black hover:bg-zinc-200 px-8"
offsetClassName="bg-zinc-700"
>
<span className="flex items-center">
RETURN HOME
<MoveRight className="ml-2 w-5 h-5" strokeWidth={2.5} />
</span>
</CtaButton>
</Link>
</Container>
</div>
);
}
22 changes: 15 additions & 7 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
import { Container } from "@/components/layout/Container";
import { CTA } from "@/components/home/CTA";
import { Hero } from "@/components/home/Hero";
import { Newsletter } from "@/components/home/Newsletter";
// import { Organisations } from "@/components/home/Organisations";
// import { OurImpact } from "@/components/home/OurImpact";
import { Stats } from "@/components/home/Stats";
import { WhatWeOffer } from "@/components/home/WhatWeOffer";

export default function Home() {
return (
<div className="w-full">
<section className="w-full">
<Container className="py-12">
<div className="text-white">Codetopia Is here again testing..</div>
</Container>
</section>
<div className="w-full flex flex-col">
<Hero />
{/* <Organisations /> */}
<Stats />
<WhatWeOffer />
{/* <OurImpact /> */}
<Newsletter />
<CTA />
</div>
);
}
Binary file added src/assets/images/django-girls.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/footer-bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/hero-bg-image.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed src/assets/images/logos/Codetopia-Logo-TW.png
Binary file not shown.
Binary file added src/assets/images/logos/articles-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/logos/community-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/logos/events-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 52 additions & 0 deletions src/components/home/CTA.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import Link from "next/link";
import { Container } from "@/components/layout/Container";
import { CtaButton } from "@/components/ui/cta-button";

export function CTA() {
return (
<section className="relative w-full py-24 md:py-32 bg-[#09090b] overflow-hidden flex flex-col items-center justify-center text-center">
{/* Brutalist Grid Background */}
<div
className="absolute inset-0 z-0 pointer-events-none opacity-[0.03]"
style={{
backgroundImage: `linear-gradient(to right, #ffffff 1px, transparent 1px),
linear-gradient(to bottom, #ffffff 1px, transparent 1px)`,
backgroundSize: "40px 40px",
}}
/>

<Container className="relative z-10 flex flex-col items-center max-w-4xl px-4 font-sans">
<h2 className="text-2xl md:text-4xl lg:text-5xl font-bold text-white mb-6 uppercase tracking-wider">
Ready to join our community
</h2>
<p className="text-zinc-300 text-base md:text-xl lg:text-2xl mb-12 max-w-3xl leading-relaxed">
Whether you're a beginner or an experienced developer, there's a place
for you in Codetopia Community. Start your journey today!
</p>

<div className="flex flex-col sm:flex-row items-center justify-center gap-6 sm:gap-4 w-full sm:w-auto">
<CtaButton
asChild
className="bg-white text-black hover:bg-zinc-200"
offsetClassName="border-white"
>
<a
href="https://discord.gg/3nBFMfdNmB"
target="_blank"
rel="noreferrer"
>
JOIN OUR COMMUNITY
</a>
</CtaButton>
<CtaButton
asChild
className="bg-[#09090b] text-white border border-white hover:bg-zinc-900"
offsetClassName="border-white"
>
<Link href="/about">LEARN MORE</Link>
</CtaButton>
</div>
</Container>
</section>
);
}
Loading
Loading