secubox-openwrt/QUICK-START.md
CyberMind-FR 8e53825ad5 release: v0.2.2 - Design System v0.3.0 & Comprehensive Documentation
🎨 Design System v0.3.0 (Demo-inspired)
- New dark palette: #0a0a0f, #6366f1→#8b5cf6 gradients
- Typography: Inter + JetBrains Mono
- Compact stats grid (130px min)
- Gradient text effects with background-clip
- Sticky navigation tabs
- Enhanced card borders and hover effects

📚 Comprehensive Documentation Suite
- DEVELOPMENT-GUIDELINES.md (33KB, 900+ lines)
  - 9 major sections: Design, Architecture, RPCD, ACL, JS, CSS, Errors, Validation, Deployment
  - Complete code templates and best practices
  - Common error diagnostics and solutions
- QUICK-START.md (6.4KB)
  - 8 critical rules for immediate reference
  - Quick code templates
  - Error quick fixes table
- deploy-module-template.sh (8.1KB)
  - Standardized deployment with automatic backup
  - Permission fixes, cache clearing, verification
- Updated CLAUDE.md, README.md with documentation index
- Updated .claude/README.md to v2.0

🔄 Version Updates
- luci-app-secubox: 0.1.2 → 0.2.2
- luci-app-system-hub: 0.1.1 → 0.2.2
- Updated all version strings (api.js, overview.js, CSS files)

🎯 CSS Enhancements
- common.css: Complete rewrite with demo palette
- overview.css: Dashboard header with gradient
- services.css: Updated version to 0.2.2
- components.css: Updated version to 0.2.2

🔧 Critical Rules Documented
1. RPCD naming: file = ubus object (luci. prefix)
2. Menu path = view file location
3. Permissions: 755 (RPCD), 644 (CSS/JS)
4. ALWAYS run validate-modules.sh
5. CSS variables only (no hardcode)
6. Dark mode mandatory
7. Typography: Inter + JetBrains Mono
8. Gradients: --sh-primary → --sh-primary-end

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 18:55:19 +01:00

6.4 KiB

Quick Start Guide - SecuBox Development

Aide-mémoire rapide pour développement

Pour le guide complet, voir DEVELOPMENT-GUIDELINES.md


⚠️ RÈGLES CRITIQUES (À NE JAMAIS OUBLIER)

1. RPCD Script Naming

# Le nom DOIT correspondre EXACTEMENT à l'objet ubus
JavaScript: object: 'luci.system-hub'
Fichier:   root/usr/libexec/rpcd/luci.system-hub  ✅

# Sinon: Error -32000 "Object not found"

2. Menu Path Matching

Menu JSON: "path": "system-hub/overview"
Fichier:   view/system-hub/overview.js  

# Sinon: HTTP 404 Not Found

3. Permissions Files

# RPCD scripts = exécutable
chmod 755 root/usr/libexec/rpcd/luci.*

# CSS/JS = lecture seule
chmod 644 htdocs/**/*.{css,js}

# Sinon: 403 Forbidden ou script non exécuté

🎨 Design System Essentials

Color Palette (Dark Mode)

--sh-bg-primary: #0a0a0f;      /* Fond principal */
--sh-bg-card: #12121a;         /* Cartes */
--sh-border: #2a2a35;          /* Bordures */
--sh-primary: #6366f1;         /* Indigo */
--sh-primary-end: #8b5cf6;     /* Violet */

Fonts

/* Général */
font-family: 'Inter', sans-serif;

/* Valeurs numériques */
font-family: 'JetBrains Mono', monospace;

Component Classes

.sh-page-header         /* Page header */
.sh-page-title          /* Title (gradient text) */
.sh-stat-badge          /* Stat badge (130px min) */
.sh-card                /* Card (gradient border on hover) */
.sh-btn-primary         /* Button (gradient) */
.sh-filter-tab          /* Filter tab */

Grid Sizes

/* Stats */
grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));

/* Metrics */
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));

/* Info cards */
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));

🔧 Common Commands

Validation

# Valider TOUT avant commit
./secubox-tools/validate-modules.sh

# JSON
jsonlint file.json

