diff --git a/.bundle/config b/.bundle/config deleted file mode 100644 index 9bc01b4c..00000000 --- a/.bundle/config +++ /dev/null @@ -1,3 +0,0 @@ ---- -BUNDLE_PATH: "vendor/bundle" -BUNDLE_DISABLE_SHARED_GEMS: "true" diff --git a/.envrc b/.envrc deleted file mode 100644 index 3550a30f..00000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use flake diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 9ac02859..00000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,2 +0,0 @@ -# Announcing official Typelevel events requires explicit mod approval -/collections/_events/ @typelevel/steering diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index e5903e0b..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: 2 -updates: -- package-ecosystem: github-actions - directory: "/" - schedule: - interval: weekly diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb69b063..9e6ccd3f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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 diff --git a/.gitignore b/.gitignore index b15cbb0d..1ef06c8e 100644 --- a/.gitignore +++ b/.gitignore @@ -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/ diff --git a/.scalafmt.conf b/.scalafmt.conf new file mode 100644 index 00000000..c0db800d --- /dev/null +++ b/.scalafmt.conf @@ -0,0 +1,2 @@ +version = "3.10.0" +runner.dialect = scala3 \ No newline at end of file diff --git a/CNAME b/CNAME deleted file mode 100644 index 8442604a..00000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -typelevel.org \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 0c11fce1..00000000 --- a/Gemfile +++ /dev/null @@ -1,10 +0,0 @@ -source "https://rubygems.org" - -gem "jekyll", "~> 4.2" - -group :jekyll_plugins do - gem "jekyll-paginate" - gem "jekyll-feed" - end - -gem "webrick", "~> 1.8" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 4c45d681..00000000 --- a/Gemfile.lock +++ /dev/null @@ -1,79 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - colorator (1.1.0) - concurrent-ruby (1.1.9) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - eventmachine (1.2.7) - ffi (1.15.4) - forwardable-extended (2.6.0) - http_parser.rb (0.8.0) - i18n (1.8.11) - concurrent-ruby (~> 1.0) - jekyll (4.2.1) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 1.0) - jekyll-sass-converter (~> 2.0) - jekyll-watch (~> 2.0) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.0) - liquid (~> 4.0) - mercenary (~> 0.4.0) - pathutil (~> 0.9) - rouge (~> 3.0) - safe_yaml (~> 1.0) - terminal-table (~> 2.0) - jekyll-feed (0.15.1) - jekyll (>= 3.7, < 5.0) - jekyll-paginate (1.1.0) - jekyll-sass-converter (2.1.0) - sassc (> 2.0.1, < 3.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.3.1) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.4.0) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (4.0.6) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.3.9) - rouge (3.26.1) - safe_yaml (1.0.5) - sassc (2.4.0) - ffi (~> 1.9) - terminal-table (2.0.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.8.0) - webrick (1.8.2) - -PLATFORMS - arm64-darwin-21 - arm64-darwin-24 - x86_64-darwin-17 - x86_64-darwin-18 - x86_64-darwin-21 - x86_64-linux - -DEPENDENCIES - jekyll (~> 4.2) - jekyll-feed - jekyll-paginate - webrick (~> 1.8) - -BUNDLED WITH - 2.5.22 diff --git a/README.md b/README.md index afa167e5..f5a67f68 100644 --- a/README.md +++ b/README.md @@ -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 ``) 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 diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 9b25a120..00000000 --- a/_config.yml +++ /dev/null @@ -1,76 +0,0 @@ -# Ttitle, description... -# --------------------------------------------------------------- -name: Typelevel -title: Typelevel -description: Typelevel is an ecosystem of projects and a community of people united to foster an inclusive, welcoming, and safe environment around functional programming in Scala. -author: Israel Pérez -keywords: theme, jekyll, unstyle - -# Where things are (styles, site...) -# --------------------------------------------------------------- -sass: - sass_dir: _sass - sourcemap: never - -permalink: pretty - -highlighter: none - -# Serving, url -# --------------------------------------------------------------- -baseurl: "/typelevel.github.com" -url: "" - -# Conversion -# --------------------------------------------------------------- -markdown: kramdown - -kramdown: - syntax_highlighter_opts: - disable: true - -# Handling Reading -# --------------------------------------------------------------- -include: - - .well-known - -exclude: - [ - "config.ru", - "Gemfile", - "Gemfile.lock", - "vendor", - "Procfile", - "Rakefile", - ".bundle", - "extra", - ] - -# Collections -# --------------------------------------------------------------- -collections: - events: - output: true - permalink: /event/:year-:month-:title/ - layout: event - projects: - output: true - staff_members: - output: true - abouts: - output: true - posts: - output: true - permalink: /blog/:year/:month/:day/:title.html - -collections_dir: collections - - -# paginate: 5 -# paginate_path: "/blog/:num/" - -# PLUGIN -# --------------------------------------------------------------- - -plugins: - - jekyll-paginate diff --git a/_data/about.yml b/_data/about.yml deleted file mode 100644 index ee24e7c2..00000000 --- a/_data/about.yml +++ /dev/null @@ -1,23 +0,0 @@ -- title: "Open source" - description: "Independent, free/libre, and open-source software" - icon: /img/assets/icon-about-open-source.svg - -- title: "Functional" - description: "Pure, typeful, functional programming in Scala" - icon: /img/assets/icon-about-functional.svg - -- title: "Shared" - description: "A desire to share ideas and code" - icon: /img/assets/icon-about-shared.svg - -- title: "Resources" - description: "Accessible and idiomatic learning resources" - icon: /img/assets/icon-about-resources.svg - -- title: "Friendly" - description: "An inclusive, welcoming, and safe environment" - icon: /img/assets/icon-about-friendly.svg - -- title: "Modular" - description: "Focused, separate modules designed to work together" - icon: /img/assets/icon-about-modular.svg diff --git a/_data/cta.yml b/_data/cta.yml deleted file mode 100644 index fb6d4126..00000000 --- a/_data/cta.yml +++ /dev/null @@ -1,14 +0,0 @@ -newsTitle: Newsletter -newsDescription: Learn more about the organization. Here you can see the main goals we are pursuing. - -submittingTitle: Submitting -submittingDescription: Are you interested in submitting your library to the Typelevel Ecosystem? - -blogTitle: Contribute to the blog -blogDescription: If you want to share something about a library or Scala topics in general (e.g. type classes), case studies, examples, or other related content, please do not hesitate to contact us. - -conductTitle: Typelevel Code of Conduct -conductDescription: We are committed to providing a friendly, safe and welcoming environment for all, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity and orientation, or other such characteristics. - -steeringTitle: Steering Committee -steeringDescription: The Typelevel Steering Committee is a group of volunteers that govern Typelevel. \ No newline at end of file diff --git a/_data/description.yml b/_data/description.yml deleted file mode 100644 index 89f6f40f..00000000 --- a/_data/description.yml +++ /dev/null @@ -1,12 +0,0 @@ -aboutTitle: About -aboutDescription: Learn more about the organization, including our main goals, code of conduct, and governance. - -projectsTitle: Projects -projectsDescription: Our projects cover a wide range of domains, from general functional programming to tooling. - -blogTitle: Latest blog posts -blogDescription: In addition to org-level announcements, here we show you how to use our libraries in your code, provide examples, collect learning resources, and explore implementation details. - -eventsTitle: Events - -licenseTitle: License diff --git a/_data/filter-about.yml b/_data/filter-about.yml deleted file mode 100644 index 22f8d2b8..00000000 --- a/_data/filter-about.yml +++ /dev/null @@ -1,4 +0,0 @@ -- title: Overview - url: /about/ -- title: Contributing - url: /about/contributing/ diff --git a/_data/filter-blog.yml b/_data/filter-blog.yml deleted file mode 100644 index 320886e3..00000000 --- a/_data/filter-blog.yml +++ /dev/null @@ -1,15 +0,0 @@ -- title: All Posts - url: /blog/ - category: allPosts -- title: Governance - url: /blog/governance/ - category: governance -- title: Social - url: /blog/social/ - category: social -- title: Technical - url: /blog/technical/ - category: technical -- title: Summits - url: /blog/summits/ - category: summits diff --git a/_data/filter-gsoc.yml b/_data/filter-gsoc.yml deleted file mode 100644 index 99f05ff4..00000000 --- a/_data/filter-gsoc.yml +++ /dev/null @@ -1,6 +0,0 @@ -- title: Guidance - url: /gsoc/ -- title: Ideas - url: /gsoc/ideas/ -- title: Past Projects - url: /gsoc/projects/ diff --git a/_data/filter-platforms.yml b/_data/filter-platforms.yml deleted file mode 100644 index 3ea0cf04..00000000 --- a/_data/filter-platforms.yml +++ /dev/null @@ -1,12 +0,0 @@ -- title: All - url: /platforms/ - category: all -- title: JS - url: /platforms/js/ - category: js -- title: JVM - url: /platforms/jvm/ - category: jvm -- title: Native - url: /platforms/native/ - category: native diff --git a/_data/filter-projects.yml b/_data/filter-projects.yml deleted file mode 100644 index 0d4eab90..00000000 --- a/_data/filter-projects.yml +++ /dev/null @@ -1,9 +0,0 @@ -- title: All Projects - url: /projects/ - category: allProjects -- title: Organization - url: /projects/organization/ - category: organization -- title: Affiliate - url: /projects/affiliate/ - category: affiliate diff --git a/_data/gsoc-ideas.yml b/_data/gsoc-ideas.yml deleted file mode 100644 index a5ab1ca9..00000000 --- a/_data/gsoc-ideas.yml +++ /dev/null @@ -1,120 +0,0 @@ -# title -# description: What is it about? What need does it address? What is its final goal? -# prereqs: necessary prior knowledge (typically knowing Scala, and maybe other things) -# difficulty: Easy / Medium / Hard. what will the tricky parts be? -# length: short / medium / long (90 / 175 / 350 hours) -# mentors: github handles -# categories: AI / data / dev tools / apps / cloud / media / operating systems / programming languages / science / security / social / web -# repolinks: reference links to respective github repos - -- title: Serverless integrations for Feral - description: - Feral is a Typelevel library for building serverless functions that currently supports AWS Lambda and Google Cloud Run Functions. We want to add support for more types of serverless events and more cloud providers. - prereqs: Scala, ideally experience with serverless - difficulty: Medium. - length: medium - mentors: [armanbilge, bpholt, Chingles2404] - categories: [cloud, programming languages] - repolinks: - - name: feral - url: https://github.com/typelevel/feral - -- title: Native I/O backend for FS2 JVM - description: - FS2 on the JVM currently implements its networking API using JDK NIO. Unfortunately this indirection incurs a non-trivial performance penalty. We want to replace the use of JDK NIO with direct calls to system I/O APIs such as `epoll` and `kqueue`. - prereqs: Scala, ability to read C - difficulty: Medium. - length: long - mentors: [antoniojimeneznieto, djspiewak, mpilquist, armanbilge] - categories: [operating systems, programming languages] - repolinks: - - name: fs2 - url: https://github.com/typelevel/fs2 - -- title: FS2 Connection API - description: - TCP-based protocols are common (e.g. HTTP, Postgres, Redis) and are implemented by clients to interface with these services (e.g. Ember, Skunk, Rediculous). The goal of this project is to create a "connection" API that supports pooling, error conditions, and metrics and can be shared by all of our client libraries. - prereqs: Scala, ideally some knowledge of networking - difficulty: Hard. - length: long - mentors: [mpilquist, armanbilge] - categories: [operating systems, programming languages] - repolinks: - - name: fs2 - url: https://github.com/typelevel/fs2 - -- title: Web Components for Calico - description: - Calico is a reactive UI library built with Cats Effect and FS2. Web Components are a standard for creating framework-agnostic, reusable UI elements. The goal of this project is to enable Calico users to access the vast array of web components available by improving its DSL and code-generation. - prereqs: Scala, ideally experience with Web APIs - difficulty: Medium. - length: long - mentors: [armanbilge] - categories: [web, programming languages] - repolinks: - - name: calico - url: https://github.com/armanbilge/calico - -- title: Upgrade sbt-typelevel to sbt 2 - description: - sbt-typelevel is a plugin for sbt, the Scala build tool, used by hundreds of open source and enterprise projects. sbt 2 is in the final stages of development. We want to upgrade sbt-typelevel to sbt 2 and adopt its new features, such as "project matrix" for cross-building. - prereqs: Scala - difficulty: Medium. - length: long - mentors: [mzuehlke, armanbilge] - categories: [development tools] - repolinks: - - name: sbt-typelevel - url: https://github.com/typelevel/sbt-typelevel - -- title: Refresh Davenverse projects - description: - The Davenverse is a collection of several popular Typelevel libraries, including Mules and cats-scalacheck. Unfortunately, we have fallen behind on their maintenance. We want to move these libraries under the Typelevel org, refresh their build tooling, and bring them up-to-date to ensure their longevity. - prereqs: Scala - difficulty: Medium. - length: medium - mentors: [armanbilge, valencik] - categories: [development tools, programming languages] - repolinks: - - name: davenverse - url: https://github.com/davenverse - -- title: Cats Effect & FS2 on Wasm/WASI - description: - Web Assembly and its System Interface are emerging technologies for deploying secure, modular applications. The goal of this project is to prototype porting the Cats Effect runtime and FS2 streaming I/O to the Wasm/WASI platform, also possibly generating feedback for the Scala WASM and WASI teams. - prereqs: Scala, ideally some experience with Wasm/WASI - difficulty: Hard. Wasm/WASI support in Scala is experimental. - length: long - mentors: [armanbilge, tanishiking, valencik] - categories: [web, cloud, operating systems, programming languages] - repolinks: - - name: cats-effect - url: https://github.com/typelevel/cats-effect - - name: fs2 - url: https://github.com/typelevel/fs2 - -- title: Laika enhancements for typelevel.org - description: - Laika is a purely functional site and e-book generator and customizable text markup transformer. We recently migrated the Typelevel website from Jekyll to Laika. The goal of this project is improve and streamline Laika's support for generating non-documentation websites, such as blogs. - prereqs: Scala - difficulty: Medium. - length: medium - mentors: [armanbilge, valencik] - categories: [web, programming languages] - repolinks: - - name: Laika - url: https://github.com/typelevel/Laika - - name: typelevel.org - url: https://github.com/typelevel/typelevel.github.com - -- title: A faster immutable list datatype - description: - Immutable linked lists are a core datatype in functional programming languages. The goal of this project is to explore implementing a list-like datatype with enhanced performance. Along the way, you will learn about immutable datatypes, Cats typeclasses, and mechanical sympathy. - prereqs: Interest in functional programming - difficulty: Medium. This is a good project for beginners! - length: long - mentors: [armanbilge, johnynek] - categories: [web, programming languages] - repolinks: - - name: Cats Collections - url: https://github.com/typelevel/cats-collections diff --git a/_data/gsoc-projects.yml b/_data/gsoc-projects.yml deleted file mode 100644 index a2683003..00000000 --- a/_data/gsoc-projects.yml +++ /dev/null @@ -1,32 +0,0 @@ -- title: "I/O polling with io_uring" - description: "Integrated Cats Effect and FS2 with Linux kernel APIs, making http4s Ember benchmark 3x faster!" - permalink: "https://github.com/armanbilge/fs2-io_uring/pull/78" - categories: [operating systems] -- title: "Ember Web Sockets" - description: "Implemented the Websocket network protocol in http4s Ember, unblocking JS/Native support for a Kubernetes client." - permalink: "https://github.com/http4s/http4s/pull/7261" - categories: [web] -- title: "Pure Scala Open Telemetry APIs" - description: "Designed Scala APIs for Open Telemetry Specifications and opened the door to a pure Scala SDK." - permalink: "https://github.com/typelevel/otel4s/pull/236" - categories: [tracing] -- title: "Going Feral on the Cloud" - description: "Introduced a Google Cloud Run Functions integration for Feral to deploy http4s apps in Google's serverless platform." - permalink: "/blog/2024/12/22/gsoc24-going-feral-on-the-cloud.html" - categories: [cloud, programming languages] -- title: "Catscript" - description: "Designed a new library for easy scripting with files and processes, for inclusion in the Typelevel Toolkit." - permalink: "https://github.com/typelevel/governance/issues/149" - categories: [programming languages] -- title: "Scaladoc search in Protosearch" - description: "Integrated Protosearch with Scaladocs, enabling a unified search experience across a project's written and API docs." - permalink: "https://github.com/cozydev-pink/protosearch/pull/241" - categories: [data, web] -- title: "Efficient Machine Learning Inference in Cats Effect via Scala Native and mlpack" - description: "Created an ONNX to IO compiler for running machine learning inference within a web service." - permalink: https://github.com/armanbilge/vilcacora - categories: [AI, web, programming languages] -- title: Polling-based I/O in FS2 - description: "Implemented network socket and datagram APIs in FS2 using Cats Effect I/O polling on the JVM and Native platforms." - permalink: https://github.com/typelevel/fs2 - categories: [operating systems, programming languages] diff --git a/_data/nav-scala.yml b/_data/nav-scala.yml deleted file mode 100644 index fe399404..00000000 --- a/_data/nav-scala.yml +++ /dev/null @@ -1,8 +0,0 @@ -- title: Code of Conduct - url: /code-of-conduct - -- title: License - url: /license - -- title: Steering Committee - url: /steering-committee diff --git a/_data/nav-social.yml b/_data/nav-social.yml deleted file mode 100644 index b535dab3..00000000 --- a/_data/nav-social.yml +++ /dev/null @@ -1,19 +0,0 @@ -- title: Github - url: https://github.com/typelevel - icon: "fab fa-github" - -- title: Twitter - url: https://twitter.com/typelevel - icon: "fab fa-twitter" - -- title: Mastodon - url: https://fosstodon.org/@typelevel - icon: "fab fa-mastodon" - -- title: Discord - url: https://discord.gg/XF3CXcMzqD - icon: "fab fa-discord" - -- title: Email - url: "mailto:info@typelevel.org" - icon: "fas fa-envelope" diff --git a/_data/nav.yml b/_data/nav.yml deleted file mode 100644 index 7f353a33..00000000 --- a/_data/nav.yml +++ /dev/null @@ -1,46 +0,0 @@ -navMain: - - title: Home - url: / - - - title: Projects - url: /projects/ - - - title: Platforms - url: /platforms/ - - - title: Blog - url: /blog/ - - - title: Events - url: /events/ - - - title: About - url: /about/ - -navSocial: - - title: Github - url: https://github.com/typelevel - icon: "fab fa-github" - - - title: Twitter - url: https://twitter.com/typelevel - icon: "fab fa-twitter" - - - title: Mastodon - url: https://fosstodon.org/@typelevel - icon: "fab fa-mastodon" - - - title: Discord - url: https://discord.gg/XF3CXcMzqD - icon: "fab fa-discord" - - - title: Email - url: "mailto:info@typelevel.org" - icon: "fas fa-envelope" - -navScala: - - title: Code of Conduct - url: /code-of-conduct - - - title: License - url: /license diff --git a/_data/projects.yml b/_data/projects.yml deleted file mode 100644 index 6581c251..00000000 --- a/_data/projects.yml +++ /dev/null @@ -1,402 +0,0 @@ -- title: "argonaut-shapeless" - description: "Automatic derivation for argonaut" - github: "https://github.com/alexarchambault/argonaut-shapeless" - affiliate: true - platforms: [jvm] -- title: "banana-rdf" - description: "RDF, SPARQL and Linked Data technologies" - github: "https://github.com/banana-rdf/banana-rdf" - affiliate: true - platforms: [js, jvm] -- title: "calico" - description: "Pure, reactive UI library for building web applications with Cats Effect + FS2" - github: "https://github.com/armanbilge/calico" - permalink: "https://armanbilge.github.io/calico" - affiliate: true - platforms: [js] -- title: "cats-actors" - description: "An Actor Model implementation built on top of Cats-Effect, providing a higher-level abstraction for managing concurrency." - github: "https://github.com/suprnation/cats-actors" - affiliate: true - platforms: [jvm] -- title: "case-insensitive" - description: "A case-insensitive string for Scala" - github: "https://github.com/typelevel/case-insensitive" - platforms: [js, jvm, native] -- title: "catapult" - description: "A thin wrapper for the Launch Darkly Java server SDK using cats-effect and fs2" - github: "https://github.com/typelevel/catapult" - platforms: [jvm] -- title: "catbird" - description: "Cats instances for various Twitter Open Source Scala projects" - github: "https://github.com/typelevel/catbird" - platforms: [jvm] -- 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." - permalink: "https://typelevel.org/cats/" - github: "https://github.com/typelevel/cats" - platforms: [js, jvm, native] -- title: "Cats Collections" - description: "Data structures that facilitate pure functional programming with cats" - github: "https://github.com/typelevel/cats-collections" - platforms: [js, jvm, native] -- title: Cats-Effect - description: "The IO Monad for Scala, plus type classes for general effect types." - github: "https://github.com/typelevel/cats-effect/" - platforms: [js, jvm, native] -- title: "Cats MTL" - description: "Monad transformers made easy" - github: "https://github.com/typelevel/cats-mtl/" - platforms: [js, jvm, native] -- title: "cats-parse" - description: "A parsing library for the cats ecosystem" - github: "https://github.com/typelevel/cats-parse" - platforms: [js, jvm, native] -- title: "cats-scalatest" - description: "Scalatest bindings for Cats." - github: "https://github.com/IronCoreLabs/cats-scalatest" - affiliate: true - platforms: [js, jvm] -- title: "cats-stm" - description: "A STM implementation for Cats Effect" - github: "https://github.com/TimWSpence/cats-stm" - affiliate: true - platforms: [js, jvm, native] -- title: "Cats Tagless" - description: "A library of utilities for tagless final algebras" - github: "https://github.com/typelevel/cats-tagless/" - platforms: [js, jvm, native] -- title: "Cats-Time" - description: "Instances for Cats Typeclasses for Java 8 Time" - github: "https://github.com/typelevel/cats-time/" - platforms: [js, jvm, native] -- title: "Circe" - description: "Yet another JSON library for Scala" - github: "https://github.com/circe/circe" - affiliate: true - platforms: [js, jvm, native] -- title: "Ciris" - description: "Functional Configurations for Scala" - github: "https://github.com/vlovgr/ciris" - affiliate: true - platforms: [js, jvm, native] -- title: "coulomb" - description: "A statically typed unit analysis library for Scala" - github: "https://github.com/erikerlandson/coulomb" - affiliate: true - platforms: [js, jvm, native] -- title: "cron4s" - description: "Cross-platform CRON expression parsing for Scala" - github: "https://github.com/alonsodomin/cron4s" - affiliate: true - platforms: [js, jvm] -- title: "decline" - description: "A composable command-line parser for Scala." - github: "https://github.com/bkirwi/decline" - affiliate: true - platforms: [js, jvm, native] -- title: "discipline" - description: "Originally intended for internal use in spire, this library helps libraries declaring type classes to precisely state the laws which instances need to satisfy, and takes care of not checking derived laws multiple times." - github: "https://github.com/typelevel/discipline" - platforms: [js, jvm, native] -- title: "doobie" - description: "A pure functional JDBC layer for Scala. It is not an ORM, nor is it a relational algebra; it just provides a principled way to construct programs (and higher-level libraries) that use JDBC." - github: "https://github.com/typelevel/doobie" - platforms: [jvm] -- title: "edomata" - description: "Event-driven automata for Scala, Scala.js and scala native. This library provides purely functional state machines that can be used to create event sourced and/or CQRS style applications. It also includes production ready backends." - github: "https://github.com/hnaderi/edomata" - permalink: "https://edomata.ir/" - affiliate: true - platforms: [js, jvm, native] -- title: "eff" - description: "Extensible effects are an alternative to monad transformers for computing with effects in a functional way. This library is based on the “free-er” monad and an “open union” of effects described by Oleg Kiselyov in “Freer monads, more extensible effects”" - - permalink: "http://atnos-org.github.io/eff" - github: "https://github.com/atnos-org/eff" - affiliate: true - platforms: [js, jvm, native] -- title: "endless4s" - description: "Sharded and event-sourced entities using tagless-final algebras" - permalink: "https://endless4s.github.io/" - github: "https://github.com/endless4s/endless" - affiliate: true - platforms: [jvm] -- title: "Extruder" - description: "Populate case classes from any configuration source" - github: "https://github.com/janstenpickle/extruder" - affiliate: true - platforms: [jvm] -- title: "fabric" - description: "Object-Notation Abstraction for JSON, binary, HOCON, etc." - github: "https://github.com/typelevel/fabric" - platforms: [js, jvm, native] -- title: "Feral" - description: "Feral cats are homeless, feral functions are serverless" - github: "https://github.com/typelevel/feral" - platforms: [js, jvm] -- title: "ff4s" - description: "A purely functional web frontend framework for Scala.js." - github: "https://github.com/buntec/ff4s" - affiliate: true - platforms: [js] -- title: "Fetch" - description: "Library built on top of Cats that provides efficient data access from heterogeneous dataurces" - github: "https://github.com/47deg/fetch" - affiliate: true - platforms: [js, jvm] -- title: "Finch" - description: "Purely functional basic blocks atop of Finagle for building composable HTTP APIs" - github: "https://github.com/finagle/finch" - affiliate: true - platforms: [jvm] -- title: "Frameless" - description: "Frameless is a library for working with Spark using more expressive types." - github: "https://github.com/typelevel/frameless" - platforms: [jvm] -- title: "fs2-aes" - description: "Micro library providing AES encryption/decryption of fs2.Stream[F, Byte]." - github: "https://github.com/jwojnowski/fs2-aes" - affiliate: true - platforms: [jvm] -- title: "fs2-compress" - description: "Compression Algorithms for Fs2 " - github: "https://github.com/lhns/fs2-compress" - affiliate: true - platforms: [jvm] -- title: "fs2-data" - description: "Parse and transform data (CBOR, CSV, JSON, XML) in a streaming manner" - github: "https://github.com/gnieh/fs2-data" - affiliate: true - platforms: [js, jvm, native] -- title: "fs2-dom" - description: "Idiomatic Cats Effect + FS2 integrations for Web APIs" - github: "https://github.com/armanbilge/fs2-dom" - affiliate: true - platforms: [js] -- title: "fs2-grpc" - description: "gRPC implementation for FS2/cats-effect" - github: "https://github.com/typelevel/fs2-grpc" - platforms: [jvm] -- title: "fs2" - description: "FS2 is a library for purely functional, effectful, and polymorphic stream processing library in the Scala programming language. Its design goals are compositionality, expressiveness, resource safety, and speed. The name is a modified acronym for Functional Streams for Scala (FSS, or FS2)." - github: "https://github.com/typelevel/fs2" - platforms: [js, jvm, native] -- title: "Grackle" - description: "Functional GraphQL server for the Typelevel stack" - github: "https://github.com/typelevel/grackle" - platforms: [js, jvm, native] -- title: "Hammock" - description: "Purely functional HTTP client" - github: "https://github.com/pepegar/hammock" - affiliate: true - platforms: [jvm] -- title: "http4s" - description: "A typeful, purely functional HTTP library for client and server applications" - github: "https://github.com/http4s/http4s" - affiliate: true - platforms: [js, jvm, native] -- title: "imp" - description: "Summoning implicit values" - github: "https://github.com/non/imp" - affiliate: true - platforms: [js, jvm] -- title: "jawn-fs2" - description: "Integration of jawn and fs2 for streaming, incremental JSON parsing" - github: "https://github.com/typelevel/jawn-fs2" - platforms: [js, jvm, native] -- title: "keypool" - description: "A Keyed Pool Implementation for Scala" - github: "https://github.com/typelevel/keypool" - platforms: [js, jvm, native] -- title: "kind-projector" - description: "Plugin for nicer type-lambda syntax" - github: "https://github.com/typelevel/kind-projector" - platforms: [jvm] -- title: "Kittens" - description: "Automatic type class derivation" - github: "https://github.com/typelevel/kittens" - platforms: [js, jvm, native] -- title: "Laika" - description: "Site and e-book generator and customizable text markup transformer for sbt, Scala and Scala.js" - github: "https://github.com/typelevel/Laika" - platforms: [js, jvm] -- title: "LDBC" - description: "Pure functional JDBC layer with Cats Effect 3 and Scala 3" - github: "https://github.com/takapi327/ldbc" - affiliate: true - platforms: [js, jvm, native] -- title: "Lepus" - description: "Purely functional, non-blocking RabbitMQ client for scala, scala js and scala native built on top of fs2." - github: "https://github.com/hnaderi/lepus" - permalink: "https://lepus.hnaderi.dev/" - affiliate: true - platforms: [js, jvm, native] -- title: "Libra" - description: "Compile time dimensional analysis for any problem domain" - github: "https://github.com/to-ithaca/libra" - affiliate: true - platforms: [js, jvm] -- title: "literally" - description: "Compile time validation of literal values built from strings" - github: "https://github.com/typelevel/literally" - platforms: [js, jvm, native] -- title: "log4cats" - description: "Logging Tools For Interaction with cats-effect" - github: "https://github.com/typelevel/log4cats" - platforms: [js, jvm, native] -- title: "Monix" - description: "High-performance library for composing asynchronous, event-based programs, exposing a Reactive Streams implementation along with primitives for dealing with concurrency and side-effects." - github: "https://github.com/monix/monix" - permalink: "https://monix.io" - affiliate: true - platforms: [js, jvm] -- title: "Monocle" - description: "Optics library offering a simple yet powerful API to access and transform immutable data" - github: "https://github.com/optics-dev/Monocle" - affiliate: true - platforms: [js, jvm, native] -- title: "Mouse" - description: "Enrichments to standard library classes to ease functional programming" - github: "https://github.com/typelevel/mouse/" - platforms: [js, jvm, native] -- title: "Natchez" - description: "functional tracing for cats " - github: "https://github.com/typelevel/natchez" - platforms: [js, jvm, native] -- title: "otel4s" - description: "An OpenTelemetry library based on cats-effect" - github: "https://github.com/typelevel/otel4s" - platforms: [js, jvm, native] -- title: "Outwatch" - description: "The Functional and Reactive Web-Frontend Library for Scala.js" - github: "https://github.com/outwatch/outwatch" - affiliate: true - platforms: [js] -- title: "parsley-cats" - description: "The parsley-cats library exposes Cats instances for Parsley parsing library." - github: "https://github.com/j-mie6/parsley-cats" - affiliate: true - platforms: [js, jvm, native] -- title: "Peloton" - description: "An actor library for Cats Effect" - github: "https://github.com/killaitis/peloton" - affiliate: true - platforms: [jvm] -- title: "perspective" - description: "Provides tools for generic programming, and typeclasses for monad transformers and higher kinded data." - github: "https://github.com/Katrix/perspective" - affiliate: true - platforms: [js, jvm] -- title: "PureConfig" - description: "A boilerplate-free library for loading configuration files" - github: "https://github.com/pureconfig/pureconfig" - affiliate: true - platforms: [jvm] -- title: "refined" - description: "Tools for refining types with type-level predicates which constrain the set of values described by the refined type, for example restricting to positive or negative numbers." - github: "https://github.com/fthomas/refined" - affiliate: true - platforms: [js, jvm, native] -- title: "ScalaCheck" - description: "ScalaCheck is a library for automated property-based testing. It contains generators for randomized test data and combinators for properties." - github: "https://github.com/typelevel/scalacheck" - permalink: "http://scalacheck.org/" - platforms: [js, jvm, native] -- title: "scalacheck-shapeless" - description: "Automatic derivation for ScalaCheck" - github: "https://github.com/alexarchambault/scalacheck-shapeless" - affiliate: true - platforms: [js, jvm, native] -- title: "Scala Exercises" - description: "Platform and framework for Scala devs to learn about Scala libraries" - github: "https://github.com/scala-exercises/scala-exercises" - affiliate: true - platforms: [js, jvm] -- title: "scala-steward" - description: "A robot that helps keeping Scala projects up-to-date" - github: "https://github.com/fthomas/scala-steward" - affiliate: true - platforms: [jvm] -- title: "scodec" - description: "scodec is a combinator library for working with binary data. It focuses on contract-first and pure functional encoding and decoding of binary data and provides integration with shapeless." - github: "https://github.com/scodec/scodec" - affiliate: true - platforms: [js, jvm, native] -- title: "Scoverage" - description: "Code coverage tool for Scala" - github: "https://github.com/scoverage/scalac-scoverage-plugin" - affiliate: true - platforms: [js, jvm, native] -- title: "Shapeless" - description: "Shapeless is a generic programming library. Starting with implementations of Scrap your boilerplate and higher rank polymorphism in Scala, it quickly grew to provide advanced abstract tools like heterogenous lists and automatic instance derivation for type classes." - github: "https://github.com/milessabin/shapeless" - affiliate: true - platforms: [js, jvm, native] -- title: "simulacrum" - description: "First-class syntax for type classes" - github: "https://github.com/typelevel/simulacrum" - platforms: [js, jvm, native] -- title: "Simulacrum Scalafix" - description: "Simulacrum as Scalafix rules" - github: "https://github.com/typelevel/simulacrum-scalafix" - platforms: [js, jvm] -- title: "singleton-ops" - description: "Operations for primitive and String singleton types" - github: "https://github.com/fthomas/singleton-ops" - affiliate: true - platforms: [js, jvm] -- title: "Skunk" - description: "A data access library for Scala + Postgres" - github: "https://github.com/typelevel/skunk" - platforms: [js, jvm, native] -- title: "sonic" - description: "Property-based testing with integrated shrinking" - github: "https://github.com/melrief/sonic" - affiliate: true - platforms: [jvm] -- title: "specs2" - description: "specs2 is a library for writing executable software specifications, aiming for conciseness, readability and extensibility." - github: "https://github.com/etorreborre/specs2" - permalink: "http://specs2.org/" - affiliate: true - platforms: [js, jvm, native] -- title: "spire" - description: "Spire is a numeric library for Scala which is intended to be generic, fast, and precise. Using features such as specialization, macros, type classes, and implicits, Spire works hard to defy conventional wisdom around performance and precision trade-offs." - github: "https://github.com/typelevel/spire" - platforms: [js, jvm, native] -- title: "Squants" - description: "The Scala API for Quantities, Units of Measure and Dimensional Analysis" - github: "https://github.com/typelevel/squants" - platforms: [js, jvm, native] -- title: "Twiddles" - description: "Micro-library for building effectful protocols" - github: "https://github.com/typelevel/twiddles" - platforms: [js, jvm, native] -- title: "TwoTails" - description: "A compiler plugin adding support for mutual tail recursion" - github: "https://github.com/wheaties/TwoTails" - affiliate: true - platforms: [jvm] -- title: "typelevel.g8" - description: "A Giter8 template for sbt-typelevel" - github: "https://github.com/typelevel/typelevel.g8" - platforms: [js, jvm] -- title: "typelevel-nix" - description: "Development tools for Typelevel projects" - github: "https://github.com/typelevel/typelevel-nix" - platforms: [js, jvm, native] -- title: "uniform-scala" - description: "Functional user journeys" - github: "https://github.com/ltbs/uniform-scala" - affiliate: true - platforms: [js, jvm] -- title: "upperbound" - description: "A purely functional, interval based rate limiter" - github: "https://github.com/SystemFw/upperbound" - affiliate: true - platforms: [js, jvm, native] -- title: "vault" - description: "Type-safe, persistent storage for values of arbitrary types" - github: "https://github.com/typelevel/vault" - platforms: [js, jvm, native] diff --git a/_includes/_contact-btn.html b/_includes/_contact-btn.html deleted file mode 100644 index 0f7d7390..00000000 --- a/_includes/_contact-btn.html +++ /dev/null @@ -1,5 +0,0 @@ -{% for item in site.data.nav-social %} -{% if item.title == "Email" %} -<a class="button button-secondary" href="{{ item.url | relative_url }}">contact us</a> -{% endif %} -{% endfor %} \ No newline at end of file diff --git a/_includes/_cta-blog.html b/_includes/_cta-blog.html deleted file mode 100644 index d1a4925f..00000000 --- a/_includes/_cta-blog.html +++ /dev/null @@ -1,9 +0,0 @@ -<section id="section-cta" class="section-large"> - <div class="container"> - <div class="section-header"> - <h2><span>{{site.data.cta.blogTitle}}</span></h2> - <p>{{site.data.cta.blogDescription}}</p> - {% include _contact-btn.html %} - </div> - </div> -</section> \ No newline at end of file diff --git a/_includes/_cta-conduct.html b/_includes/_cta-conduct.html deleted file mode 100644 index 659d3d46..00000000 --- a/_includes/_cta-conduct.html +++ /dev/null @@ -1,13 +0,0 @@ -<section id="section-cta" class="section-large"> - <div class="container"> - <div class="section-header"> - <h2><span>{{site.data.cta.conductTitle}}</span></h2> - <p>{{site.data.cta.conductDescription}}</p> - {% for item in site.data.nav-scala %} - {% if item.title == "Code of Conduct" %} - <a class="button button-secondary" href="{{item.url | relative_url }}">Read full Code of Conduct</a> - {% endif %} - {% endfor %} - </div> - </div> -</section> \ No newline at end of file diff --git a/_includes/_cta-gsoc.html b/_includes/_cta-gsoc.html deleted file mode 100644 index 052e294b..00000000 --- a/_includes/_cta-gsoc.html +++ /dev/null @@ -1,10 +0,0 @@ -<section id="section-cta" class="section-large"> - <div class="container"> - <div class="section-header"> - <h2><span>Submit Your Proposal</span></h2> - <p>Are you interested in working on a GSoC project with Typelevel mentors?</p> - - <a class="button button-secondary" href="mailto:gsoc@typelevel.org">send us an email</a> - </div> - </div> -</section> diff --git a/_includes/_cta-newsletter.html b/_includes/_cta-newsletter.html deleted file mode 100644 index e69de29b..00000000 diff --git a/_includes/_cta-projects.html b/_includes/_cta-projects.html deleted file mode 100644 index 4d3e52fa..00000000 --- a/_includes/_cta-projects.html +++ /dev/null @@ -1,10 +0,0 @@ -<section id="section-cta" class="section-large"> - <div class="container"> - <div class="section-header"> - <h2><span>{{site.data.cta.submittingTitle}}</span></h2> - <p>{{site.data.cta.submittingDescription}}</p> - - <a class="button button-secondary" href="https://github.com/typelevel/governance/issues/new/choose">Open a ticket!</a> - </div> - </div> -</section> diff --git a/_includes/_cta-steering.html b/_includes/_cta-steering.html deleted file mode 100644 index 422a2b26..00000000 --- a/_includes/_cta-steering.html +++ /dev/null @@ -1,15 +0,0 @@ -<section id="section-blog" class="section-large"> - <div class="container"> - <div class="section-header"> - <h2><span>{{site.data.cta.steeringTitle}}</span></h2> - <p>{{site.data.cta.steeringDescription}}</p> - {% for item in site.data.nav-scala %} - {% if item.title == "Steering Committee" %} - <p><br /> - <a class="button button-primary" href="{{item.url | relative_url }}">About the Committee</a> - </p> - {% endif %} - {% endfor %} - </div> - </div> -</section> \ No newline at end of file diff --git a/_includes/_footer.html b/_includes/_footer.html deleted file mode 100644 index 6f232a62..00000000 --- a/_includes/_footer.html +++ /dev/null @@ -1,37 +0,0 @@ -<div id="footer"> - <div class="container"> - <div class="footer-container"> - <div class="footer-brand"> - <a href="/"><img src="{{ site.baseurl }}/img/assets/typelevel-brand.svg" - title="{{ site.title }}" /></a> - </div> - - <ul class="footer-nav"> - <h3>Typelevel</h3> - {% for item in site.data.nav.navMain %} - <li> - <a href="{{ item.url | relative_url }}">{{item.title}}</a> - </li> - {% endfor %} - </ul> - <ul class="footer-nav-scala"> - <h3>Scala</h3> - {% for item in site.data.nav.navScala %} - <li> - <a href="{{ item.url | relative_url }}">{{item.title}}</a> - </li> - {% endfor %} - </ul> - <ul class="footer-social"> - - {% for item in site.data.nav.navSocial %} - <li> - <a rel="me" href="{{ item.url | relative_url }}" target="_blank"> - <i class="{{ item.icon }}"></i> - </a> - </li> - {% endfor %} - </ul> - </div> - </div> -</div> \ No newline at end of file diff --git a/_includes/_gsoc_idea_card.html b/_includes/_gsoc_idea_card.html deleted file mode 100644 index 9f34e4cc..00000000 --- a/_includes/_gsoc_idea_card.html +++ /dev/null @@ -1,45 +0,0 @@ -<div class="gsoc-item"> - <div class="gsoc-item-content"> - <div> - <img src="{{ site.baseurl }}/img/assets/icon-about-open-source.svg" alt=""> - <h3>{{ project.title }}</h3> - </div> - <p>{{ project.description | markdownify }}</p> - - <h5>Prerequisites</h5> - <p>{{ project.prereqs | markdownify }}</p> - - <h5>Expected Difficulty</h5> - <p>{{ project.difficulty | markdownify }}</p> - - <h5>Expected Length</h5> - <p> - {% if project.length == "short" %} - Short (~ 90 hours) - {% elsif project.length == "medium" %} - Medium (~ 175 hours) - {% elsif project.length == "long" %} - Long (~ 350 hours) - {% endif %} - </p> - - <h5>Mentors</h5> - <p> - {% for mentor in project.mentors %} - <a href="https://github.com/{{ mentor }}">@{{ mentor }}</a> - {% endfor %} - </p> - - <h5>Related Repos</h5> - <p> - {% for repolink in project.repolinks %} - <a href="{{ repolink.url }}">{{ repolink.name }}</a> - {% endfor %} - </p> - </div> - <div class="project-item-tag"> - {% for category in project.categories %} - <p>{{ category }}</p> - {% endfor %} - </div> -</div> diff --git a/_includes/_gsoc_project_card.html b/_includes/_gsoc_project_card.html deleted file mode 100644 index 7bcff357..00000000 --- a/_includes/_gsoc_project_card.html +++ /dev/null @@ -1,12 +0,0 @@ -<a href="{{ project.permalink }}" class="gsoc-item"> - <div class="gsoc-item-content"> - <div> - <img src="{{ site.baseurl }}/img/assets/icon-about-modular.svg" alt=""> - <h3>{{ project.title }}</h3> - </div> - <p>{{ project.description }}</p> - </div> - <div class="project-item-tag"> - <p>{{ project.categories | join: " / "}}</p> - </div> -</a> diff --git a/_includes/_head.html b/_includes/_head.html deleted file mode 100644 index 722344ef..00000000 --- a/_includes/_head.html +++ /dev/null @@ -1,31 +0,0 @@ -<head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <title>{{ site.name }} | {% if page.path contains '_event' %}{{ page.short_title }}{% else %}{{ page.title }}{% endif %} - - - - - - - - - - - - - - - {% if page.meta.mathjax %} - - - {% endif %} - diff --git a/_includes/_js-bottom.html b/_includes/_js-bottom.html deleted file mode 100644 index c0fe83d4..00000000 --- a/_includes/_js-bottom.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - + + +@:@ + +We also accept donations on [GitHub Sponsors] and [Open Collective]. + +**German donors**: we have partnered with the [Maecenata Foundation] to accept tax-deductible donations from Germany. Please use their [donation form][maecenata] and be sure to designate **TG26017 Typelevel Foundation** as the recipient organization. + +**Swiss donors**: we have partnered with the [Swiss Philanthropy Foundation] to accept tax-deductible donations from Switzerland. Please contact them at international@swissphilanthropy.ch to facilitate a donation to us. + +**European donors**: if your country participates in the [Giving Europe] network, we can accept tax-efficient donations from you. Please contact us to arrange this. + +Have questions or specific needs? Please email us at donate@typelevel.org. + +[GitHub Sponsors]: https://github.com/sponsors/typelevel +[Open Collective]: https://opencollective.com/typelevel-foundation +[Maecenata Foundation]: https://www.maecenata.eu/ +[maecenata]: https://www.maecenata.eu/internationales-spenden?fb_item_id_fix=93115 +[Swiss Philanthropy Foundation]: https://www.swissphilanthropy.ch/ +[Giving Europe]: https://giving.eu/ diff --git a/src/foundation/about.template.html b/src/foundation/about.template.html new file mode 100644 index 00000000..ec7d919f --- /dev/null +++ b/src/foundation/about.template.html @@ -0,0 +1,34 @@ +@:embed(/templates/main.template.html) +
+ + ${cursor.currentDocument.content} + +

