Весь сайт в двух файлах

Без возни с сервером и плагинами: только программа Eile и база SQLite. PHP и MySQL ставить не нужно, а сайт с менеджером запускается одной командой.

curl -fsSL https://github.com/a-sharapov/eile/releases/latest/download/install.sh | bash

Linux и macOS, x64 и arm64 v0.1.0-alpha.9.1 альфа GPL-3.0

На снимках демо-блог из каркаса blog (cms new blog).

Где обычно уходит время

Сам сайт делается быстро. Время уходит на всё вокруг: сервер, плагины, переезды и правки по звонку пользователя. Вот что Eile берёт на себя.

Что заменяют два файла

Обычный сайт держится на веб-сервере, PHP, базе данных и десятке плагинов, и у каждого свои обновления и поломки. В Eile весь сайт это исполняемый файл и база SQLite. Только их и нужно обновлять, переносить и копировать.

Обычно

типичный сайт на PHP-CMS

  1. Веб-сервер и его настройка
  2. PHP с расширениями
  3. Сервер базы данных
  4. Сама CMS
  5. Плагин кэша
  6. Плагин SEO и карты сайта
  7. Плагин форм
  8. Плагин резервных копий
  9. Cron для фоновых задач
  10. Certbot для HTTPS

У каждого слоя свои обновления, настройки и способы сломаться.

Eile

весь сайт

cmsисполняемый файл
сервер, менеджер, компилятор Svelte, миграции, HTTPS
site.dbбаза SQLite
страницы, шаблоны, медиа, пользователи, заявки

cms backup copy.db делает копию всего сайта одним файлом. Для переезда нужно скопировать два файла.

Быстрый сайт без плагина кэша

Не нужно подбирать кэш, CDN и сжатие. Страницу сервер отдаёт готовым HTML из памяти, кэш сбрасывается ровно там, где что-то изменилось, а JavaScript попадает на страницу, только если без него не обойтись.

Замер на сайте из 3000 страниц: медиана (p50), время сервера без сети. Шкала логарифмическая. Как мерили: docs/roadmap.md

Эта страница тоже на Eile Замер вашего браузера, прямо сейчас.

HTML
…
скрипты островов
…
ответ сервера с учётом сети
…
Двухфазный кэш
Страница целиком лежит в памяти, а живые места (формы, корзина) дорисовываются на каждом запросе.
Точный сброс
Правка страницы или компонента сбрасывает только те страницы, которые от них зависят.
ETag, br и gzip
Сжатые копии готовятся заранее, а повторный визит получает 304 без тела.
JavaScript только у островов
Страница без островов уходит без единого скрипта. Здесь четыре острова (копирование, меню, ролик и замер выше) и строка в шапке, которая помнит выбранную тему.

Пользователь правит сам, а любую правку можно откатить

Весь сайт виден деревом, как он вложен. Текст собирается из блоков, картинки берутся из медиатеки, страница выходит сразу или по расписанию. Если правка не удалась, история вернёт любую версию одной кнопкой.

Обзор сайта в менеджере: все страницы в таблице, где адрес, шаблон, меню и публикацию можно править прямо в строке Обзор сайта в менеджере: все страницы в таблице, где адрес, шаблон, меню и публикацию можно править прямо в строке
Дерево страниц
id у каждой страницы, перетаскивание мышью и курсив у черновиков.
Текст блоками
Абзацы, заголовки и картинки вперемешку с компонентами; форма параметров строится сама.
Публикация по расписанию
Страница выйдет и снимется сама в назначенный час.
История правок
Сравнение версий по словам и возврат любой из них одной кнопкой.
Быстрый переход
Ctrl K ведёт к любой странице, элементу или файлу в пару нажатий.
Медиатека
Уменьшенные копии картинок для разных экранов делаются сами, а описание для alt подставляется при вставке.

Вёрстка без сборки и деплоя

Шаблоны пишутся на обычном Svelte и правятся прямо в браузере. Сохранили, и сайт уже другой: без npm, сборщика и выкладки. Шаблон с ошибкой не сохранится, поэтому опечатка не положит сайт.

Blog шаблон
<script>
  import Layout from '$components/Layout';
  import { link, listing } from '$core';

  let { page, site } = $props();
  const posts = listing(page.id, { perPage: 10 });
</script>

