bulatik
SelfBy - веб приложение, в котором пользователи могут создавать проекты и работы. Каждая работа - это часть проекта, написанная в формате md.
Этот проект не решает проблему глобального потепления. В первую очередь этот проект служит полигоном для моих первых знаний Go. Во вторую очередь этот проект решает проблему моего личного блога: он был написан на PHP, кривая архитектура, тормозил, а большая часть функций урезана. Здесь же я получаю доступ ко всем привилегиям Markdown. Они рендерятся при сохранении в HTML и выводятся на страницу. Это проще и надежнее, чем собственный велосипед.
Код почти полностью написан нейросетью. Архитектура, логика, связи и все то, как должно работать - придумано мной.
В первую очередь хотел бы рассказать про словарь внутри проекта ведь он может ввести в заблуждение.
| Термин | Определение |
|---|---|
| Работа | Пост в .md, который при сохранении преобразуется в HTML и выводится как пост |
| Проект | Точка сбора всех работ (постов) |
md в работахЭто фишка, которая относится к проектам и пользователям. Каждый пользователь после создания проекта может создать работу с названием index (/u/{username}/{projectName}/index).

Пример работы github-readme/index
Эта работа будет показываться на главной самого проекта. При этом сам проект index скрыт из общего списка работ:

Страница /u/bulatik205/github-readme с index работой
Эта же функция работает для самого пользователя. Для этого необходимо создать проект и работу /u/{username}/index/index. Проект и работа также скрываются из профиля. Их не видно другим, как проект, но видно результат в профиле у пользователя.

Страница /u/bulatik205/ с index/index проектом/работой
Важно: баг то, или фича (скорее баг, который я нашел, пока писал документацию), но нет смысла менять тип проекта на закрытый/открытый - информация о профиле покажется всё равно. Бригада issue уже выехала
В проекте используются:
| Библиотека | Назначение |
|---|---|
| go-sql-driver/mysql | Драйвер MySQL |
| golang.org/x/crypto | Хеширование паролей |
| filippo.io/edwards25519 | Криптография (зависимость crypto) |
| yuin/goldmark | Markdown → HTML |
git clone https://github.com/bulatik205/selfby.git
cd selfby
CREATE DATABASE selfby CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Создать таблицы из файла mysql/index.sql
Скопировать конфиг config/example.config.go:
cp config/example.config.go config/config.go
config.go:DBUser: getEnv("DB_USER", "root"),
DBPassword: getEnv("DB_PASSWORD", ""),
DBHost: getEnv("DB_HOST", "localhost"),
DBPort: getEnv("DB_PORT", "3306"),
DBName: getEnv("DB_NAME", ""),
ServerPort: getEnv("SERVER_PORT", "8080"),
go mod download
go run .
Приложение доступно на http://localhost:8080
├───config конфигурация
├───handlers обработчики серверной логики
│ ├───api обработчики для api
│ └───auth обработчики для login/reg
├───images статика: фото
├───js статика: js
│ ├───auth регистрация и вход
│ ├───dashboard дашборд
│ ├───editor страница редактора проектов
│ │ └───work страница редактора работ
│ ├───index главная страница
│ ├───profile профиль
│ ├───projects страница с проектами
│ ├───public-project для публичных проектов
│ ├───public-work для публичных работ
│ └───users топ пользователи
├───mysql исходный код таблиц
├───styles статика: стили
│ ├───404 HTTP 404
│ ├───auth ...
│ ├───dashboard
│ ├───editor
│ │ └───work
│ ├───index
│ ├───profile
│ ├───projects
│ ├───public-project
│ ├───public-work
│ └───users ...
├───templates статика: html
├───videos статика: видео
├───go.mod зависимости модуля
├───go.sum контрольные суммы зависимостей
└───main.go точка входа
| Имя | Соцсеть | Ссылка | Комментарий |
|---|---|---|---|
| Bulatik205 | GitHub | GitHub | |
| Bulatik205 | Website | Website | |
| Bulatik205 | Telegram | Telegram | Долгий ответ |
| SelfBy | Website | Website | Готовый проект |
| SelfBy | GitHub | GitHub | Вы здесь |