+ + @:svg(fa-link) + + Board of Directors +

+
+ @:for(board) +
+ @:include(/templates/bio.template.html) { render-title = true } +
+ @:@ +
+ +

+ + @:svg(fa-link) + + Foundation Sponsors +

+
+ @:for(sponsors) +
+ +
+ @:@ +
+
+@:@ diff --git a/src/foundation/directory.conf b/src/foundation/directory.conf new file mode 100644 index 00000000..84883674 --- /dev/null +++ b/src/foundation/directory.conf @@ -0,0 +1,5 @@ +board: [${armanbilge}, ${djspiewak}, ${jducoeur}, ${valencik}] +staff: [${armanbilge}] +tsc: [${armanbilge}, ${lukajcb}, ${samspills}, ${mpilquist}, ${djspiewak}, ${jducoeur}, ${valencik}] +coc: [${armanbilge}, ${hkateu}, ${samspills}, ${satabin}, ${valencik}] +security: [${rossabaker}, ${armanbilge}, ${bpholt}] diff --git a/src/foundation/people.md b/src/foundation/people.md new file mode 100644 index 00000000..12a3d84e --- /dev/null +++ b/src/foundation/people.md @@ -0,0 +1,21 @@ +{% + laika.html.template: people.template.html +%} + +# Leadership + +@:fragment(about-board) +The Board of Directors of the Typelevel Foundation is the governing body of Typelevel. Their primary responsibility is to provide oversight for the Foundation's operations, especially legal and financial matters. +@:@ + +@:fragment(about-tsc) +The Technical Steering Committee supports the day-to-day open source work of Typelevel. They advise the Board on overall technical priorities for the Foundation, especially the designation and stewardship of Organization Projects, and are also responsible for curating the portfolio of Typelevel Affiliate Projects. +@:@ + +@:fragment(about-coc) +The Code of Conduct Committee upholds the [Typelevel Code of Conduct](/code-of-conduct/README.md) following the procedures described in the [Enforcement Policy](/code-of-conduct/enforcement.md). Members of this committee have completed [code of conduct enforcement training](https://otter.technology/code-of-conduct-training/) with Otter Technology. +@:@ + +@:fragment(about-security) +The Security Team receives and handles reports of security issues following the procedures described in the [Typelevel Security Policy](/security.md). +@:@ diff --git a/src/foundation/people.template.html b/src/foundation/people.template.html new file mode 100644 index 00000000..9fdde355 --- /dev/null +++ b/src/foundation/people.template.html @@ -0,0 +1,75 @@ +@:embed(/templates/main.template.html) +
+ + ${cursor.currentDocument.content} + +

