From afc1d2c764264ebff13f213cace20aaa67622498 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Tue, 10 Nov 2020 17:11:05 -0500 Subject: [PATCH] more groundwork for the frontend --- backend/Cargo.lock | 98 ++++++++++++++++++++++++++- backend/Cargo.toml | 5 ++ backend/Rocket.example.toml | 1 + backend/default.nix | 2 + backend/src/frontend.rs | 45 +++++++++++++ backend/src/lib.rs | 1 + backend/src/main.rs | 6 +- backend/src/rocket_trace.rs | 12 +++- backend/templates/app.html | 21 ++++++ backend/templates/notfound.html | 20 ++++++ frontend/.gitignore | 5 +- frontend/elm-srcs.nix | 10 +++ frontend/elm.json | 4 +- frontend/scripts/build-dev.sh | 4 ++ frontend/src/Main.elm | 4 +- frontend/src/Mi/Switch.elm | 15 ++--- frontend/src/Mi/WebMention.elm | 35 ++++++++++ frontend/src/Signup.elm | 115 ++++++++++++++++++++++++++++++++ shell.nix | 3 + static/.gitignore | 1 + static/favicon.ico | Bin 0 -> 1150 bytes static/favicon.png | Bin 0 -> 64742 bytes static/index.html | 1 + 23 files changed, 390 insertions(+), 18 deletions(-) create mode 100644 backend/src/frontend.rs create mode 100644 backend/templates/app.html create mode 100644 backend/templates/notfound.html create mode 100755 frontend/scripts/build-dev.sh create mode 100644 frontend/src/Mi/WebMention.elm create mode 100644 frontend/src/Signup.elm create mode 100644 static/.gitignore create mode 100644 static/favicon.ico create mode 100644 static/favicon.png create mode 120000 static/index.html diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 0e20476..076259a 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -103,6 +103,65 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "askama" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a6e7ebd44d0047fd48206c83c5cd3214acc7b9d87f001da170145c47ef7d12" +dependencies = [ + "askama_derive", + "askama_escape", + "askama_shared", + "mime 0.3.16", + "mime_guess", +] + +[[package]] +name = "askama_derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d7169690c4f56343dcd821ab834972a22570a2662a19a84fd7775d5e1c3881" +dependencies = [ + "askama_shared", + "proc-macro2 1.0.21", + "quote 1.0.7", + "syn 1.0.40", +] + +[[package]] +name = "askama_escape" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90c108c1a94380c89d2215d0ac54ce09796823cca0fd91b299cfff3b33e346fb" + +[[package]] +name = "askama_rocket" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40428c13bd027adfd481391729b85bf9961b59e5b21bb55e80f603d19d054583" +dependencies = [ + "askama", + "rocket", +] + +[[package]] +name = "askama_shared" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62fc272363345c8cdc030e4c259d9d028237f8b057dc9bb327772a257bde6bb5" +dependencies = [ + "askama_escape", + "humansize", + "nom", + "num-traits", + "percent-encoding 2.1.0", + "proc-macro2 1.0.21", + "quote 1.0.7", + "serde", + "syn 1.0.40", + "toml 0.5.7", +] + [[package]] name = "atty" version = "0.2.14" @@ -742,6 +801,12 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" +[[package]] +name = "humansize" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" + [[package]] name = "hyper" version = "0.10.16" @@ -974,6 +1039,8 @@ checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" name = "mi" version = "1.0.0" dependencies = [ + "askama", + "askama_rocket", "chrono", "color-eyre", "diesel", @@ -1016,6 +1083,16 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +[[package]] +name = "mime_guess" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +dependencies = [ + "mime 0.3.16", + "unicase 2.6.0", +] + [[package]] name = "miniz_oxide" version = "0.4.1" @@ -1079,6 +1156,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check 0.9.2", +] + [[package]] name = "notify" version = "4.0.15" @@ -1539,7 +1626,7 @@ dependencies = [ "rocket_http", "state", "time 0.1.44", - "toml", + "toml 0.4.10", "version_check 0.9.2", "yansi", ] @@ -2053,6 +2140,15 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" +dependencies = [ + "serde", +] + [[package]] name = "tracing" version = "0.1.19" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 73df98c..3a5810e 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -7,6 +7,7 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +askama_rocket = "0.10" chrono = { version = "0.4", features = ["serde"] } color-eyre = "0.5" futures-io = "0.3" @@ -31,6 +32,10 @@ twapi-ureq = "0.1.5" ureq = { version = "1", features = ["json", "charset"] } url = "2" +[dependencies.askama] +version = "0.10" +features = [ "with-rocket" ] + [dependencies.diesel] version = "1" features = ["sqlite", "r2d2", "chrono"] diff --git a/backend/Rocket.example.toml b/backend/Rocket.example.toml index d5f04c9..0769b5c 100644 --- a/backend/Rocket.example.toml +++ b/backend/Rocket.example.toml @@ -3,6 +3,7 @@ address = "0.0.0.0" switchcounter_webhook = "..." discord_webhook = "" +asset_path = "../static" # I don't know how to generate these without using Go, sorry. These are hex-encoded # ED25519 public/private keys. diff --git a/backend/default.nix b/backend/default.nix index 8c47a24..927fba1 100644 --- a/backend/default.nix +++ b/backend/default.nix @@ -6,6 +6,7 @@ let rustc = rust; cargo = rust; }; + gruvbox = pkgs.callPackage sources.gruvbox-css { }; src = builtins.filterSource (path: type: type != "directory" || builtins.baseNameOf path != "target") ./.; @@ -13,6 +14,7 @@ in naersk.buildPackage { name = "mi_backend"; inherit src; buildInputs = with pkgs; [ openssl pkg-config sqlite libsodium ]; + GRUVBOX_CSS = "${gruvbox}/gruvbox.css"; SODIUM_USE_PKG_CONFIG = "1"; SODIUM_SHARED = "1"; } diff --git a/backend/src/frontend.rs b/backend/src/frontend.rs new file mode 100644 index 0000000..6d605e5 --- /dev/null +++ b/backend/src/frontend.rs @@ -0,0 +1,45 @@ +use askama::Template; +use rocket::{fairing::AdHoc, response::content::Css, Request}; + +#[derive(Template)] +#[template(path = "app.html")] +struct App { + title: String, + message: String, +} + +#[get("/")] +fn frontend() -> App { + App { + title: "Mi".to_string(), + message: "Loading...".to_string(), + } +} + +#[derive(Template)] +#[template(path = "notfound.html")] +struct NotFound { + title: String, + message: String, +} + +#[catch(404)] +fn not_found(req: &Request) -> NotFound { + NotFound { + title: "Not found".to_string(), + message: format!("{} not found", req.uri()), + } +} + +#[get("/static/gruvbox.css")] +fn gruvbox() -> Css { + Css(include_str!(env!("GRUVBOX_CSS")).to_string()) +} + +pub fn fairing() -> AdHoc { + AdHoc::on_attach("frontend integration", |rocket| { + Ok(rocket + .register(catchers![not_found]) + .mount("/", routes![frontend, gruvbox])) + }) +} diff --git a/backend/src/lib.rs b/backend/src/lib.rs index e11501b..27d4bd7 100644 --- a/backend/src/lib.rs +++ b/backend/src/lib.rs @@ -19,6 +19,7 @@ pub const APPLICATION_NAME: &str = concat!( ); pub mod api; +pub mod frontend; pub mod models; pub mod paseto; pub mod rocket_trace; diff --git a/backend/src/main.rs b/backend/src/main.rs index b094231..29f3082 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -11,7 +11,7 @@ use rocket_contrib::helmet::SpaceHelmet; use rocket_cors::{AllowedHeaders, AllowedOrigins}; use rocket_prometheus::PrometheusMetrics; -use ::mi::{api, paseto, rocket_trace::*, web::*, MainDatabase, APPLICATION_NAME}; +use ::mi::{api, frontend, paseto, rocket_trace::*, web::*, MainDatabase, APPLICATION_NAME}; #[get("/.within/botinfo")] fn botinfo() -> &'static str { @@ -58,8 +58,10 @@ fn main() -> Result<()> { rocket::ignite() .attach(prometheus.clone()) .attach(cors) - .attach(MainDatabase::fairing()) .attach(SpaceHelmet::default()) + .attach(static_files()) + .attach(frontend::fairing()) + .attach(MainDatabase::fairing()) .attach(RequestId {}) .attach(paseto::ed25519_keypair()) .attach(DiscordWebhook::fairing()) diff --git a/backend/src/rocket_trace.rs b/backend/src/rocket_trace.rs index ec5c39b..770036f 100644 --- a/backend/src/rocket_trace.rs +++ b/backend/src/rocket_trace.rs @@ -1,8 +1,10 @@ -use rocket::fairing::{Fairing, Info, Kind}; +use rocket::fairing::{AdHoc, Fairing, Info, Kind}; use rocket::http::Header; use rocket::{Data, Request, Response}; +use rocket_contrib::serve::StaticFiles; use rusty_ulid::generate_ulid_string; +#[derive(Default)] pub struct RequestId; impl Fairing for RequestId { @@ -32,3 +34,11 @@ impl Fairing for RequestId { }; } } + +pub fn static_files() -> AdHoc { + AdHoc::on_attach("Static fileserver", |rocket| { + let asset_path = rocket.config().get_string("asset_path").unwrap(); + + Ok(rocket.mount("/static", StaticFiles::from(asset_path))) + }) +} diff --git a/backend/templates/app.html b/backend/templates/app.html new file mode 100644 index 0000000..0169643 --- /dev/null +++ b/backend/templates/app.html @@ -0,0 +1,21 @@ + + + + {{ title }} + + + + + + +
+
{{ message }}
+ + +
+ + diff --git a/backend/templates/notfound.html b/backend/templates/notfound.html new file mode 100644 index 0000000..ef52661 --- /dev/null +++ b/backend/templates/notfound.html @@ -0,0 +1,20 @@ + + + + {{ title }} + + + + + + +
+ +

