@mtldev514/retro-portfolio-engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +408 -0
  2. package/bin/cli.js +103 -0
  3. package/engine/admin/admin.css +720 -0
  4. package/engine/admin/admin.html +801 -0
  5. package/engine/admin/admin_api.py +230 -0
  6. package/engine/admin/scripts/backup.sh +116 -0
  7. package/engine/admin/scripts/config_loader.py +180 -0
  8. package/engine/admin/scripts/init.sh +141 -0
  9. package/engine/admin/scripts/manager.py +308 -0
  10. package/engine/admin/scripts/restore.sh +121 -0
  11. package/engine/admin/scripts/server.py +41 -0
  12. package/engine/admin/scripts/update.sh +321 -0
  13. package/engine/admin/scripts/validate_json.py +62 -0
  14. package/engine/fonts.css +37 -0
  15. package/engine/index.html +190 -0
  16. package/engine/js/config-loader.js +370 -0
  17. package/engine/js/config.js +173 -0
  18. package/engine/js/counter.js +17 -0
  19. package/engine/js/effects.js +97 -0
  20. package/engine/js/i18n.js +68 -0
  21. package/engine/js/init.js +107 -0
  22. package/engine/js/media.js +264 -0
  23. package/engine/js/render.js +282 -0
  24. package/engine/js/router.js +133 -0
  25. package/engine/js/sparkle.js +123 -0
  26. package/engine/js/themes.js +607 -0
  27. package/engine/style.css +2037 -0
  28. package/index.js +35 -0
  29. package/package.json +48 -0
  30. package/scripts/admin.js +67 -0
  31. package/scripts/build.js +142 -0
  32. package/scripts/init.js +237 -0
  33. package/scripts/post-install.js +16 -0
  34. package/scripts/serve.js +54 -0
  35. package/templates/user-portfolio/.github/workflows/deploy.yml +57 -0
  36. package/templates/user-portfolio/config/app.json +36 -0
  37. package/templates/user-portfolio/config/categories.json +241 -0
  38. package/templates/user-portfolio/config/languages.json +15 -0
  39. package/templates/user-portfolio/config/media-types.json +59 -0
  40. package/templates/user-portfolio/data/painting.json +3 -0
  41. package/templates/user-portfolio/data/projects.json +3 -0
  42. package/templates/user-portfolio/lang/en.json +114 -0
  43. package/templates/user-portfolio/lang/fr.json +114 -0