# Shell
shellcheck root/usr/libexec/rpcd/*

Build

# Build local
./secubox-tools/local-build.sh build luci-app-module-name

# Build OpenWrt SDK
make package/luci-app-module-name/compile V=s

Deploy

# Copier fichiers
scp file.js root@192.168.8.191:/www/luci-static/resources/

# Fix permissions
ssh root@192.168.8.191 "chmod 644 /www/luci-static/resources/**/*.css"

# Clear cache + restart
ssh root@192.168.8.191 "rm -f /tmp/luci-indexcache /tmp/luci-modulecache/* && /etc/init.d/rpcd restart && /etc/init.d/uhttpd restart"

Debug

# Test RPCD
ssh root@router "ubus list | grep luci.module"
ssh root@router "ubus call luci.module-name getStatus"

# Check files
ssh root@router "ls -la /www/luci-static/resources/view/module-name/"

# Logs
ssh root@router "logread | grep -i error"

🚨 Common Errors & Quick Fixes

Error Quick Fix
-32000 Object not found Rename RPCD file to match ubus object
404 View not found Fix menu path to match file location
403 Forbidden CSS chmod 644 *.css
[object HTMLButtonElement] Remove array wrapper: E('div', {}, renderButtons())
Styles not updating Clear browser cache (Ctrl+Shift+R) + mode privé

📋 Pre-Commit Checklist

  • ./secubox-tools/validate-modules.sh
  • RPCD name = ubus object name
  • Menu path = view file path
  • Permissions: 755 (RPCD), 644 (CSS/JS)
  • JSON valide (jsonlint)
  • CSS: variables utilisées (pas hardcode)
  • CSS: dark mode supporté
  • JS: gestion d'erreur sur API calls
  • Version incrémentée (PKG_VERSION)

📁 File Structure Template

luci-app-<module>/
├── Makefile
├── htdocs/luci-static/resources/
│   ├── view/<module>/
│   │   └── overview.js
│   └── <module>/
│       ├── api.js
│       ├── common.css
│       └── overview.css
└── root/
    ├── usr/libexec/rpcd/
    │   └── luci.<module>        ⚠️ MUST match ubus object!
    └── usr/share/
        ├── luci/menu.d/
        │   └── luci-app-<module>.json
        └── rpcd/acl.d/
            └── luci-app-<module>.json

🎯 Quick Code Templates

RPCD Script

#!/bin/sh
case "$1" in
    list)
        echo '{"getStatus": {}, "getHealth": {}}'
        ;;
    call)
        case "$2" in
            getStatus)
                printf '{"enabled": true}\n'
                ;;
        esac
        ;;
esac

View (JavaScript)

'use strict';
'require view';
'require <module>/api as API';

return view.extend({
    load: function() {
        return API.getStatus();
    },
    render: function(data) {
        return E('div', { 'class': 'sh-page-header' }, [
            E('h2', { 'class': 'sh-page-title' }, 'Title')
        ]);
    },
    handleSaveApply: null,
    handleSave: null,
    handleReset: null
});

Page Header

E('div', { 'class': 'sh-page-header' }, [
    E('div', {}, [
        E('h2', { 'class': 'sh-page-title' }, [
            E('span', { 'class': 'sh-page-title-icon' }, '🎯'),
            'Page Title'
        ]),
        E('p', { 'class': 'sh-page-subtitle' }, 'Description')
    ]),
    E('div', { 'class': 'sh-stats-grid' }, [
        E('div', { 'class': 'sh-stat-badge' }, [
            E('div', { 'class': 'sh-stat-value' }, '92'),
            E('div', { 'class': 'sh-stat-label' }, 'Score')
        ])
    ])
])

Card with Gradient Border

E('div', { 'class': 'sh-card sh-card-success' }, [
    E('div', { 'class': 'sh-card-header' }, [
        E('h3', { 'class': 'sh-card-title' }, [
            E('span', { 'class': 'sh-card-title-icon' }, '⚙️'),
            'Card Title'
        ])
    ]),
    E('div', { 'class': 'sh-card-body' }, [
        // Content
    ])
])

🌐 Test URLs

SecuBox Dashboard:
https://192.168.8.191/cgi-bin/luci/admin/secubox

System Hub:
https://192.168.8.191/cgi-bin/luci/admin/secubox/system/system-hub

TOUJOURS tester en mode privé (Ctrl+Shift+N) après deploy!


📚 Documentation


Version: 1.0.0 | Date: 2025-12-26