Compare commits

..

5 Commits

Author SHA1 Message Date
ac73c20cea release tooling 2023-05-09 12:06:24 +02:00
66cc647a52 score and mobile 2023-04-19 15:17:33 +02:00
a14c56092c sprites relative positioning 2023-04-19 13:59:02 +02:00
06cbfc78fc ignore generated assets 2023-04-19 13:46:14 +02:00
44c3790ddf first chicken and egg 2023-04-17 09:15:56 +02:00
15 changed files with 292 additions and 273 deletions

4
.gitignore vendored
View File

@ -9,5 +9,5 @@ erl_crash.dump
*.beam
/config/*.secret.exs
.elixir_ls/
/priv/static
/priv/static/
/rel/overlays/

View File

@ -2,4 +2,16 @@
@import "tailwindcss/components";
@import "tailwindcss/utilities";
/* This file is for your main application CSS */
@layer utilities {
.text-shadow {
text-shadow: 2px 2px 4px #000;
}
.text-outline {
text-shadow: 2px 2px 2px #801B71, -2px 2px 2px #801B71, 2px -2px 2px #801B71, -2px -2px 2px #801B71;
}
}
body {
@apply overflow-hidden;
}

View File

@ -22,8 +22,18 @@ import {Socket} from "phoenix"
import {LiveSocket} from "phoenix_live_view"
import topbar from "../vendor/topbar"
let Hooks = {}
Hooks.ChickenEgg = {
mounted() {
this.el.addEventListener("touchstart", _e => {
this.pushEvent("boak", {})
})
}
}
let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content")
let liveSocket = new LiveSocket("/live", Socket, {params: {_csrf_token: csrfToken}})
let liveSocket = new LiveSocket("/live", Socket, {hooks: Hooks, params: {_csrf_token: csrfToken}})
// Show progress bar on live navigation and form submits
topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"})

View File

@ -9,7 +9,8 @@ import Config
# manifest is generated by the `mix assets.deploy` task,
# which you should run after static files are built and
# before starting your production server.
config :chicken_egg, ChickenEggWeb.Endpoint, cache_static_manifest: "priv/static/cache_manifest.json"
config :chicken_egg, ChickenEggWeb.Endpoint,
cache_static_manifest: "priv/static/cache_manifest.json"
# Configures Swoosh API Client
config :swoosh, api_client: Swoosh.ApiClient.Finch, finch_name: ChickenEgg.Finch

View File

@ -0,0 +1,28 @@
defmodule ChickenEgg.Release do
@moduledoc """
Used for executing DB release tasks when run in production without Mix
installed.
"""
@app :chicken_egg
def migrate do
load_app()
for repo <- repos() do
{:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
end
end
def rollback(repo, version) do
load_app()
{:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version))
end
defp repos do
Application.fetch_env!(@app, :ecto_repos)
end
defp load_app do
Application.load(@app)
end
end

View File

@ -0,0 +1,19 @@
defmodule ChickenEggWeb.ChickenComponents do
use ChickenEggWeb, :html
def chicken(assigns) do
~H"""
<div class="z-0 max-w-[144px] h-auto absolute" style={"width: 12%; top: #{@y}%; left: #{@x}%;"}>
<img src={~p"/images/chicken.svg"} />
</div>
"""
end
def egg(assigns) do
~H"""
<div class="z-10 max-w-[48px] h-auto absolute" style={"width: 4%; top: #{@y}%; left: #{@x}%;"}>
<img src={~p"/images/egg.svg"} />
</div>
"""
end
end

View File

@ -1,32 +1,5 @@
<header class="px-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between border-b border-zinc-100 py-3 text-sm">
<div class="flex items-center gap-4">
<a href="/">
<img src={~p"/images/logo.svg"} width="36" />
</a>
<p class="bg-brand/5 text-brand rounded-full px-2 font-medium leading-6">
v<%= Application.spec(:phoenix, :vsn) %>
</p>
</div>
<div class="flex items-center gap-4 font-semibold leading-6 text-zinc-900">
<a href="https://twitter.com/elixirphoenix" class="hover:text-zinc-700">
@elixirphoenix
</a>
<a href="https://github.com/phoenixframework/phoenix" class="hover:text-zinc-700">
GitHub
</a>
<a
href="https://hexdocs.pm/phoenix/overview.html"
class="rounded-lg bg-zinc-100 px-2 py-1 hover:bg-zinc-200/80"
>
Get Started <span aria-hidden="true">&rarr;</span>
</a>
</div>
</div>
</header>
<main class="px-4 py-20 sm:px-6 lg:px-8">
<div class="mx-auto max-w-2xl">
<.flash_group flash={@flash} />
<%= @inner_content %>
</div>
<header class="px-4 sm:px-6 lg:px-8 p-0"></header>
<main>
<.flash_group flash={@flash} />
<%= @inner_content %>
</main>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" style="scrollbar-gutter: stable;">
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />

View File

