Личный блог-портфолио. Статический сайт на Vite + React + TypeScript — учебные работы по семестрам со ссылками на Google Drive и локальным оффлайн-fallback.
Деплой: https://adamen-blog.vercel.app
React · TypeScript · Vite · React Router · SCSS · MUI
git clone https://github.com/paniccaaa/AdamenBlog.git
cd AdamenBlog
npm install
npm run devОткрыть http://localhost:5173
- Импортировать репозиторий в Vercel
- Framework Preset: Vite
- Build Command:
npm run build - Output Directory:
dist
vercel.json уже настроен для SPA-роутинга.
Папка public/works/ содержит ~600 МБ исходных файлов работ и не включена в репозиторий (.gitignore).
Без неё сайт работает полностью — ссылки ведут на Google Drive. Папка нужна только для оффлайн-доступа: если сервер запущен локально без интернета, FileLink автоматически открывает файл из public/works/.
Все файлы хранятся в общей папке Google Drive:
Структура папок:
works/
1 курс/
1 семестр/
2 семестр/
2 курс/
3 семестр/
4 семестр/
3 курс/
5 семестр/
6 семестр/
4 курс/
7 семестр/
8 семестр/
При добавлении новых файлов — загружать в соответствующую папку семестра на Drive. После загрузки обновить ссылки в src/content/posts/N.md (см. раздел «Формат ссылок» ниже).
Чтобы получить архив works/ для оффлайн-доступа — свяжитесь:
- Telegram: @paniccaaa
- Email: semaadamenko1@gmail.com
После получения — распаковать в public/works/.
src/content/
posts/ # Посты по семестрам (2.md = 1 сем, 3.md = 2 сем, ...)
structure.json # Навигация: курсы → семестры → postId
Каждая ссылка хранит Drive URL и локальный fallback в одной строке:
[Метка](https://drive.google.com/file/d/FILE_ID/view "/works/N%20курс/Nсем/папка/файл.ext")- Онлайн → открывается Drive
- Оффлайн + localhost → открывается локальный файл
URL-кодирование: пробелы → %20, ( → %28, ) → %29.
- Создать
src/content/posts/N.md:
---
id: N
title: "N Семестр"
---
## Название дисциплины
- [ЛР №1](https://drive.google.com/file/d/FILE_ID/view "/works/путь/к/файлу.pdf")- Добавить запись в
src/content/structure.json:
{
"id": "d-new",
"title": "N Семестр",
"postId": N,
"order": 1
}