diff --git a/assets/css/app.css b/assets/css/app.css
index 13994e5..0efb0eb 100644
--- a/assets/css/app.css
+++ b/assets/css/app.css
@@ -1,6 +1,7 @@
@import "./core_components.css";
@import "./flash.css";
@import "./admin.css";
+@import "./home.css";
:root {
--bg: #13151a;
diff --git a/assets/css/home.css b/assets/css/home.css
new file mode 100644
index 0000000..2976669
--- /dev/null
+++ b/assets/css/home.css
@@ -0,0 +1,16 @@
+.service {
+ margin-top: 28px;
+}
+
+.service h3 {
+ margin-bottom: 8px;
+}
+
+.service .link {
+ color: var(--accent);
+}
+
+.service svg {
+ width: 16px;
+ height: 16px;
+}
diff --git a/lib/comfycamp_web.ex b/lib/comfycamp_web.ex
index 61f4c25..6fe74a0 100644
--- a/lib/comfycamp_web.ex
+++ b/lib/comfycamp_web.ex
@@ -89,6 +89,7 @@ defmodule ComfycampWeb do
import ComfycampWeb.Flash
import ComfycampWeb.Gettext
import ComfycampWeb.NavBar
+ import ComfycampWeb.Home
# Shortcut for generating JS commands
alias Phoenix.LiveView.JS
diff --git a/lib/comfycamp_web/components/home.ex b/lib/comfycamp_web/components/home.ex
new file mode 100644
index 0000000..7fc1374
--- /dev/null
+++ b/lib/comfycamp_web/components/home.ex
@@ -0,0 +1,31 @@
+defmodule ComfycampWeb.Home do
+ @moduledoc """
+ Components for the home page.
+ """
+ use Phoenix.Component
+ import ComfycampWeb.Icons
+
+ @doc """
+ A component representing one service, like mastodon or nextcloud.
+ """
+ attr :name, :string, required: true
+ attr :domain, :string, required: true
+ attr :description, :string, required: true
+ attr :enable_link, :boolean, required: false, default: true
+
+ def service(assigns) do
+ ~H"""
+
+ """
+ end
+end
diff --git a/lib/comfycamp_web/components/icons/arrow_top_right_on_square_icon.svg.heex b/lib/comfycamp_web/components/icons/arrow_top_right_on_square_icon.svg.heex
new file mode 100644
index 0000000..6439404
--- /dev/null
+++ b/lib/comfycamp_web/components/icons/arrow_top_right_on_square_icon.svg.heex
@@ -0,0 +1,13 @@
+
diff --git a/lib/comfycamp_web/controllers/main_controller.ex b/lib/comfycamp_web/controllers/home_controller.ex
similarity index 75%
rename from lib/comfycamp_web/controllers/main_controller.ex
rename to lib/comfycamp_web/controllers/home_controller.ex
index 2b3badb..0bf61e6 100644
--- a/lib/comfycamp_web/controllers/main_controller.ex
+++ b/lib/comfycamp_web/controllers/home_controller.ex
@@ -1,4 +1,4 @@
-defmodule ComfycampWeb.MainController do
+defmodule ComfycampWeb.HomeController do
use ComfycampWeb, :controller
def index(conn, _params) do
diff --git a/lib/comfycamp_web/controllers/home_html.ex b/lib/comfycamp_web/controllers/home_html.ex
new file mode 100644
index 0000000..6d7d55d
--- /dev/null
+++ b/lib/comfycamp_web/controllers/home_html.ex
@@ -0,0 +1,70 @@
+defmodule ComfycampWeb.HomeHTML do
+ @moduledoc """
+ This module contains pages rendered by HomeController.
+ """
+ use ComfycampWeb, :html
+
+ def index(assigns) do
+ ~H"""
+
+
Уютный домик
+
+
+ У меня есть несколько проектов, запущенных на домашнем сервере.
+ Я буду рад, если они будут полезны другим людям.
+
+
+
+ Создайте аккаунт на этом сайте, чтобы получить доступ к остальным сервисам.
+
+
+
+ Не стоит ожидать большой надёжности, однако я прикладываю все усилия,
+ чтобы сервисы были доступны 24/7.
+
+
+
- Иван, администратор comfycamp.space
+
+
Доступные сервисы
+
+ <.service
+ name="Mastodon"
+ domain="m.comfycamp.space"
+ description="Микроблоги с поддержкой fediverse."
+ />
+
+ <.service
+ name="Nextcloud"
+ domain="nc.comfycamp.space"
+ description="Облако, календарь, задачи."
+ />
+
+ <.service
+ name="Forgejo"
+ domain="git.comfycamp.space"
+ description="Хостинг для git-проектов."
+ />
+
+ <.service
+ name="XMPP"
+ domain="xmpp.comfycamp.space"
+ description="Проверенный временем протокол для обмена сообщениями."
+ enable_link={false}
+ />
+
+ <.service
+ name="Matrix"
+ domain="matrix.comfycamp.space"
+ description="Современный протокол для общения."
+ enable_link={false}
+ />
+
+ <.service
+ name="Fresh RSS"
+ domain="freshrss.comfycamp.space"
+ description="Сервис для чтения RSS лент."
+ />
+
+ """
+ end
+end
diff --git a/lib/comfycamp_web/controllers/main_html.ex b/lib/comfycamp_web/controllers/main_html.ex
deleted file mode 100644
index 8a009c7..0000000
--- a/lib/comfycamp_web/controllers/main_html.ex
+++ /dev/null
@@ -1,8 +0,0 @@
-defmodule ComfycampWeb.MainHTML do
- @moduledoc """
- This module contains pages rendered by ServicesController.
- """
- use ComfycampWeb, :html
-
- embed_templates "main_html/*"
-end
diff --git a/lib/comfycamp_web/controllers/main_html/index.html.heex b/lib/comfycamp_web/controllers/main_html/index.html.heex
deleted file mode 100644
index 547b889..0000000
--- a/lib/comfycamp_web/controllers/main_html/index.html.heex
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
Уютный домик
-
-
- У меня есть несколько проектов, запущенных на домашнем сервере.
- Я буду рад, если они будут полезны другим людям.
-
-
-
- Создайте аккаунт на этом сайте, чтобы получить доступ к остальным сервисам.
-
-
-
- Не стоит ожидать большой надёжности, однако я прикладываю все усилия,
- чтобы сервисы были доступны 24/7.
-
-
-
- Иван, администратор comfycamp.space
-
-
Доступные сервисы
-
-
Mastodon
-
m.comfycamp.space
-
Микроблоги с поддержкой fediverse.
-
-
Nextcloud
-
nc.comfycamp.space
-
Облако, календарь, задачи.
-
-
Forgejo
-
git.comfycamp.space
-
Хостинг для git-проектов.
-
-
XMPP
-
xmpp.comfycamp.space
-
- Проверенный временем протокол для обмена сообщениями.
-
-
- Для входа можете использовать dino (linux) или conversations (android).
-
-
-
Matrix
-
matrix.comfycamp.space
-
- Современный протокол для общения.
-
-
- Для входа можете использовать element (android, linux) или nheko (linux).
-
-
-
Fresh RSS
-
freshrss.comfycamp.space
-
Сервис для чтения RSS лент.
-
-
Список задач
-
Вход через один аккаунт на все сервисы.
-
diff --git a/lib/comfycamp_web/router.ex b/lib/comfycamp_web/router.ex
index 3ed7556..844650d 100644
--- a/lib/comfycamp_web/router.ex
+++ b/lib/comfycamp_web/router.ex
@@ -20,7 +20,7 @@ defmodule ComfycampWeb.Router do
scope "/", ComfycampWeb do
pipe_through :browser
- get "/", MainController, :index
+ get "/", HomeController, :index
resources "/notes", NotesController, only: [:index, :show]
get "/cinema", CinemaController, :index
end