@ -1,237 +1,4 @@
<.flash_group flash={@flash} />
<div class="left-[40rem] fixed inset-y-0 right-0 z-0 hidden lg:block xl:left-[50rem]">
<svg
viewBox="0 0 1480 957"
fill="none"
aria-hidden="true"
class="absolute inset-0 h-full w-full"
preserveAspectRatio="xMinYMid slice"
>
<path fill="#EE7868" d="M0 0h1480v957H0z" />
<path
d="M137.542 466.27c-582.851-48.41-988.806-82.127-1608.412 658.2l67.39 810 3083.15-256.51L1535.94-49.622l-98.36 8.183C1269.29 281.468 734.115 515.799 146.47 467.012l-8.928-.742Z"
fill="#FF9F92"
/>
<path
d="M371.028 528.664C-169.369 304.988-545.754 149.198-1361.45 665.565l-182.58 792.025 3014.73 694.98 389.42-1689.25-96.18-22.171C1505.28 697.438 924.153 757.586 379.305 532.09l-8.277-3.426Z"
fill="#FA8372"
/>
<path
d="M359.326 571.714C-104.765 215.795-428.003-32.102-1349.55 255.554l-282.3 1224.596 3047.04 722.01 312.24-1354.467C1411.25 1028.3 834.355 935.995 366.435 577.166l-7.109-5.452Z"
fill="#E96856"
fill-opacity=".6"
/>
<path
d="M1593.87 1236.88c-352.15 92.63-885.498-145.85-1244.602-613.557l-5.455-7.105C-12.347 152.31-260.41-170.8-1225-131.458l-368.63 1599.048 3057.19 704.76 130.31-935.47Z"
fill="#C42652"
fill-opacity=".2"
/>
<path
d="M1411.91 1526.93c-363.79 15.71-834.312-330.6-1085.883-863.909l-3.822-8.102C72.704 125.95-101.074-242.476-1052.01-408.907l-699.85 1484.267 2837.75 1338.01 326.02-886.44Z"
fill="#A41C42"
fill-opacity=".2"
/>
<path
d="M1116.26 1863.69c-355.457-78.98-720.318-535.27-825.287-1115.521l-1.594-8.816C185.286 163.833 112.786-237.016-762.678-643.898L-1822.83 608.665 571.922 2635.55l544.338-771.86Z"
fill="#A41C42"
fill-opacity=".2"
/>
</svg>
</div>
<div class="px-4 py-10 sm:px-6 sm:py-28 lg:px-8 xl:px-28 xl:py-32">
<div class="mx-auto max-w-xl lg:mx-0">
<svg viewBox="0 0 71 48" class="h-12" aria-hidden="true">
<path
d="m26.371 33.477-.552-.1c-3.92-.729-6.397-3.1-7.57-6.829-.733-2.324.597-4.035 3.035-4.148 1.995-.092 3.362 1.055 4.57 2.39 1.557 1.72 2.984 3.558 4.514 5.305 2.202 2.515 4.797 4.134 8.347 3.634 3.183-.448 5.958-1.725 8.371-3.828.363-.316.761-.592 1.144-.886l-.241-.284c-2.027.63-4.093.841-6.205.735-3.195-.16-6.24-.828-8.964-2.582-2.486-1.601-4.319-3.746-5.19-6.611-.704-2.315.736-3.934 3.135-3.6.948.133 1.746.56 2.463 1.165.583.493 1.143 1.015 1.738 1.493 2.8 2.25 6.712 2.375 10.265-.068-5.842-.026-9.817-3.24-13.308-7.313-1.366-1.594-2.7-3.216-4.095-4.785-2.698-3.036-5.692-5.71-9.79-6.623C12.8-.623 7.745.14 2.893 2.361 1.926 2.804.997 3.319 0 4.149c.494 0 .763.006 1.032 0 2.446-.064 4.28 1.023 5.602 3.024.962 1.457 1.415 3.104 1.761 4.798.513 2.515.247 5.078.544 7.605.761 6.494 4.08 11.026 10.26 13.346 2.267.852 4.591 1.135 7.172.555ZM10.751 3.852c-.976.246-1.756-.148-2.56-.962 1.377-.343 2.592-.476 3.897-.528-.107.848-.607 1.306-1.336 1.49Zm32.002 37.924c-.085-.626-.62-.901-1.04-1.228-1.857-1.446-4.03-1.958-6.333-2-1.375-.026-2.735-.128-4.031-.61-.595-.22-1.26-.505-1.244-1.272.015-.78.693-1 1.31-1.184.505-.15 1.026-.247 1.6-.382-1.46-.936-2.886-1.065-4.787-.3-2.993 1.202-5.943 1.06-8.926-.017-1.684-.608-3.179-1.563-4.735-2.408l-.043.03a2.96 2.96 0 0 0 .04-.029c-.038-.117-.107-.12-.197-.054l.122.107c1.29 2.115 3.034 3.817 5.004 5.271 3.793 2.8 7.936 4.471 12.784 3.73A66.714 66.714 0 0 1 37 40.877c1.98-.16 3.866.398 5.753.899Zm-9.14-30.345c-.105-.076-.206-.266-.42-.069 1.745 2.36 3.985 4.098 6.683 5.193 4.354 1.767 8.773 2.07 13.293.51 3.51-1.21 6.033-.028 7.343 3.38.19-3.955-2.137-6.837-5.843-7.401-2.084-.318-4.01.373-5.962.94-5.434 1.575-10.485.798-15.094-2.553Zm27.085 15.425c.708.059 1.416.123 2.124.185-1.6-1.405-3.55-1.517-5.523-1.404-3.003.17-5.167 1.903-7.14 3.972-1.739 1.824-3.31 3.87-5.903 4.604.043.078.054.117.066.117.35.005.699.021 1.047.005 3.768-.17 7.317-.965 10.14-3.7.89-.86 1.685-1.817 2.544-2.71.716-.746 1.584-1.159 2.645-1.07Zm-8.753-4.67c-2.812.246-5.254 1.409-7.548 2.943-1.766 1.18-3.654 1.738-5.776 1.37-.374-.066-.75-.114-1.124-.17l-.013.156c.135.07.265.151.405.207.354.14.702.308 1.07.395 4.083.971 7.992.474 11.516-1.803 2.221-1.435 4.521-1.707 7.013-1.336.252.038.503.083.756.107.234.022.479.255.795.003-2.179-1.574-4.526-2.096-7.094-1.872Zm-10.049-9.544c1.475.051 2.943-.142 4.486-1.059-.452.04-.643.04-.827.076-2.126.424-4.033-.04-5.733-1.383-.623-.493-1.257-.974-1.889-1.457-2.503-1.914-5.374-2.555-8.514-2.5.05.154.054.26.108.315 3.417 3.455 7.371 5.836 12.369 6.008Zm24.727 17.731c-2.114-2.097-4.952-2.367-7.578-.537 1.738.078 3.043.632 4.101 1.728.374.388.763.768 1.182 1.106 1.6 1.29 4.311 1.352 5.896.155-1.861-.726-1.861-.726-3.601-2.452Zm-21.058 16.06c-1.858-3.46-4.981-4.24-8.59-4.008a9.667 9.667 0 0 1 2.977 1.39c.84.586 1.547 1.311 2.243 2.055 1.38 1.473 3.534 2.376 4.962 2.07-.656-.412-1.238-.848-1.592-1.507Zm17.29-19.32c0-.023.001-.045.003-.068l-.006.006.006-.006-.036-.004.021.018.012.053Zm-20 14.744a7.61 7.61 0 0 0-.072-.041.127.127 0 0 0 .015.043c.005.008.038 0 .058-.002Zm-.072-.041-.008-.034-.008.01.008-.01-.022-.006.005.026.024.014Z"
fill="#FD4F00"
/>
</svg>
<h1 class="text-brand mt-10 flex items-center text-sm font-semibold leading-6">
Phoenix Framework
<small class="bg-brand/5 text-[0.8125rem] ml-3 rounded-full px-2 font-medium leading-6">
v<%= Application.spec(:phoenix, :vsn) %>
</small>
</h1>
<p class="text-[2rem] mt-4 font-semibold leading-10 tracking-tighter text-zinc-900">
Peace of mind from prototype to production.
</p>
<p class="mt-4 text-base leading-7 text-zinc-600">
Build rich, interactive web applications quickly, with less code and fewer moving parts. Join our growing community of developers using Phoenix to craft APIs, HTML5 apps and more, for fun or at scale.
</p>
<div class="flex">
<div class="w-full sm:w-auto">
<div class="mt-10 grid grid-cols-1 gap-x-6 gap-y-4 sm:grid-cols-3">
<a
href="https://hexdocs.pm/phoenix/overview.html"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-zinc-900 sm:py-6"
>
<span class="absolute inset-0 rounded-2xl bg-zinc-50 transition group-hover:bg-zinc-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true" class="h-6 w-6">
<path d="m12 4 10-2v18l-10 2V4Z" fill="#18181B" fill-opacity=".15" />
<path
d="M12 4 2 2v18l10 2m0-18v18m0-18 10-2v18l-10 2"
stroke="#18181B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
Guides &amp; Docs
</span>
</a>
<a
href="https://github.com/phoenixframework/phoenix"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-zinc-900 sm:py-6"
>
<span class="absolute inset-0 rounded-2xl bg-zinc-50 transition group-hover:bg-zinc-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" aria-hidden="true" class="h-6 w-6">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12 0C5.37 0 0 5.506 0 12.303c0 5.445 3.435 10.043 8.205 11.674.6.107.825-.262.825-.585 0-.292-.015-1.261-.015-2.291C6 21.67 5.22 20.346 4.98 19.654c-.135-.354-.72-1.446-1.23-1.738-.42-.23-1.02-.8-.015-.815.945-.015 1.62.892 1.845 1.261 1.08 1.86 2.805 1.338 3.495 1.015.105-.8.42-1.338.765-1.645-2.67-.308-5.46-1.37-5.46-6.075 0-1.338.465-2.446 1.23-3.307-.12-.308-.54-1.569.12-3.26 0 0 1.005-.323 3.3 1.26.96-.276 1.98-.415 3-.415s2.04.139 3 .416c2.295-1.6 3.3-1.261 3.3-1.261.66 1.691.24 2.952.12 3.26.765.861 1.23 1.953 1.23 3.307 0 4.721-2.805 5.767-5.475 6.075.435.384.81 1.122.81 2.276 0 1.645-.015 2.968-.015 3.383 0 .323.225.707.825.585a12.047 12.047 0 0 0 5.919-4.489A12.536 12.536 0 0 0 24 12.304C24 5.505 18.63 0 12 0Z"
fill="#18181B"
/>
</svg>
Source Code
</span>
</a>
<a
href={"https://github.com/phoenixframework/phoenix/blob/v#{Application.spec(:phoenix, :vsn)}/CHANGELOG.md"}
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-zinc-900 sm:py-6"
>
<span class="absolute inset-0 rounded-2xl bg-zinc-50 transition group-hover:bg-zinc-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true" class="h-6 w-6">
<path
d="M12 1v6M12 17v6"
stroke="#18181B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
<circle
cx="12"
cy="12"
r="4"
fill="#18181B"
fill-opacity=".15"
stroke="#18181B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
Changelog
</span>
</a>
</div>
<div class="mt-10 grid grid-cols-1 gap-y-4 text-sm leading-6 text-zinc-700 sm:grid-cols-2">
<div>
<a
href="https://twitter.com/elixirphoenix"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M5.403 14c5.283 0 8.172-4.617 8.172-8.62 0-.131 0-.262-.008-.391A6.033 6.033 0 0 0 15 3.419a5.503 5.503 0 0 1-1.65.477 3.018 3.018 0 0 0 1.263-1.676 5.579 5.579 0 0 1-1.824.736 2.832 2.832 0 0 0-1.63-.916 2.746 2.746 0 0 0-1.821.319A2.973 2.973 0 0 0 8.076 3.78a3.185 3.185 0 0 0-.182 1.938 7.826 7.826 0 0 1-3.279-.918 8.253 8.253 0 0 1-2.64-2.247 3.176 3.176 0 0 0-.315 2.208 3.037 3.037 0 0 0 1.203 1.836A2.739 2.739 0 0 1 1.56 6.22v.038c0 .7.23 1.377.65 1.919.42.54 1.004.912 1.654 1.05-.423.122-.866.14-1.297.052.184.602.541 1.129 1.022 1.506a2.78 2.78 0 0 0 1.662.598 5.656 5.656 0 0 1-2.007 1.074A5.475 5.475 0 0 1 1 12.64a7.827 7.827 0 0 0 4.403 1.358" />
</svg>
Follow on Twitter
</a>
</div>
<div>
<a
href="https://elixirforum.com"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M8 13.833c3.866 0 7-2.873 7-6.416C15 3.873 11.866 1 8 1S1 3.873 1 7.417c0 1.081.292 2.1.808 2.995.606 1.05.806 2.399.086 3.375l-.208.283c-.285.386-.01.905.465.85.852-.098 2.048-.318 3.137-.81a3.717 3.717 0 0 1 1.91-.318c.263.027.53.041.802.041Z" />
</svg>
Discuss on the Elixir forum
</a>
</div>
<div>
<a
href="https://elixir-slackin.herokuapp.com"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M3.95 9.85a1.47 1.47 0 1 1-2.94 0 1.47 1.47 0 0 1 1.47-1.472h1.47v1.471Zm.735 0a1.47 1.47 0 1 1 2.94 0v3.678a1.47 1.47 0 1 1-2.94 0V9.85ZM6.156 3.942a1.47 1.47 0 0 1-1.47-1.472 1.47 1.47 0 1 1 2.94 0v1.472h-1.47Zm0 .747c.813 0 1.47.658 1.47 1.471a1.47 1.47 0 0 1-1.47 1.472H2.47A1.47 1.47 0 0 1 1 6.16 1.47 1.47 0 0 1 2.47 4.69h3.686ZM12.048 6.16a1.47 1.47 0 1 1 2.94 0 1.47 1.47 0 0 1-1.47 1.472h-1.47V6.16Zm-.735 0a1.47 1.47 0 1 1-2.94 0V2.47a1.47 1.47 0 1 1 2.94 0v3.69ZM9.843 12.057c.813 0 1.47.657 1.47 1.471a1.47 1.47 0 1 1-2.94 0v-1.471h1.47Zm0-.736a1.47 1.47 0 0 1-1.47-1.472 1.47 1.47 0 0 1 1.47-1.471h3.686c.813 0 1.47.658 1.47 1.471a1.47 1.47 0 0 1-1.47 1.472H9.843Z" />
</svg>
Join our Slack channel
</a>
</div>
<div>
<a
href="https://web.libera.chat/#elixir"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M6.356 2.007a.75.75 0 0 1 .637.849l-1.5 10.5a.75.75 0 1 1-1.485-.212l1.5-10.5a.75.75 0 0 1 .848-.637ZM11.356 2.008a.75.75 0 0 1 .637.848l-1.5 10.5a.75.75 0 0 1-1.485-.212l1.5-10.5a.75.75 0 0 1 .848-.636Z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M14 5.25a.75.75 0 0 1-.75.75h-9.5a.75.75 0 0 1 0-1.5h9.5a.75.75 0 0 1 .75.75ZM13 10.75a.75.75 0 0 1-.75.75h-9.5a.75.75 0 0 1 0-1.5h9.5a.75.75 0 0 1 .75.75Z"
/>
</svg>
Chat on Libera IRC
</a>
</div>
<div>
<a
href="https://discord.gg/elixir"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M13.545 2.995c-1.02-.46-2.114-.8-3.257-.994a.05.05 0 0 0-.052.024c-.141.246-.297.567-.406.82a12.377 12.377 0 0 0-3.658 0 8.238 8.238 0 0 0-.412-.82.052.052 0 0 0-.052-.024 13.315 13.315 0 0 0-3.257.994.046.046 0 0 0-.021.018C.356 6.063-.213 9.036.066 11.973c.001.015.01.029.02.038a13.353 13.353 0 0 0 3.996 1.987.052.052 0 0 0 .056-.018c.308-.414.582-.85.818-1.309a.05.05 0 0 0-.028-.069 8.808 8.808 0 0 1-1.248-.585.05.05 0 0 1-.005-.084c.084-.062.168-.126.248-.191a.05.05 0 0 1 .051-.007c2.619 1.176 5.454 1.176 8.041 0a.05.05 0 0 1 .053.006c.08.065.164.13.248.192a.05.05 0 0 1-.004.084c-.399.23-.813.423-1.249.585a.05.05 0 0 0-.027.07c.24.457.514.893.817 1.307a.051.051 0 0 0 .056.019 13.31 13.31 0 0 0 4.001-1.987.05.05 0 0 0 .021-.037c.334-3.396-.559-6.345-2.365-8.96a.04.04 0 0 0-.021-.02Zm-8.198 7.19c-.789 0-1.438-.712-1.438-1.587 0-.874.637-1.586 1.438-1.586.807 0 1.45.718 1.438 1.586 0 .875-.637 1.587-1.438 1.587Zm5.316 0c-.788 0-1.438-.712-1.438-1.587 0-.874.637-1.586 1.438-1.586.807 0 1.45.718 1.438 1.586 0 .875-.63 1.587-1.438 1.587Z" />
</svg>
Join our Discord server
</a>
</div>
<div>
<a
href="https://fly.io/docs/elixir/getting-started/"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 20 20"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M1 12.5A4.5 4.5 0 005.5 17H15a4 4 0 001.866-7.539 3.504 3.504 0 00-4.504-4.272A4.5 4.5 0 004.06 8.235 4.502 4.502 0 001 12.5z" />
</svg>
Deploy your application
</a>
</div>
</div>
</div>
</div>
</div>
<div class="">
<img src={~p"/images/chicken.svg"} />
</div>

