Hugo-powered QCrypt website for 2025 edition and later, live at at https://qcrypt.net. QCrypt is the yearly international scientific conference presenting last year’s top results in quantum cryptography. Hugo is a fast static website generator. https://qcrypt.net is generously hosted by netlify under a Open Source Plan ❤️!
Project initiated in 2020 and maintained since then by Christian Schaffner.
Originally based on the Hugo template from https://github.com/GDGToulouse/devfest-theme-hugo adapted from the fork by the cloudnative-amsterdam people: https://github.com/cloudnative-amsterdam/public-website
Used to run https://2020.qcrypt.net, https://2021.qcrypt.net, https://2022.qcrypt.net.
Since 2023, the theme submodule is included directly in this git repository.
In preparation of the 2025 edition, a more permanent solution is envisioned with one main page, where more years can be added, broadly modeled after the IACR flagship websites like https://eurocrypt.iacr.org/2024, https://eurocrypt.iacr.org/2025, https://crypto.iacr.org/2023/, https://asiacrypt.iacr.org/2024/, and the odd one out (in terms of design) https://crypto.iacr.org/2024/.
Warning
This has only been tested on macOS so far, so sharing your experience with other platforms here is very appreciated!
$ git clone https://github.com/QCrypt/qcrypt-website.git
- It's done. Just start Hugo server to see the site live!
$ cd qcrypt-website
$ hugo server
-
Edit the markdown source files with ending .md in the /content/ subdirectories to make changes to the site. You might also have to edit .json and .yml files in the /data/ subdirectory. As long as the hugo server is running, your changes should be visible immediately at http://localhost:1313/.
-
Using a suitable editor like Visual Studio Code allows to easily search across all source files, and will help finding the correct file to edit if you want to make specific changes.
-
When you are happy with the result, commit the changes to the master branch. The site is then automatically deployed to https://qcrypt-website.netlify.com/ and accessible under https://qcrypt.net. If you have the proper rights, you can see the deployment logs on netlify.
Is described in the README.md of the theme.
This site is built with modern web technologies:
-
Hugo: Hugo is a fast website builder that turns simple text files into a complete website. It watches for changes in your content and instantly updates the site while you work.
-
JamStack Architecture: The website follows a modern approach where all pages are created ahead of time. This makes the site fast, secure, and reliable since there's no need to generate pages when visitors arrive. Learn more about JamStack.
-
Content Management: Content is written in Markdown files that are easy to edit and track changes. Multiple people can work on the site together through GitHub, and all changes are safely stored and can be reviewed.
-
Styling with CSS/SASS: The website's appearance is controlled through CSS and SASS style files that make it easy to maintain a consistent look. Each conference year can have its own visual theme, and the site works well on all screen sizes.
-
Netlify Hosting: Netlify automatically builds and publishes the website whenever changes are made and committed to this repository. It ensures the site is secure, fast, and available worldwide through its global network.
This combination of tools creates a website that's fast, secure, and easy to maintain by the conference organizers.
- create a new logo, something with a sheep... see here for inspiration.
- choose a background image for the main site, e.g. 2024 or 2023
- and make a related banner, e.g. 2024 or 2023
- pick a related themecolor, like
#0099cc
or#ac191c
.
- It's probably easiest to copy the entire content folder from a previous year like /content/2024 and start adjusting from there
- create 2025 subfolder in /static/images
- put the images (logo, background image, banner) from above to this folder
add info to main config file /hugo.toml
- In
[params]
, LEAVE the currentYear and date as it is right now. Change this only when the new 2025 site is ready. - add a section
[params.2025]
and supply the required information - the timeanddate_cityid can be inferred from https://www.timeanddate.com/worldclock/personal.html by looking at the link after clicking on "Share This Personal World Clock"
- Under
[menu]
, create a new[[menu.2025]]
structure as for 2023 and 2024.
- Go through all .md files in /content/2025 and the
_index.md
files in the subdirectories, and adjust the front matter. - Adjust the
menu:
sub-entry to say2025
instead of2024
. - put
draft: true
in case you want to disable the page for the time being. - In general, whenever the year is passed on as parameter, you might have to update it. So, searching under /content/2025 for all occurrences of 2024 and replacing the correct ones with 2025 is probably a good strategy.
- In [/themes/devfest-theme-hugo/assets/style/], duplicate theme-2024.css and rename it to
theme-2025.css
- adjust the last line to set the
--primary:
variable inroot
to the themecolor picked above.
- on https://github.com/orgs/QCrypt/teams, create a new team
QCrypt 2025
- add admins https://github.com/orgs/QCrypt/teams/qcrypt-2025/members
- add repositories https://github.com/orgs/QCrypt/teams/qcrypt-2025/repositories
- In netlify https://app.netlify.com/teams/qcrypt/members: add new admin as collaborator to qcrypt-website
- on https://api.slack.com/apps/A01P06YNCCU/incoming-webhooks , create a new Webhook (on the bottom of the page)
- paste the Webhook URL into netfliy: https://app.netlify.com/sites/qcrypt2024/settings/deploys (for deploy succeesful and deploy failed)
- add admins to Slack channel
- We probably need new email addresses like 2025@qcrypt.net and pcchairs2025@qcrypt.net.
- connect new admins to admins from last year
- Is it time to update the hugo version? check what needs to be updated.
Once the new site is ready to be "promoted" to be the current year, make the following changes:
- In hugo.toml, in [params], change the currentYear and date
- In [[server.redirects]], change the forward to = "/2025/"
- In https://github.com/QCrypt/qcrypt-website/blob/main/netlify.toml , adjust the redirect as well
- adjust the according .md file in content/2025, possibly by switching back "draft: false" and adjusting the content from previous year
- all changes to the website should be mentioned in a table with "Website Updates" like on https://qcrypt.net/2023/, for the convenience of the website visitors
- The call-to-action buttons on the main site can be adjusted depending on the news.
- update the .md files in https://github.com/QCrypt/qcrypt-website/tree/main/content/2025/speakers
- remove previous images from the images subdirectory, upload new ones, and make sure the photoURL field of the speaker is pointing there.
- Use sensible names for the .md files, like eleni_diamanti.md
- Per speaker, create an according session in https://github.com/QCrypt/qcrypt-website/tree/main/content/2025/sessions , using the examples from previous years.
- Get accepted papers as json export from hotcrp from PC chair
- run this python script to sanitize the output, removing all emails, pc_conflicts etc.
- put the resulting file as accepted-papers-2025.json into data
Proceed accordingly with the list of accepted posters.
- duplicate https://github.com/QCrypt/qcrypt-website/blob/main/data/schedule-2024.yml and call it schedule-2025.yml
- make sure all sessions exist
- Adjust the id's of the contributed papers in the sessions with contributed papers
Have a look at the Hugo Documentation, ChatGPT is also quite knowledgable.
Hugo's favorite Content format is markdown, and that's what we use throughout. For data sources and config files, Hugo understands TOML, YAML, JSON, CSV, XML. We use the first three only.
Every content file contains a front matter, specifying metadata for the content, usually in yaml format. Important parameters are title, year, type, draft, menu. They influence how content is displayed.
Warning
In this site, we are deviating from the Hugo-recommended Organization of content source, because our top levels in the content/<DIRECTORIES>
are years, instead of topics. Therefore, the .Section
variable is often our $currentYear
.
The original Hugo template had multilingual support (French / English), but we have dropped this in the meanwhile, some reminders of these times are still around, though.
Note
We often use Hugo shortcodes in this project. There are two different types:
{{% %}}
produces markdown content like thejumbo
element on the main page.{{< >}}
produces HTML output, e.g. used to produce links withbutton-link
inside thejumbo
element on the main page. Some shortcodes have closing brackets, using the markdown content enclosed between them (likejumbo
), others don't (likebutton-link
).
Important
Even though Hugo is quite forgiving, please use sensible and consistent file names for content pages, pictures etc. This page recommends to:
- Stick to lowercase for all file names, including content files (
about.md
), layouts, and static assets (images/logo.png
). - Use hyphens (
-
) or underscores (_
) to separate words instead of spaces or capital letters (e.g.,my-article.md
ormy_article.md
).
See Menus in the Hugo documentation. We are using a mix of "In side configuration" and "in front matter" menu definitions.
The basic structure of the top menu is copied from the IACR flagship conference websites (like https://eurocrypt.iacr.org/2024). The basic menu structure is defined in /hugo.toml under [menu]. We have a menu hierarchy for each year, but these basic entries should basically be the same every year. The items "Technical Program" and "Attend" do not correspond to actual pages, they are used as parent menu items for other pages.
The other items in the menu are defined in the front matter of content pages.
The content of the footer is specified in /data/footer.yml. The "social share" options are currently disabled, the "social follow" options are Twitter and YouTube.
Note
Maybe we want to move away from Twitter soon?
The footer rarely needs to be changed. It automatically links to the charter, history and code of conduct of the current year. Just make sure that the content directory of the currentYear also contains these three files:
charter.md
history.md
code-of-conduct.md
Copy them over from the previous year and make sure they are up to date!
It is a requirement by the Netlify Open Source plan to link to a code of conduct, so do not remove that part!
The main home page per year is the /content/YEAR/_index.html
, like /content/2024/_index.html. It has type: home
and layout: home
in the front matter.
It is the only page without a banner on top, as it starts with a jumbo element which takes as arguments the background image, label and logo. The content of it is the date, and various call to actions using button-links, which in turn take arguments like label, url, icon.
The following elements are:
- home-info: some basic information about QCrypt
- home-keydates: the two most important tables: one with key dates, one with website updates, see 2023 for an example. Again, this is inspired by the IACR pages).
- home-location: image, address, and coordinates of the venue
- partners: list of sponsors, or call for sponsors
One of the first content pages to update and display. Follow the example of previous years.
All committees get their own subfolder, and there is an image folder for all portrait pictures. Ensure the photoURL front matter item points to the correct picture. When creating and naming new files, follow reasonable conventions.
The subdirectory is called partners
but on the website, we commonly refer to them as "Sponsors". There are subfolders for the different categories. Logos should go into the logos/
subfolders, and the logo
front matter entry should refer to that logo file.
Very similar to the administration of the team.
Make sure to create sessions for all speakers. In front matter of the session (e.g. this one), specify one or more speaker, referring to the key
entry in the speaker front matter (e.g. yuen
in this one).
The front matter of sessions should specify the year
, format
(like contributed
, invited
, industry
, tutorial
etc.). The type
has to be sessions
in order to render the session properly.
For sessions with contributed talks, specify the paper ids once they are known.
There is an overview of speakers (e.g. 2024), and and overview of sessions (e.g. 2024, both should be added to the "Technical Program" menu when ready.
Once a schedule is drawn up, insert the session names and start times into /data/schedule-2025.yml like in previous years. A schedule is then automatically generated and can be added to the "Technical Program" submenu by setting draft: false
in /content/2025/schedule/_index.html