199 lines
7.8 KiB
Markdown
199 lines
7.8 KiB
Markdown
# Raiju CLI Tools
|
|
|
|
## make.php — Page Scaffolding
|
|
|
|
Generates page boilerplate files with a single command.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
# Run from project root
|
|
php cli/make.php --slug=about --lang=en [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Default | Description |
|
|
|---|---|---|
|
|
| `--slug=PATH` | *(required)* | Public page path; slashes create nested pages |
|
|
| `--lang=CODE` | `en` | Language code |
|
|
| `--type=TYPE` | `standard` | `standard` (JSON only) or `custom` (PHP + JSON) |
|
|
| `--title=TEXT` | From slug | Page title |
|
|
| `--description=TEXT` | *(empty)* | SEO meta description |
|
|
| `--hide-nav` | | Hide page from auto-discovered navigation |
|
|
| `--dry-run` | | Show output without writing files |
|
|
| `--force` | | Overwrite existing files |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Standard page — creates JSON only, front controller serves it
|
|
php cli/make.php --slug=about --lang=en --title="About Us"
|
|
|
|
# Nested SEO path → content/pages/en_products__vitamin-d.json
|
|
php cli/make.php --slug=products/vitamin-d --lang=en --title="Vitamin D"
|
|
|
|
# Custom layout page — creates PHP template + JSON
|
|
php cli/make.php --slug=services --lang=de --type=custom --title="Unsere Dienste"
|
|
|
|
# Preview what would be generated
|
|
php cli/make.php --slug=pricing --lang=en --type=custom --dry-run
|
|
|
|
# Page hidden from navigation (e.g. terms of service)
|
|
php cli/make.php --slug=terms --lang=en --hide-nav
|
|
```
|
|
|
|
### What it generates
|
|
|
|
**Standard pages** (`--type=standard`, default):
|
|
- `content/pages/{lang}_{slug}.json` — content file with heading + text section
|
|
|
|
Nested paths stay flat on disk: `/` in the public path becomes `__` in the
|
|
content key and filename (`products/vitamin-d` →
|
|
`en_products__vitamin-d.json`).
|
|
- The front controller (`includes/page.php`) serves it automatically
|
|
- Navigation auto-discovery adds it to the menu
|
|
|
|
**Custom layout pages** (`--type=custom`):
|
|
- `{lang}/{slug}.php` — PHP template with `editableText()` / `editableHtml()` calls
|
|
- `content/pages/{lang}_{slug}.json` — matching content file with hero + content keys
|
|
|
|
---
|
|
|
|
## convert.php — HTML to Raiju Converter
|
|
|
|
Converts a static HTML page into a Raiju-editable PHP template + JSON content file.
|
|
|
|
The converter's job is to preserve the source page and make content editable.
|
|
For an existing designed page, do not use conversion as a redesign pass: keep
|
|
the original CSS, JavaScript, assets, class names, layout wrappers, animation
|
|
hooks, and responsive behavior, then replace only text, images, links, and
|
|
repeaters with Raiju helpers.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
# Run from project root
|
|
php cli/convert.php <input.html> [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
| Option | Default | Description |
|
|
|---|---|---|
|
|
| `--slug=PATH` | From filename | Public page path; slashes create nested pages |
|
|
| `--lang=CODE` | `en` | Language code |
|
|
| `--title=TEXT` | From `<title>` or `<h1>` | Page title |
|
|
| `--description=TEXT` | From `<meta description>` | SEO description |
|
|
| `--dry-run` | | Show output without writing files |
|
|
| `--json-only` | | Only generate JSON, no PHP template |
|
|
| `--no-css` | | Skip CSS extraction |
|
|
| `--force` | | Overwrite existing files |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Preview what would be generated
|
|
php cli/convert.php my-page.html --dry-run
|
|
|
|
# Convert with custom slug and language
|
|
php cli/convert.php landing.html --slug=home --lang=de --title="Startseite"
|
|
|
|
# Only generate the JSON content file
|
|
php cli/convert.php about.html --json-only
|
|
|
|
# Convert without CSS extraction
|
|
php cli/convert.php page.html --slug=about --no-css
|
|
```
|
|
|
|
### What it does
|
|
|
|
1. Parses the HTML and identifies content sections (`<section>`, `<article>`, semantic `<div>`s)
|
|
2. Recognizes content elements: headings, text, images, links, blockquotes, lists
|
|
3. Detects repeating patterns (e.g. feature cards, testimonials) → editable lists
|
|
4. **Extracts CSS** from `<style>` blocks, linked local stylesheets, and inline `style` attributes
|
|
5. Generates a PHP template with `editableText()`, `editableImage()`, `editableLink()` calls
|
|
6. Generates a JSON content file with all extracted text and media
|
|
|
|
### CSS extraction
|
|
|
|
The converter preserves the visual design of the source HTML by extracting all CSS:
|
|
|
|
- **`<style>` blocks** — embedded CSS is extracted verbatim
|
|
- **Linked local stylesheets** (`<link rel="stylesheet" href="styles.css">`) — file contents are read and included
|
|
- **Inline styles** (`style="..."` attributes) — converted to named CSS classes (`.converted-style-1`, etc.) and the class is added to the element
|
|
- **External CDN stylesheets** (e.g. Google Fonts) — referenced via `$pageExternalStyles` array, auto-loaded by `header.php`
|
|
|
|
The extracted CSS is saved to `css/page-{slug}.css` and automatically linked via the `$pageStylesheet` variable in the generated template.
|
|
|
|
**After conversion**, review the CSS file against the original page. For
|
|
customer/site migrations, preserving the original visual behavior comes before
|
|
tokenization or cleanup:
|
|
|
|
- Keep original local stylesheets verbatim when possible, especially for
|
|
hand-tuned layouts, animations, image crops, gradients, and responsive rules.
|
|
- Put site-owned CSS in `css/website.css` or `css/page-{slug}.css`; do not move
|
|
customer design rules into Raiju core `css/style.css` or `css/components.css`.
|
|
- Add only minimal compatibility CSS when editable helper wrappers affect
|
|
existing selectors or spacing.
|
|
- Rename `.converted-style-*` classes or replace hardcoded values only after
|
|
screenshot comparison confirms the page still matches the source.
|
|
- Do not replace the original design system with Raiju theme variables unless
|
|
the user explicitly requested that refactor.
|
|
|
|
### After conversion
|
|
|
|
1. Review the generated files (template, JSON, CSS) and adjust as needed
|
|
2. The page appears in navigation automatically via auto-discovery. To control ordering or labels, add it to `includes/nav-config.php` (`$PAGE_MAPPING` + `$NAV_ITEMS`)
|
|
3. Copy images to `assets/images/` and update paths if needed
|
|
4. Test with `php -S localhost:3000 router.php`
|
|
5. Run the original and converted pages locally and compare screenshots for the
|
|
hero, every section, footer, mobile breakpoints, hover/open states, and
|
|
scroll/animation states. Treat visual drift as a conversion bug.
|
|
|
|
---
|
|
|
|
## backup.php — Site Backup Runner
|
|
|
|
Creates full-site ZIP backups for cron jobs and ad-hoc maintenance. The dashboard writes backup policy to `content/settings.json`; the CLI reads the same settings. If a hosting plan does not allow server cron jobs, the dashboard can also generate a secret web-cron URL for external schedulers.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
# Run from project root
|
|
php cli/backup.php --action=run
|
|
```
|
|
|
|
### Actions
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `run` | Create one full-site ZIP, apply retention, then upload enabled remote targets |
|
|
| `prune` | Apply retention and storage limits without creating a new backup |
|
|
| `status` | Print schedule, retention, storage, and remote-target status |
|
|
| `list` | List stored backup ZIP files |
|
|
| `upload-remote` | Upload an existing backup ZIP to enabled remote targets |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Nightly cron job in shell/cPanel. In Plesk, prefer "Run a PHP script":
|
|
# script path: /path/to/site/cli/backup.php
|
|
# arguments: --action=run
|
|
0 3 * * * php /path/to/site/cli/backup.php --action=run
|
|
|
|
# Web-cron fallback for external schedulers such as cron-job.org or EasyCron:
|
|
# https://example.com/api/backup-cron.php?token=<secret-token>
|
|
|
|
# Manual protected snapshot
|
|
php cli/backup.php --action=run --tier=manual
|
|
|
|
# Local ZIP only, no remote upload
|
|
php cli/backup.php --action=run --skip-remote
|
|
|
|
# Retry remote upload for an existing backup
|
|
php cli/backup.php --action=upload-remote --file=example.com-backup-2026-05-02_030000-daily.zip
|
|
```
|
|
|
|
Remote targets supported by the dashboard: Dropbox, Google Drive, Microsoft OneDrive, SFTP/SCP, S3-compatible storage, and WebDAV. Dropbox, Google Drive, and OneDrive include browser-based OAuth connect flows for refresh-token based cron uploads. Remote uploads are placed in a per-site subfolder below the configured remote path.
|