View File

@ -0,0 +1,51 @@
defmodule ChickenEggWeb.IndexLive do
use ChickenEggWeb, :live_view
alias ChickenEggWeb.ChickenComponents
def render(assigns) do
~H"""
<div
class="board relative bg-green-700 w-screen h-screen select-none"
id="chicken-egg"
phx-window-keyup="boak"
phx-key=" "
phx-hook="ChickenEgg"
>
<div class="score absolute right-0 z-50 text-fuchsia-50 text-4xl font-semibold p-4 text-outline">
<%= @score %>
</div>
<ChickenComponents.chicken x={@chicken.x} y={@chicken.y} />
<div id="chicken-eggs" phx-update="stream">
<div :for={{dom_id, egg} <- @streams.eggs} class="egg" id={dom_id}>
<ChickenComponents.egg x={egg.x} y={egg.y} />
</div>
</div>
</div>
"""
end
def mount(_params, _session, socket) do
{:ok,
socket
|> assign(:chicken, %{x: 42, y: 47})
|> assign(:score, 0)
|> stream(:eggs, [])}
end
def handle_event("boak", _params, socket) do
score = socket.assigns.score
%{x: cx, y: cy} = socket.assigns.chicken
new_egg = %{id: "egg#{cx}#{cy}", x: cx, y: cy}
new_chicken = %{x: Enum.random(1..99), y: Enum.random(1..99)}
{:noreply,
socket
|> assign(:chicken, new_chicken)
|> assign(:score, score + 1)
|> stream_insert(:eggs, new_egg)}
end
end

