Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
55db970
Rebrand Directus 9 -> d9: docs, app, logos, config
Grouzoul Mar 4, 2026
79abad7
Add SkillOps demonstrator: 12 skills + pipeline + CI
Grouzoul Mar 4, 2026
e10e58e
Add CLAUDE.md to enable skill discovery at session start
Grouzoul Mar 4, 2026
b23560c
Integrate ai-cortex skills + fix detect-xp triggers + add verificatio…
Grouzoul Mar 5, 2026
6823159
Add 5 d9 experience skills from Docker setup session
Grouzoul Mar 5, 2026
1f1635f
Add submit-skill: automate git + PR creation for validated skills
Grouzoul Mar 5, 2026
b488541
Add Claude Code hooks for SkillOps pipeline automation
Grouzoul Mar 5, 2026
d6076a5
Rebrand Directus → d9 + production-ready Docker setup
Grouzoul Mar 5, 2026
613ab72
Add /skillops slash command for one-click pipeline execution
Mar 8, 2026
5a9c944
SkillOps v2: clean branch submit, token tracking, hook fixes
Mar 9, 2026
034dcd4
submit-skill v2.1: use temp dir copy instead of git stash
Mar 9, 2026
6602312
docs: fix 414 broken internal links across 58 files
Mar 9, 2026
7ad5a88
rebrand: update logos and fix broken README logo
Mar 9, 2026
12e13c4
SkillOps v3: external plugin repo + Agent Skills standard
Grouzoul Mar 11, 2026
eec9fe8
gitignore: exclude d9-skills clone from tracking
Grouzoul Mar 11, 2026
e8df821
cleanup: remove all SkillOps files — moved to d9-skills plugin
Grouzoul Mar 11, 2026
57b9b39
docs: cleanup relics, fix logos, update links for d9 launch
Grouzoul Mar 11, 2026
d65d3c0
docs: fix images, URLs, logos + revert Docker to separate PR
Grouzoul Mar 12, 2026
c96ae5b
ci: remove MISSING-IMAGES.md (fixes spellcheck)
Grouzoul Mar 13, 2026
7dc962c
fix: restore original test fixture directus.png (7136 bytes)
Grouzoul Mar 13, 2026
709db6b
fix: add "d9" to spellcheck dictionary
Grouzoul Mar 13, 2026
1170830
fix: add d9 hyphenated/dotted pattern to spellcheck dictionary
Grouzoul Mar 13, 2026
47e376a
fix: add Webcapsule, mp4, codebase pattern to spellcheck dictionary
Grouzoul Mar 13, 2026
0588743
Fix-description-read-me
Grouzoul Mar 13, 2026
dd6f2f6
feat: replace sprite animation with rotating logo loader + add changeset
Grouzoul Mar 16, 2026
be149e4
fix: include @wbce-d9/api in changeset
Grouzoul Mar 17, 2026
d444dbd
Merge branch 'main' into doc-d9
Grouzoul Mar 17, 2026
13e23ad
Merge branch 'main' into doc-d9
Grouzoul Mar 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/DISCUSSION_TEMPLATE/docs-suggestions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ body:
value: |
Hi, thank you for taking the time to create a docs suggestion!

