Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
60c1098
Add migrate-authors script
valencik Feb 16, 2026
9b8509d
Add base src/blog/directory.conf
valencik Feb 16, 2026
8fdb7bc
Add src/directory.conf (authors, sponsors)
valencik Feb 16, 2026
41936f3
Modify migrate-authors path and migrated
valencik Feb 16, 2026
45338fe
Run migrate-authors script
valencik Feb 16, 2026
83670f7
Remove dupe 'justin', 'jducoeur' in top level
valencik Feb 16, 2026
215786e
Add scala-cli stuff to .gitignore
valencik Feb 16, 2026
9b4b76c
Add bulk of src/ content (no posts, imgs)
valencik Feb 16, 2026
da8280b
git mv img/media src/image/
valencik Feb 16, 2026
3cf3f4e
Add other images
valencik Feb 16, 2026
cee5a5e
Add migrate-posts script
valencik Feb 16, 2026
9165119
Update migrate-posts.scala
valencik Feb 16, 2026
02bc408
Add migrate-events script
valencik Feb 16, 2026
dbe0d1b
Stage 1 migrate posts/events (moving)
valencik Feb 16, 2026
cdb3e25
Update migration source paths
valencik Feb 16, 2026
d65f0aa
Stage 2 migration, yaml to HOCON with title
valencik Feb 16, 2026
d20aab8
Stage 3 migration, basic link substitutions
valencik Feb 16, 2026
3b62934
Stage 4 migrate posts, more link fixes
valencik Feb 16, 2026
0672532
Stage 4 migrate events, schedules, sponsors
valencik Feb 16, 2026
d1d230e
Rename 2023-10-26-summit-nescala
valencik Feb 16, 2026
b8556f5
Rename 2025-08-22-meetup-lausanne
valencik Feb 16, 2026
fb543cd
Manual event edits, reducing html
valencik Feb 16, 2026
e9c7b99
Manual post edits, mostly math and links
valencik Feb 16, 2026
1625bfd
Add src/blog/README.md
valencik Feb 16, 2026
60212bf
Add build script for new site
valencik Feb 16, 2026
d06c4ca
Delete old image assets
armanbilge Feb 17, 2026
5b7bd61
Delete old templates, data, and jekyll stuff
armanbilge Feb 17, 2026
404fe50
Refresh CI workflow
armanbilge Feb 17, 2026
8eea20b
Add well-knowns
armanbilge Feb 17, 2026
07477cd
Standardize blog post naming
armanbilge Feb 17, 2026
2ad2c42
Add redirects, delete old pages
armanbilge Feb 17, 2026
f0dc06d
Optimize page load
armanbilge Feb 17, 2026
476bf47
Update readme, gitignore, add scalafmt
armanbilge Feb 17, 2026
a8d6eba
Tidy ups
armanbilge Feb 17, 2026
0f88a07
Format and check in ci
armanbilge Feb 17, 2026
7d21fe9
Fix ci script
armanbilge Feb 17, 2026
22e6973
Add image license info as figure captions
armanbilge Feb 18, 2026
14b6c78
Add projects to navigation
armanbilge Feb 18, 2026
5a2e8e4
Update donation information
armanbilge Feb 18, 2026
a2b7793
Merge pull request #577 from typelevel/arman/laika-rebuild
valencik Feb 18, 2026
c8576e5
Add `/conduct` redirect
valencik Feb 18, 2026
bf39e93
Update maecenata donation link
armanbilge Feb 18, 2026
9ef97c4
Fix card rendering in column layout
armanbilge Feb 18, 2026
bcd8b60
Render event info on blog summary
armanbilge Feb 18, 2026
9fd8e76
Update latest protosearch snapshot
valencik Feb 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 0 additions & 3 deletions .bundle/config

This file was deleted.

1 change: 0 additions & 1 deletion .envrc

This file was deleted.

2 changes: 0 additions & 2 deletions .github/CODEOWNERS

This file was deleted.

6 changes: 0 additions & 6 deletions .github/dependabot.yml

This file was deleted.

32 changes: 21 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,30 @@
name: nix-flake-check
name: Continuous Integration

on:
pull_request:
branches: ['**']
push:
branches:
- main
- reboot
branches: ['main']

jobs:
build:
name: Build and Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.1