{{ title }}

+

{{ message }}

+ Go home +
+ + diff --git a/frontend/.gitignore b/frontend/.gitignore index 8cc1f65..d86ae43 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,3 +1,2 @@ -index.html -index.js -elm-stuff \ No newline at end of file +elm-stuff +elm.js \ No newline at end of file diff --git a/frontend/elm-srcs.nix b/frontend/elm-srcs.nix index 12b3dbd..6f79e7c 100644 --- a/frontend/elm-srcs.nix +++ b/frontend/elm-srcs.nix @@ -15,6 +15,11 @@ version = "1.0.2"; }; + "rtfeldman/elm-css" = { + sha256 = "0nxiyxyw3kw55whkpwhrcgc0dr6a8zlm2nqvsaqdw6mzkykg0ba6"; + version = "16.1.0"; + }; + "elm/core" = { sha256 = "19w0iisdd66ywjayyga4kv2p1v9rxzqjaxhckp8ni6n8i0fb2dvf"; version = "1.0.5"; @@ -50,6 +55,11 @@ version = "1.0.5"; }; + "rtfeldman/elm-hex" = { + sha256 = "1y0aa16asvwdqmgbskh5iba6psp43lkcjjw9mgzj3gsrg33lp00d"; + version = "1.0.0"; + }; + "elm/parser" = { sha256 = "0a3cxrvbm7mwg9ykynhp7vjid58zsw03r63qxipxp3z09qks7512"; version = "1.1.0"; diff --git a/frontend/elm.json b/frontend/elm.json index 564d82c..18d3742 100644 --- a/frontend/elm.json +++ b/frontend/elm.json @@ -13,13 +13,15 @@ "elm/json": "1.1.3", "elm/time": "1.0.0", "elm/url": "1.0.0", + "rtfeldman/elm-css": "16.1.0", "rtfeldman/elm-iso8601-date-strings": "1.1.3" }, "indirect": { "elm/bytes": "1.0.8", "elm/file": "1.0.5", "elm/parser": "1.1.0", - "elm/virtual-dom": "1.0.2" + "elm/virtual-dom": "1.0.2", + "rtfeldman/elm-hex": "1.0.0" } }, "test-dependencies": { diff --git a/frontend/scripts/build-dev.sh b/frontend/scripts/build-dev.sh new file mode 100755 index 0000000..03647fc --- /dev/null +++ b/frontend/scripts/build-dev.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i bash -p elmPackages.elm + +elm make ./src/Main.elm --output elm.js diff --git a/frontend/src/Main.elm b/frontend/src/Main.elm index 486a757..c2cc158 100644 --- a/frontend/src/Main.elm +++ b/frontend/src/Main.elm @@ -6,6 +6,7 @@ import Html.Attributes exposing (autofocus, class, value) import Html.Events exposing (onClick, onInput) import Mi import Mi.Switch +import Mi.WebMention -- We added a new AddTodo message type. @@ -48,7 +49,6 @@ update msg model = UpdateText newText -> { model | text = newText } - -- We append the model.text value to the end of our list of todo strings. AddTodo -> { model | text = "", todos = model.todos ++ [ model.text ] } @@ -76,4 +76,4 @@ main = { init = { text = "", todos = [] } , view = view , update = update - } \ No newline at end of file + } diff --git a/frontend/src/Mi/Switch.elm b/frontend/src/Mi/Switch.elm index 59cfd8d..e6390a4 100644 --- a/frontend/src/Mi/Switch.elm +++ b/frontend/src/Mi/Switch.elm @@ -1,12 +1,11 @@ -module Mi.Switch exposing (..) +module Mi.Switch exposing (Switch, decoder, frontURL, idURL, listURL, switchURL) -import Html exposing (..) -import Html.Attributes exposing (..) import Iso8601 import Json.Decode exposing (Decoder, field, int, map5, nullable, string) -import Time exposing (..) +import Time exposing (Posix) import Url.Builder as UB + type alias Switch = { id : String , who : String @@ -36,21 +35,21 @@ switchURL = idURL : String -> String idURL id = UB.absolute - [ "api","switches", "id", id ] + [ "api", "switches", "id", id ] [] frontURL : String frontURL = UB.absolute - ["api", "switches", "current" ] + [ "api", "switches", "current" ] [] listURL : Int -> Int -> String listURL limit page = UB.absolute - ["api", "switches", "" ] + [ "api", "switches", "" ] [ UB.int "limit" limit , UB.int "page" page - ] \ No newline at end of file + ] diff --git a/frontend/src/Mi/WebMention.elm b/frontend/src/Mi/WebMention.elm new file mode 100644 index 0000000..2efed02 --- /dev/null +++ b/frontend/src/Mi/WebMention.elm @@ -0,0 +1,35 @@ +module Mi.WebMention exposing (decoder, idURL, listURL) + +import Json.Decode exposing (Decoder, field, map3, string) +import Url.Builder as UB + + +type alias WebMention = + { id : String + , source_url : String + , target_url : String + } + + +decoder : Decoder WebMention +decoder = + map3 WebMention + (field "id" string) + (field "source_url" string) + (field "target_url" string) + + +idURL : String -> String +idURL id = + UB.absolute + [ "api", "webmention", id ] + [] + + +listURL : Int -> Int -> String +listURL limit page = + UB.absolute + [ "api", "webmention" ] + [ UB.int "limit" limit + , UB.int "page" page + ] diff --git a/frontend/src/Signup.elm b/frontend/src/Signup.elm new file mode 100644 index 0000000..5582443 --- /dev/null +++ b/frontend/src/Signup.elm @@ -0,0 +1,115 @@ +module Signup exposing (main) + +import Browser +import Css exposing (..) +import Html exposing (Attribute, Html, button, div, h1, input, text) +import Html.Attributes exposing (id, style, type_) +import Html.Events exposing (onClick, onInput) + + +type alias User = + { name : String + , email : String + , password : String + , loggedIn : Bool + } + + +initialModel : User +initialModel = + { name = "" + , email = "" + , password = "" + , loggedIn = False + } + + +view : User -> Html Msg +view user = + div [ style "margin" "auto" ] + [ h1 [ style "padding-left" "3cm" ] [ text "Sign up" ] + , Html.form formStyle + [ div [] + [ text "Name" + , input ([ id "name", type_ "text", onInput SaveName ] ++ inputStyle) [] + ] + , div [] + [ text "Email" + , input ([ id "email", type_ "email", onInput SaveEmail ] ++ inputStyle) [] + ] + , div [] + [ text "Password" + , input ([ id "password", type_ "password", onInput SavePassword ] ++ inputStyle) [] + ] + , div [] + [ button + ([ type_ "submit", onClick Signup ] ++ buttonStyle) + [ text "Create my account" ] + ] + ] + ] + + +formStyle : List (Attribute msg) +formStyle = + [ style "border-radius" "5px" + , style "background-color" "#f2f2f2" + , style "padding" "20px" + , style "width" "300px" + ] + + +inputStyle : List (Attribute msg) +inputStyle = + [ style "display" "block" + , style "width" "260px" + , style "padding" "12px 20px" + , style "margin" "8px 0" + , style "border" "none" + , style "border-radius" "4px" + ] + + +buttonStyle : List (Attribute msg) +buttonStyle = + [ style "width" "300px" + , style "background-color" "#397cd5" + , style "color" "white" + , style "padding" "14px 20px" + , style "margin-top" "10px" + , style "border" "none" + , style "border-radius" "4px" + , style "font-size" "16px" + ] + + +type Msg + = SaveName String + | SaveEmail String + | SavePassword String + | Signup + + +update : Msg -> User -> User +update message user = + case message of + SaveName name -> + { user | name = name } + + SaveEmail email -> + { user | email = email } + + SavePassword password -> + { user | password = password } + + Signup -> + { user | loggedIn = True } + + +main : Program () User Msg +main = + Browser.sandbox + { init = initialModel + , view = view + , update = update + } diff --git a/shell.nix b/shell.nix index 18f1a26..9fc2961 100644 --- a/shell.nix +++ b/shell.nix @@ -3,6 +3,7 @@ let pkgs = import sources.nixpkgs { overlays = [ (import sources.nixpkgs-mozilla) ]; }; rust = import ./nix/rust.nix { }; + gruvbox = pkgs.callPackage sources.gruvbox-css { }; in pkgs.mkShell rec { buildInputs = with pkgs; [ # rust @@ -26,6 +27,8 @@ in pkgs.mkShell rec { bashInteractive ]; + GRUVBOX_CSS = "${gruvbox}/gruvbox.css"; + DATABASE_URL = "./mi.db"; ROCKET_DATABASES = ''{ main_data = { url = "${DATABASE_URL}" } }''; RUST_LOG = "info"; diff --git a/static/.gitignore b/static/.gitignore new file mode 100644 index 0000000..0ae95bc --- /dev/null +++ b/static/.gitignore @@ -0,0 +1 @@ +elm.js diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8e07b5525d6c13ac776721ec9f7d2fde21ceac31 GIT binary patch literal 1150 zcmbVM+e?&D5I;eGfKNS^t+u=E+ODl;REUMOMP$%+gA6RZq+}7BsB0-mL?*=&kwHrA_;IcQ2U<~kliTyJUj@2Il?!Nhi(&a0mo1=sK>UE3)@J*!1 zK9v>6GZw>e3OIZFKFnqdRuqQUvfdc z=8t5ssj3Fd8)H;#-iFFud#Iip<=$j0Ku`Z2nJaUya>#sysNb%QJV#mi8sgnTI99L? z*MR$?>Bw;eqgncZFt~?rzI=;)on3HL?vOETZ`g~|{R2|>r~0dLFc*AxxSxFA`3@zd eU6|@K-8;$WG=3g^quwV>ZLj*`we}zQ-}wii**A{> literal 0 HcmV?d00001 diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..26e8303c942fc28d6a4a485ebc3c58295ad80da9 GIT binary patch literal 64742 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�^xXINcxEcm9j=tM0JvWDDu3DbXf!WKh_K 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
uvM$~& z`uBqcp)&4W2G>TF6%Rds`}DPQ^}{cQEERAf57ZX@bi-MbY+Jhz%e%Q@XVj0FadkFL zh_u0rbzyZ9*_63*v~o^=FRol)ca?2)5}#o1LQu5Vsy&w=_{I@MspMgutXu^aVrr8! z9ecy8`A8j$QD%^ZdI>_2$CK06}0v>D@~oLD;0Y zxVVNC1GnfC%wOu}62W~bIr?AXa<5GWHM`+3BS~rB$WmdF=qWwD!QvG8@$VL5vEJ`D z##`z(zBzxE1vHVWA&H)~uqYSunEGy8agJAE{?gkAE_^R}bW}oq7i)F=e}JfsSFYR( z(R?0081wG}MdbO=L$?%|zl2^rcHw};75>dM5XLS8|#ZP66VK3Nk? zx3KWy4+xeA@gOaC^pPapJBn+9>{R^K0vS!9Zq@<{jXmEfxNKkT_-qe}Qm@CAqD=v$t zgOAu7WY3Jj3yy&XhYJeHIb_m3Hd!#2TDq6y(p(!^VD$6WeKr_*u!vo0PCv>dJbncn zd7e$#_{_drDEuvcVSzE?iVvOruZectBLdT;HynC*HYu4OVdJZ$d{o4z}hD4>Nu=4bPP(RV$aAZ~ju6lKV5Q z>1=xpK8$L?Tw1p)Dn6=_GyBQcrk_+)R8YjVUZ+;**iLWOHM??+CImeK@{&%d2sVv& z@iGQpqMT=s%VM5iH*BT#>=>hMbDTi@^AV~n>6FpT_ctE11}QiedVso8wDMBOQ@iSE zktrOq!ze#7TVlmft82j+nL%?*$=QTqI%9?QO*{ zqeF^+xL__4btxciE8bM#+(*Xa1A-oNS(J^`P`D1?q(#yX^q@3{L4L-c3snAy_?DR~Mmi(9L| ze}7FcvloeYO%2`88Iyqll?*_MjuQC^s!w}nk5`z7wH0-x;tTk0k*mJCu6$Xmc~ej9y0}kDs?G z;%gR4NedJ>kM{8l;vjlL!nT8z1S=c@3aFlh+N7k(~MZE^N_W6)R%gvET76 zcXN(ad*yJe4Sj`Ui^Hr$Y(|%su4azi7wYZe@_|sY#h?9wlzmwAi8zP=MI426ed6S) zX=dJ#h~Q$%Z#YG&n-$}xKl>2Zybua20?QzE!@2Nm>%Q(8t07t|uDja|d8VvX5x;fS zC++HZ@qr>dI?_zZGKu`jo4Othk9^m#MI3GQx0Vzq>&UudG*iu@$$o7ig+=(7h_Oj- zSBCT5XpEothw07XD3DR2J{tShpmR3gZqjC1TxGa|X~XLe`2#QwB-O*1eH~WX)Jl`5 zrsjA|)I=)eGT$>O`*vM1yVBe&l3w|Euhq~)IEr}8O+^9-_LK*BizkPYTan@&J~!9GNq)v&r!;ce$H>9%X}l?xH&?Y8+@VqJQ-zui7~Z5-vdZarBc5zal`;a0g5lg&A8&c^j&R(Z2My2H8CMRM5FNCob> z8GKykmK$VVn|8csaE9?MT5fX1(o!DJF1@k%1h-0{TK3tSHwMFW!r}LfAb8UqQ{=hQ zP(5i}Kcq06pEKK$k~2Bb^e*0@02j7-#TB`)SV7;wH!CUiaKna~+V4)T1o^dcvnjaD zBt>lPGK6voTJO*`!}jh$>zqff6JB1qQPJ`@bL9c=#Va*m(FKf3WcIKX&*Z qI{*X!lZO9E!~bmM|A(#uolM&k{O2nEP*H+`533yiGx@;z8~+FSf53VG literal 0 HcmV?d00001 diff --git a/static/index.html b/static/index.html new file mode 120000 index 0000000..23bb9cb --- /dev/null +++ b/static/index.html @@ -0,0 +1 @@ +../frontend/app.html \ No newline at end of file