Forgejo website content
  • XSLT 50.6%
  • Astro 39.2%
  • TypeScript 8.1%
  • CSS 1.6%
  • JavaScript 0.4%
Find a file
2024-03-25 23:05:41 +00:00
.forgejo/workflows ci: use node:20 2024-02-21 16:47:22 +01:00
.husky tooling: replace unmaintained pretty-quick with lint-staged 2023-08-21 23:09:21 +01:00
.vscode refactor: fix typescript errors 2023-08-21 23:09:22 +01:00
forgejo-docs publish 2024-03-25 23:05:41 +00:00
public use the correct Expire date format 2023-12-27 14:52:21 +01:00
src Fix RSS' link tag 2024-03-16 23:03:59 +00:00
.editorconfig reset theme to https://github.com/onwidget/astrowind 2022-12-01 18:04:49 +01:00
.eslintignore [CI] do not try to lint .pnpm-store 2023-12-26 12:45:25 +01:00
.eslintrc.js lint: add eslint-config-prettier to prevent conflicts 2023-08-21 23:09:22 +01:00
.gitignore [CI] do not try to lint .pnpm-store 2023-12-26 12:45:25 +01:00
.gitmodules docs: add v1.21 2023-09-22 20:50:17 +01:00
.npmrc reset theme to https://github.com/onwidget/astrowind 2022-12-01 18:04:49 +01:00
.prettierignore add docs to .prettierignore 2023-08-17 07:52:32 +02:00
.prettierrc add pre-commit hook to automatically format staged files (#80) 2023-02-02 09:26:59 +00:00
astro.config.ts upgrade Astro to v3 2023-08-31 23:25:14 +01:00
LICENSE Fix licensing problems 2023-03-02 23:44:11 -07:00
package.json deps: update astro-icon 2024-02-21 17:06:53 +01:00
pnpm-lock.yaml deps: update astro-icon 2024-02-21 17:06:53 +01:00
README.md update readme 2024-02-21 17:08:29 +01:00
sandbox.config.json reset theme to https://github.com/onwidget/astrowind 2022-12-01 18:04:49 +01:00
tailwind.config.ts feat: use system fonts 2023-09-03 00:07:37 +01:00
tsconfig.json pnpm run format 2024-02-21 17:22:04 +01:00

Website for Forgejo

This website is built with Astro and Tailwind CSS, and is based on the AstroWind template.

When a branch foobar is pushed to the repository, the content is rendered for preview at https://forgejo.codeberg.page/@foobar/.

When a PR is created, its content is rendered for preview at https://forgejo.codeberg.page/@pull_1234/ where 1234 is the number of the PR.

The forgejo-website user is dedicated to providing an application token set to websitetoken and allows for publishing the branch and CI previews in https://codeberg.org/forgejo/pages.

Hosting

The website is hosted at https://uberspace.de and the technical details on how this is done can be found in the CI configuration at .forgejo/workflows

The sshpass password is not stored anywhere. It is set via https://dashboard.uberspace.de/dashboard/authentication and copied over to the secrets of the CI where it will never be displayed again. It can be verified to work with

SSHPASS=xyz rsync --rsh='sshpass -e ssh -oStrictHostKeyChecking=no -o PubkeyAuthentication=no' -av forgejo@atria.uberspace.de:html/ /tmp/html/

Google topics are disabled

[forgejo@atria ~]$ uberspace web header set / Permissions-Policy "browsing-topics=()"
Set header "Permissions-Policy: browsing-topics=()" for /

Contributing

Format locally

docker run --rm -ti -v $(pwd):$(pwd) -w $(pwd) node:20 bash -c 'corepack enable ; pnpm install --frozen-lockfile ; pnpm run format'

Commands

All commands are run from the root of the project, from a terminal:

Command Action
pnpm install Installs dependencies
pnpm run prepare Install git pre-commit hook
pnpm run dev Starts local dev server at localhost:3000
pnpm run build Build your production site to ./dist/
pnpm run preview Preview your build locally, before deploying
pnpm run format Format codes with Prettier
pnpm run format-staged Format staged files with Prettier
pnpm run lint:eslint Run Eslint
pnpm run astro ... Run CLI commands like astro add, astro preview

See the AstroWind docs for more information.

Project structure

The following is the default structure of the AstroWind template:

/
├── data/
|   └── blog/
|       ├── post-slug-1.md
|       ├── post-slug-2.mdx
|       └── ...
├── public/
│   ├── robots.txt
│   └── favicon.ico
├── src/
│   ├── assets/
│   │   ├── images/
|   |   └── styles/
|   |       └── base.css
│   ├── components/
│   │   ├── atoms/
│   │   ├── blog/
│   │   ├── core/
|   |   └── widgets/
|   |       ├── Header.astro
|   |       ├── Footer.astro
|   |       └── ...
│   ├── layouts/
│   |   |── BaseLayout.astro
│   |   └── ...
│   ├── pages/
│   |   ├── [...blog]/
|   |   |   ├── [...page].astro
|   |   |   └── [slug].astro
│   |   ├── [...categories]/
|   |   |   └── [category]/
|   |   |       └── [...page].astro
│   |   ├── [...tags]/
|   |   |   └── [tag]/
|   |   |       └── [...page].astro
│   |   ├── index.astro
|   |   ├── 404.astro
|   |   └-- rss.xml.js
│   ├── utils/
│   └── config.ts
├── package.json
└── ...

Astro looks for .astro or .md files in the src/pages/ directory. Each page is exposed as a route based on its file name.

There's nothing special about src/components/, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.

Any static assets, like images, can be placed in the public/ directory if they do not require any transformation or in the assets/ directory if they are imported directly.