+ + @:svg(fa-link) + + Board of Directors +

+
+ ${cursor.currentDocument.fragments.about-board} +
+
+ @:for(board) +
+ @:include(/templates/bio.template.html) { render-title = true } +
+ @:@ +
+ +

+ + @:svg(fa-link) + + Technical Steering Committee +

+
+ ${cursor.currentDocument.fragments.about-tsc} +
+
+ @:for(tsc) +
+ @:include(/templates/bio.template.html) +
+ @:@ +
+ +

+ + @:svg(fa-link) + + Code of Conduct Committee +

+
+ ${cursor.currentDocument.fragments.about-coc} +
+
+ @:for(coc) +
+ @:include(/templates/bio.template.html) +
+ @:@ +
+ +

+ + @:svg(fa-link) + + Security Team +

+
+ ${cursor.currentDocument.fragments.about-security} +
+
+ @:for(security) +
+ @:include(/templates/bio.template.html) +
+ @:@ +
+ + @:@ +
diff --git a/src/funding.json b/src/funding.json new file mode 100644 index 00000000..6bab7ea7 --- /dev/null +++ b/src/funding.json @@ -0,0 +1,67 @@ +{ + "version": "v1.1.0", + "entity": { + "type": "organisation", + "role": "owner", + "name": "Typelevel Foundation", + "email": "donate@typelevel.org", + "description": "The Typelevel Foundation is a nonprofit 501(c)(3) public charity (EIN: 39-3611111). Our mission is to ensure the long-term sustainability of the Typelevel ecosystem, advance research and education in functional programming, and grow our community of curious and passionate developers.", + "webpageUrl": { + "url": "https://typelevel.org" + } + }, + "projects": [ + { + "guid": "cats-effect", + "name": "Cats Effect", + "description": "Use functional programming to write a concurrent application and execute it on a high-performance, asynchronous runtime targeting the platform of your choice.", + "webpageUrl": { + "url": "https://typelevel.org" + }, + "repositoryUrl": { + "url": "https://github.com/typelevel/cats-effect" + }, + "licenses": [ + "spdx:Apache-2.0" + ], + "tags": [ + "functional-programming", + "effect-systems", + "concurrency", + "async", + "runtimes", + "scala" + ] + } + ], + "funding": { + "channels": [ + { + "guid": "github-sponsors", + "type": "payment-provider", + "address": "https://github.com/sponsors/typelevel/" + }, + { + "guid": "every-org", + "type": "payment-provider", + "address": "https://www.every.org/typelevel-foundation" + } + ], + "plans": [ + { + "guid": "supporter", + "status": "active", + "name": "Supporter", + "description": "Enjoy free virtual admission to Typelevel Summits.", + "amount": 75, + "currency": "USD", + "frequency": "yearly", + "channels": [ + "github-sponsors", + "every-org" + ] + } + ], + "history": [] + } +} diff --git a/gsoc/index.md b/src/gsoc/README.md similarity index 68% rename from gsoc/index.md rename to src/gsoc/README.md index 3a4d4ad4..2ae1b66d 100644 --- a/gsoc/index.md +++ b/src/gsoc/README.md @@ -1,7 +1,7 @@ ---- -layout: gsoc-contributor-guidance -title: "GSoC: Guidance" ---- +{% + laika.title: Google Summer of Code + guidance-tab.class: bulma-is-active +%} ## Welcome! @@ -10,17 +10,14 @@ We work together to develop projects that apply functional programming to challe Our community culture embraces curiosity and mentoring and we don’t shy away from experimenting with new and exciting ideas. Most of all, we love to make programming joyful and social. -We are excited to be a Mentoring Organization in [Google Summer of Code 2025][GSoC]! +We have applied to participate as a Mentoring Organization in [Google Summer of Code 2026][GSoC]! Stay tuned for updates. -**Contributors:** -Please [join our Discord server][invite] and introduce yourself in the [#summer-of-code channel][invite]. +Please [join our Discord server][invite] and introduce yourself in the [#summer-of-code][invite] channel. We cannot wait to meet you! You can also reach us at [gsoc@typelevel.org]. -**Mentors:** -Please reach out in the [GitHub org discussion][discussion] if you want to be part of GSoC 2025. - [GSoC]: https://summerofcode.withgoogle.com/ -[invite]: https://discord.gg/hAKabfGjUw +[invite]: https://discord.gg/382Z3w8QTj [gsoc@typelevel.org]: mailto:gsoc@typelevel.org [discussion]: https://github.com/orgs/typelevel/discussions/156 + diff --git a/src/gsoc/default.template.html b/src/gsoc/default.template.html new file mode 100644 index 00000000..dec7fef0 --- /dev/null +++ b/src/gsoc/default.template.html @@ -0,0 +1,8 @@ +@:embed(/templates/main.template.html) +
+ @:include(gsoc.template.html) +
+ ${cursor.currentDocument.content} +
+
+@:@ diff --git a/src/gsoc/directory.conf b/src/gsoc/directory.conf new file mode 100644 index 00000000..c24bc5d9 --- /dev/null +++ b/src/gsoc/directory.conf @@ -0,0 +1,165 @@ +medium-length: Medium (~ 175 hours) +long-length: Long (~ 350 hours) + +ideas: [ + { + title: Serverless integrations for Feral + description: + Feral is a Typelevel library for building serverless functions that currently supports AWS Lambda and Google Cloud Run Functions. We want to add support for more types of serverless events and more cloud providers. + prereqs: "Scala, ideally experience with serverless" + difficulty: Medium. + length: ${medium-length} + mentors: [armanbilge, bpholt, Chingles2404] + categories: [cloud, programming languages] + repolinks: [ + { + name: feral + url: "https://github.com/typelevel/feral" + } + ] + }, + + { + title: Native I/O backend for FS2 JVM + description: + "FS2 on the JVM currently implements its networking API using JDK NIO. Unfortunately this indirection incurs a non-trivial performance penalty. We want to replace the use of JDK NIO with direct calls to system I/O APIs such as epoll and kqueue." + prereqs: "Scala, ability to read C" + difficulty: Medium. + length: ${long-length} + mentors: [antoniojimeneznieto, djspiewak, mpilquist, armanbilge] + categories: [operating systems, programming languages] + repolinks: [ + { + name: fs2 + url: "https://github.com/typelevel/fs2" + } + ] + }, + + { + title: FS2 Connection API + description: + "TCP-based protocols are common (e.g. HTTP, Postgres, Redis) and are implemented by clients to interface with these services (e.g. Ember, Skunk, Rediculous). The goal of this project is to create a "connection" API that supports pooling, error conditions, and metrics and can be shared by all of our client libraries." + prereqs: "Scala, ideally some knowledge of networking" + difficulty: Hard. + length: ${long-length} + mentors: [mpilquist, armanbilge] + categories: [operating systems, programming languages] + repolinks: [ + { + name: fs2 + url: "https://github.com/typelevel/fs2" + } + ] + }, + + { + title: Web Components for Calico + description: + "Calico is a reactive UI library built with Cats Effect and FS2. Web Components are a standard for creating framework-agnostic, reusable UI elements. The goal of this project is to enable Calico users to access the vast array of web components available by improving its DSL and code-generation." + prereqs: "Scala, ideally experience with Web APIs" + difficulty: Medium. + length: ${long-length} + mentors: [armanbilge] + categories: [web, programming languages] + repolinks: [ + { + name: calico + url: "https://github.com/armanbilge/calico" + } + ] + }, + + { + title: Upgrade sbt-typelevel to sbt 2 + description: + "sbt-typelevel is a plugin for sbt, the Scala build tool, used by hundreds of open source and enterprise projects. sbt 2 is in the final stages of development. We want to upgrade sbt-typelevel to sbt 2 and adopt its new features, such as "project matrix" for cross-building." + prereqs: Scala + difficulty: Medium. + length: ${long-length} + mentors: [mzuehlke, armanbilge] + categories: [development tools] + repolinks: [ + { + name: sbt-typelevel + url: "https://github.com/typelevel/sbt-typelevel" + } + ] + }, + + { + title: Refresh Davenverse projects + description: + "The Davenverse is a collection of several popular Typelevel libraries, including Mules and cats-scalacheck. Unfortunately, we have fallen behind on their maintenance. We want to move these libraries under the Typelevel org, refresh their build tooling, and bring them up-to-date to ensure their longevity." + prereqs: Scala + difficulty: Medium. + length: ${medium-length} + mentors: [armanbilge, valencik] + categories: [development tools, programming languages] + repolinks: [ + { + name: davenverse + url: "https://github.com/davenverse" + } + ] + }, + + { + title: "Cats Effect & FS2 on Wasm/WASI" + description: + "Web Assembly and its System Interface are emerging technologies for deploying secure, modular applications. The goal of this project is to prototype porting the Cats Effect runtime and FS2 streaming I/O to the Wasm/WASI platform, also possibly generating feedback for the Scala WASM and WASI teams." + prereqs: "Scala, ideally some experience with Wasm/WASI" + difficulty: "Hard. Wasm/WASI support in Scala is experimental." + length: ${long-length} + mentors: [armanbilge, tanishiking, valencik] + categories: [web, cloud, operating systems, programming languages] + repolinks: [ + { + name: cats-effect + url: "https://github.com/typelevel/cats-effect" + }, + { + name: fs2 + url: "https://github.com/typelevel/fs2" + } + ] + }, + + { + title: Laika enhancements for typelevel.org + description: + "Laika is a purely functional site and e-book generator and customizable text markup transformer. We recently migrated the Typelevel website from Jekyll to Laika. The goal of this project is improve and streamline Laika's support for generating non-documentation websites, such as blogs." + prereqs: Scala + difficulty: Medium. + length: ${medium-length} + mentors: [armanbilge, valencik] + categories: [web, programming languages] + repolinks: [ + { + name: Laika + url: "https://github.com/typelevel/Laika" + }, + { + name: typelevel.org + url: "https://github.com/typelevel/typelevel.github.com" + } + ] + }, + + { + title: A faster immutable list datatype + description: + "Immutable linked lists are a core datatype in functional programming languages. The goal of this project is to explore implementing a list-like datatype with enhanced performance. Along the way, you will learn about algebraic datatypes, Cats typeclasses, and mechanical sympathy." + prereqs: Interest in functional programming + difficulty: "Medium. This is a good project for beginners!" + length: ${long-length} + mentors: [armanbilge, johnynek] + categories: [web, programming languages] + repolinks: [ + { + name: Cats Collections + url: "https://github.com/typelevel/cats-collections" + } + ] + } +] diff --git a/src/gsoc/gsoc.template.html b/src/gsoc/gsoc.template.html new file mode 100644 index 00000000..2b74b6f3 --- /dev/null +++ b/src/gsoc/gsoc.template.html @@ -0,0 +1,8 @@ +

