├── .yarnrc.yml ├── locales ├── en │ ├── 404.json │ ├── 500.json │ ├── about.json │ ├── common.json │ ├── gallery.json │ ├── home.json │ ├── conduct.json │ ├── terms.json │ ├── privacy.json │ ├── policy.json │ └── events.json └── fr │ ├── 404.json │ ├── 500.json │ ├── about.json │ ├── common.json │ ├── gallery.json │ ├── home.json │ ├── conduct.json │ ├── terms.json │ ├── privacy.json │ ├── policy.json │ └── events.json ├── .npmrc ├── src ├── styles │ └── globals.css ├── pages │ ├── api │ │ └── events │ │ │ ├── type.ts │ │ │ ├── index.ts │ │ │ ├── [slug] │ │ │ └── index.ts │ │ │ └── data.ts │ ├── 500.tsx │ ├── 404.tsx │ ├── _document.tsx │ ├── about.tsx │ ├── _app.tsx │ ├── terms.tsx │ ├── policy.tsx │ ├── privacy.tsx │ ├── conduct.tsx │ ├── gallery.tsx │ ├── index.tsx │ └── events │ │ ├── [slug] │ │ └── index.tsx │ │ └── index.tsx └── components │ ├── Layout.tsx │ ├── announcements │ ├── Custom.tsx │ └── Donation.tsx │ ├── SocialLink.tsx │ ├── errors │ ├── 500Error.tsx │ └── 404Error.tsx │ ├── customs │ └── Blank.tsx │ ├── about │ └── Presentation.tsx │ ├── ui │ └── icon.tsx │ ├── home │ ├── StatsSection.tsx │ ├── HeroSection.tsx │ ├── ActivitySection.tsx │ ├── EventSection.tsx │ └── PartnersSection.tsx │ ├── svg │ └── GalsenDevLogo.tsx │ ├── Header.tsx │ ├── LanguageSelector.tsx │ ├── Navbar.tsx │ ├── legal │ ├── LegalConduct.tsx │ ├── LegalTerms.tsx │ ├── LegalPrivacy.tsx │ └── LegalPolicy.tsx │ ├── MobileMenu.tsx │ ├── Footer.tsx │ └── gallery │ └── EventsGallery.tsx ├── .eslintrc.json ├── .husky └── pre-commit ├── public ├── favicon │ ├── favicon.ico │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── apple-touch-icon.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ └── site.webmanifest ├── gallery │ ├── uam2025.jpg │ ├── ciga2023.jpg │ ├── icagi2024.jpg │ ├── hacktoberfest2021.jpg │ ├── hacktoberfest2022.jpg │ ├── hacktoberfest2023.jpg │ ├── hacktoberfest2024.jpg │ ├── hacktoberfest2025.jpg │ └── xaralatourdk2021.jpg ├── icons │ └── README.md └── svg │ ├── warning.svg │ └── coding.svg ├── .vscode └── extensions.json ├── postcss.config.cjs ├── .prettierrc.json ├── utils └── cn.ts ├── types ├── declarations.d.ts └── name.d.ts ├── .lintstagedrc.cjs ├── other ├── sly │ ├── sly.json │ └── transform-icon.ts ├── svg-icons │ ├── circle-arrow-left.svg │ ├── i18n.svg │ ├── x.svg │ ├── facebook.svg │ ├── youtube.svg │ ├── linkedin.svg │ ├── mega-phone.svg │ ├── telegram.svg │ ├── commit-icon.svg │ ├── check.svg │ ├── location.svg │ ├── github.svg │ ├── arrow-right.svg │ ├── hamburger-menu.svg │ ├── cross-1.svg │ ├── caret-sort.svg │ ├── members-icon.svg │ ├── discord.svg │ ├── galsen-dev-logo.svg │ ├── whatsapp.svg │ └── instagram.svg └── build-icons.mts ├── i18n.json ├── next.config.js ├── .prettierignore ├── tailwind.config.cjs ├── README.md ├── .github ├── ISSUE_TEMPLATE │ ├── feature-request.yml │ └── bug-fix.yml └── workflows │ └── test.yml ├── tsconfig.json ├── .gitignore ├── LICENSE.md ├── CONTRIBUTING.md └── package.json /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | -------------------------------------------------------------------------------- /locales/en/404.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Page not found" 3 | } 4 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | legacy-peer-deps=true 2 | registry=https://registry.npmjs.org/ -------------------------------------------------------------------------------- /locales/fr/404.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Page introuvable" 3 | } 4 | -------------------------------------------------------------------------------- /locales/en/500.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "A server error has occurred !" 3 | } 4 | -------------------------------------------------------------------------------- /locales/fr/500.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Une erreur côté serveur s'est produite !" 3 | } 4 | -------------------------------------------------------------------------------- /src/styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "plugin:prettier/recommended"] 3 | } 4 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx lint-staged 5 | -------------------------------------------------------------------------------- /public/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/favicon/favicon.ico -------------------------------------------------------------------------------- /public/gallery/uam2025.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/uam2025.jpg -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /public/gallery/ciga2023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/ciga2023.jpg -------------------------------------------------------------------------------- /public/gallery/icagi2024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/icagi2024.jpg -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /public/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /public/gallery/hacktoberfest2021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/hacktoberfest2021.jpg -------------------------------------------------------------------------------- /public/gallery/hacktoberfest2022.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/hacktoberfest2022.jpg -------------------------------------------------------------------------------- /public/gallery/hacktoberfest2023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/hacktoberfest2023.jpg -------------------------------------------------------------------------------- /public/gallery/hacktoberfest2024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/hacktoberfest2024.jpg -------------------------------------------------------------------------------- /public/gallery/hacktoberfest2025.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/hacktoberfest2025.jpg -------------------------------------------------------------------------------- /public/gallery/xaralatourdk2021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/gallery/xaralatourdk2021.jpg -------------------------------------------------------------------------------- /public/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/favicon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GalsenDev221/website/HEAD/public/favicon/android-chrome-512x512.png -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "semi": true, 5 | "singleQuote": true, 6 | "useTabs": true, 7 | "endOfLine": "lf" 8 | } 9 | -------------------------------------------------------------------------------- /public/icons/README.md: -------------------------------------------------------------------------------- 1 | # Icons 2 | 3 | Cet annuaire contient des icônes SVG utilisées par l'application. 4 | 5 | Tout ce qui se trouve dans cet annuaire est généré par `npm run build:icons`. 6 | -------------------------------------------------------------------------------- /utils/cn.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from 'clsx'; 2 | import { twMerge } from 'tailwind-merge'; 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)); 6 | } 7 | -------------------------------------------------------------------------------- /src/pages/api/events/type.ts: -------------------------------------------------------------------------------- 1 | export type Event = { 2 | name: string; 3 | type: 'upcoming' | 'previous'; 4 | description: string; 5 | date: string; 6 | full: string; 7 | }; 8 | 9 | export type ResponseError = { 10 | message: string; 11 | }; 12 | -------------------------------------------------------------------------------- /src/pages/500.tsx: -------------------------------------------------------------------------------- 1 | import Header from '@/components/Header'; 2 | import Error500 from '@/components/errors/500Error'; 3 | 4 | export default function Custom500() { 5 | return ( 6 | <> 7 |
8 | 9 | 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/404.tsx: -------------------------------------------------------------------------------- 1 | import Header from '@/components/Header'; 2 | import Error404 from '@/components/errors/404Error'; 3 | 4 | export default function Custom404() { 5 | return ( 6 | <> 7 |
8 | 9 | 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /types/declarations.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.png' { 2 | const value: any; 3 | export default value; 4 | } 5 | 6 | declare module '*.svg' { 7 | const value: any; 8 | export default value; 9 | } 10 | declare module '*.jpg' { 11 | const value: any; 12 | export default value; 13 | } 14 | -------------------------------------------------------------------------------- /src/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { Html, Head, Main, NextScript } from 'next/document'; 2 | 3 | export default function Document() { 4 | return ( 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /.lintstagedrc.cjs: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const buildEslintCommand = (filenames) => 4 | `next lint --fix --file ${filenames 5 | .map((f) => path.relative(process.cwd(), f)) 6 | .join(' --file ')}`; 7 | 8 | module.exports = { 9 | '*.{js,jsx,ts,tsx}': [buildEslintCommand], 10 | }; 11 | -------------------------------------------------------------------------------- /other/sly/sly.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://sly-cli.fly.dev/registry/config.json", 3 | "libraries": [ 4 | { 5 | "name": "@radix-ui/icons", 6 | "directory": "./other/svg-icons", 7 | "postinstall": ["npm", "run", "build:icons"], 8 | "transformers": ["transform-icon.ts"] 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/api/events/index.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from 'next'; 2 | import { events } from './data'; 3 | import { Event } from './type'; 4 | 5 | export default function handler( 6 | _req: NextApiRequest, 7 | res: NextApiResponse 8 | ) { 9 | res.status(200).json(events); 10 | } 11 | -------------------------------------------------------------------------------- /locales/en/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "presentation": { 3 | "aboutTitle": "We are Galsen DEV !", 4 | "aboutHeading": "A community of developers in Senegal with over 2,500 passionate members. Our mission is to build a dynamic tech ecosystem where developers can connect, create, and grow together.", 5 | "join": "Join us" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/components/Layout.tsx: -------------------------------------------------------------------------------- 1 | import { ReactNode } from 'react'; 2 | import Footer from './Footer'; 3 | import Navbar from './Navbar'; 4 | 5 | const Layout = ({ children }: { children: ReactNode }) => ( 6 | <> 7 | 8 |
{children}
9 |