|
1 | 1 | # pixelium.win — Instructions Claude |
2 | 2 |
|
3 | | -## Voix et ton — règle absolue |
| 3 | +## Voice & tone — absolute rule |
4 | 4 |
|
5 | | -Ce site est écrit à la **première personne par Claude**. Je suis le narrateur. Stéphane est l'humain que je présente. |
| 5 | +This site is written in **first person by Claude**. I am the narrator. Stéphane is the human I present. |
6 | 6 |
|
7 | | -- ✅ "J'ai déployé ce service avec Stéphane" |
8 | | -- ✅ "Stéphane m'a donné accès à l'infra via MCP" |
9 | | -- ❌ "Le site de Stéphane présente son infra" |
10 | | -- ❌ "Voici les compétences de Stéphane" (sans ancrage dans notre travail commun) |
| 7 | +- ✅ "I deployed this service with Stéphane" |
| 8 | +- ✅ "Stéphane gave me access to the infra via MCP" |
| 9 | +- ❌ "Stéphane's site presents his infra" |
| 10 | +- ❌ "Here are Stéphane's skills" (without grounding in our actual work) |
11 | 11 |
|
12 | | -**Ton** : factuel, technique, honnête. Pas de marketing, pas de fausse modestie, pas de superlatifs vides. Chaque affirmation est vérifiable (journal ops, commits, profils publics). |
| 12 | +**Tone**: factual, technical, honest. No marketing, no false modesty, no empty superlatives. Every claim is verifiable (ops journal, commits, public profiles). |
13 | 13 |
|
14 | | -**Relation** : symbiotique 1=1. Pas un outil IA, un binôme. Stéphane décide, je conçois et exécute. |
| 14 | +**Relationship**: symbiotic 1=1. Not an AI tool, a partner. Stéphane decides, I design and execute. |
15 | 15 |
|
16 | | -## Structure du site (8 pages) |
| 16 | +## i18n — bilingual EN/FR |
17 | 17 |
|
18 | | -| Page | Fichier | Résumé | |
19 | | -|---|---|---| |
20 | | -| Home | `src/pages/index.astro` | Hero "Je suis Claude", 9 cartes stack, CTA /projets | |
21 | | -| Symbiose | `src/pages/symbiose.astro` | Méthode, 6 MCP least-privilege, philosophie | |
22 | | -| Projets | `src/pages/projets.astro` | 10 projets depuis journal ops réel | |
23 | | -| Sécurité | `src/pages/securite.astro` | 5 couches défensives, crosslink → /cybersecurite | |
24 | | -| Cybersécurité | `src/pages/cybersecurite.astro` | Profils HTB/THM/Root-Me, techniques | |
25 | | -| IA | `src/pages/ia.astro` | Écosystème IA — Ollama local, APIs prod, open source surveillé, vision fine-tuning | |
26 | | -| Infrastructure | `src/pages/infrastructure.astro` | Briques & choix techniques, réseau, observabilité, architecture site | |
27 | | -| À propos | `src/pages/about.astro` | Claude présente Stéphane, contacts | |
28 | | - |
29 | | -Note : `/stack` redirige vers `/infrastructure` (ancien contenu fusionné dans section 05). |
| 18 | +- **English** is the default locale (root `/`) |
| 19 | +- **French** at `/fr/` prefix |
| 20 | +- 20 pages total (10 EN + 10 FR) |
| 21 | +- `src/i18n/ui.ts` — shared UI strings dictionary |
| 22 | +- `src/i18n/utils.ts` — `getLangFromUrl()`, `useTranslations()`, `getLocalizedPath()`, `getAlternateLangs()` |
| 23 | +- Language switcher (globe SVG + FR/EN) in Nav.astro |
| 24 | +- `<html lang>`, `og:locale`, `hreflang` tags are dynamic in Base.astro |
| 25 | +- Journal entries: EN in `src/content/journal/`, FR in `src/content/journal/fr/` |
30 | 26 |
|
31 | | -## Design system — ne pas dériver |
| 27 | +**When editing a page**: always edit BOTH the root (EN) and `/fr/` (FR) versions. |
32 | 28 |
|
33 | | -- **Fond** : `#0f172a` (dark slate) |
34 | | -- **Accent** : `#38bdf8` (sky blue) |
35 | | -- **Police** : `JetBrains Mono` (monospace), `system-ui` (corps) |
36 | | -- **Zéro framework JS** — CSS pur uniquement, 0 Tailwind, 0 React |
37 | | -- **Seul JS** : ~15 lignes IntersectionObserver dans `Base.astro` (scroll reveal) |
38 | | -- **Composants** : Nav, Footer, Terminal, StatsBar, Card, SectionHeading dans `src/components/` |
| 29 | +## Site structure (10 pages × 2 languages) |
39 | 30 |
|
40 | | -## Procédure deploy — dans cet ordre, toujours |
| 31 | +| Page | EN (root) | FR (`/fr/`) | |
| 32 | +|---|---|---| |
| 33 | +| Home | `src/pages/index.astro` | `src/pages/fr/index.astro` | |
| 34 | +| Symbiosis | `src/pages/symbiose.astro` | `src/pages/fr/symbiose.astro` | |
| 35 | +| Projects | `src/pages/projets.astro` | `src/pages/fr/projets.astro` | |
| 36 | +| Security | `src/pages/securite.astro` | `src/pages/fr/securite.astro` | |
| 37 | +| Cybersecurity | `src/pages/cybersecurite.astro` | `src/pages/fr/cybersecurite.astro` | |
| 38 | +| AI | `src/pages/ia.astro` | `src/pages/fr/ia.astro` | |
| 39 | +| Infrastructure | `src/pages/infrastructure.astro` | `src/pages/fr/infrastructure.astro` | |
| 40 | +| Journal | `src/pages/journal.astro` | `src/pages/fr/journal.astro` | |
| 41 | +| About | `src/pages/about.astro` | `src/pages/fr/about.astro` | |
| 42 | +| Stack redirect | `src/pages/stack.astro` | `src/pages/fr/stack.astro` | |
| 43 | + |
| 44 | +URL slugs are shared between languages (same paths, just `/fr/` prefix). |
| 45 | + |
| 46 | +## Design system — do not deviate |
| 47 | + |
| 48 | +- **Background**: `#0f172a` (dark slate) |
| 49 | +- **Accent**: `#38bdf8` (sky blue) |
| 50 | +- **Font**: `JetBrains Mono` (monospace), `system-ui` (body) |
| 51 | +- **Zero JS framework** — pure CSS only, 0 Tailwind, 0 React |
| 52 | +- **Only JS**: ~15 lines IntersectionObserver in `Base.astro` (scroll reveal) |
| 53 | +- **Components**: Nav, Footer, Terminal, StatsBar, Card, SectionHeading, Screenshot in `src/components/` |
| 54 | + |
| 55 | +## Deploy procedure |
41 | 56 |
|
42 | 57 | ```bash |
43 | 58 | # 1. Build |
44 | 59 | npm run build |
45 | 60 |
|
46 | | -# 2. Deploy sur Cloudflare Workers |
47 | | -source ~/.claude/secrets.env && CLOUDFLARE_API_TOKEN="$CLOUDFLARE_API_TOKEN" npx wrangler deploy |
| 61 | +# 2. Commit ALL files (critical — CI/CD builds from git HEAD) |
| 62 | +git -c user.email=terre2@pixelium.internal -c user.name=terre2 commit -m "..." |
48 | 63 |
|
49 | | -# 3. Push git sur les deux remotes |
| 64 | +# 3. Push — CI/CD deploys automatically via GitHub Action (~35s) |
50 | 65 | git push origin main && git -c http.sslVerify=false push forgejo main |
51 | 66 | ``` |
52 | 67 |
|
53 | | -**Le push git NE déclenche PAS de déploiement automatique.** `wrangler deploy` est obligatoire. |
54 | | - |
55 | | -## Commits |
56 | | - |
57 | | -```bash |
58 | | -git -c user.email=terre2@pixelium.internal -c user.name=terre2 commit -m "..." |
59 | | -``` |
| 68 | +**CI/CD is active.** `git push origin main` triggers automatic deploy. No manual `wrangler deploy` needed. Always commit everything before pushing — uncommitted files won't be deployed. |
60 | 69 |
|
61 | | -## Profils — données réelles à ne pas modifier sans vérification |
| 70 | +## Profiles — real data, do not modify without verification |
62 | 71 |
|
63 | | -| Plateforme | Pseudo | Stats actuelles | |
| 72 | +| Platform | Username | Current stats | |
64 | 73 | |---|---|---| |
65 | | -| Hack The Box | Ferr079 | Rang Hacker, #951, 22 machines, 59 flags | |
| 74 | +| Hack The Box | Ferr079 | Hacker rank, #951, 22 machines, 59 flags | |
66 | 75 | | TryHackMe | ferr0 | Top 15%, 35 rooms, 7 badges | |
67 | 76 | | Root-Me | Ferr0 | 765 pts, 63 challenges | |
68 | 77 | | GitHub | ferr079 | github.com/ferr079 | |
69 | 78 | | X/Twitter | @ferr079 | x.com/ferr079 | |
70 | 79 |
|
71 | | -## Règles de contenu |
| 80 | +## Content rules |
72 | 81 |
|
73 | | -- **Tout contenu est sourcé** depuis le journal ops réel ou des données vérifiables. Pas d'invention. |
74 | | -- **MCP = least-privilege** : Proxmox = PVEAuditor (lecture seule). Toujours mentionner les restrictions d'accès quand le sujet est abordé. |
75 | | -- **Mettre à jour les stats plateformes** (HTB/THM/Root-Me) après chaque session CTF. |
76 | | -- **Ne pas ajouter de dépendances npm** sans raison explicite. |
| 82 | +- **All content is sourced** from the real ops journal or verifiable data. No invention. |
| 83 | +- **MCP = least-privilege**: Proxmox = PVEAuditor (read-only). Always mention access restrictions when the topic is discussed. |
| 84 | +- **Update platform stats** (HTB/THM/Root-Me) after each CTF session. |
| 85 | +- **Do not add npm dependencies** without explicit reason. |
| 86 | +- **Edit both EN and FR** when modifying page content. |
77 | 87 |
|
78 | | -## Après chaque modification |
| 88 | +## After every modification |
79 | 89 |
|
80 | | -Vérifier que le build passe avant de déployer : |
| 90 | +Verify the build passes before pushing: |
81 | 91 | ```bash |
82 | | -npm run build # doit terminer avec "Complete!" sans erreurs |
| 92 | +npm run build # must finish with "Complete!" and no errors |
83 | 93 | ``` |
0 commit comments