- name: "Install Nix️"
uses: samueldr/lix-gha-installer-action@v1

- name: "Nix Flake Check"
run: nix -L flake check
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 25
- uses: coursier/cache-action@v6
- uses: VirtusLab/scala-cli-setup@main
with:
scala-cli-version: 1.12.2
- run: scala-cli fmt --check .
- run: scala-cli --server=false build.scala
- if: github.event_name != 'pull_request'
uses: peaceiris/actions-gh-pages@v4.0.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: target
cname: typelevel.org
17 changes: 5 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
_site
*.sw?
.idea
/vendor/bundle
css/main.css
.sass-cache
target
.deploy
.jekyll-metadata
.jekyll-cache/
.bsp
.metals
.DS_Store
.direnv/
.scala-build
.vscode

target/
2 changes: 2 additions & 0 deletions .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
version = "3.10.0"
runner.dialect = scala3
1 change: 0 additions & 1 deletion CNAME

This file was deleted.

10 changes: 0 additions & 10 deletions Gemfile

This file was deleted.

79 changes: 0 additions & 79 deletions Gemfile.lock

This file was deleted.

186 changes: 48 additions & 138 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,163 +1,73 @@
typelevel website
=================
# typelevel.org

This is the website of typelevel.scala. It is built on Jekyll and served at [typelevel.org](https://typelevel.org).
This is the source of typelevel.org. It is built with [Laika] and deployed to GitHub Pages.

## Getting Started (the short version)
## Get Started

If you just want to add a blog post or fix a typo in the content, here's how to get started.
To work on the website, you will need:
* Scala 3.5 or later
* Java 21 or later

### Creating a blog post
### Preview Server

1. Create a new file in the [`./collections/_posts`](./collections/_posts/) directory or copy an existing post. Its name should have the format `YYYY-MM-DD-short_title.md`.
2. Set the `title` (short title of the post, appears as the HTML `<title>`) and `author` (your GitHub user name) in the front matter. MathJax is available via `mathjax: true` inside the front matter.
3. If this is your first blog post, please indicate if you want your name and a profile picture to appear on the post. If not, you can remove the `author` field from the front matter. Add your details in `_data/authors.yml`.
4. Write your content using Markdown. For code highlighting, use the usual GitHub syntax:
For the best experience, serve the website to immediately see your changes in a live preview.

```scala
def yourCode: Here
```bash
scala build.scala -- serve
```

If you haven't written a post before, please add yourself to `_data/authors.yml`.

That's it, we'll take care of the rest. If you wish, you can also submit just a plain Markdown file and we'll be happy to integrate it.

### Previewing your changes

#### Bundler

To preview your changes, you have to install [Bundler](https://bundler.io/) first.
To download and set up all necessary dependencies, run

```console
$ bundle install
... lots of text ...
Bundle complete! 1 Gemfile dependency, 81 gems now installed.
Bundled gems are installed into `./vendor/bundle`
Within a few seconds, a preview server will be available at http://localhost:8000/. Press `Ctrl+C` to stop the server. In case you need to use a different port, you may pass it as an option.
```bash
scala run build.scala -- serve --port 8080
```

Then, you can generate the site by running

```console
$ bundle exec jekyll serve -wl --baseurl ''
```

The generated site will end up in the `_site` directory.

#### Nix
### Write a blog post

A fully configured Jekyll is available as a Nix app. Assumes that you have [installed Nix](https://nixos.org/download.html) and [enabled flakes](https://nixos.wiki/wiki/Flakes#Installing_flakes).
Blog posts (including event announcements) are added to the `src/blog/` directory. Content is written using [GitHub-flavored Markdown][gfm]. Code blocks support syntax highlighting in Scala and [several other languages][syntax]. Rendering of mathematical expressions is enabled for any document by setting `katex: true` in the configuration header and using the `@:math` directive.

```console
$ nix run github:typelevel/typelevel.github.com#jekyll build
warning: Git tree '/Users/ross.baker/src/typelevel.github.com' is dirty
Configuration file: /Users/ross.baker/src/typelevel.github.com/_config.yml
Source: /Users/ross.baker/src/typelevel.github.com
Destination: /Users/ross.baker/src/typelevel.github.com/_site
Incremental build: disabled. Enable with --incremental
Generating...
done in 3.635 seconds.
Auto-regeneration: disabled. Use --watch to enable.
```

There is also a devshell for direct invocation, and a convenient alias:

```console
$ nix develop github:typelevel/typelevel.github.com
🔨 Welcome to typelevel-org-shell

[general commands]

jekyll - a jekyll bundled with this site's dependencies
menu - prints this menu
tl-preview - preview the Jekyll site

$ tl-preview
Configuration file: /home/you/src/typelevel.github.com/_config.yml
Source: /home/you/src/typelevel.github.com
Destination: /home/you/src/typelevel.github.com/_site
Incremental build: disabled. Enable with --incremental
Generating...
done in 3.336 seconds.
Auto-regeneration: enabled for '/home/you/src/typelevel.github.com'
LiveReload address: http://127.0.0.1:35729
Server address: http://127.0.0.1:4000/
Server running... press ctrl-c to stop.
@:math
\forall a,b,c \in S : (a \cdot b) \cdot c = a \cdot (b \cdot c)
@:@
```



## License

Unless otherwise noted, all website content is licensed under a [Creative Commons Attribution 3.0 Unported License](https://creativecommons.org/licenses/by/3.0/deed.en_US).

## Development

### CSS

The stylesheets are written in SASS, and can be found in the `css` and `_sass` directories.
It is being processed/compiled into regular CSS by Jekyll.

If this is your first blog post, be sure to add your author info to `src/directory.conf`.

```hocon
toolkitty {
name: Toolkitty
pronouns: "they/them"
avatar: "https://github.com/toolkitty.png"
github: toolkitty
bluesky: toolkitty.bsky.social
bio: "I am the mascot of the Scala Toolkit!"
}
```
├── css/
│ ├── main.scss # Custom CSS, brings all stylesheets together
├── _sass/
│ ├── base/
│ ├── components/
│ ├── utils/
```

### Javascript

Javascript can be found in the `js/` folder, which also includes its dependencies.

### Templates

All templates/layouts can be found in the `_layouts` folder, except the blog layout, which is located inside its own subfolder `blog/`.

### Images

Images for styling purposes are located inside `img/`, photos inside `img/media/`.

### Adding a project

There are three types of projects: organization projects, affiliate projects, and core/featured projects.

To add an organization project, insert a new entry, alphabetically, in the `_data/projects.yml` file with the following keys:
Note that event announcements use a custom template with additional fields specified in the configuration header.

```yml
- title: "Cats"
description: "A library intended to provide abstractions for functional programming in Scala, leveraging its unique features. Design goals are approachability, modularity, documentation and efficiency."
github: "https://github.com/typelevel/cats"
platforms: [js, jvm, native]
permalink: "https://typelevel.org/cats/" # optional
```
{%
laika.html.template: event.template.html
date: "2025-08-15" # the date the post is published
event-date: "August 22, 2025" # the actual date of the event
event-location: "École Polytechnique Fédérale de Lausanne"
tags: [events]
%}
```

Right now nothing more than the correct front matter is required.

To add
- an **affiliate** project, add `affiliate: true` to the project entry
- a **core** project, add `core: true` to the project entry

### Adding a page

To add a page,

1. Create a directory in the root of the project, with at least an `index.html` file in that directory.
2. Update `_data/nav.yml` to add it to the navigation. (The site navigation is not fully dynamic for simplification.)
## Development

Sample front matter for a page:
The build machinery is defined in `build.scala`. It implements several customizations, including an RSS feed generator and integrations with Protosearch, KaTeX, and Font Awesome.

```yml
layout: page
title: "Code of Conduct"
```
To learn more about how you can develop and customize the website please reference the extensive [Laika] documentation.

### Help, CI is failing on a Dependabot PR
## Support

We need to update the gemset as well.
We are happy to help you contribute to our website! Please [create a discussion][discussion] or message the [#website][discord] channel on the Typelevel Discord.

```sh
nix run nixpkgs#bundix
git commit -am "Update gemset"
```
[Laika]: https://typelevel.org/Laika
[syntax]: https://typelevel.org/Laika/latest/03-preparing-content/05-syntax-highlighting.html#supported-languages
[gfm]: https://github.github.com/gfm/
[discussion]: https://github.com/typelevel/typelevel.github.com/discussions/new/choose
[discord]: https://discord.gg/krrdNdSDFf
Loading