View File

@ -17,7 +17,7 @@ defmodule ChickenEggWeb.Router do
scope "/", ChickenEggWeb do
pipe_through :browser
get "/", PageController, :home
live "/", IndexLive
end
# Other scopes may use custom stacks.

12
make_release.sh Executable file
View File

@ -0,0 +1,12 @@
#!/bin/sh
set -e
export SECRET_KEY_BASE=$(mix phx.gen.secret)
export DATABASE_URL=ecto://postgres:postgres@localhost/chicken_egg_dev
mix deps.get --only prod
MIX_ENV=prod mix compile
MIX_ENV=prod mix assets.deploy
mix phx.gen.release
MIX_ENV=prod mix release

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="154.33453mm"
height="154.33485mm"
viewBox="0 0 154.33453 154.33485"
version="1.1"
id="svg389"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="chicken.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview391"
pagecolor="#f5c9f2"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.22352941"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="false"
inkscape:zoom="1.3932941"
inkscape:cx="76.078699"
inkscape:cy="298.57301"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs386" />
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-21.653714,-27.644233)">
<path
style="fill:#ffd501;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="m 25.080774,101.56117 c 1.243978,-0.55412 19.445227,-18.875535 19.445227,-18.875535 l 1.32335,21.351625 -18.392631,0.30265 z"
id="path2722" />
<path
d="m 43.261391,107.89576 h -15.43403 c -1.6371,0 -3.20809,-0.65045 -4.36562,-1.80799 -1.15754,-1.15753 -1.80799,-2.72852 -1.80799,-4.36562 -0.004,-0.81993 0.31695,-1.60955 0.89574,-2.19107 l 18.52083,-18.520834 c 0.58152,-0.578767 1.37114,-0.899865 2.19107,-0.895738 1.6371,0 3.20809,0.650452 4.36563,1.807986 1.15753,1.157535 1.80798,2.728525 1.80798,4.365625 v 15.434031 c 0,1.6371 -0.65045,3.20809 -1.80798,4.36562 -1.15754,1.15754 -2.72853,1.80799 -4.36563,1.80799 z m -14.16897,-6.17361 h 14.16897 V 87.55318 Z"
id="path40"
style="stroke-width:0.352778" />
<path
style="fill:#ff0101;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="m 40.385341,109.12444 -8.368109,9.27161 -0.339739,8.2279 6.077468,2.65561 6.515865,-3.64144 z"
id="path2664" />
<path
d="m 37.087781,132.5902 c -2.45565,0 -4.81224,-0.97564 -6.54826,-2.71198 -1.73602,-1.73633 -2.71198,-4.09293 -2.71198,-6.54826 0.006,-2.70094 0.91916,-5.32059 2.59348,-7.43867 l 10.43305,-12.99492 v -0.001 c 0.81717,-1.02249 2.18969,-1.41799 3.42579,-0.98806 1.23472,0.43271 2.06294,1.59438 2.06844,2.90216 v 18.52083 c 0,2.45565 -0.97564,4.81224 -2.71198,6.54826 -1.73633,1.73602 -4.09292,2.71198 -6.54826,2.71198 z m 3.08681,-18.98368 -4.90855,6.17362 c -0.8158,1.00322 -1.26228,2.25721 -1.26503,3.54965 0,1.70462 1.38218,3.0868 3.08681,3.0868 1.70462,0 3.0868,-1.38218 3.0868,-3.0868 z"
id="path42"
style="stroke-width:0.352778" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="m 43.2976,79.126537 3.568,23.398953 -4.380999,6.46839 5.176196,34.13782 c 0,0 19.96893,22.718 20.352433,24.27353 0.383505,1.55553 26.733293,11.58672 26.733293,11.58672 l 22.406447,-0.87976 23.20238,-9.19891 18.20718,-16.69913 9.92958,-16.44321 2.00653,-15.13915 -10.86867,-1.4042 9.59577,-13.25056 -38.87043,-1.36118 -14.8187,-3.67036 -10.1165,-12.091888 -3.71562,-23.519127 -9.313886,-8.776092 -15.107994,-6.049281 -13.04953,0.855282 -12.223181,6.358605 -6.591527,11.796652 z"
id="path2666" />
<path
d="m 103.918,181.97909 h -1.32704 C 85.795561,181.42512 69.878931,174.34216 58.222101,162.23729 46.568081,150.13278 40.092491,133.96004 40.173991,117.15582 V 104.8086 c 0,-1.70462 1.38218,-3.08681 3.0868,-3.08681 V 86.287767 c -1.70462,0 -3.0868,-1.382184 -3.0868,-3.086806 v -3.086805 c -0.003,-9.00818 3.57328,-17.647002 9.94127,-24.017816 6.36941,-6.369403 15.00823,-9.947981 24.015,-9.947981 9.00818,0 17.64594,3.579989 24.01358,9.950803 6.367989,6.369403 9.942689,15.008225 9.939869,24.014994 0,5.731227 2.27651,11.226799 6.32918,15.278452 4.0513,4.052711 9.54687,6.329182 15.27845,6.329182 h 43.21528 c 1.24573,0.007 2.36608,0.76066 2.84014,1.91411 0.4837,1.14927 0.22738,2.47632 -0.64904,3.3638 l -10.18645,10.15612 h 7.22383 c 0.90537,-0.01 1.76939,0.37758 2.3647,1.06109 0.59394,0.6835 0.85852,1.593 0.7221,2.48874 -2.60999,17.04481 -11.23385,32.5949 -24.31274,43.83264 -13.07888,11.23914 -29.74763,17.42545 -46.99352,17.44062 z M 46.348201,107.0632 v 10.09403 c -0.0896,15.19026 5.75063,29.81537 16.2761,40.767 10.52548,10.95269 24.90788,17.36725 40.089669,17.8816 15.35395,0.27423 30.32231,-4.81753 42.32628,-14.39757 12.00255,-9.57862 20.28613,-23.04485 23.42374,-38.07883 h -10.98833 c -1.24573,-0.007 -2.36608,-0.76066 -2.84014,-1.9141 -0.48369,-1.14928 -0.22738,-2.47632 0.64904,-3.36381 l 10.18646,-10.15612 h -35.7752 c -7.36846,0 -14.43496,-2.92696 -19.64407,-8.137167 -5.21053,-5.209116 -8.13717,-12.275608 -8.13717,-19.644077 0.0165,-4.183592 -0.9343,-8.313561 -2.778129,-12.06888 -1.32292,-2.822223 -3.14332,-5.384095 -5.37175,-7.56285 -5.20911,-5.203472 -12.27137,-8.126236 -19.6342,-8.124825 -7.36423,0 -14.42543,2.92421 -19.6342,8.129058 -5.20911,5.204883 -8.13717,12.264672 -8.14422,19.627497 v 0.833719 c 1.9086,1.101055 3.08405,3.136406 3.0868,5.339997 V 101.7219 c -0.003,2.20348 -1.1782,4.23898 -3.0868,5.34 z"
id="path44"
style="stroke-width:0.352778" />
<path
style="fill:#ff0101;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="m 57.007323,54.396071 -1.536243,-17.325198 6.148682,-6.444653 9.09951,5.080505 9.518623,-1.845568 6.97874,8.469734 9.818304,-1.834441 4.992971,5.732536 0.0475,16.826717 L 90.554679,53.71956 77.367917,49.248805 66.695073,49.784376 Z"
id="path2662" />
<path
d="m 101.91069,69.774592 c -1.18787,-0.0028 -2.266869,-0.687634 -2.778119,-1.759761 -1.33255,-2.807053 -3.1502,-5.357989 -5.37175,-7.5311 -4.72934,-4.724047 -11.00349,-7.5819 -17.67205,-8.053211 -6.6682,-0.4699 -13.28137,1.478633 -18.62843,5.489928 -0.93983,0.701428 -2.19523,0.808919 -3.24114,0.278363 -1.04733,-0.527791 -1.706,-1.604046 -1.69775,-2.778125 v -16.97743 c 10e-4,-3.1502 1.37802,-6.143273 3.76908,-8.19397 2.39088,-2.051896 5.55766,-2.957265 8.67199,-2.480451 3.11298,0.47819 5.86351,2.290304 7.5311,4.963583 1.79973,-1.292613 3.95781,-1.994005 6.17361,-2.006423 2.28204,0.0041 4.50356,0.72898 6.34858,2.069818 1.84658,1.342213 3.22185,3.231515 3.9303,5.400674 3.35827,-1.845204 7.4415,-1.779058 10.73785,0.173634 3.297659,1.952696 5.317769,5.501217 5.313539,9.333442 V 66.68724 c 0.0358,1.471754 -0.97151,2.762955 -2.40743,3.086805 z M 88.946111,49.556193 c 3.43133,1.646766 6.56237,3.858683 9.26042,6.54438 l 0.67938,0.709683 v -9.1059 c 0,-2.557638 -2.07395,-4.630208 -4.63021,-4.630208 -2.55764,0 -4.63021,2.07257 -4.63021,4.630208 -0.0179,0.675252 -0.25631,1.325669 -0.67938,1.852084 z M 63.325631,33.813485 c -2.55764,0 -4.63021,2.072569 -4.63021,4.630208 v 11.42118 c 7.64116,-3.855861 16.44544,-4.724047 24.69444,-2.439141 v -5.895269 c 0,-2.557639 -2.07257,-4.630208 -4.63021,-4.630208 -2.55764,0 -4.6302,2.072569 -4.6302,4.630208 0,1.704622 -1.38219,3.086806 -3.08681,3.086806 -1.70462,0 -3.08681,-1.382184 -3.08681,-3.086806 v -3.086805 c 0,-2.557639 -2.07256,-4.630209 -4.6302,-4.630209 z"
id="path46"
style="stroke-width:0.352778" />
<path
d="m 121.54278,157.28465 h -13.45777 c -8.734069,0.01 -17.135829,-3.34589 -23.459719,-9.37049 -6.32389,-6.0246 -10.08168,-14.25434 -10.49514,-22.97888 -0.0854,-1.70463 1.22784,-3.15571 2.93247,-3.24115 1.70462,-0.0854 3.1557,1.22784 3.24114,2.93247 0.33349,7.14092 3.40649,13.87827 8.58097,18.81152 5.17454,4.93183 12.050889,7.68103 19.200279,7.67291 h 13.45777 c 2.48461,0.0813 4.64679,-1.68532 5.06306,-4.13702 0.12403,-1.31329 -0.30041,-2.62103 -1.1727,-3.61033 -0.89295,-0.96326 -2.14559,-1.51172 -3.4575,-1.5131 h -9.26042 c -1.70462,0 -3.08681,-1.38218 -3.08681,-3.0868 0,-1.70462 1.38219,-3.08681 3.08681,-3.08681 1.31191,-0.001 2.56452,-0.54984 3.4575,-1.5131 0.87232,-0.98943 1.29674,-2.29718 1.17271,-3.61033 -0.41617,-2.45152 -2.57831,-4.21816 -5.06307,-4.13702 h -8.82756 c -1.70462,0 -3.0868,-1.38218 -3.0868,-3.08681 0,-1.70462 1.38218,-3.0868 3.0868,-3.0868 1.31191,-10e-4 2.56452,-0.54984 3.45751,-1.5131 0.87231,-0.98944 1.29674,-2.29718 1.1727,-3.61033 -0.41617,-2.45152 -2.57831,-4.21816 -5.06307,-4.13702 H 92.650981 c -1.70462,0 -3.0868,-1.38219 -3.0868,-3.08681 0,-1.70462 1.38218,-3.0868 3.0868,-3.0868 h 10.370959 c 3.78672,-0.16812 7.38364,1.66468 9.47138,4.82882 2.08774,3.16258 2.3592,7.19067 0.71519,10.6052 3.62973,0.13505 6.94408,2.09462 8.81239,5.20771 1.86863,3.11436 2.03672,6.9603 0.44785,10.22632 2.97931,0.12954 5.7725,1.48001 7.72407,3.73451 1.95128,2.25583 2.88699,5.2144 2.58656,8.18021 -0.35552,2.71335 -1.69774,5.20206 -3.77048,6.98923 -2.07257,1.78731 -4.72934,2.7492 -7.46619,2.70372 z"
id="path48"
style="stroke-width:0.352778" />
<path
d="m 71.042641,72.395731 c 0,2.557639 -2.07257,4.630208 -4.63021,4.630208 -2.55764,0 -4.63021,-2.072569 -4.63021,-4.630208 0,-2.557639 2.07257,-4.630208 4.63021,-4.630208 2.55764,0 4.63021,2.072569 4.63021,4.630208"
id="path50"
style="stroke-width:0.352778" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="93.987129mm"
height="130.1048mm"
viewBox="0 0 93.987129 130.1048"
version="1.1"
id="svg1423"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="egg.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1425"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.3932941"
inkscape:cx="111.96488"
inkscape:cy="246.89691"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1420" />
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-44.537121,-12.805659)">
<path
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="m 91.917338,16.174118 14.821662,4.359487 20.92213,25.615419 7.5247,33.368586 -0.33381,26.03156 -10.46663,20.52156 -21.48588,11.92647 -17.898602,1.77806 L 56.479164,125.52848 46.9598,98.955417 49.705899,65.951052 59.019046,40.357885 75.359147,21.076594 Z"
id="path1616" />
<path
d="m 137.92956,78.342244 c -1.36151,-14.147094 -5.24334,-27.203752 -11.5369,-38.81261 -4.29118,-7.912806 -9.03428,-13.992578 -14.50093,-18.589625 -1.88655,-1.586124 -3.8862,-3.002738 -5.93795,-4.21005 -8.893882,-5.230989 -19.942881,-5.233811 -28.845228,0 -2.053273,1.20717 -4.0513,2.625161 -5.937956,4.21005 -5.466644,4.597047 -10.209741,10.678583 -14.50093,18.592447 -6.293555,11.605683 -10.174111,24.664105 -11.536891,38.81261 -2.049145,21.294725 1.176831,36.872334 9.862608,47.625004 8.306858,10.28417 22.652213,16.93192 36.544249,16.94038 h 0.0014 c 0.327974,0 0.657331,-0.001 0.983932,-0.01 13.522676,-0.29765 27.469746,-6.94407 35.538836,-16.93051 8.68715,-10.7569 11.9133,-26.334153 9.86543,-47.628525 z m -14.47342,43.899666 c -7.0171,8.68433 -19.20839,14.46671 -31.059611,14.72988 l -0.853017,0.008 c -12.175066,-0.006 -24.712435,-5.79191 -31.937324,-14.738 C 51.944208,112.7555 49.139977,98.581246 51.031924,78.906829 52.316247,65.556308 55.96658,53.258827 61.877019,42.355525 65.808727,35.107 70.095682,29.585322 74.984829,25.474403 c 1.631598,-1.372517 3.356893,-2.596233 5.129036,-3.636786 3.520899,-2.069818 7.4676,-3.107478 11.414125,-3.107478 3.949347,0 7.896225,1.034908 11.41836,3.107478 1.77077,1.041788 3.49469,2.264128 5.12621,3.636786 4.88915,4.110566 9.17646,9.632597 13.10781,16.879711 5.91044,10.90436 9.56204,23.203252 10.8451,36.554832 1.89618,19.673005 -0.9095,33.845854 -8.57003,43.331694 z"
id="path73"
sodipodi:nodetypes="ccccsccccssccccccccccccscccccc"
style="stroke-width:0.352778;stroke:#000000;stroke-opacity:1" />
<path
d="m 81.068835,36.890856 c -6.534503,5.18548 -11.515019,12.063236 -14.4018,19.887847 -2.885616,7.828491 -3.563761,16.292688 -1.959575,24.47678 0.276987,1.412487 1.517227,2.395043 2.903538,2.395043 0.190168,0 0.381705,-0.01792 0.573264,-0.05512 1.606797,-0.314195 2.652712,-1.872756 2.338528,-3.479553 -1.39319,-7.117644 -0.80338,-14.479058 1.704623,-21.286611 2.510789,-6.806141 6.843183,-12.788194 12.526433,-17.295636 1.280195,-1.016987 1.497929,-2.880113 0.47819,-4.16313 -1.018364,-1.281571 -2.877326,-1.49793 -4.163131,-0.479566 z"
id="path75"
sodipodi:nodetypes="cccsccccccc"
style="stroke-width:0.352778" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

4
sync_prod.sh Normal file
View File

@ -0,0 +1,4 @@
#!/bin/sh
set -e
rsync -vau _build/prod/rel/chicken_egg/ servi-eins:/srv/www/chicken_egg/