Роботи учнів: живі демонстрації, вихідний код і критерії перевірки
Планова ціль пілотної групи з 10 ветеранів — 10 особистих сайтів, 10 вебзастосунків «Мій день» і 10 пакетів контенту. Кожен учень демонструє власні роботи та самостійно вносить контрольну правку під час фінального захисту (Урок 33).
Сторінка складається з двох файлів у папці personal-site: розмітки index.html та таблиці стилів styles.css. Вона коректно перебудовується між широким екраном комп’ютера (960 px) та екраном смартфона (360 px) і має чітке виділення елементів під час навігації клавішею Tab.
Одна сторінка у двох вікнах
960 px · Широкий екран комп’ютера
360 px · Екран телефона
Справжні знімки готового прикладу в Microsoft Edge, 30.10.2026. Ширина вікон — 960 і 360 px; показано фрагменти сторінки.
personal-site/index.html
<!doctype html>
<html lang="uk">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Олена: мої маленькі проєкти">
<title>Олена: мої маленькі проєкти</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="page">
<header><nav aria-label="Розділи сторінки">
<a href="#about">Про мене</a>
<a href="#projects">Проєкти</a>
<a href="#contact">Контакт</a>
</nav></header>
<main>
<h1>Олена</h1>
<p class="intro">Люблю книги, прогулянки й порядок удома. Вчуся перетворювати невеликі задуми на готові речі.</p>
<section id="about">
<h2>Про мене</h2>
<p>На цій сторінці збираю свої перші цифрові роботи. Починаю з простого: зрозуміла сторінка, три щоденні справи й коротке відео.</p>
</section>
<section id="projects">
<h2>Проєкти</h2>
<ul class="projects">
<li><h3>Особистий сайт</h3><p>Розповідаю про свої інтереси й навчальні роботи.</p></li>
<li><h3>Мій день</h3><p>Створюю список із трьох справ і лічильником виконаного.</p></li>
<li><h3>Порядок на столі</h3><p>Планую відео на 30–45 секунд про підготовку робочого місця.</p></li>
</ul>
</section>
<section id="contact" class="contact">
<h2>Контакт</h2>
<p><a href="mailto:[email protected]">Написати Олені</a></p>
<p>Навчальна адреса: [email protected]. Перед публікацією замініть її власною або приберіть посилання.</p>
</section>
</main>
<footer>Вигаданий навчальний приклад. Ви можете замінити текст своїм.</footer>
</div>
</body>
</html>
Вебзастосунок «Мій день» (PWA з підтримкою офлайн)
Застосунок навчає розділяти розмітку (index.html), оформлення (styles.css), логіку збереження стану (app.js), паспорт встановлення на телефон (manifest.webmanifest) і фоновий кеш для роботи без інтернету (sw.js).
Мій день
Три невеликі справи на сьогодні.
Виконано 0 з 3
my-day/app.js
"use strict";
const TEXT = {
"progress": "Виконано {n} з 3",
"save": "Позначки збережено в цьому браузері.",
"blocked": "Позначки працюють, але не збереглися. Дозвольте сайту зберігати дані й спробуйте ще раз.",
"invalid": "Збережені дані пошкоджені. Починаємо з порожнього списку.",
"preview": "Попередній перегляд файлу. Збереження й офлайн перевіряйте за вебадресою.",
"preparing": "Готуємо офлайн-копію…",
"ready": "Готово до роботи офлайн.",
"off": "Ви офлайн. Справи доступні.",
"unavailable": "Офлайн-копія не готова. Підключіться до інтернету й відкрийте сторінку знову."
};
const boxes = [...document.querySelectorAll("input[type=checkbox]")];
const counter = document.querySelector("#counter");
const saved = document.querySelector("#saved");
const connection = document.querySelector("#connection");
// Різні папки на одному сайті мають окремі позначки.
const folder = new URL("./", location.href).pathname;
const key = "my-day:v1:" + folder;
const webAddress = ["http:", "https:"].includes(location.protocol);
let offlineReady = false;
function showCount() {
const count = boxes.filter(box => box.checked).length;
counter.textContent = TEXT.progress.replace("{n}", count);
}
function saveChoices() {
if (!webAddress) { saved.textContent = TEXT.preview; return; }
try {
const done = boxes.map(box => box.checked);
localStorage.setItem(key, JSON.stringify(done));
saved.textContent = TEXT.save;
saved.classList.remove("warning");
} catch {
saved.textContent = TEXT.blocked;
saved.classList.add("warning");
}
}
function loadChoices() {
if (!webAddress) { saved.textContent = TEXT.preview; return; }
try {
const raw = localStorage.getItem(key);
if (raw !== null) {
const done = JSON.parse(raw);
if (!Array.isArray(done) || done.length !== 3 ||
!done.every(value => typeof value === "boolean")) {
throw new Error("Invalid saved choices");
}
boxes.forEach((box, index) => { box.checked = done[index]; });
}
saved.textContent = TEXT.save;
} catch (error) {
saved.textContent = error.name === "SecurityError"
? TEXT.blocked : TEXT.invalid;
saved.classList.add("warning");
}
}
boxes.forEach(box => box.addEventListener("change", () => {
showCount();
saveChoices();
}));
document.querySelector("#reset").addEventListener("click", () => {
boxes.forEach(box => { box.checked = false; });
showCount();
saveChoices();
});
function showConnection() {
connection.textContent = offlineReady
? (navigator.onLine ? TEXT.ready : TEXT.off)
: (webAddress ? TEXT.preparing : TEXT.preview);
}
async function prepareOffline() {
if (!webAddress || !("serviceWorker" in navigator)) {
connection.textContent = webAddress ? TEXT.unavailable : TEXT.preview;
return;
}
try {
// Наявний обробник може віддавати файли без інтернету.
const previous = await navigator.serviceWorker.getRegistration();
if (!previous) await navigator.serviceWorker.register("./sw.js");
else navigator.serviceWorker.register("./sw.js").catch(() => {});
await navigator.serviceWorker.ready;
offlineReady = true;
showConnection();
} catch {
connection.textContent = TEXT.unavailable;
}
}
loadChoices();
showCount();
showConnection();
window.addEventListener("online", showConnection);
window.addEventListener("offline", showConnection);
prepareOffline();
Пакет медіаконтенту: YouTube, карусель Instagram та TikTok
Приклад першого слайда
01 / 05
02 / 05
03 / 05
04 / 05
05 / 05
Навчальний макет, не знімок Canva. У папці content/carousel архіву прикладів є всі п’ять PNG розміром 1080 × 1080 px.
КОД ОПОРУ (Shionika Academy) — Відповіді на ключові запитання
Для кого створена гібридна IT/AI-школа «КОД ОПОРУ»?
Програма та книга «ШІ на практиці: Перший сайт, застосунок і контент» розроблені для ветеранів України та дорослих початківців без попереднього досвіду програмування. Навчання поєднує практику в обладнаному класі на 10 місць із покроковим друкованим та онлайн-конспектом.
Які три роботи входять у випускне портфоліо кожного учасника?
Кожен із 10 учасників пілота створює й захищає: 1) власний адаптивний сайт-візитку на GitHub Pages (уроки 11–14), 2) мобільний вебзастосунок «Мій день» (PWA з підтримкою офлайн-роботи, уроки 15–18), 3) пакет контенту з субтитрами для YouTube, Instagram і TikTok (уроки 19–28).
З чого складається кошторис пілота $37,377.24 на 4 місяці?
Кошторис (перевірено 01.11.2026) охоплює: обладнання 10 учнівських і 2 службових місць та резервне живлення 5.12 кВт·год ($14,280), команду з менеджера й викладача та оренду класу на 4 місяці ($12,960), іменні доступи ChatGPT Plus/Codex, Claude Pro, Google AI Pro/Antigravity та хостинг ($3,258.76), ліцензії Windows 11 FPP і практикум публікації ($2,780), податковий запас і резерв 10% ($4,098.48).