package/README.md ADDED
@@ -0,0 +1,408 @@
1
+ # @retro-portfolio/engine
2
+
3
+ [![npm version](https://badge.fury.io/js/%40retro-portfolio%2Fengine.svg)](https://www.npmjs.com/package/@retro-portfolio/engine)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ **Site-as-a-Package** 🎹 Un moteur de portfolio rĂ©tro que vous installez via NPM. Vous fournissez vos donnĂ©es, le package fournit tout le reste.
7
+
8
+ ## 🎯 Concept
9
+
10
+ Au lieu de cloner un repo complet, vous **installez un package NPM** qui contient tout le moteur (HTML, CSS, JS, admin). Vous gardez uniquement **vos données** dans votre repo.
11
+
12
+ ### Avantages
13
+
14
+ ✅ **Un seul repo** pour l'utilisateur (juste ses donnĂ©es)
15
+ ✅ **Mises à jour faciles** via `npm update`
16
+ ✅ **Pas de merge conflicts** pour rĂ©cupĂ©rer les nouvelles features
17
+ ✅ **Workflow simple** : `npm install` → `npm run build`
18
+ ✅ **Admin inclus** pour gĂ©rer le contenu visuellement
19
+
20
+ ---
21
+
22
+ ## 🚀 Quick Start
23
+
24
+ ### Pour créer votre portfolio
25
+
26
+ ```bash
27
+ # 1. Créer un nouveau portfolio
28
+ npx @retro-portfolio/engine init mon-portfolio
29
+ cd mon-portfolio
30
+
31
+ # 2. Installer les dépendances
32
+ npm install
33
+
34
+ # 3. Lancer le serveur de dev
35
+ npm run dev
36
+
37
+ # 4. Ouvrir http://localhost:8000
38
+ ```
39
+
40
+ C'est tout ! 🎉
41
+
42
+ ---
43
+
44
+ ## 📩 Installation dans un projet existant
45
+
46
+ ```bash
47
+ npm install @retro-portfolio/engine
48
+ ```
49
+
50
+ Puis ajoutez les scripts dans votre `package.json` :
51
+
52
+ ```json
53
+ {
54
+ "scripts": {
55
+ "build": "retro-portfolio build",
56
+ "dev": "retro-portfolio dev",
57
+ "admin": "retro-portfolio admin"
58
+ }
59
+ }
60
+ ```
61
+
62
+ ---
63
+
64
+ ## 📁 Structure de votre projet
65
+
66
+ AprÚs `init`, votre projet contient **uniquement vos données** :
67
+
68
+ ```
69
+ mon-portfolio/
70
+ ├── package.json (dĂ©pendance: @retro-portfolio/engine)
71
+ ├── config/ (VOS configurations)
72
+ │ ├── app.json
73
+ │ ├── languages.json
74
+ │ └── categories.json
75
+ ├── data/ (VOTRE contenu)
76
+ │ ├── painting.json
77
+ │ └── projects.json
78
+ ├── lang/ (VOS traductions)
79
+ │ ├── en.json
80
+ │ └── fr.json
81
+ └── assets/ (VOS images, etc.)
82
+ ```
83
+
84
+ **Pas de code du site** dans votre repo ! Tout vient du package NPM.
85
+
86
+ ---
87
+
88
+ ## đŸ› ïž Commandes
89
+
90
+ ### `retro-portfolio init [directory]`
91
+
92
+ Crée un nouveau portfolio avec les templates de données.
93
+
94
+ ```bash
95
+ # Créer dans le dossier actuel
96
+ retro-portfolio init
97
+
98
+ # Créer dans un nouveau dossier
99
+ retro-portfolio init mon-portfolio
100
+
101
+ # Forcer l'écrasement
102
+ retro-portfolio init --force
103
+ ```
104
+
105
+ ### `retro-portfolio build`
106
+
107
+ GénÚre le site statique en fusionnant le moteur avec vos données.
108
+
109
+ ```bash
110
+ # Build standard
111
+ npm run build
112
+
113
+ # Spécifier le dossier de sortie
114
+ retro-portfolio build --output public
115
+
116
+ # Watch mode (rebuild automatique)
117
+ retro-portfolio build --watch
118
+ ```
119
+
120
+ **Ce qui se passe** :
121
+ 1. Le package copie ses fichiers engine (HTML, CSS, JS)
122
+ 2. Il fusionne avec vos fichiers `config/`, `data/`, `lang/`
123
+ 3. GénÚre un site complet dans `dist/`
124
+
125
+ ### `retro-portfolio dev`
126
+
127
+ Lance un serveur de développement local.
128
+
129
+ ```bash
130
+ npm run dev
131
+
132
+ # Port personnalisé
133
+ retro-portfolio dev --port 3000
134
+
135
+ # Ouvrir automatiquement le navigateur
136
+ retro-portfolio dev --open
137
+ ```
138
+
139
+ ### `retro-portfolio admin`
140
+
141
+ Lance l'interface d'administration pour gérer votre contenu.
142
+
143
+ ```bash
144
+ npm run admin
145
+
146
+ # Port personnalisé
147
+ retro-portfolio admin --port 5001
148
+
149
+ # Ouvrir automatiquement le navigateur
150
+ retro-portfolio admin --open
151
+ ```
152
+
153
+ **Interface admin** : Ajoutez/modifiez votre contenu visuellement, uploadez des images, gérez les traductions.
154
+
155
+ ---
156
+
157
+ ## 🔄 Workflow Complet
158
+
159
+ ### 1ïžâƒŁ Setup initial
160
+
161
+ ```bash
162
+ npx @retro-portfolio/engine init mon-portfolio
163
+ cd mon-portfolio
164
+ npm install
165
+ ```
166
+
167
+ ### 2ïžâƒŁ Configuration
168
+
169
+ Éditez vos fichiers de config :
170
+
171
+ ```bash
172
+ # Configurez votre site
173
+ nano config/app.json
174
+
175
+ # Ajoutez vos catégories
176
+ nano config/categories.json
177
+ ```
178
+
179
+ ### 3ïžâƒŁ Ajout de contenu
180
+
181
+ **Option A** : Via l'admin (recommandé)
182
+
183
+ ```bash
184
+ npm run admin
185
+ # Ouvrir http://localhost:5001/admin.html
186
+ # Upload images, ajouter descriptions, etc.
187
+ ```
188
+
189
+ **Option B** : Édition manuelle JSON
190
+
191
+ ```bash
192
+ nano data/painting.json
193
+ ```
194
+
195
+ ### 4ïžâƒŁ Preview local
196
+
197
+ ```bash
198
+ npm run dev
199
+ # Ouvrir http://localhost:8000
200
+ ```
201
+
202
+ ### 5ïžâƒŁ Build pour production
203
+
204
+ ```bash
205
+ npm run build
206
+ # → gĂ©nĂšre dist/
207
+ ```
208
+
209
+ ### 6ïžâƒŁ DĂ©ploiement
210
+
211
+ **GitHub Pages** :
212
+
213
+ ```bash
214
+ # Pusher le dossier dist/ sur la branche gh-pages
215
+ git add dist -f
216
+ git commit -m "Deploy"
217
+ git subtree push --prefix dist origin gh-pages
218
+ ```
219
+
220
+ Ou utilisez la GitHub Action fournie (voir section Déploiement).
221
+
222
+ ---
223
+
224
+ ## 🎹 Personnalisation
225
+
226
+ ### Ajouter un thĂšme custom
227
+
228
+ Créez `assets/custom-theme.css` :
229
+
230
+ ```css
231
+ :root {
232
+ --primary-color: #your-color;
233
+ --font-family: 'Your-Font', monospace;
234
+ }
235
+ ```
236
+
237
+ Le build l'inclura automatiquement !
238
+
239
+ ### Ajouter des pages custom
240
+
241
+ Créez `pages/about.html` dans votre projet. Le moteur le détectera au build.
242
+
243
+ ---
244
+
245
+ ## 🔄 Mettre à jour le moteur
246
+
247
+ Pour récupérer les derniÚres features du moteur :
248
+
249
+ ```bash
250
+ npm update @retro-portfolio/engine
251
+
252
+ # Ou version spécifique
253
+ npm install @retro-portfolio/engine@latest
254
+ ```
255
+
256
+ **Aucun conflit de merge** ! Vos données restent intactes.
257
+
258
+ ---
259
+
260
+ ## 🌐 DĂ©ploiement
261
+
262
+ ### GitHub Pages (automatique)
263
+
264
+ Créez `.github/workflows/deploy.yml` :
265
+
266
+ ```yaml
267
+ name: Deploy to GitHub Pages
268
+
269
+ on:
270
+ push:
271
+ branches: [main]
272
+
273
+ jobs:
274
+ deploy:
275
+ runs-on: ubuntu-latest
276
+ steps:
277
+ - uses: actions/checkout@v3
278
+ - uses: actions/setup-node@v3
279
+ with:
280
+ node-version: '18'
281
+
282
+ - run: npm install
283
+ - run: npm run build
284
+
285
+ - uses: peaceiris/actions-gh-pages@v3
286
+ with:
287
+ github_token: ${{ secrets.GITHUB_TOKEN }}
288
+ publish_dir: ./dist
289
+ ```
290
+
291
+ Push sur `main` → Site dĂ©ployĂ© automatiquement ! ✹
292
+
293
+ ### Netlify / Vercel
294
+
295
+ **Build command** : `npm run build`
296
+ **Publish directory** : `dist`
297
+
298
+ ---
299
+
300
+ ## 📚 Documentation AvancĂ©e
301
+
302
+ ### Structure du package
303
+
304
+ ```
305
+ @retro-portfolio/engine/
306
+ ├── engine/ (Code du site - copiĂ© au build)
307
+ │ ├── index.html
308
+ │ ├── style.css
309
+ │ ├── js/
310
+ │ └── admin/
311
+ ├── scripts/ (Scripts Node.js)
312
+ │ ├── build.js
313
+ │ ├── serve.js
314
+ │ └── admin.js
315
+ ├── bin/
316
+ │ └── cli.js (CLI retro-portfolio)
317
+ └── templates/ (Templates pour init)
318
+ ```
319
+
320
+ ### API de données
321
+
322
+ Format des fichiers JSON :
323
+
324
+ **data/painting.json** :
325
+ ```json
326
+ {
327
+ "items": [
328
+ {
329
+ "id": "unique-id",
330
+ "title": {
331
+ "en": "Sunset",
332
+ "fr": "Coucher de soleil"
333
+ },
334
+ "description": {
335
+ "en": "A beautiful sunset",
336
+ "fr": "Un magnifique coucher de soleil"
337
+ },
338
+ "image": "https://cloudinary.com/...",
339
+ "date": "2026-01-15"
340
+ }
341
+ ]
342
+ }
343
+ ```
344
+
345
+ **lang/en.json** :
346
+ ```json
347
+ {
348
+ "header_title": "My Portfolio",
349
+ "nav_painting": "Paintings",
350
+ "footer_copy": "© 2026 Your Name"
351
+ }
352
+ ```
353
+
354
+ ---
355
+
356
+ ## 🐛 DĂ©pannage
357
+
358
+ ### Le build échoue
359
+
360
+ ```bash
361
+ # Vérifier que les dossiers requis existent
362
+ ls -la config/ data/ lang/
363
+
364
+ # Réinstaller le package
365
+ rm -rf node_modules
366
+ npm install
367
+ ```
368
+
369
+ ### L'admin ne démarre pas
370
+
371
+ L'admin nécessite Python 3 et Flask :
372
+
373
+ ```bash
374
+ pip install flask flask-cors
375
+ ```
376
+
377
+ ### Les images ne s'affichent pas
378
+
379
+ Vérifiez que vos URLs d'images sont complÚtes (Cloudinary, etc.) ou placez-les dans `assets/`.
380
+
381
+ ---
382
+
383
+ ## đŸ€ Contribution
384
+
385
+ Ce package est open source ! Pour contribuer :
386
+
387
+ 1. Fork le repo [retro-portfolio-engine](https://github.com/YOUR_USERNAME/retro-portfolio-engine)
388
+ 2. Créez une branche feature
389
+ 3. Soumettez une Pull Request
390
+
391
+ ---
392
+
393
+ ## 📄 Licence
394
+
395
+ MIT © Alex
396
+
397
+ ---
398
+
399
+ ## 🔗 Liens
400
+
401
+ - [Documentation](https://github.com/YOUR_USERNAME/retro-portfolio-engine)
402
+ - [NPM Package](https://www.npmjs.com/package/@retro-portfolio/engine)
403
+ - [Issues](https://github.com/YOUR_USERNAME/retro-portfolio-engine/issues)
404
+ - [Exemples](https://github.com/YOUR_USERNAME/retro-portfolio-examples)
405
+
406
+ ---
407
+
408
+ **Fait avec 💜 pour la communautĂ© crĂ©ative**
package/bin/cli.js ADDED
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Retro Portfolio CLI
5
+ * Main command-line interface for the package
6
+ */
7
+
8
+ const { Command } = require('commander');
9
+ const chalk = require('chalk');
10
+ const path = require('path');
11
+ const fs = require('fs-extra');
12
+
13
+ const program = new Command();
14
+
15
+ // Import scripts
16
+ const build = require('../scripts/build');
17
+ const serve = require('../scripts/serve');
18
+ const admin = require('../scripts/admin');
19
+ const init = require('../scripts/init');
20
+
21
+ program
22
+ .name('retro-portfolio')
23
+ .description('Retro Portfolio Site Engine')
24
+ .version(require('../package.json').version);
25
+
26
+ // Init command - Create new portfolio
27
+ program
28
+ .command('init [directory]')
29
+ .description('Initialize a new portfolio with data templates')
30
+ .option('-f, --force', 'Overwrite existing files')
31
+ .action(async (directory, options) => {
32
+ try {
33
+ await init(directory || '.', options);
34
+ } catch (error) {
35
+ console.error(chalk.red('Error:'), error.message);
36
+ process.exit(1);
37
+ }
38
+ });
39
+
40
+ // Build command - Generate static site
41
+ program
42
+ .command('build')
43
+ .description('Build the static site from your data')
44
+ .option('-o, --output <dir>', 'Output directory', 'dist')
45
+ .option('-w, --watch', 'Watch for changes and rebuild')
46
+ .action(async (options) => {
47
+ try {
48
+ await build(options);
49
+ } catch (error) {
50
+ console.error(chalk.red('Error:'), error.message);
51
+ process.exit(1);
52
+ }
53
+ });
54
+
55
+ // Serve command - Local development server
56
+ program
57
+ .command('dev')
58
+ .alias('serve')
59
+ .description('Start local development server')
60
+ .option('-p, --port <number>', 'Port number', '8000')
61
+ .option('-o, --open', 'Open browser automatically')
62
+ .action(async (options) => {
63
+ try {
64
+ await serve(options);
65
+ } catch (error) {
66
+ console.error(chalk.red('Error:'), error.message);
67
+ process.exit(1);
68
+ }
69
+ });
70
+
71
+ // Admin command - Launch admin interface
72
+ program
73
+ .command('admin')
74
+ .description('Start admin interface for managing content')
75
+ .option('-p, --port <number>', 'Port number', '5001')
76
+ .option('-o, --open', 'Open browser automatically')
77
+ .action(async (options) => {
78
+ try {
79
+ await admin(options);
80
+ } catch (error) {
81
+ console.error(chalk.red('Error:'), error.message);
82
+ process.exit(1);
83
+ }
84
+ });
85
+
86
+ // Deploy command - Deploy to GitHub Pages
87
+ program
88
+ .command('deploy')
89
+ .description('Deploy site to GitHub Pages')
90
+ .option('-b, --branch <name>', 'Deployment branch', 'gh-pages')
91
+ .option('-d, --dir <path>', 'Build directory', 'dist')
92
+ .action(async (options) => {
93
+ console.log(chalk.yellow('Deploy command coming soon!'));
94
+ console.log('For now, use GitHub Actions or push dist/ manually.');
95
+ });
96
+
97
+ // Parse arguments
98
+ program.parse(process.argv);
99
+
100
+ // Show help if no command provided
101
+ if (!process.argv.slice(2).length) {
102
+ program.outputHelp();
103
+ }