Google Summer of Code

+ +
+ +
diff --git a/src/gsoc/ideas.md b/src/gsoc/ideas.md new file mode 100644 index 00000000..dbadc6a0 --- /dev/null +++ b/src/gsoc/ideas.md @@ -0,0 +1,13 @@ +{% + laika.title: Google Summer of Code + ideas-tab.class: bulma-is-active + laika.html.template: ideas.template.html +%} + +Our community has identified project ideas that we believe will significantly enhance the Typelevel ecosystem. Nothing is set in stone: we may be able to adjust a project’s length and difficulty to make it the right fit for you. So if you see something here that interests you or have an idea of your own, please [get in touch][email]! + +@:fragment(hero) + @:style(bulma-is-size-5 bulma-has-text-weight-medium) Are you interested in working on a GSoC project with mentorship from Typelevel maintainers? @:@ +@:@ + +[email]: mailto:gsoc@typelevel.org diff --git a/src/gsoc/ideas.template.html b/src/gsoc/ideas.template.html new file mode 100644 index 00000000..e19df927 --- /dev/null +++ b/src/gsoc/ideas.template.html @@ -0,0 +1,39 @@ +@:embed(/templates/main.template.html) +
+ @:include(gsoc.template.html) +
+ ${cursor.currentDocument.content} +
+ +
+ @:for(ideas) +
+
+
+
+

${_.title}

+

${_.description}

+

Prerequisites
${_.prereqs}

+

Expected Difficulty
${_.difficulty}

+

Expected Length
${_.length}

+

Mentors
@:for(_.mentors) @${_}@:@

+

Related Repositories
@:for(_.repolinks) ${_.name}@:@

