Узнайте, как потеря исходников сайта из-за отсутствия git привела к важному уроку. Сохраните свой код в репозиторий уже сегодня!
Вы когда-нибудь задумывались, где хранятся исходники вашего проекта? Если ответ «на сервере» — эта история для вас. Я потерял код своего первого сайта, потому что не использовал git. Узнайте, как этого избежать и почему репозиторий — ваша единственная страховка.
Уведомление о продлении домена пришло, и я решил не продлевать. threadkeeper.io — мой первый проект, купленный в августе 2025 года. Я создал сайт, блог, CLI и манифест. Но когда решил сохранить код, обнаружил, что его нет нигде.
Сайт был размещён на Spaceship, и я собирал его прямо в браузере. Никакого git, никакого локального репозитория. Единственная копия существовала на сервере, который должен был исчезнуть через четыре дня. Слоган сайта гласил: «Не коммитьте без контекста». Я не закоммитил вообще ничего.
Первым делом я вытащил все файлы с живого сервера: восемь страниц, блог, три поста, страницу Dr. Kahlo и приложение Ariadne Clew. Всего 19 файлов. Архив теперь публичен с SHA-256 для каждого файла: threadkeeper-archive. Теперь код закоммичен, хоть и с опозданием на год.
Когда я наконец прочитал код, первым сюрпризом стали имена файлов. В приложении Ariadne Clew было семь JavaScript-модулей: api_js.js, dom_js.js, main_js.js — в snake_case, и utils.js, theme.js, exportMarkdown.js, dragDrop.js — в camelCase. Два стиля в одной папке.
Имя dom_js.js — это «дом, js, точка js». Суффикс повторяет расширение. Я понял, откуда это: я копировал код из чата, где блок назывался dom_js, и сохранял с расширением. Файл — чек, что он был вытащен из разговора, а не создан в проекте.
Файл main_js.js начинается с шести импортов. Третий — import { getElement, getValue, ... } from './dom.js';. А на сервере файл назывался dom_js.js.
ES-модули разрешают весь граф импортов до выполнения. Один отсутствующий файл — и модуль не запускается. Все обработчики событий, которые были в main_js.js, не прикрепились. Формы, кнопки, переключатели тем — ничего не работало. Страница рендерилась идеально, но была мертва.
Вот трейс: семь из восьми запросов вернули 200, только scripts/dom.js — 404. Четыре проверки подтвердили, что модуль не выполнился. Так было как минимум одиннадцать месяцев — я датирую это по посту в блоге, где ссылался на приложение. Реальное время могло быть больше.
Легко сказать: «Я плохо программировал». Но ни один инструмент в моём стеке не поймал бы эту ошибку. Ни сборки, ни бандлера, ни линтера с проверкой импортов, ни TypeScript, ни тестов. Любой из них громко упал бы на отсутствующем импорте ещё до сервера.
Я использовал ванильный JavaScript на CDN без шага сборки. Для маленького проекта это нормально. Но плата — никто не проверяет граф импортов за вас. Я не знал об этой плате и платил одиннадцать месяцев, не замечая.
На сайте была страница для Dr. Kahlo — кастомного GPT, который я создал для ревью кода. Я дал ей вымышленную биографию: 30 лет опыта уровня FAANG, PhD по качеству кода, свободное владение Python, JavaScript, JSON и React. «Эстетика — Фрида встречает форматтер». И через абзац: «Она не льстит. Она не галлюцинирует. Она ревьюит с хирургической честностью».
Я написал это в августе 2025 года и оставляю как есть. Dr. Kahlo всё ещё работает, пережив сайт. Если хотите узнать о моих отношениях с ИИ-ассистентами в 2026-м — читайте про Breaking Build.
Положите код в репозиторий. Сегодня. Даже если код плохой — особенно если плохой. Не ради истории версий и не для рекрутеров. Потому что хостинг арендуется, а репозиторий — ваш. Однажды вы захотите вернуться и посмотреть, о чём думали, и «это было на сервере, за который я перестал платить» — грустная фраза о своей работе.
Это весь урок, и он стоит около девяноста секунд.
Перечитывая сайт, я почувствовал дистанцию. Странно читать свои тексты годичной давности: узнаёшь голос, но морщишься от артефактов. Я хотел написать пост о том, как вырос, но остановился: заметил, что собираюсь делать уверенные заявления о росте без доказательств.
Именно этого я пытаюсь избежать в своём исследовании. Clew Chronicles — лонгитюдное исследование (n=1) моих первых тринадцати месяцев разработки с ИИ (июль 2025 — август 2026). Пятьдесят семь репозиториев. Гипотезы зарегистрированы и заморожены. Две из десяти — «моя память о том, что важно, вероятно, ошибочна» и «данные должны иметь право противоречить мне».
Сорок девять репозиториев ещё не классифицированы. Этот шаг — ручное кодирование, модели не допускаются. Так что я не скажу, что изменилось. Скажу, когда будут данные, и скажу, если ошибался.
ThreadKeeper стал Ariadne Clew во время AWS-хакатона, когда проект перерос имя, описывающее только его функцию. Клубок нити Ариадны, который помог Тесею выйти из лабиринта, стал целым набором инструментов с Clew в названии.
Домен умирает на этой неделе. Идея — крупнейшая за всю историю. Старый футер гласил: «Флаг водружён 26 августа 2025». Я не планировал годовщину, но первый коммит в оригинальном репозитории датирован 20 августа 2025, и я вернулся за сайтом 20 августа 2026. Ровно двенадцать месяцев, случайно.
Я гордился тем проектом. В анонсе я написал: «Я официально запустил ThreadKeeper с рабочими снапшотами, инсайтами и функциональным TypeScript CLI. Чёрт возьми, да». Она всё ещё нравится мне. Она не знала, чего не знала, и всё равно запустилась. Флаг водружён снова. Вернусь с данными.
Прямо сейчас откройте терминал и выполните git init в папке вашего проекта, затем git add . и git commit -m "initial commit". Затем создайте репозиторий на GitHub или GitLab и запушите. Это займёт меньше пяти минут и спасёт вас от потери кода в будущем.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →