Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## Description

<!-- What does this PR do, and why? -->

## Checklist

- [ ] Titles and headings use [AP Title Case](https://titlecaseconverter.com/) (see [Style Guide](../CONTRIBUTING.md#style-guide))
135 changes: 112 additions & 23 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,132 @@
# Contributors Guide

## Table Of Contents

- [Bug Reports](#bug-reports)
- [Documentation](#documentation)
- [Style Guide](#style-guide)
- [Code](#code)
- [Building the site](#building-the-site)
- [Styling (CSS / Tailwind)](#styling-css--tailwind)
- [CI](#ci)
- [Code Quality](#code-quality)

## Bug Reports

Please [open an issue](https://github.com/haskellfoundation/haskellfoundation.github.io/issues/new) if you have a bug to report.

The more detailed your report, the faster it can be resolved and will ensure it
is resolved in the right way. I personally appreciate it when people not only open
issues, but attempt to resolve them on their own by submitting a pull request. I am
always open to constructive feedback, and I am by no means an expert, so guidance
should always be considered welcome.
The more detailed your report, the faster it can be resolved and will ensure it is resolved in the right way. We appreciate when people not only open issues, but attempt to resolve them on their own by submitting a pull request. We are always open to constructive feedback.

## Documentation

If you would like to help with documentation, please remember to update any and
all module headers with the appropriate copyright dates, ranges, and authorship.

Expansions to the documentation are welcome, and appreciated. Every contribution counts.

## Style Guide

We seek to adhere to the [SIGPLAN Proceedings Format](https://www.sigplan.org/Resources/ProceedingsFormat/).

### Titles and headings

Titles (page titles, news/blog post titles, etc.) and headings (e.g., section headings) should use [AP Title Case](https://titlecaseconverter.com/rules/#AP):

- Capitalize the first word and the last word of the title
- Capitalize the principal words
- Capitalize to in infinitives
- Capitalize all words of four letters or more
- Do not capitalize articles, conjunctions, and prepositions of three letters or fewer

Example: "How the Haskell Foundation Works With Affiliates".

When in doubt, run the title through the [Title Case Converter](https://titlecaseconverter.com/) with the "AP" style selected.

## Code

If you would like to contribute code to fix a bug, add a new feature, or
otherwise improve this site, pull requests are most welcome. It's a good idea to
[submit an issue](https://github.com/haskellfoundation/haskellfoundation.github.io/issues/new) to
discuss the change before plowing into writing code.
If you would like to contribute code to fix a bug, add a new feature, or otherwise improve this site, pull requests are most welcome. It's a good idea to [submit an issue](https://github.com/haskellfoundation/haskellfoundation.github.io/issues/new) to discuss the change before plowing into writing code.

> **Note:** Development happens on the `hakyll` branch. The `main` branch holds only the built site and is overwritten by CI.

## Building the site

The site can be built with either [Stack](https://docs.haskellstack.org) or [Cabal](https://www.haskell.org/cabal/) — use whichever you prefer.

To build the project:

```bash
stack build # with Stack
cabal build # with Cabal
```

Once the project has built (which can take a while due to the dependencies for Hakyll), generate the site with:

```bash
stack exec -- site build # with Stack
cabal run site -- build # with Cabal
```

and for development (a server that rebuilds on change):

```bash
stack exec -- site watch # with Stack
cabal run site -- watch # with Cabal
```

The site will be built in the `_site` directory, and you can open the files in your browser of choice. Due to a Hakyll issue, some sponsor logos will not show up correctly. This is expected behavior, and should be fine for the deployed site.

## Styling (CSS / Tailwind)

The site is styled with [Tailwind CSS](https://tailwindcss.com) (v4). Tailwind is a CSS framework whose classes are short abbreviations for inline styles (e.g. `pt-4`, `text-center`), scattered directly across the HTML templates and content. At build time the Tailwind compiler acts as a kind of "CSS tree-shaker": it scans the site for the Tailwind classes actually in use and emits only the CSS needed for them.

Two files matter:

- `assets/css/tailwind.css` — the Tailwind entry point. It holds the v4 CSS-native configuration (`@theme` colors/fonts, `@plugin`, and the `@source` lines that tell the compiler which directories to scan). **New pages that use Tailwind classes must add an `@source` line here**, or those classes will be dropped from the production build.
- `assets/css/main.css` — hand-written CSS that is *not* processed by Tailwind. This is the place for ordinary, non-Tailwind styles.

### Do I need Node installed?

**No, if you are only editing content or Haskell code.** Hakyll concatenates a checked-in snapshot, `dev.css`, onto `assets/css/tailwind.css` at build time (see the `match "assets/css/tailwind.css"` rule in `site.hs`). `dev.css` is a pre-generated copy of the real Tailwind output, so `stack exec -- site build` on its own produces a site that looks close enough to preview — no Node toolchain required. This keeps the site accessible to contributors of all skill sets.

**Yes, if you are changing the appearance.** Because `dev.css` is only a snapshot, it does *not* reflect edits to `assets/css/tailwind.css`, `assets/css/main.css`, `tools/tailwind/postcss.config.js`, or any *newly used* Tailwind class. To regenerate the real CSS you need [Node.js](https://nodejs.org). The Node/Tailwind toolchain lives in [`tools/tailwind/`](tools/tailwind/) (see its README), separate from the Hakyll project, so run npm from there:

```bash
cd tools/tailwind
npm ci # once, to install the toolchain
npm run build # compile -> _site/assets/css/tailwind.css
npm run build:production # minified build (NODE_ENV=production)
```

If you do not want to install `npm` globally and have `nix` available, drop into the Nix development shell which provides `npm` and a basic Haskell toolchain.

If your change alters the CSS, regenerate the checked-in `dev.css` snapshot and commit it:

```bash
cd tools/tailwind
npm run build:dev-snapshot # recompile the dev.css snapshot in place
```

CI runs this same command and fails the build if the committed `dev.css` is out of date, so a stale snapshot cannot slip through review.

> **Note:** `dev.css` is only an *unminified* snapshot of `npm run build`; it still differs from the minified `npm run build:production` output shipped to production, so verify appearance-critical changes against a real production build.

## CI

We use GitHub Actions `.github/workflows/main.yml` to build the site for production.

If relevant, any and all claims of "performance" should be backed up with benchmarks. You can
add them to the existing benchmark suite in your PR, as long as you do not make
unjustifiable changes to the existing code.
The general steps are:

### Building the site
1. Check out the `hakyll` branch
2. Install Haskell and Node.js
3. Restore the cached build artefacts
4. Build the `site` executable
5. Rebuild the site contents using the `site` executable
6. Build the production CSS (`cd tools/tailwind && npm ci && npm run build:production`)
7. Check out the `main` branch
8. Copy the `_site` directory over the `main` branch contents
9. Commit and push the site contents to the `main` branch.

Refer to the [README](README.md) for more information on building the site.
Steps 7–9 (the deploy) run only on non-PR pushes to `hakyll`; pull requests build and stop after step 6.

## Code Quality

The `haskell.foundation` project intends to focus on integration and usability,
balanced with maintainability.
The `haskell.foundation` website intends to focus on integration and usability, balanced with maintainability.

We strive to be an example of best practices for real Haskell. If you believe
there is a better way to do something in the code, please let us know or
submit a PR for review. We would like the HF website to be a clear example of
how to do a Hakyll website right.
We strive to be an example of best practices for real Haskell. If you believe there is a better way to do something in the code, please let us know or submit a PR for review. We would like the HF website to be a clear example of how to do a Hakyll website right.
99 changes: 2 additions & 97 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,107 +1,12 @@
<p align="center">
<img src="https://haskell.foundation/assets/images/logos/hf-logo-alpha.png" width="350" height="282" alt="Haskell Foundation" title="Haskell Foundation">
<img src="https://haskell.foundation/assets/images/logos/hf-logo-alpha.png" width="300" alt="Haskell Foundation" title="Haskell Foundation">
</p>

# The Haskell Foundation Website

[![Hackage](https://img.shields.io/static/v1?label=Haskell%20Foundation&message=official&color=purple&style=for-the-badge)](https://haskell.foundation)

This repository is for the [haskell.foundation](https://haskell.foundation) website. It is a proud, Hakyll-based site, built as an in-kind contribution from [Obsidian Systems](https://obsidian.systems), and maintained by the Haskell Foundation and its volunteers. If you would like to get started with a merge request, please consult the documentation below.

## Table Of Contents

- [The Haskell Foundation Website](#the-haskell-foundation-website)
- [Table Of Contents](#table-of-contents)
- [Building](#building)
- [Styling (CSS / Tailwind)](#styling-css--tailwind)
- [CI](#ci)
- [License](#license)

## Building

The site can be built with either [Stack](https://docs.haskellstack.org) or
[Cabal](https://www.haskell.org/cabal/) — use whichever you prefer.

To build the project:

```bash
stack build # with Stack
cabal build # with Cabal
```

Once the project has built (which can take a while due to the dependencies for Hakyll), generate the site with:

```bash
stack exec -- site build # with Stack
cabal run site -- build # with Cabal
```

and for development (a server that rebuilds on change):

```bash
stack exec -- site watch # with Stack
cabal run site -- watch # with Cabal
```

The site will be built in the `_site` directory, and you can open the files in your browser of choice. Due to a Hakyll issue, some sponsor logos will not show up correctly. This is expected behavior, and should be fine for the deployed site.

For further information, please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) at the root of this project.

## Styling (CSS / Tailwind)

The site is styled with [Tailwind CSS](https://tailwindcss.com) (v4). Tailwind is a CSS framework whose classes are short abbreviations for inline styles (e.g. `pt-4`, `text-center`), scattered directly across the HTML templates and content. At build time the Tailwind compiler acts as a kind of "CSS tree-shaker": it scans the site for the Tailwind classes actually in use and emits only the CSS needed for them.

Two files matter:

- `assets/css/tailwind.css` — the Tailwind entry point. It holds the v4 CSS-native configuration (`@theme` colors/fonts, `@plugin`, and the `@source` lines that tell the compiler which directories to scan). **New pages that use Tailwind classes must add an `@source` line here**, or those classes will be dropped from the production build.
- `assets/css/main.css` — hand-written CSS that is *not* processed by Tailwind. This is the place for ordinary, non-Tailwind styles.

### Do I need Node installed?

**No, if you are only editing content or Haskell code.** Hakyll concatenates a checked-in snapshot, `dev.css`, onto `assets/css/tailwind.css` at build time (see the `match "assets/css/tailwind.css"` rule in `site.hs`). `dev.css` is a pre-generated copy of the real Tailwind output, so `stack exec -- site build` on its own produces a site that looks close enough to preview — no Node toolchain required. This keeps the site accessible to contributors of all skill sets.

**Yes, if you are changing the appearance.** Because `dev.css` is only a snapshot, it does *not* reflect edits to `assets/css/tailwind.css`, `assets/css/main.css`, `tools/tailwind/postcss.config.js`, or any *newly used* Tailwind class. To regenerate the real CSS you need [Node.js](https://nodejs.org). The Node/Tailwind toolchain lives in [`tools/tailwind/`](tools/tailwind/) (see its README), separate from the Hakyll project, so run npm from there:

```bash
cd tools/tailwind
npm ci # once, to install the toolchain
npm run build # compile -> _site/assets/css/tailwind.css
npm run build:production # minified build (NODE_ENV=production)
```

If you do not want to install `npm` globally and have `nix` available, drop into
the Nix development shell which provides `npm` and a basic Haskell toolchain.

If your change alters the CSS, regenerate the checked-in `dev.css` snapshot and
commit it:

```bash
cd tools/tailwind
npm run build:dev-snapshot # recompile the dev.css snapshot in place
```

CI runs this same command and fails the build if the committed `dev.css` is out
of date, so a stale snapshot cannot slip through review.

> **Note:** `dev.css` is only an *unminified* snapshot of `npm run build`; it still differs from the minified `npm run build:production` output shipped to production, so verify appearance-critical changes against a real production build.

## CI

We use GitHub Actions `.github/workflows/main.yml` to build the site for production.

The general steps are:

1. Check out the `hakyll` branch
2. Install Haskell and Node.js
3. Restore the cached build artefacts
4. Build the `site` executable
5. Rebuild the site contents using the `site` executable
6. Build the production CSS (`cd tools/tailwind && npm ci && npm run build:production`)
7. Check out the `main` branch
8. Copy the `_site` directory over the `main` branch contents
9. Commit and push the site contents to the `main` branch.

Steps 7–9 (the deploy) run only on non-PR pushes to `hakyll`; pull requests build and stop after step 6.
This repository is for the [haskell.foundation](https://haskell.foundation) website. It is a proud, Hakyll-based site, originally built as an in-kind contribution from [Obsidian Systems](https://obsidian.systems), and maintained by the Haskell Foundation and its volunteers. If you would like to get started with a merge request, please consult [CONTRIBUTING.md](CONTRIBUTING.md).

## License

Expand Down
6 changes: 3 additions & 3 deletions board-nominations/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<div class="max-w-screen-xl mx-auto py-16 md:py-24">
$partial("templates/corners.html")$
<div class="text-center pt-12 md:pt-20 px-12 sm:px-16 md:px-24 lg:px-36 ">
<h1 class="text-2xl sm:text-4xl md:text-5xl leading-snug sm:leading-tight">Haskell Foundation Board Call For Nominations</h1>
<h1 class="text-2xl sm:text-4xl md:text-5xl leading-snug sm:leading-tight">Haskell Foundation Board Call for Nominations</h1>
</div>
</div>

Expand All @@ -17,7 +17,7 @@ <h1 class="text-2xl sm:text-4xl md:text-5xl leading-snug sm:leading-tight">Haske
<p>The Haskell Foundation is a new non-profit organisation that seeks to articulate the benefits of functional programming to a broader audience, to erase barriers to entry, and to support Haskell as a solidly reliable basis for mission-critical applications.</p>

<h2>The Foundation Board</h2>
<h3>Remit Of The Board</h3>
<h3>Remit of the Board</h3>
<p>The Board provides the strategic leadership for the Foundation, and is the decision-making body for everything the Foundation does. More specifically</p>

<ul>
Expand Down Expand Up @@ -88,7 +88,7 @@ <h3>Transparency</h3>

<p>In all cases there may be some aspects of the Board’s work that should properly be private, e.g. relating to security, staff, or money. The Board will have to make judgements about this, but the strong default is to work in public.</p>

<h2>Nominations For The Board</h2>
<h2>Nominations for the Board</h2>
<p>Please submit your nomination to <a href="mailto:nominations@haskell.foundation">nominations@haskell.foundation</a>, by Monday 11 January 2021.</p>

<p>Your nomination should be accompanied by a brief CV and a covering letter that says</p>
Expand Down
2 changes: 1 addition & 1 deletion careers/devops.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ The successful candidate will have exceptional DevOps skills in the current tech

Additionally, this position is responsible for maintaining operating system dependent packaging of GHC and related tools.

## Likely future responsibilities
## Likely Future Responsibilities

* Work with the [Haskell Infrastructure Team](https://github.com/haskell-infra/haskell-admins/).
* Improvements and expansion of the GHC performance dashboard.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: How Do Projects Or Teams Affiliate With The Haskell Foundation?
title: How Do Projects or Teams Affiliate With the Haskell Foundation?
order: 0
---
Organizations and committees can review the <a href='https://docs.google.com/document/d/1sL0Nw3VEvxLT39WOkKhtR2_sOUctwVSZ_A4GDZV_mvU/edit' target='_blank'>Haskell Foundation Affiliation Documents</a> to learn more about how you can become affiliated with the Haskell Foundation. Please email <a href='mailto:contact@haskell.foundation'>contact@haskell.foundation</a> for more information.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: What Is The Relationship Between HF And Haskell.Org?
title: What Is the Relationship Between the Haskell Foundation and Haskell.org?
order: 3
---
The Haskell.org committee has voted to affiliate with the Haskell Foundation, however the haskell.org committee remains an independent 501-3 (c) nonprofit organization. The haskell.org committee will continue to operate the haskell.org website and provide resources for Haskell infrastructure such as Hackage and the haskell mailing lists. Several members of haskell.org have helped launch HF.
The Haskell.org committee has voted to affiliate with the Haskell Foundation, however the Haskell.org committee remains an independent 501-3 (c) nonprofit organization. The Haskell.org committee will continue to operate the `haskell.org` website and provide resources for Haskell infrastructure such as Hackage and the Haskell mailing lists. Several members of Haskell.org have helped launch the Haskell Foundation.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: What Is The Relationship Between HF And The Community, Industry, Etc.
title: What Is the Relationship Between HF and the Community, Industry, Etc.
order: 1
---
The goal of the Haskell Foundation is to facilitate a dialogue for improvement, and center the Haskell community and its industry in one place. Previously, there were many disparate groups consisting of volunteers and members of industry working together to improve the state of Haskell. However, some things in the ecosystem are complicated, and require organization and funding to move forward. The Haskell Foundation addresses that need, and provides a central locus and flag for these groups to rally around to coordinate work, funding, and direction.
4 changes: 2 additions & 2 deletions guidelines-for-respectful-communication/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<div class="max-w-screen-xl mx-auto py-16 md:py-24">
$partial("templates/corners.html")$
<div class="text-center pt-12 md:pt-20 px-12 sm:px-16 md:px-24 lg:px-36 ">
<h1 class="text-2xl sm:text-4xl md:text-5xl leading-snug sm:leading-tight">Haskell Foundation Guidelines For Respectful Communication</h1>
<h1 class="text-2xl sm:text-4xl md:text-5xl leading-snug sm:leading-tight">Haskell Foundation Guidelines for Respectful Communication</h1>
</div>
</div>

Expand All @@ -24,7 +24,7 @@ <h2>Motivation</h2>
<li>Making an explicit commitment will encourage us to review our messages to see if they meet the goals set out here, and will give others some specifics to point to if we fail.</li>
</ul>

<h2>Guidelines For Respectful Communication</h2>
<h2>Guidelines for Respectful Communication</h2>
<p>As members of the Haskell Foundation, we commit ourselves to a high standard of public behaviour. We have one over-arching rule:</p>

<p><b>We strive to treat every person with respect.</b></p>
Expand Down
Loading
Loading