+
+
+
+
+ @:@ +
+
+ +
+
+
+ ${cursor.currentDocument.fragments.hero} +
+ Submit Proposal +
+
+ +@:@ diff --git a/src/img/apple-touch-icon.png b/src/img/apple-touch-icon.png new file mode 100644 index 00000000..88b8b616 Binary files /dev/null and b/src/img/apple-touch-icon.png differ diff --git a/src/img/authors/arman.jpg b/src/img/authors/arman.jpg new file mode 100644 index 00000000..7a623c9c Binary files /dev/null and b/src/img/authors/arman.jpg differ diff --git a/src/img/authors/hkateu.jpg b/src/img/authors/hkateu.jpg new file mode 100644 index 00000000..2899aa65 Binary files /dev/null and b/src/img/authors/hkateu.jpg differ diff --git a/src/img/favicon.ico b/src/img/favicon.ico new file mode 100644 index 00000000..50a95270 Binary files /dev/null and b/src/img/favicon.ico differ diff --git a/src/img/favicon.svg b/src/img/favicon.svg new file mode 100644 index 00000000..b3c7a16f --- /dev/null +++ b/src/img/favicon.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + navbar-brand + \ No newline at end of file diff --git a/src/img/logo.svg b/src/img/logo.svg new file mode 100644 index 00000000..eec9f8a6 --- /dev/null +++ b/src/img/logo.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + navbar-brand + + + + navbar-brand + + + + + diff --git a/img/media/2018-survey/3ne70PU.png b/src/img/media/2018-survey/3ne70PU.png similarity index 100% rename from img/media/2018-survey/3ne70PU.png rename to src/img/media/2018-survey/3ne70PU.png diff --git a/img/media/2018-survey/5WuSHVP.png b/src/img/media/2018-survey/5WuSHVP.png similarity index 100% rename from img/media/2018-survey/5WuSHVP.png rename to src/img/media/2018-survey/5WuSHVP.png diff --git a/img/media/2018-survey/8VbOtFS.png b/src/img/media/2018-survey/8VbOtFS.png similarity index 100% rename from img/media/2018-survey/8VbOtFS.png rename to src/img/media/2018-survey/8VbOtFS.png diff --git a/img/media/2018-survey/BA1ShtM.png b/src/img/media/2018-survey/BA1ShtM.png similarity index 100% rename from img/media/2018-survey/BA1ShtM.png rename to src/img/media/2018-survey/BA1ShtM.png diff --git a/img/media/2018-survey/C5OdxEK.png b/src/img/media/2018-survey/C5OdxEK.png similarity index 100% rename from img/media/2018-survey/C5OdxEK.png rename to src/img/media/2018-survey/C5OdxEK.png diff --git a/img/media/2018-survey/C60Td4Q.png b/src/img/media/2018-survey/C60Td4Q.png similarity index 100% rename from img/media/2018-survey/C60Td4Q.png rename to src/img/media/2018-survey/C60Td4Q.png diff --git a/img/media/2018-survey/DoZYt4i.png b/src/img/media/2018-survey/DoZYt4i.png similarity index 100% rename from img/media/2018-survey/DoZYt4i.png rename to src/img/media/2018-survey/DoZYt4i.png diff --git a/img/media/2018-survey/JjK3muU.png b/src/img/media/2018-survey/JjK3muU.png similarity index 100% rename from img/media/2018-survey/JjK3muU.png rename to src/img/media/2018-survey/JjK3muU.png diff --git a/img/media/2018-survey/TiDFfzZ.png b/src/img/media/2018-survey/TiDFfzZ.png similarity index 100% rename from img/media/2018-survey/TiDFfzZ.png rename to src/img/media/2018-survey/TiDFfzZ.png diff --git a/img/media/2018-survey/XpVHZar.png b/src/img/media/2018-survey/XpVHZar.png similarity index 100% rename from img/media/2018-survey/XpVHZar.png rename to src/img/media/2018-survey/XpVHZar.png diff --git a/img/media/2018-survey/YDmhHTo.png b/src/img/media/2018-survey/YDmhHTo.png similarity index 100% rename from img/media/2018-survey/YDmhHTo.png rename to src/img/media/2018-survey/YDmhHTo.png diff --git a/img/media/2018-survey/cOhZ8W3.png b/src/img/media/2018-survey/cOhZ8W3.png similarity index 100% rename from img/media/2018-survey/cOhZ8W3.png rename to src/img/media/2018-survey/cOhZ8W3.png diff --git a/img/media/2018-survey/evmpmZK.png b/src/img/media/2018-survey/evmpmZK.png similarity index 100% rename from img/media/2018-survey/evmpmZK.png rename to src/img/media/2018-survey/evmpmZK.png diff --git a/img/media/2018-survey/mNbUBxW.png b/src/img/media/2018-survey/mNbUBxW.png similarity index 100% rename from img/media/2018-survey/mNbUBxW.png rename to src/img/media/2018-survey/mNbUBxW.png diff --git a/img/media/2018-survey/q2WjZ1d.png b/src/img/media/2018-survey/q2WjZ1d.png similarity index 100% rename from img/media/2018-survey/q2WjZ1d.png rename to src/img/media/2018-survey/q2WjZ1d.png diff --git a/img/media/2018-survey/slzrAHi.png b/src/img/media/2018-survey/slzrAHi.png similarity index 100% rename from img/media/2018-survey/slzrAHi.png rename to src/img/media/2018-survey/slzrAHi.png diff --git a/img/media/2018-survey/uqUxPWf.png b/src/img/media/2018-survey/uqUxPWf.png similarity index 100% rename from img/media/2018-survey/uqUxPWf.png rename to src/img/media/2018-survey/uqUxPWf.png diff --git a/img/media/2018-survey/xGjcmj6.png b/src/img/media/2018-survey/xGjcmj6.png similarity index 100% rename from img/media/2018-survey/xGjcmj6.png rename to src/img/media/2018-survey/xGjcmj6.png diff --git a/img/media/cats-effect-diagram.png b/src/img/media/cats-effect-diagram.png similarity index 100% rename from img/media/cats-effect-diagram.png rename to src/img/media/cats-effect-diagram.png diff --git a/img/media/fibers/async.png b/src/img/media/fibers/async.png similarity index 100% rename from img/media/fibers/async.png rename to src/img/media/fibers/async.png diff --git a/img/media/fibers/few-threads.png b/src/img/media/fibers/few-threads.png similarity index 100% rename from img/media/fibers/few-threads.png rename to src/img/media/fibers/few-threads.png diff --git a/img/media/fibers/fibers.png b/src/img/media/fibers/fibers.png similarity index 100% rename from img/media/fibers/fibers.png rename to src/img/media/fibers/fibers.png diff --git a/img/media/fibers/many-threads.png b/src/img/media/fibers/many-threads.png similarity index 100% rename from img/media/fibers/many-threads.png rename to src/img/media/fibers/many-threads.png diff --git a/img/media/fibers/overhead.png b/src/img/media/fibers/overhead.png similarity index 100% rename from img/media/fibers/overhead.png rename to src/img/media/fibers/overhead.png diff --git a/img/media/fibers/work-stealing.png b/src/img/media/fibers/work-stealing.png similarity index 100% rename from img/media/fibers/work-stealing.png rename to src/img/media/fibers/work-stealing.png diff --git a/img/media/hackday-thumb.jpg b/src/img/media/hackday-thumb.jpg similarity index 100% rename from img/media/hackday-thumb.jpg rename to src/img/media/hackday-thumb.jpg diff --git a/img/media/hackday.jpg b/src/img/media/hackday.jpg similarity index 100% rename from img/media/hackday.jpg rename to src/img/media/hackday.jpg diff --git a/img/media/highscore.png b/src/img/media/highscore.png similarity index 100% rename from img/media/highscore.png rename to src/img/media/highscore.png diff --git a/img/media/hkt-inflection.png b/src/img/media/hkt-inflection.png similarity index 100% rename from img/media/hkt-inflection.png rename to src/img/media/hkt-inflection.png diff --git a/img/media/ieoti-duzzle.png b/src/img/media/ieoti-duzzle.png similarity index 100% rename from img/media/ieoti-duzzle.png rename to src/img/media/ieoti-duzzle.png diff --git a/img/media/ieoti-fizzle.png b/src/img/media/ieoti-fizzle.png similarity index 100% rename from img/media/ieoti-fizzle.png rename to src/img/media/ieoti-fizzle.png diff --git a/img/media/ieoti-wazzle.png b/src/img/media/ieoti-wazzle.png similarity index 100% rename from img/media/ieoti-wazzle.png rename to src/img/media/ieoti-wazzle.png diff --git a/img/media/nescala-hero-thumb.jpg b/src/img/media/nescala-hero-thumb.jpg similarity index 100% rename from img/media/nescala-hero-thumb.jpg rename to src/img/media/nescala-hero-thumb.jpg diff --git a/img/media/nescala-hero.jpg b/src/img/media/nescala-hero.jpg similarity index 100% rename from img/media/nescala-hero.jpg rename to src/img/media/nescala-hero.jpg diff --git a/img/media/samegame.png b/src/img/media/samegame.png similarity index 100% rename from img/media/samegame.png rename to src/img/media/samegame.png diff --git a/img/media/speakers/aaronlevin.jpg b/src/img/media/speakers/aaronlevin.jpg similarity index 100% rename from img/media/speakers/aaronlevin.jpg rename to src/img/media/speakers/aaronlevin.jpg diff --git a/img/media/speakers/adelbertchang.jpeg b/src/img/media/speakers/adelbertchang.jpeg similarity index 100% rename from img/media/speakers/adelbertchang.jpeg rename to src/img/media/speakers/adelbertchang.jpeg diff --git a/img/media/speakers/alejandrogomez.jpg b/src/img/media/speakers/alejandrogomez.jpg similarity index 100% rename from img/media/speakers/alejandrogomez.jpg rename to src/img/media/speakers/alejandrogomez.jpg diff --git a/img/media/speakers/alexandrunedelcu.jpg b/src/img/media/speakers/alexandrunedelcu.jpg similarity index 100% rename from img/media/speakers/alexandrunedelcu.jpg rename to src/img/media/speakers/alexandrunedelcu.jpg diff --git a/img/media/speakers/andreamagnorsky.jpg b/src/img/media/speakers/andreamagnorsky.jpg similarity index 100% rename from img/media/speakers/andreamagnorsky.jpg rename to src/img/media/speakers/andreamagnorsky.jpg diff --git a/img/media/speakers/annettebieniusa.jpg b/src/img/media/speakers/annettebieniusa.jpg similarity index 100% rename from img/media/speakers/annettebieniusa.jpg rename to src/img/media/speakers/annettebieniusa.jpg diff --git a/img/media/speakers/battermann.jpg b/src/img/media/speakers/battermann.jpg similarity index 100% rename from img/media/speakers/battermann.jpg rename to src/img/media/speakers/battermann.jpg diff --git a/img/media/speakers/cameronjoannidis.jpg b/src/img/media/speakers/cameronjoannidis.jpg similarity index 100% rename from img/media/speakers/cameronjoannidis.jpg rename to src/img/media/speakers/cameronjoannidis.jpg diff --git a/img/media/speakers/chrisdavenport.jpg b/src/img/media/speakers/chrisdavenport.jpg similarity index 100% rename from img/media/speakers/chrisdavenport.jpg rename to src/img/media/speakers/chrisdavenport.jpg diff --git a/img/media/speakers/chrishodapp.jpg b/src/img/media/speakers/chrishodapp.jpg similarity index 100% rename from img/media/speakers/chrishodapp.jpg rename to src/img/media/speakers/chrishodapp.jpg diff --git a/img/media/speakers/chrismyers.jpg b/src/img/media/speakers/chrismyers.jpg similarity index 100% rename from img/media/speakers/chrismyers.jpg rename to src/img/media/speakers/chrismyers.jpg diff --git a/img/media/speakers/chrisvogt.jpg b/src/img/media/speakers/chrisvogt.jpg similarity index 100% rename from img/media/speakers/chrisvogt.jpg rename to src/img/media/speakers/chrisvogt.jpg diff --git a/img/media/speakers/dalewijnand.jpg b/src/img/media/speakers/dalewijnand.jpg similarity index 100% rename from img/media/speakers/dalewijnand.jpg rename to src/img/media/speakers/dalewijnand.jpg diff --git a/img/media/speakers/danielasfregola.png b/src/img/media/speakers/danielasfregola.png similarity index 100% rename from img/media/speakers/danielasfregola.png rename to src/img/media/speakers/danielasfregola.png diff --git a/img/media/speakers/danielspiewak.jpg b/src/img/media/speakers/danielspiewak.jpg similarity index 100% rename from img/media/speakers/danielspiewak.jpg rename to src/img/media/speakers/danielspiewak.jpg diff --git a/img/media/speakers/davecleaver.jpg b/src/img/media/speakers/davecleaver.jpg similarity index 100% rename from img/media/speakers/davecleaver.jpg rename to src/img/media/speakers/davecleaver.jpg diff --git a/img/media/speakers/davegurnell.jpg b/src/img/media/speakers/davegurnell.jpg similarity index 100% rename from img/media/speakers/davegurnell.jpg rename to src/img/media/speakers/davegurnell.jpg diff --git a/img/media/speakers/denisrosset.png b/src/img/media/speakers/denisrosset.png similarity index 100% rename from img/media/speakers/denisrosset.png rename to src/img/media/speakers/denisrosset.png diff --git a/img/media/speakers/diegoalonso.png b/src/img/media/speakers/diegoalonso.png similarity index 100% rename from img/media/speakers/diegoalonso.png rename to src/img/media/speakers/diegoalonso.png diff --git a/img/media/speakers/dorothyordogh.jpg b/src/img/media/speakers/dorothyordogh.jpg similarity index 100% rename from img/media/speakers/dorothyordogh.jpg rename to src/img/media/speakers/dorothyordogh.jpg diff --git a/img/media/speakers/edmundnoble.jpg b/src/img/media/speakers/edmundnoble.jpg similarity index 100% rename from img/media/speakers/edmundnoble.jpg rename to src/img/media/speakers/edmundnoble.jpg diff --git a/img/media/speakers/erikosheim.jpg b/src/img/media/speakers/erikosheim.jpg similarity index 100% rename from img/media/speakers/erikosheim.jpg rename to src/img/media/speakers/erikosheim.jpg diff --git a/img/media/speakers/etorreborre.jpg b/src/img/media/speakers/etorreborre.jpg similarity index 100% rename from img/media/speakers/etorreborre.jpg rename to src/img/media/speakers/etorreborre.jpg diff --git a/img/media/speakers/eugeneplatonov.jpg b/src/img/media/speakers/eugeneplatonov.jpg similarity index 100% rename from img/media/speakers/eugeneplatonov.jpg rename to src/img/media/speakers/eugeneplatonov.jpg diff --git a/img/media/speakers/eugeniacheng.jpg b/src/img/media/speakers/eugeniacheng.jpg similarity index 100% rename from img/media/speakers/eugeniacheng.jpg rename to src/img/media/speakers/eugeniacheng.jpg diff --git a/img/media/speakers/fabiolabella.jpeg b/src/img/media/speakers/fabiolabella.jpeg similarity index 100% rename from img/media/speakers/fabiolabella.jpeg rename to src/img/media/speakers/fabiolabella.jpeg diff --git a/img/media/speakers/felixmulder.jpg b/src/img/media/speakers/felixmulder.jpg similarity index 100% rename from img/media/speakers/felixmulder.jpg rename to src/img/media/speakers/felixmulder.jpg diff --git a/img/media/speakers/frankthomas.png b/src/img/media/speakers/frankthomas.png similarity index 100% rename from img/media/speakers/frankthomas.png rename to src/img/media/speakers/frankthomas.png diff --git a/img/media/speakers/gregpfeil.jpg b/src/img/media/speakers/gregpfeil.jpg similarity index 100% rename from img/media/speakers/gregpfeil.jpg rename to src/img/media/speakers/gregpfeil.jpg diff --git a/img/media/speakers/guillaumebort.jpg b/src/img/media/speakers/guillaumebort.jpg similarity index 100% rename from img/media/speakers/guillaumebort.jpg rename to src/img/media/speakers/guillaumebort.jpg diff --git a/img/media/speakers/guillaumemartres.jpg b/src/img/media/speakers/guillaumemartres.jpg similarity index 100% rename from img/media/speakers/guillaumemartres.jpg rename to src/img/media/speakers/guillaumemartres.jpg diff --git a/img/media/speakers/gvolpe.jpg b/src/img/media/speakers/gvolpe.jpg similarity index 100% rename from img/media/speakers/gvolpe.jpg rename to src/img/media/speakers/gvolpe.jpg diff --git a/img/media/speakers/harrylaoulakos.png b/src/img/media/speakers/harrylaoulakos.png similarity index 100% rename from img/media/speakers/harrylaoulakos.png rename to src/img/media/speakers/harrylaoulakos.png diff --git a/img/media/speakers/ionutstan.png b/src/img/media/speakers/ionutstan.png similarity index 100% rename from img/media/speakers/ionutstan.png rename to src/img/media/speakers/ionutstan.png diff --git a/img/media/speakers/itamarravid.jpg b/src/img/media/speakers/itamarravid.jpg similarity index 100% rename from img/media/speakers/itamarravid.jpg rename to src/img/media/speakers/itamarravid.jpg diff --git a/img/media/speakers/janouwens.jpg b/src/img/media/speakers/janouwens.jpg similarity index 100% rename from img/media/speakers/janouwens.jpg rename to src/img/media/speakers/janouwens.jpg diff --git a/img/media/speakers/jefersonossa.jpg b/src/img/media/speakers/jefersonossa.jpg similarity index 100% rename from img/media/speakers/jefersonossa.jpg rename to src/img/media/speakers/jefersonossa.jpg diff --git a/img/media/speakers/jonathanmerritt.jpg b/src/img/media/speakers/jonathanmerritt.jpg similarity index 100% rename from img/media/speakers/jonathanmerritt.jpg rename to src/img/media/speakers/jonathanmerritt.jpg diff --git a/img/media/speakers/jonpretty.jpg b/src/img/media/speakers/jonpretty.jpg similarity index 100% rename from img/media/speakers/jonpretty.jpg rename to src/img/media/speakers/jonpretty.jpg diff --git a/img/media/speakers/julienrf.jpg b/src/img/media/speakers/julienrf.jpg similarity index 100% rename from img/media/speakers/julienrf.jpg rename to src/img/media/speakers/julienrf.jpg diff --git a/img/media/speakers/kathifisler.jpg b/src/img/media/speakers/kathifisler.jpg similarity index 100% rename from img/media/speakers/kathifisler.jpg rename to src/img/media/speakers/kathifisler.jpg diff --git a/img/media/speakers/kenscambler.jpg b/src/img/media/speakers/kenscambler.jpg similarity index 100% rename from img/media/speakers/kenscambler.jpg rename to src/img/media/speakers/kenscambler.jpg diff --git a/img/media/speakers/kristinasojakova.jpg b/src/img/media/speakers/kristinasojakova.jpg similarity index 100% rename from img/media/speakers/kristinasojakova.jpg rename to src/img/media/speakers/kristinasojakova.jpg diff --git a/img/media/speakers/longcao.jpg b/src/img/media/speakers/longcao.jpg similarity index 100% rename from img/media/speakers/longcao.jpg rename to src/img/media/speakers/longcao.jpg diff --git a/img/media/speakers/lucabelli.jpg b/src/img/media/speakers/lucabelli.jpg similarity index 100% rename from img/media/speakers/lucabelli.jpg rename to src/img/media/speakers/lucabelli.jpg diff --git a/img/media/speakers/lukajacobowitz.jpg b/src/img/media/speakers/lukajacobowitz.jpg similarity index 100% rename from img/media/speakers/lukajacobowitz.jpg rename to src/img/media/speakers/lukajacobowitz.jpg diff --git a/img/media/speakers/marcushenry.jpg b/src/img/media/speakers/marcushenry.jpg similarity index 100% rename from img/media/speakers/marcushenry.jpg rename to src/img/media/speakers/marcushenry.jpg diff --git a/img/media/speakers/marinasigaeva.jpg b/src/img/media/speakers/marinasigaeva.jpg similarity index 100% rename from img/media/speakers/marinasigaeva.jpg rename to src/img/media/speakers/marinasigaeva.jpg diff --git a/img/media/speakers/martinodersky.jpg b/src/img/media/speakers/martinodersky.jpg similarity index 100% rename from img/media/speakers/martinodersky.jpg rename to src/img/media/speakers/martinodersky.jpg diff --git a/img/media/speakers/michaelpilquist.png b/src/img/media/speakers/michaelpilquist.png similarity index 100% rename from img/media/speakers/michaelpilquist.png rename to src/img/media/speakers/michaelpilquist.png diff --git a/img/media/speakers/nikivazou.jpg b/src/img/media/speakers/nikivazou.jpg similarity index 100% rename from img/media/speakers/nikivazou.jpg rename to src/img/media/speakers/nikivazou.jpg diff --git a/img/media/speakers/noelwelsh.png b/src/img/media/speakers/noelwelsh.png similarity index 100% rename from img/media/speakers/noelwelsh.png rename to src/img/media/speakers/noelwelsh.png diff --git a/img/media/speakers/oweinreese.jpg b/src/img/media/speakers/oweinreese.jpg similarity index 100% rename from img/media/speakers/oweinreese.jpg rename to src/img/media/speakers/oweinreese.jpg diff --git a/img/media/speakers/paulheymann.jpg b/src/img/media/speakers/paulheymann.jpg similarity index 100% rename from img/media/speakers/paulheymann.jpg rename to src/img/media/speakers/paulheymann.jpg diff --git a/img/media/speakers/ratansebastian.jpg b/src/img/media/speakers/ratansebastian.jpg similarity index 100% rename from img/media/speakers/ratansebastian.jpg rename to src/img/media/speakers/ratansebastian.jpg diff --git a/img/media/speakers/raulraja.jpg b/src/img/media/speakers/raulraja.jpg similarity index 100% rename from img/media/speakers/raulraja.jpg rename to src/img/media/speakers/raulraja.jpg diff --git a/img/media/speakers/romainruetschi.jpg b/src/img/media/speakers/romainruetschi.jpg similarity index 100% rename from img/media/speakers/romainruetschi.jpg rename to src/img/media/speakers/romainruetschi.jpg diff --git a/img/media/speakers/rossbaker.jpg b/src/img/media/speakers/rossbaker.jpg similarity index 100% rename from img/media/speakers/rossbaker.jpg rename to src/img/media/speakers/rossbaker.jpg diff --git a/img/media/speakers/ryanwilliams.jpg b/src/img/media/speakers/ryanwilliams.jpg similarity index 100% rename from img/media/speakers/ryanwilliams.jpg rename to src/img/media/speakers/ryanwilliams.jpg diff --git a/img/media/speakers/sasharomijn.jpg b/src/img/media/speakers/sasharomijn.jpg similarity index 100% rename from img/media/speakers/sasharomijn.jpg rename to src/img/media/speakers/sasharomijn.jpg diff --git a/img/media/speakers/sofiacole.jpg b/src/img/media/speakers/sofiacole.jpg similarity index 100% rename from img/media/speakers/sofiacole.jpg rename to src/img/media/speakers/sofiacole.jpg diff --git a/img/media/speakers/stefanschneider.jpg b/src/img/media/speakers/stefanschneider.jpg similarity index 100% rename from img/media/speakers/stefanschneider.jpg rename to src/img/media/speakers/stefanschneider.jpg diff --git a/img/media/speakers/stephaniebalzer.jpg b/src/img/media/speakers/stephaniebalzer.jpg similarity index 100% rename from img/media/speakers/stephaniebalzer.jpg rename to src/img/media/speakers/stephaniebalzer.jpg diff --git a/img/media/speakers/sweirich.jpg b/src/img/media/speakers/sweirich.jpg similarity index 100% rename from img/media/speakers/sweirich.jpg rename to src/img/media/speakers/sweirich.jpg diff --git a/img/media/speakers/viktorloevgren.png b/src/img/media/speakers/viktorloevgren.png similarity index 100% rename from img/media/speakers/viktorloevgren.png rename to src/img/media/speakers/viktorloevgren.png diff --git a/img/media/speakers/vilemliepelt.jpg b/src/img/media/speakers/vilemliepelt.jpg similarity index 100% rename from img/media/speakers/vilemliepelt.jpg rename to src/img/media/speakers/vilemliepelt.jpg diff --git a/img/media/speakers/zainabali.jpg b/src/img/media/speakers/zainabali.jpg similarity index 100% rename from img/media/speakers/zainabali.jpg rename to src/img/media/speakers/zainabali.jpg diff --git a/img/media/speakers/zhenhaoli.jpg b/src/img/media/speakers/zhenhaoli.jpg similarity index 100% rename from img/media/speakers/zhenhaoli.jpg rename to src/img/media/speakers/zhenhaoli.jpg diff --git a/img/media/sponsors/47_degrees.png b/src/img/media/sponsors/47_degrees.png similarity index 100% rename from img/media/sponsors/47_degrees.png rename to src/img/media/sponsors/47_degrees.png diff --git a/img/media/sponsors/arktekk.png b/src/img/media/sponsors/arktekk.png similarity index 100% rename from img/media/sponsors/arktekk.png rename to src/img/media/sponsors/arktekk.png diff --git a/img/media/sponsors/azavea.png b/src/img/media/sponsors/azavea.png similarity index 100% rename from img/media/sponsors/azavea.png rename to src/img/media/sponsors/azavea.png diff --git a/img/media/sponsors/box.png b/src/img/media/sponsors/box.png similarity index 100% rename from img/media/sponsors/box.png rename to src/img/media/sponsors/box.png diff --git a/img/media/sponsors/bridgewater.png b/src/img/media/sponsors/bridgewater.png similarity index 100% rename from img/media/sponsors/bridgewater.png rename to src/img/media/sponsors/bridgewater.png diff --git a/img/media/sponsors/cake.jpg b/src/img/media/sponsors/cake.jpg similarity index 100% rename from img/media/sponsors/cake.jpg rename to src/img/media/sponsors/cake.jpg diff --git a/img/media/sponsors/chariot.png b/src/img/media/sponsors/chariot.png similarity index 100% rename from img/media/sponsors/chariot.png rename to src/img/media/sponsors/chariot.png diff --git a/img/media/sponsors/coatue.png b/src/img/media/sponsors/coatue.png similarity index 100% rename from img/media/sponsors/coatue.png rename to src/img/media/sponsors/coatue.png diff --git a/img/media/sponsors/comcast.png b/src/img/media/sponsors/comcast.png similarity index 100% rename from img/media/sponsors/comcast.png rename to src/img/media/sponsors/comcast.png diff --git a/img/media/sponsors/commbank.png b/src/img/media/sponsors/commbank.png similarity index 100% rename from img/media/sponsors/commbank.png rename to src/img/media/sponsors/commbank.png diff --git a/img/media/sponsors/commercetools.png b/src/img/media/sponsors/commercetools.png similarity index 100% rename from img/media/sponsors/commercetools.png rename to src/img/media/sponsors/commercetools.png diff --git a/img/media/sponsors/commercetools_2.png b/src/img/media/sponsors/commercetools_2.png similarity index 100% rename from img/media/sponsors/commercetools_2.png rename to src/img/media/sponsors/commercetools_2.png diff --git a/img/media/sponsors/crite_o.png b/src/img/media/sponsors/crite_o.png similarity index 100% rename from img/media/sponsors/crite_o.png rename to src/img/media/sponsors/crite_o.png diff --git a/img/media/sponsors/crite_o_labs.png b/src/img/media/sponsors/crite_o_labs.png similarity index 100% rename from img/media/sponsors/crite_o_labs.png rename to src/img/media/sponsors/crite_o_labs.png diff --git a/img/media/sponsors/data-monsters.png b/src/img/media/sponsors/data-monsters.png similarity index 100% rename from img/media/sponsors/data-monsters.png rename to src/img/media/sponsors/data-monsters.png diff --git a/img/media/sponsors/driver.png b/src/img/media/sponsors/driver.png similarity index 100% rename from img/media/sponsors/driver.png rename to src/img/media/sponsors/driver.png diff --git a/img/media/sponsors/giphy.png b/src/img/media/sponsors/giphy.png similarity index 100% rename from img/media/sponsors/giphy.png rename to src/img/media/sponsors/giphy.png diff --git a/img/media/sponsors/iheartradio.png b/src/img/media/sponsors/iheartradio.png similarity index 100% rename from img/media/sponsors/iheartradio.png rename to src/img/media/sponsors/iheartradio.png diff --git a/img/media/sponsors/inner-product.png b/src/img/media/sponsors/inner-product.png similarity index 100% rename from img/media/sponsors/inner-product.png rename to src/img/media/sponsors/inner-product.png diff --git a/img/media/sponsors/iterators.png b/src/img/media/sponsors/iterators.png similarity index 100% rename from img/media/sponsors/iterators.png rename to src/img/media/sponsors/iterators.png diff --git a/img/media/sponsors/lightbend.png b/src/img/media/sponsors/lightbend.png similarity index 100% rename from img/media/sponsors/lightbend.png rename to src/img/media/sponsors/lightbend.png diff --git a/img/media/sponsors/linkyard.png b/src/img/media/sponsors/linkyard.png similarity index 100% rename from img/media/sponsors/linkyard.png rename to src/img/media/sponsors/linkyard.png diff --git a/img/media/sponsors/mediamath.png b/src/img/media/sponsors/mediamath.png similarity index 100% rename from img/media/sponsors/mediamath.png rename to src/img/media/sponsors/mediamath.png diff --git a/img/media/sponsors/meetup.png b/src/img/media/sponsors/meetup.png similarity index 100% rename from img/media/sponsors/meetup.png rename to src/img/media/sponsors/meetup.png diff --git a/img/media/sponsors/rally.png b/src/img/media/sponsors/rally.png similarity index 100% rename from img/media/sponsors/rally.png rename to src/img/media/sponsors/rally.png diff --git a/img/media/sponsors/scalac.png b/src/img/media/sponsors/scalac.png similarity index 100% rename from img/media/sponsors/scalac.png rename to src/img/media/sponsors/scalac.png diff --git a/img/media/sponsors/scotiabank.png b/src/img/media/sponsors/scotiabank.png similarity index 100% rename from img/media/sponsors/scotiabank.png rename to src/img/media/sponsors/scotiabank.png diff --git a/img/media/sponsors/signify.png b/src/img/media/sponsors/signify.png similarity index 100% rename from img/media/sponsors/signify.png rename to src/img/media/sponsors/signify.png diff --git a/img/media/sponsors/simple.png b/src/img/media/sponsors/simple.png similarity index 100% rename from img/media/sponsors/simple.png rename to src/img/media/sponsors/simple.png diff --git a/img/media/sponsors/soundcloud.png b/src/img/media/sponsors/soundcloud.png similarity index 100% rename from img/media/sponsors/soundcloud.png rename to src/img/media/sponsors/soundcloud.png diff --git a/img/media/sponsors/tapad.png b/src/img/media/sponsors/tapad.png similarity index 100% rename from img/media/sponsors/tapad.png rename to src/img/media/sponsors/tapad.png diff --git a/img/media/sponsors/triplequote.png b/src/img/media/sponsors/triplequote.png similarity index 100% rename from img/media/sponsors/triplequote.png rename to src/img/media/sponsors/triplequote.png diff --git a/img/media/sponsors/underscore.png b/src/img/media/sponsors/underscore.png similarity index 100% rename from img/media/sponsors/underscore.png rename to src/img/media/sponsors/underscore.png diff --git a/img/media/sponsors/underscore_2.png b/src/img/media/sponsors/underscore_2.png similarity index 100% rename from img/media/sponsors/underscore_2.png rename to src/img/media/sponsors/underscore_2.png diff --git a/img/media/sponsors/verizon.png b/src/img/media/sponsors/verizon.png similarity index 100% rename from img/media/sponsors/verizon.png rename to src/img/media/sponsors/verizon.png diff --git a/img/media/sponsors/weight_watchers.png b/src/img/media/sponsors/weight_watchers.png similarity index 100% rename from img/media/sponsors/weight_watchers.png rename to src/img/media/sponsors/weight_watchers.png diff --git a/img/media/sponsors/zalando.png b/src/img/media/sponsors/zalando.png similarity index 100% rename from img/media/sponsors/zalando.png rename to src/img/media/sponsors/zalando.png diff --git a/img/media/triplequote/triplequote-compile-scala-3.2x-faster-front.jpg b/src/img/media/triplequote/triplequote-compile-scala-3.2x-faster-front.jpg similarity index 100% rename from img/media/triplequote/triplequote-compile-scala-3.2x-faster-front.jpg rename to src/img/media/triplequote/triplequote-compile-scala-3.2x-faster-front.jpg diff --git a/img/media/berlin-thumb.jpg b/src/img/places/berlin-thumb.jpg similarity index 100% rename from img/media/berlin-thumb.jpg rename to src/img/places/berlin-thumb.jpg diff --git a/img/media/berlin.jpg b/src/img/places/berlin.jpg similarity index 100% rename from img/media/berlin.jpg rename to src/img/places/berlin.jpg diff --git a/src/img/places/berlin.md b/src/img/places/berlin.md new file mode 100644 index 00000000..496efff5 --- /dev/null +++ b/src/img/places/berlin.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/berlin.jpg) +"[Berlin-Brandenburg Gate overview](https://commons.wikimedia.org/wiki/File:Berlin-Brandenburg_Gate_overview.jpg)" by [Cezary Piwowarski](https://en.wikipedia.org/wiki/pl:User:Cezary_p) is licensed under [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/). +@:@ diff --git a/img/media/cadiz-thumb.jpg b/src/img/places/cadiz-thumb.jpg similarity index 100% rename from img/media/cadiz-thumb.jpg rename to src/img/places/cadiz-thumb.jpg diff --git a/img/media/cadiz.jpg b/src/img/places/cadiz.jpg similarity index 100% rename from img/media/cadiz.jpg rename to src/img/places/cadiz.jpg diff --git a/src/img/places/cadiz.md b/src/img/places/cadiz.md new file mode 100644 index 00000000..685dbc30 --- /dev/null +++ b/src/img/places/cadiz.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/cadiz.jpg) +"[Cádiz](https://www.flickr.com/photos/michalo/6931278196/)" by [Anna & Michal](https://www.flickr.com/people/michalo/) is licensed under [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/). +@:@ diff --git a/img/media/cambridge-thumb.jpg b/src/img/places/cambridge-thumb.jpg similarity index 100% rename from img/media/cambridge-thumb.jpg rename to src/img/places/cambridge-thumb.jpg diff --git a/img/media/cambridge.jpg b/src/img/places/cambridge.jpg similarity index 100% rename from img/media/cambridge.jpg rename to src/img/places/cambridge.jpg diff --git a/src/img/places/cambridge.md b/src/img/places/cambridge.md new file mode 100644 index 00000000..61224008 --- /dev/null +++ b/src/img/places/cambridge.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/cambridge.jpg) +"View from Prudential Tower, Boston" by yeowatzup is licensed under [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/). +@:@ diff --git a/img/media/copenhagen-thumb.jpg b/src/img/places/copenhagen-thumb.jpg similarity index 100% rename from img/media/copenhagen-thumb.jpg rename to src/img/places/copenhagen-thumb.jpg diff --git a/img/media/copenhagen.jpg b/src/img/places/copenhagen.jpg similarity index 100% rename from img/media/copenhagen.jpg rename to src/img/places/copenhagen.jpg diff --git a/src/img/places/copenhagen.md b/src/img/places/copenhagen.md new file mode 100644 index 00000000..152997ea --- /dev/null +++ b/src/img/places/copenhagen.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/copenhagen.jpg) +"[Nyhavn panorama](https://commons.wikimedia.org/wiki/File:Nyhavn-panorama.jpg)" by Scythian is licensed under [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/). +@:@ diff --git a/img/media/lakedistrict-thumb.jpg b/src/img/places/lakedistrict-thumb.jpg similarity index 100% rename from img/media/lakedistrict-thumb.jpg rename to src/img/places/lakedistrict-thumb.jpg diff --git a/img/media/lakedistrict.jpg b/src/img/places/lakedistrict.jpg similarity index 100% rename from img/media/lakedistrict.jpg rename to src/img/places/lakedistrict.jpg diff --git a/src/img/places/lakedistrict.md b/src/img/places/lakedistrict.md new file mode 100644 index 00000000..9a55b03b --- /dev/null +++ b/src/img/places/lakedistrict.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/lakedistrict.jpg) +Image under commercial license. All rights reserved. +@:@ diff --git a/img/media/lausanne-thumb.jpg b/src/img/places/lausanne-thumb.jpg similarity index 100% rename from img/media/lausanne-thumb.jpg rename to src/img/places/lausanne-thumb.jpg diff --git a/img/media/lausanne.jpg b/src/img/places/lausanne.jpg similarity index 100% rename from img/media/lausanne.jpg rename to src/img/places/lausanne.jpg diff --git a/src/img/places/lausanne.md b/src/img/places/lausanne.md new file mode 100644 index 00000000..00919a89 --- /dev/null +++ b/src/img/places/lausanne.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/lausanne.jpg) +"[lauvax](https://www.flickr.com/photos/harmishhk/15052138480)" by [harmishhk](https://www.flickr.com/people/harmishhk/) is licensed under [CC BY-SA 2.0](https://creativecommons.org/licenses/by-sa/2.0/). +@:@ diff --git a/img/media/london-thumb.jpg b/src/img/places/london-thumb.jpg similarity index 100% rename from img/media/london-thumb.jpg rename to src/img/places/london-thumb.jpg diff --git a/img/media/london.jpg b/src/img/places/london.jpg similarity index 100% rename from img/media/london.jpg rename to src/img/places/london.jpg diff --git a/src/img/places/london.md b/src/img/places/london.md new file mode 100644 index 00000000..2c539476 --- /dev/null +++ b/src/img/places/london.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/london.jpg) +Image by John Nuttall is licensed under [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/). +@:@ diff --git a/img/media/lyon-thumb.jpg b/src/img/places/lyon-thumb.jpg similarity index 100% rename from img/media/lyon-thumb.jpg rename to src/img/places/lyon-thumb.jpg diff --git a/img/media/lyon.jpg b/src/img/places/lyon.jpg similarity index 100% rename from img/media/lyon.jpg rename to src/img/places/lyon.jpg diff --git a/src/img/places/lyon.md b/src/img/places/lyon.md new file mode 100644 index 00000000..e85bdc12 --- /dev/null +++ b/src/img/places/lyon.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/lyon.jpg) +"[Saone River](https://www.flickr.com/photos/archer10/15941037949/)" by [Dennis Jarvis](https://www.flickr.com/people/archer10/) is licensed under [CC BY-SA 2.0](https://creativecommons.org/licenses/by-sa/2.0/). +@:@ diff --git a/img/media/nyc-thumb.jpg b/src/img/places/nyc-thumb.jpg similarity index 100% rename from img/media/nyc-thumb.jpg rename to src/img/places/nyc-thumb.jpg diff --git a/img/media/nyc.jpg b/src/img/places/nyc.jpg similarity index 100% rename from img/media/nyc.jpg rename to src/img/places/nyc.jpg diff --git a/img/media/oslo-thumb.jpg b/src/img/places/oslo-thumb.jpg similarity index 100% rename from img/media/oslo-thumb.jpg rename to src/img/places/oslo-thumb.jpg diff --git a/img/media/oslo.jpg b/src/img/places/oslo.jpg similarity index 100% rename from img/media/oslo.jpg rename to src/img/places/oslo.jpg diff --git a/src/img/places/oslo.md b/src/img/places/oslo.md new file mode 100644 index 00000000..2fa0ed9d --- /dev/null +++ b/src/img/places/oslo.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/oslo.jpg) +"Oslo opera house" by [Tobias Van Der Elst](https://www.flickr.com/people/79899037@N04/) is licensed under [CC BY-SA 2.0](https://creativecommons.org/licenses/by-sa/2.0/). +@:@ diff --git a/img/media/philly-thumb.jpg b/src/img/places/philly-thumb.jpg similarity index 100% rename from img/media/philly-thumb.jpg rename to src/img/places/philly-thumb.jpg diff --git a/img/media/philly.jpg b/src/img/places/philly.jpg similarity index 100% rename from img/media/philly.jpg rename to src/img/places/philly.jpg diff --git a/src/img/places/philly.md b/src/img/places/philly.md new file mode 100644 index 00000000..9269e61d --- /dev/null +++ b/src/img/places/philly.md @@ -0,0 +1,5 @@ +{% laika.targetFormats = [] %} + +@:figure(/img/places/philly.jpg) +"[I wish I was a little bit taller](https://www.flickr.com/photos/ryanhallock/18138606858/)" by [Ryan Hallock](https://www.flickr.com/people/ryanhallock/) is licensed under [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/). +@:@ diff --git a/src/img/sponsors/aruna.webp b/src/img/sponsors/aruna.webp new file mode 100644 index 00000000..5b308474 Binary files /dev/null and b/src/img/sponsors/aruna.webp differ diff --git a/src/img/sponsors/famly.svg b/src/img/sponsors/famly.svg new file mode 100644 index 00000000..abaeaafd --- /dev/null +++ b/src/img/sponsors/famly.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/img/sponsors/shopify.svg b/src/img/sponsors/shopify.svg new file mode 100755 index 00000000..7817303b --- /dev/null +++ b/src/img/sponsors/shopify.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/img/sponsors/spotify.svg b/src/img/sponsors/spotify.svg new file mode 100644 index 00000000..52fa5a65 --- /dev/null +++ b/src/img/sponsors/spotify.svg @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main.css b/src/main.css new file mode 100644 index 00000000..f580cd43 --- /dev/null +++ b/src/main.css @@ -0,0 +1,137 @@ +@import "https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/versions/bulma-prefixed.min.css"; + +:root { + --bulma-link-h: 283.33deg; + --bulma-link-s: 96.10%; + --bulma-link-l: 67.45%; + + --bulma-scheme-h: 283.33deg; + --bulma-scheme-s: 68.75%; + --bulma-scheme-l: 92.35%; + + --bulma-text-h: 195.00deg; + --bulma-text-s: 13.70%; + --bulma-text-l: 22.75%; + + --bulma-primary-h: 272.97deg; + --bulma-primary-s: 34.49%; + --bulma-primary-l: 48.04%; +} + +:root { + --bulma-body-size: 1.1em +} + +.bulma-button { + --bulma-button-text-decoration: none; +} + +.bulma-navbar { + --bulma-navbar-height: 5rem; + --bulma-navbar-item-img-max-height: 3rem; +} + +body { + min-height: 100vh; +} + +a.anchor-link { + visibility: hidden; + position: absolute; + display: inline-block; + width: 1.4em; + margin-top: 0.3em; + text-align: right; + text-decoration: none; + margin-left: -1.2em; + padding-right: 0.5em; + font-size: 0.7em; +} + +h1:hover > a.anchor-link, +h2:hover > a.anchor-link, +h3:hover > a.anchor-link, +h4:hover > a.anchor-link, +h5:hover > a.anchor-link, +h6:hover > a.anchor-link { + visibility: visible; + text-decoration: none; +} + +img.sponsor { + max-height: 48px; +} + +/* Hack to prevent double-rendering the title in blog posts */ +.blog-post .title { + display: none; +} + +/* Hack to render multi-author bylines */ +.blog-post-byline span.delimiter:nth-last-child(-n+2 of .delimiter) { + display: none; +} + +.blog-post-byline span.last-delimiter:not(:nth-last-child(2 of .last-delimiter)) { + display: none; +} + +/* Laika syntax highlighting */ +:root { + --code-font: "Fira Mono", monospace; + --code-font-size: var(--bulma-code-size); + --primary-color: var(--bulma-text); + --syntax-base1: #21303f; /* background */ + --syntax-base2: #73ad9b; /* comments */ + --syntax-base3: #b2adb4; /* punctuation */ + --syntax-base4: #ffb4b5; /* identifier */ + --syntax-base5: #e6e8ea; /* unclassified */ + --syntax-wheel1: #8fa1c9; /* substitution, annotation */ + --syntax-wheel2: #81e67b; /* keyword, escape-sequence */ + --syntax-wheel3: #ffde6d; /* declaration name */ + --syntax-wheel4: #86aac1; /* literals */ + --syntax-wheel5: #f86971; /* type/class name */ + + /* Protosearch theme integration */ + --ps-bg: var(--bulma-scheme-main); + --ps-text-muted: var(--bulma-text-weak); + --ps-border: var(--bulma-border); + --ps-link: var(--bulma-link); + --ps-highlight: #ffde6d; +} + +/* Equal height cards in grid and column */ +.bulma-cell > .bulma-card, +.bulma-column > .bulma-card { + height: 100%; +} + +.nowrap { + white-space: nowrap; +} + +.hyphenate { + hyphens: auto; +} + +img.legacy-event-sponsor { + height: 60px; +} + +.schedule-title { + display: block; + font-weight: bold; +} + +.schedule-byline { + display: block; +} + +.bulma-icon > svg { + box-sizing: content-box; + display: var(--fa-display, inline-block); + height: 1em; + overflow: visible; + vertical-align: -0.125em; + width: var(--fa-width, 1.25em); +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 00000000..1ebb7706 --- /dev/null +++ b/src/main.js @@ -0,0 +1,73 @@ +function handleBurgerClick(el) { + const target = el.dataset.target; + const $target = document.getElementById(target); + el.classList.toggle('bulma-is-active'); + $target.classList.toggle('bulma-is-active'); +} + +// search + +function showSearchModal() { + const modal = document.getElementById("search-modal"); + if (!modal.classList.contains("bulma-is-active")) { + modal.classList.add("bulma-is-active"); + const input = document.getElementById("search-input"); + input.value = ""; + input.focus(); + const results = document.getElementById("search-results"); + results.innerHTML = `

Type to search...

`; + } +} + +function hideSearchModal() { + const modal = document.getElementById("search-modal"); + if (modal.classList.contains("bulma-is-active")) + modal.classList.remove("bulma-is-active"); +} + +function renderHit(hit) { + const link = `${hit.fields.path}.html` + const title = hit.highlights["title"] || hit.fields["title"] + const preview = hit.highlights["body"] + const tags = [] + if (link.startsWith("/blog")) tags.push("blog") + const renderedTags = tags.map(tag => `${tag}`).join("") + + return ` +
+
+
+ ${title} +  ${renderedTags} +

${preview}

+
+
+
+ ` +} + +const searchWorker = new Worker("/search/worker.js"); + +searchWorker.onmessage = function (e) { + const fallback = `

No results found

` + const markup = e.data.map(renderHit).join("") || fallback + const results = document.getElementById("search-results"); + results.innerHTML = markup +} + +function onSearchInput(event) { + searchWorker.postMessage(event.target.value || ""); +} + +// Keyboard shortcuts: `/` to open, `Escape` to close +window.addEventListener("keydown", (event) => { + if (event.defaultPrevented) return; + if (event.code == "Slash") { + event.preventDefault(); + showSearchModal(); + } + if (event.code == "Escape") { + event.preventDefault(); + hideSearchModal(); + } +}); diff --git a/src/projects/README.md b/src/projects/README.md new file mode 100644 index 00000000..17216135 --- /dev/null +++ b/src/projects/README.md @@ -0,0 +1,3 @@ +{% + laika.title: Project Index +%} diff --git a/src/projects/default.template.html b/src/projects/default.template.html new file mode 100644 index 00000000..8da2408d --- /dev/null +++ b/src/projects/default.template.html @@ -0,0 +1,41 @@ +@:embed(/templates/main.template.html) + +
+

Project Index

+
+ @:for(projects) +
+
+
+

+ ${_.title} +

+ + @:svg(fa-github) + + @:for(_.permalink) + + @:svg(fa-book) + + @:@ +
+
+

${_.description}

+
+ @:if(_.affiliate) + Affiliate Project + @:else + Organization Project + @:@ + @:for(_.platforms) + ${_} + @:@ +
+
+
+
+ @:@ +
+
+ +@:@ diff --git a/src/projects/directory.conf b/src/projects/directory.conf new file mode 100644 index 00000000..46f23a8e --- /dev/null +++ b/src/projects/directory.conf @@ -0,0 +1,573 @@ +projects = [ + { + title: "argonaut-shapeless" + description: "Automatic derivation for argonaut" + github: "https://github.com/alexarchambault/argonaut-shapeless" + affiliate: true + platforms: [jvm] + }, + { + title: "banana-rdf" + description: "RDF, SPARQL and Linked Data technologies" + github: "https://github.com/banana-rdf/banana-rdf" + affiliate: true + platforms: [js, jvm] + }, + { + title: "calico" + description: "Pure, reactive UI library for building web applications with Cats Effect + FS2" + github: "https://github.com/armanbilge/calico" + permalink: "https://armanbilge.github.io/calico" + affiliate: true + platforms: [js] + }, + { + title: "cats-actors" + description: "An Actor Model implementation built on top of Cats-Effect, providing a higher-level abstraction for managing concurrency." + github: "https://github.com/suprnation/cats-actors" + affiliate: true + platforms: [jvm] + }, + { + title: "case-insensitive" + description: "A case-insensitive string for Scala" + github: "https://github.com/typelevel/case-insensitive" + platforms: [js, jvm, native] + }, + { + title: "catapult" + description: "A thin wrapper for the Launch Darkly Java server SDK using cats-effect and fs2" + github: "https://github.com/typelevel/catapult" + platforms: [jvm] + }, + { + title: "catbird" + description: "Cats instances for various Twitter Open Source Scala projects" + github: "https://github.com/typelevel/catbird" + platforms: [jvm] + }, + { + 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." + permalink: "https://typelevel.org/cats/" + github: "https://github.com/typelevel/cats" + platforms: [js, jvm, native] + }, + { + title: "Cats Collections" + description: "Data structures that facilitate pure functional programming with cats" + github: "https://github.com/typelevel/cats-collections" + platforms: [js, jvm, native] + }, + { + title: "Cats-Effect" + description: "The IO Monad for Scala, plus type classes for general effect types." + github: "https://github.com/typelevel/cats-effect/" + platforms: [js, jvm, native] + }, + { + title: "Cats MTL" + description: "Monad transformers made easy" + github: "https://github.com/typelevel/cats-mtl/" + platforms: [js, jvm, native] + }, + { + title: "cats-parse" + description: "A parsing library for the cats ecosystem" + github: "https://github.com/typelevel/cats-parse" + platforms: [js, jvm, native] + }, + { + title: "cats-scalatest" + description: "Scalatest bindings for Cats." + github: "https://github.com/IronCoreLabs/cats-scalatest" + affiliate: true + platforms: [js, jvm] + }, + { + title: "cats-stm" + description: "A STM implementation for Cats Effect" + github: "https://github.com/TimWSpence/cats-stm" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Cats Tagless" + description: "A library of utilities for tagless final algebras" + github: "https://github.com/typelevel/cats-tagless/" + platforms: [js, jvm, native] + }, + { + title: "Cats-Time" + description: "Instances for Cats Typeclasses for Java 8 Time" + github: "https://github.com/typelevel/cats-time/" + platforms: [js, jvm, native] + }, + { + title: "Circe" + description: "Yet another JSON library for Scala" + github: "https://github.com/circe/circe" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Ciris" + description: "Functional Configurations for Scala" + github: "https://github.com/vlovgr/ciris" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "coulomb" + description: "A statically typed unit analysis library for Scala" + github: "https://github.com/erikerlandson/coulomb" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "cron4s" + description: "Cross-platform CRON expression parsing for Scala" + github: "https://github.com/alonsodomin/cron4s" + affiliate: true + platforms: [js, jvm] + }, + { + title: "decline" + description: "A composable command-line parser for Scala." + github: "https://github.com/bkirwi/decline" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "discipline" + description: "Originally intended for internal use in spire, this library helps libraries declaring type classes to precisely state the laws which instances need to satisfy, and takes care of not checking derived laws multiple times." + github: "https://github.com/typelevel/discipline" + platforms: [js, jvm, native] + }, + { + title: "doobie" + description: "A pure functional JDBC layer for Scala. It is not an ORM, nor is it a relational algebra; it just provides a principled way to construct programs (and higher-level libraries) that use JDBC." + github: "https://github.com/typelevel/doobie" + platforms: [jvm] + }, + { + title: "edomata" + description: "Event-driven automata for Scala, Scala.js and scala native. This library provides purely functional state machines that can be used to create event sourced and/or CQRS style applications. It also includes production ready backends." + github: "https://github.com/hnaderi/edomata" + permalink: "https://edomata.ir/" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "eff" + description: "Extensible effects are an alternative to monad transformers for computing with effects in a functional way. This library is based on the “free-er” monad and an “open union” of effects described by Oleg Kiselyov in “Freer monads, more extensible effects”" + permalink: "http://atnos-org.github.io/eff" + github: "https://github.com/atnos-org/eff" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "endless4s" + description: "Sharded and event-sourced entities using tagless-final algebras" + permalink: "https://endless4s.github.io/" + github: "https://github.com/endless4s/endless" + affiliate: true + platforms: [jvm] + }, + { + title: "Extruder" + description: "Populate case classes from any configuration source" + github: "https://github.com/janstenpickle/extruder" + affiliate: true + platforms: [jvm] + }, + { + title: "fabric" + description: "Object-Notation Abstraction for JSON, binary, HOCON, etc." + github: "https://github.com/typelevel/fabric" + platforms: [js, jvm, native] + }, + { + title: "Feral" + description: "Feral cats are homeless, feral functions are serverless" + github: "https://github.com/typelevel/feral" + platforms: [js, jvm] + }, + { + title: "ff4s" + description: "A purely functional web frontend framework for Scala.js." + github: "https://github.com/buntec/ff4s" + affiliate: true + platforms: [js] + }, + { + title: "Fetch" + description: "Library built on top of Cats that provides efficient data access from heterogeneous dataurces" + github: "https://github.com/47deg/fetch" + affiliate: true + platforms: [js, jvm] + }, + { + title: "Finch" + description: "Purely functional basic blocks atop of Finagle for building composable HTTP APIs" + github: "https://github.com/finagle/finch" + affiliate: true + platforms: [jvm] + }, + { + title: "Frameless" + description: "Frameless is a library for working with Spark using more expressive types." + github: "https://github.com/typelevel/frameless" + platforms: [jvm] + }, + { + title: "fs2-aes" + description: "Micro library providing AES encryption/decryption of fs2.Stream[F, Byte]." + github: "https://github.com/jwojnowski/fs2-aes" + affiliate: true + platforms: [jvm] + }, + { + title: "fs2-compress" + description: "Compression Algorithms for Fs2 " + github: "https://github.com/lhns/fs2-compress" + affiliate: true + platforms: [jvm] + }, + { + title: "fs2-data" + description: "Parse and transform data (CBOR, CSV, JSON, XML) in a streaming manner" + github: "https://github.com/gnieh/fs2-data" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "fs2-dom" + description: "Idiomatic Cats Effect + FS2 integrations for Web APIs" + github: "https://github.com/armanbilge/fs2-dom" + affiliate: true + platforms: [js] + }, + { + title: "fs2-grpc" + description: "gRPC implementation for FS2/cats-effect" + github: "https://github.com/typelevel/fs2-grpc" + platforms: [jvm] + }, + { + title: "fs2" + description: "FS2 is a library for purely functional, effectful, and polymorphic stream processing library in the Scala programming language. Its design goals are compositionality, expressiveness, resource safety, and speed. The name is a modified acronym for Functional Streams for Scala (FSS, or FS2)." + github: "https://github.com/typelevel/fs2" + platforms: [js, jvm, native] + }, + { + title: "Grackle" + description: "Functional GraphQL server for the Typelevel stack" + github: "https://github.com/typelevel/grackle" + platforms: [js, jvm, native] + }, + { + title: "Hammock" + description: "Purely functional HTTP client" + github: "https://github.com/pepegar/hammock" + affiliate: true + platforms: [jvm] + }, + { + title: "http4s" + description: "A typeful, purely functional HTTP library for client and server applications" + github: "https://github.com/http4s/http4s" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "imp" + description: "Summoning implicit values" + github: "https://github.com/non/imp" + affiliate: true + platforms: [js, jvm] + }, + { + title: "jawn-fs2" + description: "Integration of jawn and fs2 for streaming, incremental JSON parsing" + github: "https://github.com/typelevel/jawn-fs2" + platforms: [js, jvm, native] + }, + { + title: "keypool" + description: "A Keyed Pool Implementation for Scala" + github: "https://github.com/typelevel/keypool" + platforms: [js, jvm, native] + }, + { + title: "kind-projector" + description: "Plugin for nicer type-lambda syntax" + github: "https://github.com/typelevel/kind-projector" + platforms: [jvm] + }, + { + title: "Kittens" + description: "Automatic type class derivation" + github: "https://github.com/typelevel/kittens" + platforms: [js, jvm, native] + }, + { + title: "Laika" + description: "Site and e-book generator and customizable text markup transformer for sbt, Scala and Scala.js" + github: "https://github.com/typelevel/Laika" + platforms: [js, jvm] + }, + { + title: "LDBC" + description: "Pure functional JDBC layer with Cats Effect 3 and Scala 3" + github: "https://github.com/takapi327/ldbc" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Lepus" + description: "Purely functional, non-blocking RabbitMQ client for scala, scala js and scala native built on top of fs2." + github: "https://github.com/hnaderi/lepus" + permalink: "https://lepus.hnaderi.dev/" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Libra" + description: "Compile time dimensional analysis for any problem domain" + github: "https://github.com/to-ithaca/libra" + affiliate: true + platforms: [js, jvm] + }, + { + title: "literally" + description: "Compile time validation of literal values built from strings" + github: "https://github.com/typelevel/literally" + platforms: [js, jvm, native] + }, + { + title: "log4cats" + description: "Logging Tools For Interaction with cats-effect" + github: "https://github.com/typelevel/log4cats" + platforms: [js, jvm, native] + }, + { + title: "Monix" + description: "High-performance library for composing asynchronous, event-based programs, exposing a Reactive Streams implementation along with primitives for dealing with concurrency and side-effects." + github: "https://github.com/monix/monix" + permalink: "https://monix.io" + affiliate: true + platforms: [js, jvm] + }, + { + title: "Monocle" + description: "Optics library offering a simple yet powerful API to access and transform immutable data" + github: "https://github.com/optics-dev/Monocle" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Mouse" + description: "Enrichments to standard library classes to ease functional programming" + github: "https://github.com/typelevel/mouse/" + platforms: [js, jvm, native] + }, + { + title: "Natchez" + description: "functional tracing for cats " + github: "https://github.com/typelevel/natchez" + platforms: [js, jvm, native] + }, + { + title: "otel4s" + description: "An OpenTelemetry library based on cats-effect" + github: "https://github.com/typelevel/otel4s" + platforms: [js, jvm, native] + }, + { + title: "Outwatch" + description: "The Functional and Reactive Web-Frontend Library for Scala.js" + github: "https://github.com/outwatch/outwatch" + affiliate: true + platforms: [js] + }, + { + title: "parsley-cats" + description: "The parsley-cats library exposes Cats instances for Parsley parsing library." + github: "https://github.com/j-mie6/parsley-cats" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Peloton" + description: "An actor library for Cats Effect" + github: "https://github.com/killaitis/peloton" + affiliate: true + platforms: [jvm] + }, + { + title: "perspective" + description: "Provides tools for generic programming, and typeclasses for monad transformers and higher kinded data." + github: "https://github.com/Katrix/perspective" + affiliate: true + platforms: [js, jvm] + }, + { + title: "PureConfig" + description: "A boilerplate-free library for loading configuration files" + github: "https://github.com/pureconfig/pureconfig" + affiliate: true + platforms: [jvm] + }, + { + title: "refined" + description: "Tools for refining types with type-level predicates which constrain the set of values described by the refined type, for example restricting to positive or negative numbers." + github: "https://github.com/fthomas/refined" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "ScalaCheck" + description: "ScalaCheck is a library for automated property-based testing. It contains generators for randomized test data and combinators for properties." + github: "https://github.com/typelevel/scalacheck" + permalink: "http://scalacheck.org/" + platforms: [js, jvm, native] + }, + { + title: "scalacheck-shapeless" + description: "Automatic derivation for ScalaCheck" + github: "https://github.com/alexarchambault/scalacheck-shapeless" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Scala Exercises" + description: "Platform and framework for Scala devs to learn about Scala libraries" + github: "https://github.com/scala-exercises/scala-exercises" + affiliate: true + platforms: [js, jvm] + }, + { + title: "scala-steward" + description: "A robot that helps keeping Scala projects up-to-date" + github: "https://github.com/fthomas/scala-steward" + affiliate: true + platforms: [jvm] + }, + { + title: "scodec" + description: "scodec is a combinator library for working with binary data. It focuses on contract-first and pure functional encoding and decoding of binary data and provides integration with shapeless." + github: "https://github.com/scodec/scodec" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Scoverage" + description: "Code coverage tool for Scala" + github: "https://github.com/scoverage/scalac-scoverage-plugin" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "Shapeless" + description: "Shapeless is a generic programming library. Starting with implementations of Scrap your boilerplate and higher rank polymorphism in Scala, it quickly grew to provide advanced abstract tools like heterogenous lists and automatic instance derivation for type classes." + github: "https://github.com/milessabin/shapeless" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "simulacrum" + description: "First-class syntax for type classes" + github: "https://github.com/typelevel/simulacrum" + platforms: [js, jvm, native] + }, + { + title: "Simulacrum Scalafix" + description: "Simulacrum as Scalafix rules" + github: "https://github.com/typelevel/simulacrum-scalafix" + platforms: [js, jvm] + }, + { + title: "singleton-ops" + description: "Operations for primitive and String singleton types" + github: "https://github.com/fthomas/singleton-ops" + affiliate: true + platforms: [js, jvm] + }, + { + title: "Skunk" + description: "A data access library for Scala + Postgres" + github: "https://github.com/typelevel/skunk" + platforms: [js, jvm, native] + }, + { + title: "sonic" + description: "Property-based testing with integrated shrinking" + github: "https://github.com/melrief/sonic" + affiliate: true + platforms: [jvm] + }, + { + title: "specs2" + description: "specs2 is a library for writing executable software specifications, aiming for conciseness, readability and extensibility." + github: "https://github.com/etorreborre/specs2" + permalink: "http://specs2.org/" + affiliate: true + platforms: [js, jvm, native] + }, + { + title: "spire" + description: "Spire is a numeric library for Scala which is intended to be generic, fast, and precise. Using features such as specialization, macros, type classes, and implicits, Spire works hard to defy conventional wisdom around performance and precision trade-offs." + github: "https://github.com/typelevel/spire" + platforms: [js, jvm, native] + }, + { + title: "Squants" + description: "The Scala API for Quantities, Units of Measure and Dimensional Analysis" + github: "https://github.com/typelevel/squants" + platforms: [js, jvm, native] + }, + { + title: "Twiddles" + description: "Micro-library for building effectful protocols" + github: "https://github.com/typelevel/twiddles" + platforms: [js, jvm, native] + }, + { + title: "TwoTails" + description: "A compiler plugin adding support for mutual tail recursion" + github: "https://github.com/wheaties/TwoTails" + affiliate: true + platforms: [jvm] + }, + { + title: "typelevel.g8" + description: "A Giter8 template for sbt-typelevel" + github: "https://github.com/typelevel/typelevel.g8" + platforms: [js, jvm] + }, + { + title: "typelevel-nix" + description: "Development tools for Typelevel projects" + github: "https://github.com/typelevel/typelevel-nix" + platforms: [js, jvm, native]}, + { + title: "uniform-scala" + description: "Functional user journeys" + github: "https://github.com/ltbs/uniform-scala" + affiliate: true + platforms: [js, jvm] + }, + { + title: "upperbound" + description: "A purely functional, interval based rate limiter" + github: "https://github.com/SystemFw/upperbound" + affiliate: true + platforms: [js, jvm, native]}, + { + title: "vault" + description: "Type-safe, persistent storage for values of arbitrary types" + github: "https://github.com/typelevel/vault" + platforms: [js, jvm, native] + } +] diff --git a/src/templates/bio.template.html b/src/templates/bio.template.html new file mode 100644 index 00000000..96bfe218 --- /dev/null +++ b/src/templates/bio.template.html @@ -0,0 +1,62 @@ +
+ @:for(_.avatar) +
+

+ +

+
+ @:@ +
+
+

+ ${_.name} @:for(_.pronouns) ${_.pronouns} @:@ + @:if(_.render-bio) + @:for(_.bio) +
+ ${_.bio} + @:@ + @:@ + @:if(_.render-title) + @:for(_.title) +
+ ${_.title} + @:@ + @:@ +

+
+ +
+
diff --git a/src/templates/footer.template.html b/src/templates/footer.template.html new file mode 100644 index 00000000..c8fc983e --- /dev/null +++ b/src/templates/footer.template.html @@ -0,0 +1,46 @@ + diff --git a/src/templates/home.template.html b/src/templates/home.template.html new file mode 100644 index 00000000..583924d8 --- /dev/null +++ b/src/templates/home.template.html @@ -0,0 +1,41 @@ +{% +sponsors: [${spotify}, ${aruna}, ${shopify}, ${famly}] +%} + +@:embed(/templates/main.template.html) +
+
+

+ We develop industry-proven,
+ state-of-the-art libraries for
+ functional programming. +

+

+ Start building scalable, performant applications
+ that you can grow and maintain + with confidence. +

+
+
+
+
+

+ Typelevel is an ecosystem of projects and a community of people united to foster an inclusive, welcoming, and safe + environment around functional programming. +

+
+
+
+
+ @:for(sponsors) +
+ +
+ @:@ +
+

+ Typelevel is built by a vibrant global community and backed by a nonprofit Foundation with the support of our + industry sponsors. +

+
+@:@ diff --git a/src/templates/main.template.html b/src/templates/main.template.html new file mode 100644 index 00000000..487ed001 --- /dev/null +++ b/src/templates/main.template.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + @:if(katex) + + @:@ + + + + + + ${cursor.currentDocument.title} + + + + @:include(/templates/nav.template.html) +
+ ${_.embeddedBody} +
+ @:include(/templates/footer.template.html) + + + diff --git a/src/templates/nav.template.html b/src/templates/nav.template.html new file mode 100644 index 00000000..2b97b99c --- /dev/null +++ b/src/templates/nav.template.html @@ -0,0 +1,58 @@ + + + +
+
+
+
+

+ + + @:svg(fa-magnifying-glass) + +

+
+
+
+ +
+
diff --git a/src/templates/redirect.template.html b/src/templates/redirect.template.html new file mode 100644 index 00000000..1491e3c1 --- /dev/null +++ b/src/templates/redirect.template.html @@ -0,0 +1,4 @@ + + + + diff --git a/steering-committee.md b/steering-committee.md deleted file mode 100644 index d2d7b39f..00000000 --- a/steering-committee.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: coc -title: "Typelevel Steering Committee" -permalink: /steering-committee.html ---- - -The Typelevel Steering Committee is a group of volunteers that -govern Typelevel. The membership is kept in [the Typelevel -Governance repository][steering-committee] and described in the -[Typelevel Charter][charter]. - -[steering-committee]: https://github.com/typelevel/governance/blob/main/STEERING-COMMITTEE.md -[charter]: https://github.com/typelevel/governance/blob/main/CHARTER.md -