Веб-читалка психологічного трилера «Відтінки болю» із адмін-панеллю.
БД: Google Firebase Firestore.
new/
├── netlify/
│ └── functions/
│ ├── _firebase.js — ініціалізація Firebase Admin SDK
│ ├── chapters.js — API: GET/POST/PUT/DELETE /api/chapters
│ └── characters.js — API: GET/POST/PUT/DELETE /api/characters
├── public/
│ ├── index.html — головна сторінка читача
│ ├── styles.css — стилі
│ ├── script.js — логіка читача
│ ├── admin.html — адмін-панель (/admin.html)
│ ├── admin.js — логіка адмін-панелі
│ └── img/ — ілюстрації персонажів
├── data/ — початкові JSON (для імпорту у Firebase)
│ ├── chapters.json
│ └── characters.json
├── netlify.toml
└── package.json
- Перейди на console.firebase.google.com
- Створи новий проект (або використай існуючий)
- Firestore Database → Create database → Production mode
- Project Settings → Service accounts → Generate new private key → скачай JSON
- Відкрий скачаний JSON, скопіюй весь вміст (це буде
FIREBASE_SERVICE_ACCOUNT)
- Push проект на GitHub / GitLab
- Підключити репозиторій → New site from Git
- Build command: (порожньо або
echo ok) - Publish directory:
public - Functions directory:
netlify/functions - Site settings → Environment variables → додати:
| Змінна | Значення |
|---|---|
ADMIN_TOKEN |
ваш секретний пароль для адміну |
FIREBASE_SERVICE_ACCOUNT |
весь JSON з Firebase service account (в один рядок) |
Щоб перетворити JSON в один рядок для Netlify:
cat serviceAccount.json | jq -c .
або просто вставте весь текст JSON у поле — Netlify зберігає його правильно.
Файли data/chapters.json і data/characters.json містять всі поточні дані.
Щоб завантажити їх у Firestore, запусти скрипт:
node scripts/seed.js(або додай вручну через Firebase Console → Firestore)
URL: https://ваш-сайт.netlify.app/admin.html
Вводьте ADMIN_TOKEN в поле пароля.
- Розділи — додавання, редагування, видалення
- Персонажі — CRUD для персонажів
npm installСтвори файл .env у корені:
ADMIN_TOKEN=test123
FIREBASE_SERVICE_ACCOUNT={"type":"service_account","project_id":"...весь JSON..."}
npx netlify devСайт: http://localhost:8888
Адмін: http://localhost:8888/admin.html