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
85 changes: 85 additions & 0 deletions .github/workflows/deploy-landing-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Deploy landing to GitHub Pages

on:
pull_request:
paths:
- "apps/landing/**"
- "apps/web/public/**"
- "docs/assets/dashboard.png"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- "tsconfig.base.json"
- ".github/workflows/deploy-landing-pages.yml"
push:
branches: [main]
paths:
- "apps/landing/**"
- "apps/web/public/**"
- "docs/assets/dashboard.png"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- "tsconfig.base.json"
- ".github/workflows/deploy-landing-pages.yml"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: pages-${{ github.ref }}
cancel-in-progress: true

jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Set up pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
cache: pnpm
- name: Enable Corepack
run: corepack enable
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Check landing types
run: pnpm --filter @memorepo/landing typecheck
- name: Build landing
run: pnpm --filter @memorepo/landing build
- name: Run landing unit tests
run: pnpm --filter @memorepo/landing test:unit
- name: Install browsers for landing checks
run: pnpm --filter @memorepo/landing exec playwright install --with-deps chromium firefox webkit
- name: Run motion, responsive, accessibility, and interaction checks
run: pnpm --filter @memorepo/landing test:browser
- name: Upload GitHub Pages artifact
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
path: apps/landing/dist

deploy:
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
needs: validate
runs-on: ubuntu-latest
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Configure GitHub Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
- name: Deploy GitHub Pages
id: deployment
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
node_modules/
dist/
.astro/
.memorepo/
.tmp-memorepo-tests/
.env
Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht

## [Unreleased]

## [0.3.3] - 2026-07-22

### Added

- Add the public MemoRepo landing page with product, architecture, quickstart, documentation, and operating-contract sections.
- Add accessible Motion animations with reduced-motion support and responsive browser coverage across Chromium, Firefox, and WebKit.

### Changed

- Refine landing-page navigation, card alignment, architecture connectors, dashboard presentation, and animation pacing across desktop, tablet, and mobile layouts.
- Publish the landing page through the GitHub Pages workflow after validation on the main branch.

## [0.3.2] - 2026-07-20

### Added
Expand Down
2 changes: 1 addition & 1 deletion apps/api/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@memorepo/api",
"version": "0.3.2",
"version": "0.3.3",
"private": true,
"type": "module",
"bin": {
Expand Down
59 changes: 59 additions & 0 deletions apps/landing/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# MemoRepo landing

Static Astro landing page for the public MemoRepo project site. The generated HTML contains the complete page content and is configured for the case-sensitive GitHub Pages path `/MemoRepo/`.

## Local development

From the repository root:

```bash
pnpm install --frozen-lockfile
pnpm dev:landing
```

Open `http://localhost:4321/MemoRepo/` unless Astro reports a different port.

## Validation and build

```bash
pnpm --filter @memorepo/landing typecheck
pnpm --filter @memorepo/landing build
pnpm --filter @memorepo/landing test:unit
pnpm --filter @memorepo/landing test:browser
```

The browser smoke test expects a completed build and checks the full Motion journey, reduced-motion behavior, breakpoint boundaries, orientation changes, accessibility, keyboard interactions, console errors, horizontal overflow, and the JavaScript-disabled page across Chromium, Firefox, and WebKit.

The production output is written to `apps/landing/dist`.

## GitHub Pages

The workflow at `.github/workflows/deploy-landing-pages.yml` validates pull requests and deploys successful `main` builds.

Enable it once in the repository:

1. Open **Repository Settings → Pages**.
2. Set **Source** to **GitHub Actions**.
3. Run **Deploy landing to GitHub Pages** manually or merge a landing change to `main`.

The default deployment URL is `https://abelmaro.github.io/MemoRepo/`.

The project-site `robots.txt` is served at `/MemoRepo/robots.txt`; it is not the host-level robots file for `abelmaro.github.io`. Indexing does not depend on it. The generated sitemap can be submitted directly to Search Console at `https://abelmaro.github.io/MemoRepo/sitemap.xml`.

## Custom domain

Site URLs are controlled at build time:

- `SITE_ORIGIN` defaults to `https://abelmaro.github.io`.
- `BASE_PATH` defaults to `/MemoRepo`.
- `CANONICAL_URL` is derived from those two values.

For a verified custom domain, configure the domain in GitHub Pages first, set DNS without wildcards, enable HTTPS, then build with the custom origin and a root base path. For example in PowerShell:

```powershell
$env:SITE_ORIGIN = "https://docs.example.com"
$env:BASE_PATH = "/"
pnpm --filter @memorepo/landing build
```

Validate the canonical URL, Open Graph image, sitemap, manifest, and `.well-known/security.txt` after the change. Add a `CNAME` only after the real domain is selected and configured.
15 changes: 15 additions & 0 deletions apps/landing/astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import react from "@astrojs/react";
import { defineConfig } from "astro/config";
import { BASE_PATH, SITE_ORIGIN } from "./site.config.mjs";

export default defineConfig({
integrations: [react()],
site: SITE_ORIGIN,
base: BASE_PATH,
output: "static",
trailingSlash: "always",
compressHTML: true,
build: {
assets: "assets",
},
});
34 changes: 34 additions & 0 deletions apps/landing/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "@memorepo/landing",
"version": "0.3.3",
"private": true,
"type": "module",
"scripts": {
"dev": "astro dev --host 0.0.0.0",
"build": "astro check && astro build",
"preview": "astro preview --host 0.0.0.0",
"test": "pnpm build && vitest run",
"test:browser": "node scripts/accessibility-smoke.mjs",
"test:unit": "vitest run",
"typecheck": "astro check"
},
"dependencies": {
"@astrojs/react": "^6.0.1",
"astro": "^7.1.3",
"motion": "^12.42.2",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-icons": "^5.7.0",
"sharp": "^0.35.3"
},
"devDependencies": {
"@astrojs/check": "^0.9.9",
"@types/node": "^22.20.0",
"axe-core": "^4.12.1",
"jsdom": "^29.1.1",
"lighthouse": "^13.4.1",
"playwright": "^1.61.1",
"typescript": "^5.9.2",
"vitest": "^4.1.10"
}
}
Binary file added apps/landing/public/android-chrome-192x192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/landing/public/android-chrome-512x512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/landing/public/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/landing/public/favicon-16x16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/landing/public/favicon-32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/landing/public/favicon.ico
Binary file not shown.
Binary file added apps/landing/public/media/hero-ocean-loop.mp4
Binary file not shown.
Binary file added apps/landing/public/og/memorepo-og.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading