From 7e6aec202ea22bc46ce54d6d4f4a03db1f0175e0 Mon Sep 17 00:00:00 2001 From: Houssem Eddine BENABDALLAH Date: Sat, 7 Nov 2026 14:33:45 +0100 Subject: [PATCH 1/2] Add a logo in Airlock's and Sherpa's style --- README.fr.md | 7 ++++--- README.md | 7 ++++--- docs/brand/README.md | 30 ++++++++++++++++++++++++++++++ docs/brand/icon-512.png | Bin 0 -> 14690 bytes docs/brand/icon.svg | 1 + docs/brand/logo-dark.svg | 1 + docs/brand/logo.svg | 1 + docs/brand/mark-dark.svg | 1 + docs/brand/mark.svg | 1 + docs/brand/social-preview.png | Bin 0 -> 33499 bytes 10 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 docs/brand/README.md create mode 100644 docs/brand/icon-512.png create mode 100644 docs/brand/icon.svg create mode 100644 docs/brand/logo-dark.svg create mode 100644 docs/brand/logo.svg create mode 100644 docs/brand/mark-dark.svg create mode 100644 docs/brand/mark.svg create mode 100644 docs/brand/social-preview.png diff --git a/README.fr.md b/README.fr.md index 3ceeee0..b608747 100644 --- a/README.fr.md +++ b/README.fr.md @@ -1,9 +1,10 @@

- phpgraph transforme une base de code PHP en graphe de connaissances (domaines, handlers, repositories, contrôleurs, adapters), servi aux agents IA par une CLI et un serveur MCP + + + phpgraph +

-

phpgraph

-

Le graphe de connaissances de votre code PHP, pour les agents IA.
Analyse statique servie par MCP à Sherpa, Claude Code, Codex, Cursor et à tout client MCP.
diff --git a/README.md b/README.md index 1a2ece8..2403495 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@

- phpgraph turns a PHP codebase into a knowledge graph of domains, handlers, repositories, controllers and adapters, served to AI agents through a CLI and an MCP server + + + phpgraph +

-

phpgraph

-

A knowledge graph of your PHP codebase, for AI coding agents.
Static analysis served over MCP to Sherpa, Claude Code, Codex, Cursor and any MCP client.
diff --git a/docs/brand/README.md b/docs/brand/README.md new file mode 100644 index 0000000..3f821a2 --- /dev/null +++ b/docs/brand/README.md @@ -0,0 +1,30 @@ +# phpgraph's logo + +The mark is a small graph whose answer stands out, in indigo: the node your question leads to. It is drawn like +[Airlock](https://github.com/hbenabdallah/airlock)'s and [Sherpa](https://github.com/hbenabdallah/sherpa)'s: the +same tile, stroke and round caps, ink and paper, one accent. The nodes are dots wider than the stroke, so they don't +read as the edges' ends. + +| File | Use | +|---|---| +| `logo.svg` | The lockup (mark and wordmark) on light backgrounds | +| `logo-dark.svg` | The lockup on dark backgrounds | +| `mark.svg`, `mark-dark.svg` | The mark alone, on light or dark backgrounds | +| `icon.svg` | The app icon: the mark on a dark tile | +| `icon-512.png` | The GitHub avatar (square; GitHub rounds it) | +| `social-preview.png` | The repository's social preview, 1280 × 640 | + +The wordmark is drawn as paths, so the SVGs need no font: Space Grotesk SemiBold for `phpgraph`, JetBrains Mono for +the tagline on the social preview (both under the SIL Open Font License). + +| Colour | Hex | +|---|---| +| Ink | `#12161C` | +| Paper | `#F6F5F1` | +| Indigo, on light | `#4F57C4` (5.5:1 on paper) | +| Indigo, on dark | `#989DE1` (7.1:1 on ink) | + +Both indigos keep the hue of PHP's `#777BB4`. + +On GitHub: the avatar is set in the account's or organisation's profile settings, the social preview in the +repository's Settings, General, Social preview. diff --git a/docs/brand/icon-512.png b/docs/brand/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce03f2f7994da372611a3c4909da6b376284825 GIT binary patch literal 14690 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 literal 0 HcmV?d00001 diff --git a/docs/brand/icon.svg b/docs/brand/icon.svg new file mode 100644 index 0000000..4bdd50e --- /dev/null +++ b/docs/brand/icon.svg @@ -0,0 +1 @@ +phpgraph diff --git a/docs/brand/logo-dark.svg b/docs/brand/logo-dark.svg new file mode 100644 index 0000000..ba3a231 --- /dev/null +++ b/docs/brand/logo-dark.svg @@ -0,0 +1 @@ +phpgraph diff --git a/docs/brand/logo.svg b/docs/brand/logo.svg new file mode 100644 index 0000000..e25a35a --- /dev/null +++ b/docs/brand/logo.svg @@ -0,0 +1 @@ +phpgraph diff --git a/docs/brand/mark-dark.svg b/docs/brand/mark-dark.svg new file mode 100644 index 0000000..7421602 --- /dev/null +++ b/docs/brand/mark-dark.svg @@ -0,0 +1 @@ +phpgraph diff --git a/docs/brand/mark.svg b/docs/brand/mark.svg new file mode 100644 index 0000000..67d34dd --- /dev/null +++ b/docs/brand/mark.svg @@ -0,0 +1 @@ +phpgraph diff --git a/docs/brand/social-preview.png b/docs/brand/social-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..71deec185f6c2ff103d785ca0e1afebcdb3ddf70 GIT binary patch literal 33499 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 %o=IERFsMO$w7)$- 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 Date: Sat, 7 Nov 2026 14:52:37 +0100 Subject: [PATCH 2/2] Keep the project title as a heading: the logo inside the h1 --- README.fr.md | 4 ++-- README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.fr.md b/README.fr.md index b608747..ca013eb 100644 --- a/README.fr.md +++ b/README.fr.md @@ -1,9 +1,9 @@ -

+

phpgraph -

+

Le graphe de connaissances de votre code PHP, pour les agents IA.
diff --git a/README.md b/README.md index 2403495..5f5ec29 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -

+

phpgraph -

+

A knowledge graph of your PHP codebase, for AI coding agents.