<Layout {page}>
  <h1>{page.longTitle || page.title}</h1>
  {#each posts.items as post (post.id)}
    <a href={link(post.id)}>{post.title}</a>
  {/each}
  <p>{site.custom.phone}</p>
</Layout>
Правка видна сразу
Шаблоны и компоненты компилируются при сохранении, без сборки и деплоя.
Ошибка не роняет сайт
Если код не компилируется, сохранение отклоняется с указанием места ошибки, а сайт работает на прежней версии.
JavaScript по требованию
Страница уходит чистым HTML. Компонент-остров гидрируется в браузере, только если его так подключили.

Черновик текста по паре слов

Пустое поле больше не держит работу. Палочка у поля пишет черновик заголовка, описания, текста страницы или даже шаблона на Svelte. Напишите, что нужно, посмотрите вариант и вставьте его или попросите другой.

Окно «Сгенерировать с ИИ» в редакторе шаблона: просьба добавить кнопку записи на замер Окно «Сгенерировать с ИИ» в редакторе шаблона: просьба добавить кнопку записи на замер
  1. Нажмите палочку у поля или Alt+I.
  2. Напишите пару слов: «короче», «анонс в одно предложение», «добавь кнопку записи».
  3. Посмотрите вариант и нажмите «Вставить» или «Ещё вариант».
Тексты и код
Заголовки, описания, текст страницы, а ещё шаблоны, компоненты и плагины.
Знает ваш сайт
С просьбой уходят название и язык сайта, поле и где оно стоит, поэтому хватает пары слов.
Ваша модель
DeepSeek, OpenAI или любая модель с таким же API, хоть локальная. Ключ хранится только на сервере и в копию сайта не попадает.
Ваши правила
Тон и правила текстов задаются один раз в настройках и уходят с каждой просьбой.

Всё, ради чего ставят плагины, уже внутри

SEO и находимость для ИИ, формы с заявками, поиск, резервные копии, HTTPS и переводы. Их не нужно подбирать, совмещать и обновлять по отдельности: они приходят и обновляются вместе с Eile.

Обычно ставят В Eile

Находимость

плагин SEO canonical, Open Graph и JSON-LD без настройки
плагин карты сайта sitemap.xml и robots.txt с правилами для ИИ-ботов
обычно этого нет llms.txt и Markdown-версия каждой страницы для ИИ
плагин редиректов старые адреса сами ведут на новые после переименования

Формы и заявки

плагин форм форма пишется обычной HTML5-разметкой, заявки приходят в менеджер со статусами
SMTP-плагин и бот уведомления в Telegram и на почту
капча защита от спама без капчи: ловушка, печать и лимит

Поиск по сайту

плагин поиска или внешний сервис поиск понимает русские окончания («книги» находят «книгу») и подсвечивает отрывки

Спокойствие владельца

плагин версий история правок со сравнением и возвратом версии
плагин копий и cron автокопии всего сайта по расписанию
проверка ссылок вручную диагностика: битые ссылки, страницы без описания, картинки без alt

Сервер

Certbot и прокси HTTPS сам, через Let’s Encrypt и без прокси
обновление файлов по FTP cms update скачивает новую версию и сверяет SHA256
сервис мониторинга сообщения о сбоях приходят в Telegram и на почту

Языки

плагин мультиязычности ветки сайта на разных языках и словари переводов в менеджере

Первый сайт уже сегодня

Готовый сайт разворачивается одной командой: блог, портфолио, сайт компании, витрина или магазин.

  1. Установить

    curl -fsSL …/install.sh | bash

    Скрипт выберет сборку под систему, сверит SHA256 и положит cms в PATH.

  2. Развернуть сайт

    cms new blog --db site.db

    Каркасы: blog, portfolio, company, showcase, shop. Без каркаса получится пустая база с приветствием.

  3. Запустить

    cms --db site.db

    Сайт и менеджер откроются на localhost:8080. При первом запуске сервер напечатает ссылку, чтобы создать администратора.

Подробно и по шагам, от пустой папки до сайта в интернете: Кукбук

curl -fsSL https://github.com/a-sharapov/eile/releases/latest/download/install.sh | bash

Linux и macOS, x64 и arm64 v0.1.0-alpha.9.1 альфа GPL-3.0

Это альфа-версия: делать сайты уже можно, но до 1.0 возможны несовместимые изменения. Перед обновлением сделайте cms backup.