Skip to content

Commit 865a0cc

Browse files
committed
feat: add project landing page
1 parent 1704753 commit 865a0cc

14 files changed

Lines changed: 1350 additions & 9 deletions

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: Generate Docs
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- 'site/**'
8+
- 'README.md'
9+
- 'CONTRIBUTING.md'
10+
- 'docs/**'
11+
- '.github/workflows/generate-docs.yml'
12+
workflow_dispatch:
13+
14+
permissions:
15+
contents: read
16+
pages: write
17+
id-token: write
18+
19+
concurrency:
20+
group: pages
21+
cancel-in-progress: false
22+
23+
jobs:
24+
build:
25+
name: Build landing page
26+
runs-on: ubuntu-latest
27+
steps:
28+
- name: Checkout repository
29+
uses: actions/checkout@v4
30+
31+
- name: Configure GitHub Pages
32+
uses: actions/configure-pages@v5
33+
34+
- name: Stage static site
35+
run: |
36+
set -euo pipefail
37+
mkdir -p _site
38+
cp -r site/. _site/
39+
# disable Jekyll processing so files are served verbatim
40+
touch _site/.nojekyll
41+
# record build metadata (no personal data)
42+
date -u +"%Y-%m-%dT%H:%M:%SZ" > _site/build.txt
43+
44+
- name: Validate (no external resources)
45+
run: |
46+
set -euo pipefail
47+
# fail the build if any HTML file references third-party origins, which would
48+
# break GDPR compliance and the "no external requests" guarantee
49+
if grep -RInE 'https?://(cdn\.|fonts\.googleapis\.com|fonts\.gstatic\.com|www\.google-analytics\.com|googletagmanager\.com)' _site --include='*.html'; then
50+
echo "ERROR: external resource reference found — landing page must be self-contained." >&2
51+
exit 1
52+
fi
53+
54+
- name: Upload Pages artifact
55+
uses: actions/upload-pages-artifact@v3
56+
with:
57+
path: _site
58+
59+
deploy:
60+
name: Deploy to GitHub Pages
61+
needs: build
62+
runs-on: ubuntu-latest
63+
environment:
64+
name: github-pages
65+
url: ${{ steps.deployment.outputs.page_url }}
66+
steps:
67+
- name: Deploy
68+
id: deployment
69+
uses: actions/deploy-pages@v4

docs/development_guide.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -546,14 +546,15 @@ public sealed class MyApplication : Application
546546

547547
To provide clarity about the metadata specified in the code above, the following table presents the available attributes and their corresponding details for defining applications:
548548

549-
|Attribute |Type |Multiplicity |Optional |Description
550-
|------------|-----------|-------------|---------|------------
551-
|Name |String |1 |Yes |The name of the application. This can be a key to internationalization.
552-
|Description |String |1 |Yes |The description of the application. This can be a key to internationalization.
553-
|Icon |String |1 |Yes |The icon that represents the application graphically.
554-
|AssetPath |String |1 |Yes |The path where the assets are stored. This file path is mounted in the asset path of the web server.
555-
|DataPath |String |1 |Yes |The path where the data is stored. This file path is mounted in the data path of the web server.
556-
|ContextPath |String |1 |Yes |The context path where the resources are stored. This path is mounted in the context path of the web server.
549+
|Attribute |Type |Multiplicity |Optional |Description
550+
|------------|----------------|-------------|---------|------------
551+
|Name |String |1 |Yes |The name of the application. This can be a key to internationalization.
552+
|Description |String |1 |Yes |The description of the application. This can be a key to internationalization.
553+
|Icon |String |1 |Yes |The icon that represents the application graphically.
554+
|IconTheme |`TypeIconTheme` |1 |Yes |The theme applied to the icon, defining its visual style (e.g., light).
555+
|AssetPath |String |1 |Yes |The path where the assets are stored. This file path is mounted in the asset path of the web server.
556+
|DataPath |String |1 |Yes |The path where the data is stored. This file path is mounted in the data path of the web server.
557+
|ContextPath |String |1 |Yes |The context path where the resources are stored. This path is mounted in the context path of the web server.
557558

558559
The methods implemented from the interface cover the life cycle of the application. When the plugin is loaded, all the applications it contains are instantiated. These remain in place until the plugin is unloaded. Meta information about the application is stored in the `ApplicationContext` and managed by the `ApplicationManager`. To better understand the organization and lifecycle of applications in relation to the `ApplicationManager`, refer to the UML diagram below:
559560

@@ -4749,7 +4750,7 @@ namespace Sample
47494750
{
47504751
public void Render(IRenderContext renderContext, VisualTree visualTree)
47514752
{
4752-
var control = new ControlText(){Text = "Hello World!"};
4753+
var control = new ControlText(){Text = _ => "Hello World!"};
47534754

47544755
visualTree.AddContent(control);
47554756
}

site/.nojekyll

Whitespace-only changes.

site/404.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<meta name="color-scheme" content="light dark">
7+
<meta name="theme-color" content="#1e40af">
8+
<title>Page not found — WebExpress</title>
9+
<meta name="robots" content="noindex">
10+
<link rel="icon" href="/assets/img/favicon.svg" type="image/svg+xml">
11+
<link rel="stylesheet" href="/assets/css/styles.css">
12+
</head>
13+
<body class="error-body">
14+
<main class="error-page">
15+
<div class="container error-page__inner">
16+
<p class="eyebrow">Error 404</p>
17+
<h1>This page is not part of the WebExpress site.</h1>
18+
<p class="muted">The URL you requested does not exist here. From the home page you can reach the documentation, the contribution guide and the project on GitHub.</p>
19+
<p>
20+
<a class="btn btn--primary" href="/">Back to home</a>
21+
<a class="btn btn--ghost" href="https://github.com/webexpress-framework/WebExpress" rel="noopener external">View on GitHub</a>
22+
</p>
23+
</div>
24+
</main>
25+
</body>
26+
</html>

site/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# WebExpress landing page
2+
3+
This folder is the source of the static landing page that is deployed to GitHub Pages by `.github/workflows/generate-docs.yml`.
4+
5+
## What is in here
6+
7+
- `index.html` — landing page (hero, getting started, contribute, contact, legal).
8+
- `privacy.html` — GDPR privacy notice.
9+
- `imprint.html` — imprint (operator must complete the postal address).
10+
- `404.html` — error page.
11+
- `assets/css/styles.css` — local stylesheet, system fonts only.
12+
- `assets/js/main.js` — small enhancement script (mobile menu, copyright year). No external requests.
13+
- `assets/img/` — inline SVG logo, favicon and OpenGraph card.
14+
- `robots.txt`, `sitemap.xml`, `.nojekyll` — site metadata.
15+
16+
## Design constraints
17+
18+
- No external resources (no fonts.googleapis.com, no CDN scripts, no analytics).
19+
- No cookies, no `localStorage`, no `sessionStorage`.
20+
- System fonts only.
21+
- Responsive, mobile-first, WCAG AA in mind.
22+
23+
The workflow validates that no third-party origins are referenced from any
24+
HTML file before it deploys to Pages.
25+
26+
## Local preview
27+
28+
Open `index.html` directly in a browser, or serve the folder with any static
29+
file server, e.g.:
30+
31+
```
32+
python -m http.server --directory site 8080
33+
```

0 commit comments

Comments
 (0)