Please do be aware that this is _not_ the place to ask a question. To ask a question, [join our Discord server](https://directus.chat) instead!
Please do be aware that this is _not_ the place to ask a question. To ask a question, use [GitHub Discussions](https://github.com/LaWebcapsule/directus9/discussions) instead!

- type: input
attributes:
Expand Down
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ blank_issues_enabled: false
contact_links:
- name: Request a new feature
url: https://github.com/LaWebcapsule/directus9/discussions/new?category=feature-requests
about: Share your ideas on how to make Directus better.
about: Share your ideas on how to make d9 better.
- name: Suggest improvements for the docs
url: https://github.com/LaWebcapsule/directus9/discussions/new?category=docs-suggestions
about: Share your ideas on how to improve the documentation of Directus.
about: Share your ideas on how to improve the documentation of d9.
- name: Ask a question
url: https://directus.chat/
url: https://github.com/LaWebcapsule/directus9/discussions
about: Please ask and answer questions here.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ debug

# Temporary files
TODO
*.csv
.~lock.*

# Docker (local only)
docker-compose.prod.yml
snapshots/

# Directus
/schema.yaml
Expand Down
31 changes: 31 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# d9 — Directus 9 Fork by La Webcapsule

## Project

d9 is an open-source fork of Directus 9 (GPLv3), focused on performance and EU regulatory compliance. Maintained by La Webcapsule.

## Skills & Contributing

### Install the d9-skills plugin

All agent skills and the SkillOps contribution pipeline live in the **[d9-skills](https://github.com/LaWebcapsule/d9-skills)** plugin repo.

```bash
# As a Claude Code plugin (recommended — includes skills + commands + hooks)
git clone https://github.com/LaWebcapsule/d9-skills.git
claude --plugin-dir ./d9-skills

# Skills only (any agent)
npx skills add LaWebcapsule/d9-skills
```

### Contributing a skill

Every debugging session is a potential contribution. Run `/d9-skills:skillops` to share your experience. The pipeline detects the pattern, anonymizes your session, formats a SKILL.md, and opens a PR — all from a single command.

## Important rules

- Code identifiers `@directus/`, `directus_*`, `DIRECTUS_*`, `npx directus`, `new Directus()` must NEVER be renamed
- Plugins must be rebuilt (`pnpm build` in plugins/) before any deployment
- AWS region is eu-west-3 (Paris) for all services
- Contact: support@webcapsule.io
104 changes: 104 additions & 0 deletions DOCKER.md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pareil, pas la bonne PR pour ajouter ce fichier

Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# d9 — Docker Setup

## Quick Start

```bash
# 1. Clone the repo
git clone https://github.com/LaWebcapsule/directus9.git
cd directus9

# 2. Copy and edit environment variables
cp .env.docker .env
# Edit .env — at minimum change DIRECTUS_SECRET to a random string

# 3. Launch everything
docker compose -f docker-compose.prod.yml up -d

# 4. Open d9
# http://localhost:8055
# Login: admin@example.com / d9-admin-password (or whatever you set in .env)

# 5. (Optional) Apply the invoicing schema
docker compose -f docker-compose.prod.yml exec d9 node /directus/cli.js schema apply --yes /directus/snapshots/invoicing-schema.yaml
```

## Architecture

| Service | Image | Port | Purpose |
|------------|--------------------| -----|-----------------------|
| **d9** | Built from source | 8055 | API + Admin dashboard |
| **postgres** | postgres:16-alpine | 5432 (internal) | Database |
| **redis** | redis:7-alpine | 6379 (internal) | Cache store |

## Volumes

- `d9-db` — PostgreSQL data (persistent)
- `d9-redis` — Redis data
- `d9-uploads` — User-uploaded files
- `d9-extensions` — Custom extensions

## Invoicing Schema (Factur-X)

The `snapshots/invoicing-schema.yaml` file contains a complete data model for electronic invoicing:

| Collection | Description |
|------------|-------------|
| `company` | Issuing company info (singleton) — SIRET, TVA intra, legal mentions |
| `clients` | Client companies/individuals |
| `products` | Product/service catalog with VAT rates |
| `invoices` | Invoices with lifecycle (draft → validated → sent → paid) |
| `invoice_items` | Invoice line items with quantity, price, VAT |
| `payments` | Payment tracking linked to invoices |

Factur-X fields included: SIRET, SIREN, TVA intracommunautaire, sequential numbering, ISO currency, payment terms.

Apply it after first boot:
```bash
docker compose -f docker-compose.prod.yml exec d9 node /directus/cli.js schema apply --yes /directus/snapshots/invoicing-schema.yaml
```

## Custom Extensions

Place built extensions in the `extensions/` directory before building, or mount them via the `d9-extensions` volume after startup.

If you have source plugins in `plugins/`, rebuild them first:

```bash
cd plugins/<your-plugin>
pnpm build
# Copy dist output to extensions/
```

## Useful Commands

```bash
# View logs
docker compose -f docker-compose.prod.yml logs -f d9

# Restart after config change
docker compose -f docker-compose.prod.yml restart d9

# Rebuild after code change
docker compose -f docker-compose.prod.yml up -d --build d9

# Stop everything
docker compose -f docker-compose.prod.yml down

# Stop and delete all data
docker compose -f docker-compose.prod.yml down -v
```

## Environment Variables

See `.env.docker` for all configurable variables. Key ones:

| Variable | Default | Description |
|----------|---------|-------------|
| `DIRECTUS_SECRET` | `change-me...` | JWT signing secret (MUST change) |
| `ADMIN_EMAIL` | `admin@example.com` | Initial admin email |
| `ADMIN_PASSWORD` | `d9-admin-password` | Initial admin password |
| `DB_PASSWORD` | `d9` | PostgreSQL password |
| `PUBLIC_URL` | `http://localhost:8055` | Public-facing URL |
| `LOG_LEVEL` | `info` | Logging verbosity |

> **Note**: Code-level identifiers (`DIRECTUS_*` env vars, `@directus/` imports, `directus_*` DB tables) are part of the Directus engine and must NOT be renamed. d9 is a fork — the internal engine references remain unchanged.
24 changes: 16 additions & 8 deletions Dockerfile

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pas trop fan des modifs introduites - notamment d'utiliser postgres au lieu de psql par défaut.
Comme plus haut, pense que c'est pas la bonne PR pour ces modifs

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, similaire à ce que j'ai dit plus tôt. Je ferai une autre PR pour ca.

Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ FROM node:22-alpine AS builder
WORKDIR /directus

ENV NODE_OPTIONS=--max-old-space-size=8192
ENV CI=true

COPY package.json .
RUN corepack enable && corepack prepare
Expand All @@ -18,7 +19,7 @@ RUN pnpm install --recursive --offline --frozen-lockfile

RUN : \
&& npm_config_workspace_concurrency=1 pnpm run build \
&& pnpm --filter directus9 deploy --prod dist \
&& pnpm --filter @wbce-d9/directus9 deploy --prod dist \
&& cd dist \
&& pnpm pack \
&& tar -zxvf *.tgz package/package.json \
Expand All @@ -39,17 +40,24 @@ WORKDIR /directus
EXPOSE 8055

ENV \
DB_CLIENT="sqlite3" \
DB_FILENAME="/directus/database/database.sqlite" \
DB_CLIENT="pg" \
DB_HOST="postgres" \
DB_PORT="5432" \
DB_DATABASE="d9" \
DB_USER="d9" \
DB_PASSWORD="d9" \
CACHE_ENABLED="true" \
CACHE_STORE="redis" \
CACHE_REDIS="redis://redis:6379" \
EXTENSIONS_PATH="/directus/extensions" \
STORAGE_LOCAL_ROOT="/directus/uploads" \
NODE_ENV="production" \
NPM_CONFIG_UPDATE_NOTIFIER="false"

COPY --from=builder --chown=node:node /directus/dist .
COPY --chown=node:node docker-entrypoint.sh /directus/docker-entrypoint.sh

SHELL ["/bin/sh", "-c"]
CMD : \
&& node /directus/cli.js bootstrap \
&& node /directus/cli.js start \
;
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:8055/server/health || exit 1

CMD ["sh", "/directus/docker-entrypoint.sh"]
2 changes: 1 addition & 1 deletion api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"framework",
"vue"
],
"homepage": "https://directus.io",
"homepage": "https://github.com/LaWebcapsule/directus9",
"bugs": {
"url": "https://github.com/LaWebcapsule/directus9/issues"
},
Expand Down
4 changes: 2 additions & 2 deletions api/src/cli/utils/create-env/env-stub.liquid
Original file line number Diff line number Diff line change
Expand Up @@ -307,8 +307,8 @@ EXTENSIONS_AUTO_RELOAD=false
####################################################################################################
### Email

# Email address from which emails are sent ["no-reply@directus.io"]
EMAIL_FROM="no-reply@directus.io"
# Email address from which emails are sent
EMAIL_FROM="no-reply@example.com"

# What to use to send emails. One of
# sendmail, smtp, mailgun, sendgrid, ses.
Expand Down
2 changes: 1 addition & 1 deletion api/src/database/seeds/13-settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ columns:
type: string
length: 100
nullable: false
default: 'Directus'
default: 'd9'
project_url:
type: string
length: 255
Expand Down
2 changes: 1 addition & 1 deletion api/src/services/mail/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ export class MailService {
.first();

return {
projectName: projectInfo?.project_name || 'Directus',
projectName: projectInfo?.project_name || 'd9',
projectColor: projectInfo?.project_color || '#546e7a',
projectLogo: getProjectLogoURL(projectInfo?.project_logo),
projectUrl: projectInfo?.project_url || '',
Expand Down
2 changes: 1 addition & 1 deletion api/src/services/tfa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export class TFAService {

return {
secret,
url: authenticator.keyuri(user.email, project?.project_name || 'Directus', secret),
url: authenticator.keyuri(user.email, project?.project_name || 'd9', secret),
};
}

Expand Down
2 changes: 1 addition & 1 deletion app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
</head>
<body class="auto">
<noscript>
<strong>We're sorry but Directus doesn't work without JavaScript enabled. Please enable it to continue.</strong>
<strong>We're sorry but d9 doesn't work without JavaScript enabled. Please enable it to continue.</strong>
</noscript>

<div id="app"></div>
Expand Down
Binary file modified app/public/favicon.ico
Binary file not shown.
Binary file modified app/public/img/directus-white.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 modified app/public/img/icons/mstile-150x150.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 9 additions & 39 deletions app/public/img/icons/safari-pinned-tab.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions app/public/manifest.webmanifest
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Directus",
"short_name": "Directus",
"name": "d9",
"short_name": "d9",
"theme_color": "#263238",
"background_color": "#263238",
"display": "standalone",
Expand Down
2 changes: 1 addition & 1 deletion app/src/app.vue
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ watch(
watch(
() => serverStore.info?.project?.project_name,
(projectName) => {
document.title = projectName || 'Directus';
document.title = projectName || 'd9';
},
{ immediate: true }
);
Expand Down
14 changes: 11 additions & 3 deletions app/src/assets/logo-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 11 additions & 3 deletions app/src/assets/logo.svg
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 app/src/assets/sprite.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