Skip to content

Commit ec2009b

Browse files
mariaob1201claude
andcommitted
SEO + onboarding: internal links, meta tags, favicon, OG, CONTRIBUTING
- Homepage now links to the local Worker page instead of GitHub docs - Add html_meta description/keywords to worker, blog index, both posts - Add favicon (html_favicon) and Open Graph tags via sphinxext-opengraph - Pin sphinxext-opengraph in requirements.txt - Add CONTRIBUTING.md (excluded from build) documenting how to add pages, blog posts, and authors Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 572bca6 commit ec2009b

8 files changed

Lines changed: 118 additions & 3 deletions

File tree

CONTRIBUTING.md

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# Contributing to the OpenLambda Site
2+
3+
This site is a [Jupyter Book](https://jupyterbook.org) (v1, Sphinx-based) written in
4+
[MyST Markdown](https://myst-parser.readthedocs.io/). Pushing to `master` triggers the
5+
GitHub Actions workflow in [`.github/workflows/deploy.yml`](.github/workflows/deploy.yml),
6+
which builds the book and deploys it to GitHub Pages.
7+
8+
## Local preview
9+
10+
```bash
11+
python3 -m venv .venv && source .venv/bin/activate
12+
pip install -r requirements.txt
13+
jupyter-book build .
14+
open _build/html/index.html
15+
```
16+
17+
```{note}
18+
Keep dependencies pinned to the Jupyter Book **v1** stack in `requirements.txt`. Do **not**
19+
bump `jupyter-book` to 2.x — v2 is a MyST-CLI rewrite that is incompatible with this repo's
20+
`_config.yml` / `_toc.yml` and `sphinx_book_theme` setup.
21+
```
22+
23+
## Adding a page
24+
25+
1. Create a Markdown file (e.g. `applications/my-app.md`).
26+
2. Register it in [`_toc.yml`](_toc.yml) so it appears in the navigation.
27+
3. Add SEO metadata at the top of the file:
28+
29+
```yaml
30+
---
31+
myst:
32+
html_meta:
33+
description: "One-sentence summary used as the meta description."
34+
keywords: "OpenLambda, serverless, ..."
35+
---
36+
```
37+
38+
## Adding a blog post
39+
40+
1. Create a file under `blog/post/` named `YYYY-MM-DD-short-slug.md`. The date prefix is the
41+
convention used for ordering — it does not need to match the `date:` field exactly, but
42+
keep them consistent.
43+
2. Use this front matter (do **not** add blog posts to `_toc.yml` — ABlog collects them
44+
automatically from the `blog/post/` directory):
45+
46+
```yaml
47+
---
48+
blogpost: true
49+
date: 2026-05-18
50+
author: jane-doe, john-smith
51+
category: Case Studies # e.g. Releases, Case Studies
52+
tags: openlambda, serverless # comma-separated
53+
language: en
54+
myst:
55+
html_meta:
56+
description: "One-sentence summary for search engines and link previews."
57+
keywords: "OpenLambda, ..."
58+
---
59+
60+
# Post Title
61+
```
62+
63+
3. The first `# Heading` is the post title; the first paragraph(s) become the excerpt shown
64+
on the blog index.
65+
66+
## Registering an author
67+
68+
`author:` values are slugs. Map each slug to a display name and profile URL under
69+
`blog_authors` in [`_config.yml`](_config.yml) so posts render a friendly name and link:
70+
71+
```yaml
72+
blog_authors:
73+
jane-doe:
74+
- "Jane Doe"
75+
- "https://example.edu/jane"
76+
```
77+
78+
An unregistered slug still works, but renders as the raw slug with no link.
79+
80+
## Before opening a PR
81+
82+
- Run `jupyter-book build .` locally and confirm it ends with `build succeeded` and no
83+
warnings.
84+
- Check that internal links resolve and external links are correct.

_config.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ execute:
88
execute_notebooks: "off"
99

1010
# Files Sphinx should ignore (keeps the GitHub README out of the toctree warning)
11-
exclude_patterns: [README.md]
11+
exclude_patterns: [README.md, CONTRIBUTING.md]
1212

1313
# HTML-specific settings
1414
html:
@@ -48,9 +48,17 @@ parse:
4848
sphinx:
4949
extra_extensions:
5050
- ablog
51+
- sphinxext.opengraph
5152
config:
5253
html_theme: "sphinx_book_theme"
5354
html_show_sourcelink: false
55+
html_favicon: "_static/open-lambda.png"
56+
57+
# ---- Open Graph / social-card metadata ----
58+
ogp_site_url: "https://open-lambda.github.io/"
59+
ogp_site_name: "OpenLambda"
60+
ogp_image: "https://open-lambda.github.io/_static/open-lambda.png"
61+
ogp_use_first_image: true
5462
html_theme_options:
5563
use_download_button: false
5664
navigation_depth: 2

blog/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
---
2+
myst:
3+
html_meta:
4+
description: "News, releases, and technical deep-dives from the OpenLambda serverless project."
5+
keywords: "OpenLambda, blog, serverless, releases, case studies"
6+
---
7+
18
# OpenLambda Blog
29

310
News, releases, and technical deep-dives from the OpenLambda project.

blog/post/2026-05-18-ag-forecasting-case-study.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ author: maria-oros, tyler-caraza-harter
55
category: Case Studies
66
tags: case-study, agforecast, asgi, fastapi, openlambda
77
language: en
8+
myst:
9+
html_meta:
10+
description: "Porting a FastAPI/ASGI application to OpenLambda — five challenges and the four platform features they drove."
11+
keywords: "OpenLambda, serverless, FastAPI, ASGI, WSGI, pip-compile, case study"
812
---
913

1014
# An Application Case Study: Forecasting Crop Disease with OpenLambda

blog/post/2026-05-18-hello-world.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ author: open-lambda
55
category: Releases
66
tags: announcement, openlambda
77
language: en
8+
myst:
9+
html_meta:
10+
description: "Welcome to the OpenLambda blog — release notes, performance experiments, and design discussions."
11+
keywords: "OpenLambda, blog, announcement, serverless"
812
---
913

1014
# Hello, OpenLambda Blog

index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ production as well.
2020
The main system implemented so far is a **single-node OpenLambda worker** that can take
2121
HTTP requests and invoke lambdas locally to compute responses.
2222

23-
You can read more about the OpenLambda worker [here](https://github.com/open-lambda/open-lambda/blob/main/docs/worker.md)
24-
or just get started by [deploying a worker](https://github.com/open-lambda/open-lambda/blob/main/docs/quickstart.md).
23+
You can read more about the OpenLambda worker on the [Worker page](worker.md), or just get
24+
started by [deploying a worker](https://github.com/open-lambda/open-lambda/blob/main/docs/quickstart.md).
2525

2626
```{note}
2727
We are currently working on a **cluster mode**, where a pool of VMs running the worker

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ sphinx-book-theme==1.1.3
66
myst-parser==3.0.1
77
sphinx-copybutton==0.5.2
88
ablog==0.11.13
9+
sphinxext-opengraph==0.9.1

worker.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
---
2+
myst:
3+
html_meta:
4+
description: "The OpenLambda worker — the core node component that handles HTTP requests, manages containers, and scales horizontally."
5+
keywords: "OpenLambda, worker, serverless, Linux containers, HTTP, configuration"
6+
---
7+
18
# Worker
29

310
The OpenLambda **worker** is the core server-side component of a node. It listens for

0 commit comments

Comments
 (0)