@@ -1,8 +1,12 @@
1module Route.Index exposing (ActionData, Data, Model, Msg, route)
1module Route.Index exposing (ActionData, Data, Model, Msg, route)
3import BackendTask exposing (BackendTask)
3import BackendTask exposing (BackendTask)
4+import Color exposing (lightBrown)
4import Element exposing (..)
6import Element exposing (..)
5import Element.Background as Background
7import Element.Background as Background
8+import Element.Border as Border
9+import Element.Events as Events
6import Element.Font as Font
10import Element.Font as Font
7import FatalError exposing (FatalError)
11import FatalError exposing (FatalError)
8import Head
12import Head
@@ -11,18 +15,18 @@ import Html.Attributes exposing (style)
11import Pages.Url
15import Pages.Url
12import PagesMsg exposing (PagesMsg)
16import PagesMsg exposing (PagesMsg)
13import Route
17import Route
14−import RouteBuilder exposing (App, StatelessRoute)
18+import RouteBuilder exposing (App, StatefulRoute)
15import Shared
19import Shared
16import UrlPath
20import UrlPath
17import View exposing (View)
21import View exposing (View)
20type alias Model =
24type alias Model =
21− {}
25+ { teamExpanded : Bool }
24−type alias Msg =
28+type Msg
28type alias RouteParams =
32type alias RouteParams =
@@ -30,28 +34,37 @@ type alias RouteParams =
32type alias Data =
36type alias Data =
37type alias ActionData =
40type alias ActionData =
41−route : StatelessRoute RouteParams Data ActionData
44+route : StatefulRoute RouteParams Data ActionData Model Msg
43 RouteBuilder.single
46 RouteBuilder.single
44 { head = head
47 { head = head
45 , data = data
48 , data = data
50+ |> RouteBuilder.buildWithLocalState
47− |> RouteBuilder.buildNoState { view = view }
51+ { view = view
52+ , init = \_ _ -> ( { teamExpanded = False }, Effect.None )
53+ , update = \_ _ msg model -> ( update msg model, Effect.None )
54+ , subscriptions = \_ _ _ _ -> Sub.none
58+update : Msg -> Model -> Model
62+ { model | teamExpanded = True }
50data : BackendTask FatalError Data
65data : BackendTask FatalError Data
52 BackendTask.succeed Data
67 BackendTask.succeed Data
53− |> BackendTask.andMap
54− (BackendTask.succeed "Hello!")
@@ -67,7 +80,7 @@ head app =
67 , dimensions = Nothing
80 , dimensions = Nothing
68 , mimeType = Nothing
81 , mimeType = Nothing
70− , description = "Welcome to Horeco Productions!"
83+ , description = "Welcome to Horeca Productions!"
71 , locale = Nothing
84 , locale = Nothing
72 , title = "Horeca Productions"
85 , title = "Horeca Productions"
@@ -77,34 +90,187 @@ head app =
78 App Data ActionData RouteParams
91 App Data ActionData RouteParams
79 -> Shared.Model
92 -> Shared.Model
80 -> View (PagesMsg Msg)
94 -> View (PagesMsg Msg)
81−view app shared =
95+view app shared model =
82− { title = "elm-pages is running"
96+ { title = "Horeca Productions"
84 column [ width fill ]
98 column [ width fill ]
85 [ column [ width fill, Background.color (rgb255 53 30 30), spacing 88 ]
99 [ column [ width fill, Background.color (rgb255 53 30 30), spacing 88 ]
86 [ el [] none
100 [ el [] none
88− [ el [ width (px 50) ] none
89− , row [ centerX, width fill, spaceEvenly ]
101+ , row [ centerX, width fill, spaceEvenly, paddingXY 135 0 ]
90− [ el headerFont (text "услуги")
102+ [ link [] { url = "#services", label = el headerFont (text "услуги") }
91− , el headerFont (text "студия")
103+ , link [] { url = "#history", label = el headerFont (text "история") }
92− , image [ height (px 50) ] { src = "/logo.svg", description = "logo" }
104+ , image [ height (px 83) ] { src = "/logo.svg", description = "logo" }
93− , el headerFont (text "сотрудники")
94− , el headerFont (text "о нас")
105+ , link [] { url = "#team", label = el headerFont (text "команда") }
95− ]
106+ , link [] { url = "#blog", label = el headerFont (text "блог") }
96− , el [ width (px 50) ] none
99 [ width fill
109 [ width fill
100 , htmlAttribute (style "overflow" "hidden")
110 , htmlAttribute (style "overflow" "hidden")
101 , height (px 650)
111 , height (px 650)
102− , inFront (paragraph [ raleway, Font.color lightColor, moveDown 200, moveRight 100, width (px 370) ] [ text "Где подача — всё: дизайн, маркетинг, стратегия." ])
112+ , inFront (paragraph [ raleway, Font.color lightColor, moveDown 200, moveRight 135, width (px 370) ] [ text "Где подача — всё: дизайн, маркетинг, стратегия." ])
104 [ el ([ alignRight, moveRight 40 ] ++ headerMainFont) (text "horeca")
114 [ el ([ alignRight, moveRight 40 ] ++ headerMainFont) (text "horeca")
105 , el ([ moveLeft 26 ] ++ headerMainFont) (text "productions")
115 , el ([ moveLeft 26 ] ++ headerMainFont) (text "productions")
118+ , el [ Background.image "olives.png", width fill, paddingXY 135 35 ]
122+ , Background.color (rgba 0 0 0 0.2)
124+ , htmlAttribute (style "backdrop-filter" "blur(40px)")
127+ [ Font.color (rgb255 210 197 178), raleway, Font.size 24 ]
128+ [ text "Мы\u{00A0}— команда экспертов, которые знают ресторанный бизнес изнутри. Мы\u{00A0}не\u{00A0}просто оказываем услуги, мы\u{00A0}становимся вашими партнерами, погружаясь в\u{00A0}детали вашего бизнеса и\u{00A0}разрабатывая индивидуальные стратегии для достижения конкретных результатов." ]
131+ , el [ Background.color (rgb255 210 197 178), width fill, htmlAttribute (Html.Attributes.id "services") ]
132+ (el [ width fill, Background.image "/text-bg.svg" ]
133+ (column [ paddingXY 135 95, centerX, width fill ]
134+ [ el [ ubuntu, Font.size 80, Font.color yellowColor, Font.color redColor ] (text "услуги для вашего бизнеса")
135+ , el [ height (px 60) ] none
136+ , row [ width fill, spaceEvenly, Font.color darkColor ]
137+ [ column [ width (px 350), spacing 30 ]
138+ [ el [ ubuntu, Font.size 320, Font.light ] (text "1.")
139+ , el [ raleway, Font.size 24, Font.semiBold ] (paragraph [] [ text "полная разработка" ])
141+ , column [ width (px 350), spacing 30 ]
142+ [ el [ ubuntu, Font.size 320, Font.light ] (text "2.")
143+ , el [ raleway, Font.size 24, Font.semiBold ] (paragraph [] [ text "удаленная команда" ])
145+ , column [ width (px 350), spacing 30 ]
146+ [ el [ ubuntu, Font.size 320, Font.light ] (text "3.")
147+ , el [ raleway, Font.size 24, Font.semiBold ] (paragraph [] [ text "быстрый старт" ])
150+ , el [ height (px 45) ] none
154+ , link [ width fill ]
155+ { url = "/horeca.pdf"
157+ el [ Background.color (rgb255 196 185 151), width fill, paddingXY 0 146 ]
158+ (column [ width fill ]
159+ [ image [ width (px 1129) ] { src = "/viliche.png", description = "Viliche" }
160+ , el [ ubuntu, Font.size 32, Font.color redColor, alignRight, moveLeft 100, moveUp 130, Font.underline ] (text "о наших пакетах")
165+ [ Background.color (rgb255 210 197 178)
167+ , behindContent (image [ height (px 605), alignRight, moveDown 74 ] { src = "/oil.png", description = "oil" })
168+ , htmlAttribute (Html.Attributes.id "history")
174+ , Font.color (rgb255 53 30 30)
176+ [ text "история бренда" ]
178+ , el [ Background.color (rgb255 210 197 178), width fill, paddingXY 135 0, Font.size 24, Font.medium ] (paragraph [ raleway, Font.color darkColor ] [ text "Мы — Horeca Productions, команда, рожденная общей мечтой. Мы верили: рестораны могут покорять сердца не только кухней, но атмосферой, стилем, онлайн-присутствием. Энтузиасты, верящие в силу красивой идеи и продвижения, мы создаём вдохновляющие стратегии, завораживающий дизайн. Наша цель — сделать ваш ресторан звездой." ])
179+ , el [ height (px 96), Background.color (rgb255 210 197 178), width fill ] none
180+ , el [ width fill, Background.image "/bg.png", htmlAttribute (Html.Attributes.id "team") ]
181+ (el [ paddingXY 135 95, width fill ]
182+ (column [ width fill, Background.color (rgb255 196 185 151), width fill, Border.rounded 30 ]
183+ ([ el [ paddingXY 105 125 ] (image [ height (px 100) ] { src = "/team.png", description = "team" })
184+ , row [ paddingEach { top = 0, left = 115, right = 115, bottom = 95 }, spaceEvenly, width fill ]
185+ [ row [ spacing 30 ]
186+ [ image [ height (px 240), width (px 160) ] { src = "/alim.jpg", description = "Alim" }
187+ , column [ width (px 260), height (px 240) ]
188+ [ paragraph [ alignTop, Font.size 32 ] [ text "Алим Лаипанов" ]
189+ , paragraph [ alignBottom, Font.size 18 ] [ text "Копирайтер, администратор телеграм-канала. Создание текстов для рекламы, ведение и продвижение контента в Телеграм-канале." ]
192+ , row [ spacing 30 ]
193+ [ image [ height (px 240), width (px 160) ] { src = "/ilia.jpg", description = "Alim" }
194+ , column [ width (px 260), height (px 240) ]
195+ [ paragraph [ alignTop, Font.size 32 ] [ text "Илья Костюченко" ]
196+ , paragraph [ alignBottom, Font.size 18 ] [ text "Ведущий технический специалист. Разработка и поддержка технической инфраструктуры компании." ]
201+ ++ (case model.teamExpanded of
204+ [ Events.onClick <| PagesMsg.fromMsg ExpandTeam
206+ , Font.color redColor
208+ , paddingEach { top = 0, left = 115, right = 115, bottom = 95 }
216+ [ row [ paddingEach { top = 0, left = 115, right = 115, bottom = 95 }, spaceEvenly, width fill ]
217+ [ row [ spacing 30 ]
218+ [ image [ height (px 240), width (px 160) ] { src = "/yasha.jpg", description = "Alim" }
219+ , column [ width (px 260), height (px 240) ]
220+ [ paragraph [ alignTop, Font.size 32 ] [ text "Яш Вардхан Сингх" ]
221+ , paragraph [ alignBottom, Font.size 18 ] [ text "Гид гастротуризма. Проведение гастрономических туров, презентация культурных и гастрономических аспектов." ]
230+ , el [ htmlAttribute (Html.Attributes.id "blog"), width fill, Background.image "/bg2.png" ]
231+ (el [ paddingXY 135 95, width fill, Font.color (rgb255 205 197 178) ]
232+ (column [ htmlAttribute (style "backdrop-filter" "blur(40px)"), paddingXY 125 0, Border.rounded 30, width fill ]
233+ [ el [ height (px 135) ] none
234+ , el [ Font.size 280, ubuntu ] (text "блог")
235+ , el [ height (px 120) ] none
236+ , el [ alignRight, ubuntu, Font.size 32, moveLeft 55 ]
239+ { url = "https://dzen.ru/id/67f1ed371047046a46c0e665"
240+ , label = text "дзен"
244+ { url = "https://t.me/horeca_productions"
245+ , label = text "telegram"
249+ { url = "https://habr.com/ru/users/horeca_productions/"
250+ , label = text "хабр"
254+ , el [ height (px 190) ] none
258+ , el [ Background.color darkColor, paddingXY 135 76, width fill ]
259+ (row [ spacing 90, spaceEvenly, width fill ]
260+ [ image [ paddingEach { left = 0, right = 90, top = 0, bottom = 0 } ] { src = "/logo.svg", description = "logo" }
261+ , row [ centerX, width fill, spacing 90, spacing 120 ]
262+ [ link [] { url = "#services", label = el headerFont (text "услуги") }
263+ , link [] { url = "#history", label = el headerFont (text "история") }
264+ , link [] { url = "#team", label = el headerFont (text "команда") }
265+ , link [] { url = "#blog", label = el headerFont (text "блог") }
267+ , row [ spacing 28 ]
268+ [ -- link [] { url = "", label = image [] { src = "/tiktok.svg", description = "TikTok" } },
269+ link [] { url = "https://www.instagram.com/horeca_productions_", label = image [] { src = "/inst.svg", description = "Instagram" } }
270+ , link [] { url = "https://t.me/horeca_productions", label = image [] { src = "/tg.svg", description = "Telegram" } }
@@ -119,9 +285,24 @@ lightColor =
119 rgb255 210 197 178
285 rgb255 210 197 178
122headerFont : List (Attribute msg)
298headerFont : List (Attribute msg)
123headerFont =
299headerFont =
124− [ raleway, Font.size 24, Font.color (rgb255 170 147 32) ]
300+ [ raleway, Font.size 24, Font.color yellowColor ]
127ubuntu : Attribute msg
308ubuntu : Attribute msg