diff --git a/locales/en/events.json b/locales/en/events.json index 1083b1f..819eab0 100644 --- a/locales/en/events.json +++ b/locales/en/events.json @@ -5,6 +5,31 @@ "upcoming": "Upcoming event", "previous": "Previous event", "events": { + "hacktoberfest-2025": { + "title": "Hacktoberfest 2025", + "desc": "The 5th edition of Hacktoberfest organized by the Galsen DEV community.", + "full": "On October 25, 2025, the Galsen DEV community celebrated Hacktoberfest with a day dedicated to sharing, learning, and open source. Participants attended inspiring talks, interactive demonstrations, and had the opportunity to connect with experts such as Souleymane Diallo, Mahamadou Kheraba Diaby, Ahmadou Waly Ndiaye, Mamadou Diagne, Elias Waly Ba, and Médoune Siby Georges Balde. The day featured technical presentations, panels, and discussions on innovation and open source contributions, followed by networking sessions and a group photo. The event took place at FST UCAD, behind the FST hall (Nouveau Bâtiment), in a friendly and enriching atmosphere for all attendees." + }, + "hack-session-2-hacktoberfest-2025": { + "title": "Hack Session #2 Hacktoberfest 2025", + "desc": "The practical foundations of open source contribution and getting ready to take part in Hacktoberfest.", + "full": "This interactive session, led by Mouhamadou Moustapha DIAGNE, Tech Manager at Galsen DEV, focused on the practical side of open source contribution. Participants learned how to fork a project, submit a pull request, and follow best practices for collaboration on GitHub. It was a collective learning experience that helped participants get ready to contribute effectively during Hacktoberfest and beyond." + }, + "hack-session-1-hacktoberfest-2025": { + "title": "Hack Session #1 Hacktoberfest 2025", + "desc": "Understanding the importance of Hacktoberfest and learning how to contribute to open source projects.", + "full": "This introductory session offered a deep dive into the world of Hacktoberfest, the global month dedicated to open source contributions. Led by Daouda BA, Lead of the Galsen DEV community, it helped participants understand the philosophy of Hacktoberfest, its value for developers, and the practical steps to get involved. It was an ideal event to discover how even first-time contributions can have a real impact in the open source ecosystem." + }, + "galsendev-meetup-9": { + "title": "GalsenDEV Meetup #9", + "desc": "A talk to explore Jant Taf, an automatic API generator designed to speed up web application development.", + "full": "The GalsenDEV Meetup #9 hosted Mouhamed AMAR, Chief Operations Officer at Jant Tech, lecturer (UCAD, UAHB), and web development trainer. He presented Jant Taf, a tool that automatically generates APIs from MySQL, PostgreSQL, or SQL Server databases, designed to accelerate development and simplify developers’ workflows. The session was both technical and inspiring, highlighting how local solutions can help automate and optimize web projects." + }, + "galsendev-meetup-8": { + "title": "GalsenDEV Meetup #8", + "desc": "Discovering FlutterGigs, the platform connecting Flutter developers to new opportunities.", + "full": "The GalsenDEV Meetup held on July 27 featured Ethiel ADIASSA, Google Developer Expert for Flutter & Dart, creator of FlutterGigs, and a well-known speaker in the international tech community. During the session, he presented FlutterGigs, an innovative platform designed to connect Flutter developers with professional opportunities. Participants also received practical advice on how to showcase their skills and seize opportunities within the Flutter ecosystem. It was a rich and inspiring moment of knowledge sharing, experience, and learning for the Galsen DEV community." + }, "galsendev-meetup-7": { "title": "GalsenDEV Meetup #7", "desc": "A talk to discover Filament, a Laravel tool for building modern admin interfaces.", @@ -116,6 +141,8 @@ "full": "Our very first webinar allowed participants to acquire essential knowledge about Docker technology, strengthening their development skills. With Meïssa MBAYE and Alioune Badara DIAKHATÉ." } }, + "next": "Next", + "prev": "Previous", "fail": "Failed to load", "load": "Loading...", "up": "upcoming", diff --git a/locales/en/gallery.json b/locales/en/gallery.json index 6e38666..07ce7bd 100644 --- a/locales/en/gallery.json +++ b/locales/en/gallery.json @@ -3,6 +3,11 @@ "firstHeading": "Our photo gallery", "secondHeading": "Find highlights from our latest events with the Galsen DEV community.", "see": "See the pictures", + "event-9": { + "title": "Hacktoberfest 2025", + "desc": "The 5th edition of Hacktoberfest organized by the Galsen DEV community.", + "date": "October 25, 2025" + }, "event-8": { "title": "Galsen DEV x UAM", "desc": "An afternoon with the students of Amadou Mahtar MBOW University.", diff --git a/locales/en/home.json b/locales/en/home.json index 955942f..03dfe47 100644 --- a/locales/en/home.json +++ b/locales/en/home.json @@ -43,9 +43,9 @@ "lastEvent": { "heading": { "first": "Our last event:", - "second": "Hacktoberfest 2024" + "second": "Hacktoberfest 2025" }, - "text": "Hacktoberfest 2024 provided an exceptional opportunity to celebrate open source! The event featured a series of captivating talks and interactive demonstrations led by renowned speakers, making this day an unforgettable experience of inspiration and collaboration.", + "text": "Hacktoberfest 2025 once again celebrated open source in the best possible way. This 5th edition was marked by a series of insightful talks, an inspiring panel, and dynamic exchanges between enthusiasts, students, and professionals. A day filled with sharing, learning, and collaboration that strengthened community spirit and commitment to open source culture in Senegal.", "button": "Learn more", "photos": "View pictures" }, diff --git a/locales/fr/events.json b/locales/fr/events.json index 168f1bb..bb860bc 100644 --- a/locales/fr/events.json +++ b/locales/fr/events.json @@ -5,6 +5,31 @@ "upcoming": "Évènement à venir", "previous": "Événement passé", "events": { + "hacktoberfest-2025": { + "title": "Hacktoberfest 2025", + "desc": "La 5ᵉ édition du Hacktoberfest organisée par la communauté Galsen DEV.", + "full": "Le 25 octobre 2025, la communauté Galsen DEV a célébré le Hacktoberfest avec une journée dédiée au partage, à l’apprentissage et à l’open source. Les participants ont pu assister à des talks inspirants, des démonstrations interactives et échanger avec des experts tels que Souleymane Diallo, Mahamadou Kheraba Diaby, Ahmadou Waly Ndiaye, Mamadou Diagne, Elias Waly Ba et Médoune Siby Georges Balde. La journée a été rythmée par des présentations techniques, des panels et des discussions autour de l’innovation et des contributions open source, suivies d’un moment de réseautage et de photo de famille. L’événement s’est tenu à la FST UCAD, derrière le hall de la FST (Nouveau Bâtiment), dans une ambiance conviviale et enrichissante pour tous les participants." + }, + "hack-session-2-hacktoberfest-2025": { + "title": "Hack Session #2 Hacktoberfest 2025", + "desc": "Les bases pratiques de la contribution open source et se préparer à participer au Hacktoberfest.", + "full": "Cette session interactive, animée par Mouhamadou Moustapha DIAGNE, Tech Manager de Galsen DEV, était dédiée à la pratique de la contribution open source. Les participants y ont appris à forker un projet, à proposer une pull request, et à respecter les bonnes pratiques de collaboration sur GitHub. Un moment d’apprentissage collectif qui a permis de mieux se préparer à contribuer efficacement lors du Hacktoberfest et au-delà." + }, + "hack-session-1-hacktoberfest-2025": { + "title": "Hack Session #1 Hacktoberfest 2025", + "desc": "Comprendre l'importance du Hacktoberfest et apprendre comment contribuer à des projets open source.", + "full": "Cette session d’introduction a permis de plonger dans l’univers du Hacktoberfest, le mois mondial de la contribution open source. Animée par Daouda BA, Lead de la communauté Galsen DEV, elle a permis aux participants de comprendre la philosophie du Hacktoberfest, ses enjeux pour les développeurs, et les étapes concrètes pour y participer. Ce fut un rendez-vous idéal pour découvrir comment les premières contributions peuvent avoir un impact réel dans l’écosystème open source." + }, + "galsendev-meetup-9": { + "title": "GalsenDEV Meetup #9", + "desc": "Un talk pour explorer Jant Taf, un générateur automatique d’API conçu pour accélérer le développement d’applications web.", + "full": "Le GalsenDEV Meetup #9 a eu pour invité Mouhamed AMAR, Directeur des Opérations chez Jant Tech, enseignant (UCAD, UAHB) et formateur en développement web. Il y a présenté Jant Taf, un outil de génération automatique d’API à partir de bases de données MySQL, PostgreSQL ou SQL Server, conçu pour accélérer le développement et simplifier le workflow des développeurs. Cette session, à la fois technique et inspirante, a mis en lumière les possibilités offertes par les solutions locales pour automatiser et optimiser les projets web." + }, + "galsendev-meetup-8": { + "title": "GalsenDEV Meetup #8", + "desc": "À la découverte de FlutterGigs, la plateforme qui connecte les développeurs Flutter aux opportunités.", + "full": "Le GalsenDEV Meetup du 27 juillet a accueilli Ethiel ADIASSA, Google Developer Expert Flutter & Dart, créateur de FlutterGigs et intervenant reconnu dans la communauté tech internationale. Lors de cet échange, il a présenté FlutterGigs, une plateforme innovante qui connecte les développeurs Flutter aux opportunités professionnelles. Les participants ont également bénéficié de conseils pratiques sur les meilleures approches pour valoriser leurs compétences et saisir des opportunités dans l’écosystème Flutter. Ce fut un moment riche en partage d’expériences, en inspiration et en apprentissage pour la communauté Galsen DEV." + }, "galsendev-meetup-7": { "title": "GalsenDEV Meetup #7", "desc": "Un talk pour découvrir Filament, un outil Laravel pour créer des interfaces d’administration modernes.", @@ -116,6 +141,8 @@ "full": "Notre tout premier webinaire a permis aux participants d'acquérir des connaissances essentielles sur la technologie Docker, renforçant ainsi leurs compétences en développement. Avec la participation de Meïssa MBAYE et Alioune Badara DIAKHATÉ." } }, + "next": "Suivant", + "prev": "Précédent", "fail": "Échec du chargement", "load": "Chargement...", "up": "à venir", diff --git a/locales/fr/gallery.json b/locales/fr/gallery.json index 06c44e5..eed61b9 100644 --- a/locales/fr/gallery.json +++ b/locales/fr/gallery.json @@ -3,6 +3,11 @@ "firstHeading": "Notre galerie photo", "secondHeading": "Retrouvez les clichés marquants de nos derniers événements avec la communauté Galsen DEV.", "see": "Voir les photos", + "event-9": { + "title": "Hacktoberfest 2025", + "desc": "La 5ᵉ édition du Hacktoberfest organisée par la communauté Galsen DEV.", + "date": "25 Octobre 2025" + }, "event-8": { "title": "Galsen DEV x UAM", "desc": "Un après-midi avec les étudiants de l’Université Amadou Mahtar MBOW.", diff --git a/locales/fr/home.json b/locales/fr/home.json index 43377ab..7c02b79 100644 --- a/locales/fr/home.json +++ b/locales/fr/home.json @@ -43,9 +43,9 @@ "lastEvent": { "heading": { "first": "Notre dernier event :", - "second": "Hacktoberfest 2024" + "second": "Hacktoberfest 2025" }, - "text": "Le Hacktoberfest 2024 a permis de célébrer l'open source de manière exceptionnelle ! L'événement a offert une succession de conférences captivantes et de démonstrations interactives dirigées par des speakers de renom, faisant de cette journée une expérience inoubliable d'inspiration et de collaboration.", + "text": "Le Hacktoberfest 2025 a une fois de plus célébré l’open source de la plus belle des manières. Cette 5ᵉ édition a été marquée par une série de conférences enrichissantes, un panel inspirant et des échanges dynamiques entre passionnés, étudiants et professionnels. Une journée rythmée par le partage, l’apprentissage et la collaboration, qui a renforcé l’esprit communautaire et l’engagement autour de la culture open source au Sénégal.", "button": "En savoir plus", "photos": "Voir les photos" }, diff --git a/public/gallery/hacktoberfest2025.jpg b/public/gallery/hacktoberfest2025.jpg new file mode 100644 index 0000000..d7d7850 Binary files /dev/null and b/public/gallery/hacktoberfest2025.jpg differ diff --git a/src/components/gallery/EventsGallery.tsx b/src/components/gallery/EventsGallery.tsx index 548f02f..b884965 100644 --- a/src/components/gallery/EventsGallery.tsx +++ b/src/components/gallery/EventsGallery.tsx @@ -1,13 +1,14 @@ import Image, { StaticImageData } from 'next/image'; import Link from 'next/link'; +import hf25 from '/public/gallery/hacktoberfest2025.jpg'; import uam25 from '/public/gallery/uam2025.jpg'; import icagi from '/public/gallery/icagi2024.jpg'; import hof24 from '/public/gallery/hacktoberfest2024.jpg'; -import hof23 from '/public/gallery/hacktoberfest2023.jpg'; +import hf23 from '/public/gallery/hacktoberfest2023.jpg'; import ciga from '/public/gallery/ciga2023.jpg'; -import hof22 from '/public/gallery/hacktoberfest2022.jpg'; -import hof21 from '/public/gallery/hacktoberfest2021.jpg'; +import hf22 from '/public/gallery/hacktoberfest2022.jpg'; +import hf21 from '/public/gallery/hacktoberfest2021.jpg'; import xtdk21 from '/public/gallery/xaralatourdk2021.jpg'; import useTranslation from 'next-translate/useTranslation'; @@ -28,6 +29,12 @@ const EventsGallery = () => {
+ { eventId="event-5" place="Campus Xarala, Sicap Mbao" photosLink="https://photos.app.goo.gl/j6f9geUSLrYuwDn38" - image={hof23} + image={hf23} /> { eventId="event-3" place="Campus Xarala, Liberté 6" photosLink="https://photos.app.goo.gl/PwzmZYvXwT1zo6ss5" - image={hof22} + image={hf22} /> {
Last event of Galsen Dev {
- Impact Hub Dakar, Cité Keur Gorgui + FST UCAD (Nouveau Bâtiment), Dakar
{t('lastEvent.button')} diff --git a/src/pages/api/events/data.ts b/src/pages/api/events/data.ts index bca0deb..b89ad62 100644 --- a/src/pages/api/events/data.ts +++ b/src/pages/api/events/data.ts @@ -1,6 +1,46 @@ import { Event } from './type'; export const events: Event[] = [ + { + name: 'Hacktoberfest 2025', + description: + 'The 5th edition of Hacktoberfest organized by the Galsen DEV community', + date: '10/25/2025', + type: 'previous', + full: 'Full description here.', + }, + { + name: 'Hack Session #2 Hacktoberfest 2025', + description: + 'The practical foundations of open source contribution and getting ready to take part in Hacktoberfest.', + date: '10/19/2025', + type: 'previous', + full: 'Full description here.', + }, + { + name: 'Hack Session #1 Hacktoberfest 2025', + description: + 'Understanding the importance of Hacktoberfest and learning how to contribute to open source projects.', + date: '10/18/2025', + type: 'previous', + full: 'Full description here.', + }, + { + name: 'GalsenDEV Meetup #9', + description: + 'A talk to explore Jant Taf, an automatic API generator designed to speed up web application development.', + date: '09/27/2025', + type: 'previous', + full: 'Full description here.', + }, + { + name: 'GalsenDEV Meetup #8', + description: + 'Discovering FlutterGigs, the platform connecting Flutter developers to new opportunities.', + date: '07/27/2025', + type: 'previous', + full: 'Full description here.', + }, { name: 'GalsenDEV Meetup #7', description: diff --git a/src/pages/events/index.tsx b/src/pages/events/index.tsx index bdf5807..e9a0b51 100644 --- a/src/pages/events/index.tsx +++ b/src/pages/events/index.tsx @@ -1,6 +1,7 @@ import useSWR from 'swr'; import Link from 'next/link'; import useTranslation from 'next-translate/useTranslation'; +import { useState } from 'react'; import Header from '@/components/Header'; import { Event } from '@/pages/api/events/type'; @@ -10,9 +11,12 @@ const fetcher = (url: string) => fetch(url).then((res) => res.json()); export default function Events() { const { t: translationCommon } = useTranslation('common'); const { t } = useTranslation('events'); - const { data, error, isLoading } = useSWR('/api/events', fetcher); + // Pagination config + const ITEMS_PER_PAGE = 10; + const [currentPage, setCurrentPage] = useState(1); + // TODO: better handle these use cases if (error) return
{t('eventsPage.fail')}
; if (isLoading) return
{t('eventsPage.load')}
; @@ -21,11 +25,17 @@ export default function Events() { const upcomingEvents = data.filter((events) => events?.type === 'upcoming'); const previousEvents = data.filter((events) => events?.type === 'previous'); + // Pagination logic for previous events + const totalPages = Math.ceil(previousEvents.length / ITEMS_PER_PAGE); + const startIndex = (currentPage - 1) * ITEMS_PER_PAGE; + const endIndex = startIndex + ITEMS_PER_PAGE; + const paginatedPreviousEvents = previousEvents.slice(startIndex, endIndex); + return ( <>
-
+

{t('eventsPage.title')} @@ -36,11 +46,11 @@ export default function Events() {

-
+ {/* Upcoming events */} +

{t('eventsPage.upcoming')}

- {/* TODO: order by date */} {upcomingEvents.map((event) => ( ))}
-
+ + {/* Previous events with pagination */} +

{t('eventsPage.previous')}

- {/* TODO: order by date */} - {previousEvents.map((event) => ( + + {paginatedPreviousEvents.map((event) => ( ))} + + {/* Pagination controls */} +
+ + + Page {currentPage} / {totalPages} + + +
@@ -102,7 +137,6 @@ const EventCard = ({ name, date }: EventCardProps) => { month: 'short', year: 'numeric', }); - const eventDay = new Date(date).getDate().toString().padStart(2, '0'); return (