This is the official website for the Geneva Java User Group, built with Astro and deployed on GitHub Pages.
- Node.js 18+ and npm
npm installTo start the development server:
npm run devThe website will be available at http://localhost:4321
To build the website for production:
npm run buildThe compiled website will be in the dist/ directory.
Create a new markdown file in the src/content/posts/ directory with the naming convention: src/content/posts/{locale}-YYYY-MM-DD-event-name.md
Example: src/content/posts/en-2024-06-25-event-sourcing.md
The file consists of two parts:
- Front matter (metadata) - delimited by three dashes (
---) - Content - markdown or HTML format
title(required): Event titlelocale(required): Language code (enorfr)speaker(optional): Speaker identifier(s) - can be a string or array- Example:
speaker: nicolas_piguetorspeaker: [nicolas_piguet, david_pilato]
- Example:
img(optional): Session image URLslideshare(optional): SlideShare presentation ID(s)location(optional): Event venue namelocationlink(optional): URL to venue websiteaddress(optional): Full venue addresstransport(optional): Nearby public transportation stopsparking(optional): Nearby parking optionseventbrite(optional): EventBrite ticket referenceeventbriteid(optional): EventBrite event ID
---
title: Event Sourcing - Reliability and Performance
locale: en
speaker:
- nicolas_piguet
- david_pilato
location: Foound
locationlink: https://www.foound.ch/
address: Rue Jean-Dassier 7, 1201 Genève
transport: Gare Cornavin, TPG Stops
parking: HEPIA building
---
## Event Description
This is the markdown content for the event...---
title: Event Sourcing - Fiabilité et Performance
locale: fr
speaker:
- nicolas_piguet
- david_pilato
location: Foound
locationlink: https://www.foound.ch/
address: Rue Jean-Dassier 7, 1201 Genève
transport: Gare Cornavin, TPG Stops
parking: HEPIA building
---
## Description de l'événement
Ceci est le contenu markdown pour l'événement...Note: Each session must have both an English and French version:
src/content/posts/en-YYYY-MM-DD-slug.md- English versionsrc/content/posts/fr-YYYY-MM-DD-slug.md- French version
Create a new markdown file in the src/content/speakers/ directory with the naming convention: src/content/speakers/{locale}-YYYY-MM-DD-speaker-id.md
Example:
src/content/speakers/en-2024-06-25-nicolas_piguet.mdsrc/content/speakers/fr-2024-06-25-nicolas_piguet.md
The speaker ID is extracted from the filename (everything after the date) and used in URLs and links.
title(required): Speaker's full namelocale(required): Language code (enorfr)
Add a speaker image to the public/speakers/ directory with the filename matching the speaker ID.
Supported formats: .jpg or .png
Example: public/speakers/nicolas_piguet.jpg
Image dimensions: Any size (will be cropped/styled by CSS)
---
title: Nicolas Piguet
locale: en
---
Nicolas Piguet is a Principal Software Engineer at Swissquote...├── src/
│ ├── components/ # Astro components
│ ├── content/ # Content collections
│ │ ├── config.ts # Content schema definitions
│ │ ├── posts/ # Session/event posts
│ │ │ ├── en-*.md # English sessions
│ │ │ └── fr-*.md # French sessions
│ │ └── speakers/ # Speaker profiles
│ │ ├── en-*.md # English speakers
│ │ └── fr-*.md # French speakers
│ ├── pages/ # Astro pages and routes
│ │ ├── index.astro # EN: homepage
│ │ ├── session/ # EN: /session/[slug]
│ │ ├── speaker/ # EN: /speaker/[slug]
│ │ └── fr/ # FR translations
│ │ ├── index.astro # FR: /fr homepage
│ │ ├── session/ # FR: /fr/session/[slug]
│ │ └── speaker/ # FR: /fr/speaker/[slug]
│ └── utils/ # Utility functions
├── public/
│ ├── speakers/ # Speaker images
│ └── images/ # Event images
├── dist/ # Built website (generated)
└── astro.config.mjs # Astro configuration
The website is automatically built and deployed to GitHub Pages when pushing to the main branch.
npm run buildThe dist/ directory contains the static website ready for deployment.
- Astro - Static site generator with content collections
- Markdown - Content format with YAML frontmatter
- CSS - Styling with CSS variables for theming
- JavaScript - Interactive features (theme toggle, language switching)
- Bilingual support - English and French content
- Content collections - Type-safe content management with schemas
- Dark mode toggle - Theme customization
- Responsive design - Mobile-first approach
- Session and speaker management - Bilingual post and speaker profiles
- Static site generation - Optimal performance and SEO
Please check the LICENSE file for details.