diff --git a/.gitignore b/.gitignore index 520684a..41fd1e4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,8 +11,12 @@ Cargo.lock # Added by Dioxus **/dist/** +**/.dioxus/** # Don't sync the NodeJS files. **/node_modules/** **/package-lock.json -**/package.json \ No newline at end of file +**/package.json + +# Don't put the old code in the repo. +**/.archive/** \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 8107eb2..4aaf173 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,22 @@ { - "rust-analyzer.linkedProjects": [ - "./void-fe/Cargo.toml", - "./void-fe/Cargo.toml" - ] -} \ No newline at end of file + // "rust-analyzer.cargo.extraArgs": ["--profile", "rust-analyzer"], + // // "rust-analyzer.cargo.buildScripts.invocationLocation": "root", + "rust-analyzer.cargo.target": "wasm32-unknown-unknown", + // "rust-analyzer.cargo.buildScripts.overrideCommand": ["dx", "build"], + // "rust-analyzer.check.overrideCommand": ["dx", "check"], + // "rust-analyzer.check.invocationLocation": "root", + // "rust-analyzer.check.targets": "wasm32-unknown-unknown", + // "rust-analyzer.runnables.command": "dx serve", + // "rust-analyzer.cargo.buildScripts.enable": false, + // "rust-analyzer.linkedProjects": [ + // "./Cargo.toml" + // ], + // "rust-analyzer.diagnostics.disabled": ["unresolved-proc-macro"], + // // "rust-analyzer.procMacro.enable": true, + // // "rust-analyzer.procMacro.attributes.enable": true, + // "rust-analyzer.showUnlinkedFileNotification": false, + // "rust-analyzer.hover.actions.run.enable": true, + // "rust-analyzer.hover.actions.debug.enable": true, + // "rust-analyzer.hover.documentation.enable": true, + // "rust-analyzer.hover.actions.enable": true +} diff --git a/Cargo.toml b/Cargo.toml index 7cc5462..a1b2e92 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,27 +1,26 @@ [package] -name = "void-werefox-cafe" +name = "info-werefox-cafe" version = "0.1.0" authors = ["Ada Werefox "] edition = "2021" -[workspace] -members = [ - "void-fe", - "void-be", -] - -[workspace.dependencies] -rocket = "=0.5.0" -dioxus = "0.5.0-alpha.0" -markdown = "1.0.0-alpha.16" -dioxus-ssr = "0.5.0-alpha.0" -rust-embed = { version = "8.3.0" } -once_cell = "1.17.1" +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -void-be = { path = "./void-be" } -rocket = { workspace = true } +dioxus-autofmt = "0.5.0-alpha.0" +console_error_panic_hook = "0.1.7" +log = "0.4.17" +manganis = "*" + +[dependencies.dioxus-router] +version = "0.5.0-alpha.0" +features = ["web"] [dependencies.dioxus] version = "0.5.0-alpha.0" -features = ["router"] +features = ["web", "fullstack"] + +[features] +default = [] +server = ["dioxus/axum"] +web = ["dioxus/web"] diff --git a/void-fe/Dioxus.toml b/Dioxus.toml similarity index 76% rename from void-fe/Dioxus.toml rename to Dioxus.toml index ad3765e..f8c8ec9 100644 --- a/void-fe/Dioxus.toml +++ b/Dioxus.toml @@ -1,22 +1,22 @@ [application] # App (Project) Name -name = "void-werefox-cafe" +name = "info-werefox-cafe" # Dioxus App Default Platform # desktop, web, mobile, ssr -default_platform = "web" +default_platform = "fullstack" # `build` & `serve` dist path out_dir = "dist" # resource (public) file folder -asset_dir = "../public" +asset_dir = "public" [web.app] # HTML title tag content -title = "A Letter to the Void" +title = "About A Werefox" [web.watcher] @@ -24,7 +24,7 @@ title = "A Letter to the Void" reload_html = true # which files or dirs will be watcher monitoring -watch_path = ["src", "data", "../public", "tailwind.config.js", "Dioxus.toml", "Cargo.toml", "build.rs"] +watch_path = ["src", "data", "public", "tailwind.config.js", "Dioxus.toml", "Cargo.toml"] # implement redirect on 404 index_on_404 = true diff --git a/Rocket.toml b/Rocket.toml deleted file mode 100644 index 55e9da0..0000000 --- a/Rocket.toml +++ /dev/null @@ -1,33 +0,0 @@ -[default] -port = 8345 -# workers = 16 -# max_blocking = 512 -# keep_alive = 5 -ident = "void-werefox-cafe" -# ip_header = "X-Real-IP" # set to `false` to disable -# log_level = "normal" -# temp_dir = "/tmp" -# cli_colors = true - -[debug] -port = 8234 - -[release] -address = "0.0.0.0" -secret_key = "yqXUwxWOGD6X7yZaMbRnOXsNjiDMicveyC2imK48KbM=" - -# [default.limits] -# form = "64 kB" -# json = "1 MiB" -# msgpack = "2 MiB" -# "file/jpg" = "5 MiB" - -# [default.tls] -# certs = "path/to/cert-chain.pem" -# key = "path/to/key.pem" - -# [default.shutdown] -# ctrlc = true -# signals = ["term", "hup"] -# grace = 5 -# mercy = 5 diff --git a/void-fe/src/index.css b/index.css similarity index 100% rename from void-fe/src/index.css rename to index.css diff --git a/public/emoji/18_plus.svg b/public/emoji/18_plus.svg new file mode 100644 index 0000000..d8a31c0 --- /dev/null +++ b/public/emoji/18_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/:ablobalicebongo:.gif b/public/emoji/:ablobalicebongo:.gif new file mode 100755 index 0000000..75b3ff4 Binary files /dev/null and b/public/emoji/:ablobalicebongo:.gif differ diff --git a/public/emoji/:ablobalicecry:.gif b/public/emoji/:ablobalicecry:.gif new file mode 100755 index 0000000..2ffb0cb Binary files /dev/null and b/public/emoji/:ablobalicecry:.gif differ diff --git a/public/emoji/:alice:.png b/public/emoji/:alice:.png new file mode 100755 index 0000000..3f9dfcb Binary files /dev/null and b/public/emoji/:alice:.png differ diff --git a/public/emoji/:aliceangy:.png b/public/emoji/:aliceangy:.png new file mode 100755 index 0000000..e9b6e53 Binary files /dev/null and b/public/emoji/:aliceangy:.png differ diff --git a/public/emoji/:alicecool:.png b/public/emoji/:alicecool:.png new file mode 100755 index 0000000..a4195d8 Binary files /dev/null and b/public/emoji/:alicecool:.png differ diff --git a/public/emoji/:alicecoolmlem:.png b/public/emoji/:alicecoolmlem:.png new file mode 100755 index 0000000..ed0050a Binary files /dev/null and b/public/emoji/:alicecoolmlem:.png differ diff --git a/public/emoji/:alicegaze:.png b/public/emoji/:alicegaze:.png new file mode 100755 index 0000000..20f4a48 Binary files /dev/null and b/public/emoji/:alicegaze:.png differ diff --git a/public/emoji/:alicehappy:.png b/public/emoji/:alicehappy:.png new file mode 100755 index 0000000..d834291 Binary files /dev/null and b/public/emoji/:alicehappy:.png differ diff --git a/public/emoji/:aliceheart:.png b/public/emoji/:aliceheart:.png new file mode 100755 index 0000000..99031a0 Binary files /dev/null and b/public/emoji/:aliceheart:.png differ diff --git a/public/emoji/:aliceheartblack:.png b/public/emoji/:aliceheartblack:.png new file mode 100755 index 0000000..71c2c9b Binary files /dev/null and b/public/emoji/:aliceheartblack:.png differ diff --git a/public/emoji/:aliceheartgay:.png b/public/emoji/:aliceheartgay:.png new file mode 100755 index 0000000..037025c Binary files /dev/null and b/public/emoji/:aliceheartgay:.png differ diff --git a/public/emoji/:alicehearttrans:.png b/public/emoji/:alicehearttrans:.png new file mode 100755 index 0000000..c6063c1 Binary files /dev/null and b/public/emoji/:alicehearttrans:.png differ diff --git a/public/emoji/:alicemlem:.png b/public/emoji/:alicemlem:.png new file mode 100755 index 0000000..f591226 Binary files /dev/null and b/public/emoji/:alicemlem:.png differ diff --git a/public/emoji/:alicemlemalt:.png b/public/emoji/:alicemlemalt:.png new file mode 100755 index 0000000..d0f032d Binary files /dev/null and b/public/emoji/:alicemlemalt:.png differ diff --git a/public/emoji/:alicemlemaltlong:.png b/public/emoji/:alicemlemaltlong:.png new file mode 100755 index 0000000..809d4a8 Binary files /dev/null and b/public/emoji/:alicemlemaltlong:.png differ diff --git a/public/emoji/:alicesideeye:.png b/public/emoji/:alicesideeye:.png new file mode 100755 index 0000000..24d524a Binary files /dev/null and b/public/emoji/:alicesideeye:.png differ diff --git a/public/emoji/:alicesleep:.png b/public/emoji/:alicesleep:.png new file mode 100755 index 0000000..c840e68 Binary files /dev/null and b/public/emoji/:alicesleep:.png differ diff --git a/public/emoji/:alicesweat:.png b/public/emoji/:alicesweat:.png new file mode 100755 index 0000000..c27ad41 Binary files /dev/null and b/public/emoji/:alicesweat:.png differ diff --git a/public/emoji/:alicetilde:.png b/public/emoji/:alicetilde:.png new file mode 100755 index 0000000..4c688b7 Binary files /dev/null and b/public/emoji/:alicetilde:.png differ diff --git a/public/emoji/:alicetildeheart:.png b/public/emoji/:alicetildeheart:.png new file mode 100755 index 0000000..b12c58b Binary files /dev/null and b/public/emoji/:alicetildeheart:.png differ diff --git a/public/emoji/:aliceweh:.png b/public/emoji/:aliceweh:.png new file mode 100755 index 0000000..8fb5169 Binary files /dev/null and b/public/emoji/:aliceweh:.png differ diff --git a/public/emoji/:black_heart:.svg b/public/emoji/:black_heart:.svg new file mode 100644 index 0000000..6b1f53c --- /dev/null +++ b/public/emoji/:black_heart:.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/:blobalice:.png b/public/emoji/:blobalice:.png new file mode 100755 index 0000000..97640b7 Binary files /dev/null and b/public/emoji/:blobalice:.png differ diff --git a/public/emoji/:blobalicebongo:.png b/public/emoji/:blobalicebongo:.png new file mode 100755 index 0000000..2199622 Binary files /dev/null and b/public/emoji/:blobalicebongo:.png differ diff --git a/public/emoji/:blobalicecry:.png b/public/emoji/:blobalicecry:.png new file mode 100755 index 0000000..4f97769 Binary files /dev/null and b/public/emoji/:blobalicecry:.png differ diff --git a/public/emoji/:blobalicesideeye:.png b/public/emoji/:blobalicesideeye:.png new file mode 100755 index 0000000..3fcdac0 Binary files /dev/null and b/public/emoji/:blobalicesideeye:.png differ diff --git a/public/emoji/:dragncoolmlem:.png b/public/emoji/:dragncoolmlem:.png new file mode 100644 index 0000000..2018c86 Binary files /dev/null and b/public/emoji/:dragncoolmlem:.png differ diff --git a/public/emoji/:ms_candle:.svg b/public/emoji/:ms_candle:.svg new file mode 100644 index 0000000..6630ec5 --- /dev/null +++ b/public/emoji/:ms_candle:.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/:ms_neurodiversity:.svg b/public/emoji/:ms_neurodiversity:.svg new file mode 100644 index 0000000..e9a65da --- /dev/null +++ b/public/emoji/:ms_neurodiversity:.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/:plural:.png b/public/emoji/:plural:.png new file mode 100644 index 0000000..72fb803 Binary files /dev/null and b/public/emoji/:plural:.png differ diff --git a/public/emoji/:potion_polyamory:.png b/public/emoji/:potion_polyamory:.png new file mode 100644 index 0000000..a8ce6ed Binary files /dev/null and b/public/emoji/:potion_polyamory:.png differ diff --git a/public/emoji/:qhPolyam:.png b/public/emoji/:qhPolyam:.png new file mode 100644 index 0000000..e13eb89 Binary files /dev/null and b/public/emoji/:qhPolyam:.png differ diff --git a/public/emoji/:qhPolyro:.png b/public/emoji/:qhPolyro:.png new file mode 100644 index 0000000..f36d5c9 Binary files /dev/null and b/public/emoji/:qhPolyro:.png differ diff --git a/public/emoji/:qhTrans:.png b/public/emoji/:qhTrans:.png new file mode 100644 index 0000000..46527f1 Binary files /dev/null and b/public/emoji/:qhTrans:.png differ diff --git a/public/emoji/asterisk.svg b/public/emoji/asterisk.svg new file mode 100644 index 0000000..71f7088 --- /dev/null +++ b/public/emoji/asterisk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/awoo.svg b/public/emoji/awoo.svg new file mode 100644 index 0000000..5a80966 --- /dev/null +++ b/public/emoji/awoo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/blue_heart.svg b/public/emoji/blue_heart.svg new file mode 100644 index 0000000..8e36c7a --- /dev/null +++ b/public/emoji/blue_heart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/brutaldon_logo.png b/public/emoji/brutaldon_logo.png new file mode 100644 index 0000000..6a238b4 Binary files /dev/null and b/public/emoji/brutaldon_logo.png differ diff --git a/public/emoji/computer.svg b/public/emoji/computer.svg new file mode 100644 index 0000000..05b9c88 --- /dev/null +++ b/public/emoji/computer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/crt_blue_screen.svg b/public/emoji/crt_blue_screen.svg new file mode 100644 index 0000000..46ffd46 --- /dev/null +++ b/public/emoji/crt_blue_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/crt_prompt.svg b/public/emoji/crt_prompt.svg new file mode 100644 index 0000000..ab2baaa --- /dev/null +++ b/public/emoji/crt_prompt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/element_logo.svg b/public/emoji/element_logo.svg new file mode 100644 index 0000000..b30aafe --- /dev/null +++ b/public/emoji/element_logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/emoji/female_symbol.svg b/public/emoji/female_symbol.svg new file mode 100644 index 0000000..1abbdd7 --- /dev/null +++ b/public/emoji/female_symbol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/fox.svg b/public/emoji/fox.svg new file mode 100644 index 0000000..6cbb0e2 --- /dev/null +++ b/public/emoji/fox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/gitea_logo.svg b/public/emoji/gitea_logo.svg new file mode 100644 index 0000000..afeeacb --- /dev/null +++ b/public/emoji/gitea_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/green_money.svg b/public/emoji/green_money.svg new file mode 100644 index 0000000..3d5003c --- /dev/null +++ b/public/emoji/green_money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/halcyon_logo.png b/public/emoji/halcyon_logo.png new file mode 100644 index 0000000..4468cdf Binary files /dev/null and b/public/emoji/halcyon_logo.png differ diff --git a/public/emoji/home-assistant.png b/public/emoji/home-assistant.png new file mode 100644 index 0000000..cbc5022 Binary files /dev/null and b/public/emoji/home-assistant.png differ diff --git a/public/emoji/inbox.svg b/public/emoji/inbox.svg new file mode 100644 index 0000000..8d82118 --- /dev/null +++ b/public/emoji/inbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/kanboard_logo.svg b/public/emoji/kanboard_logo.svg new file mode 100644 index 0000000..be34908 --- /dev/null +++ b/public/emoji/kanboard_logo.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + K + B + + diff --git a/public/emoji/laptop.svg b/public/emoji/laptop.svg new file mode 100644 index 0000000..6c1e23d --- /dev/null +++ b/public/emoji/laptop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/lesbian_flag.svg b/public/emoji/lesbian_flag.svg new file mode 100644 index 0000000..b8ba9a5 --- /dev/null +++ b/public/emoji/lesbian_flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/magic_wand.svg b/public/emoji/magic_wand.svg new file mode 100644 index 0000000..e7a6ad3 --- /dev/null +++ b/public/emoji/magic_wand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/mastodon-logo.png b/public/emoji/mastodon-logo.png new file mode 100644 index 0000000..ad3d73e Binary files /dev/null and b/public/emoji/mastodon-logo.png differ diff --git a/public/emoji/matrix_logo.svg b/public/emoji/matrix_logo.svg new file mode 100644 index 0000000..ef435fd --- /dev/null +++ b/public/emoji/matrix_logo.svg @@ -0,0 +1,18 @@ + + + + matrix logo white + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/emoji/minecraft.png b/public/emoji/minecraft.png new file mode 100644 index 0000000..a9690b9 Binary files /dev/null and b/public/emoji/minecraft.png differ diff --git a/public/emoji/navidrome_logo.png b/public/emoji/navidrome_logo.png new file mode 100644 index 0000000..c639fd8 Binary files /dev/null and b/public/emoji/navidrome_logo.png differ diff --git a/public/emoji/neurodiversity.svg b/public/emoji/neurodiversity.svg new file mode 100644 index 0000000..e9a65da --- /dev/null +++ b/public/emoji/neurodiversity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/nextcloud_logo.png b/public/emoji/nextcloud_logo.png new file mode 100644 index 0000000..a92179c Binary files /dev/null and b/public/emoji/nextcloud_logo.png differ diff --git a/public/emoji/no_entry.svg b/public/emoji/no_entry.svg new file mode 100644 index 0000000..cc0ccb1 --- /dev/null +++ b/public/emoji/no_entry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/page_with_pencil.svg b/public/emoji/page_with_pencil.svg new file mode 100644 index 0000000..49d6c57 --- /dev/null +++ b/public/emoji/page_with_pencil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/pansexual_flag.svg b/public/emoji/pansexual_flag.svg new file mode 100644 index 0000000..90fb95b --- /dev/null +++ b/public/emoji/pansexual_flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/peertube_logo.svg b/public/emoji/peertube_logo.svg new file mode 100644 index 0000000..6204d62 --- /dev/null +++ b/public/emoji/peertube_logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/public/emoji/pen.svg b/public/emoji/pen.svg new file mode 100644 index 0000000..5a56175 --- /dev/null +++ b/public/emoji/pen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/pi_hole_logo.svg b/public/emoji/pi_hole_logo.svg new file mode 100644 index 0000000..d052dde --- /dev/null +++ b/public/emoji/pi_hole_logo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/public/emoji/pinafore_logo.svg b/public/emoji/pinafore_logo.svg new file mode 100644 index 0000000..cb2161f --- /dev/null +++ b/public/emoji/pinafore_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/pixel_alexis.png b/public/emoji/pixel_alexis.png new file mode 100644 index 0000000..9ad0404 Binary files /dev/null and b/public/emoji/pixel_alexis.png differ diff --git a/public/emoji/polyamory_flag.svg b/public/emoji/polyamory_flag.svg new file mode 100644 index 0000000..7dd9d0a --- /dev/null +++ b/public/emoji/polyamory_flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/rainbow_flag.svg b/public/emoji/rainbow_flag.svg new file mode 100755 index 0000000..aa787ae --- /dev/null +++ b/public/emoji/rainbow_flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/red_heart.svg b/public/emoji/red_heart.svg new file mode 100644 index 0000000..8db1d74 --- /dev/null +++ b/public/emoji/red_heart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/red_question_mark.svg b/public/emoji/red_question_mark.svg new file mode 100644 index 0000000..f2fdb64 --- /dev/null +++ b/public/emoji/red_question_mark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/speech_bubble_left.svg b/public/emoji/speech_bubble_left.svg new file mode 100644 index 0000000..255e1ad --- /dev/null +++ b/public/emoji/speech_bubble_left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/studio_microphone.svg b/public/emoji/studio_microphone.svg new file mode 100644 index 0000000..787bc4f --- /dev/null +++ b/public/emoji/studio_microphone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/thought_bubble.svg b/public/emoji/thought_bubble.svg new file mode 100644 index 0000000..f771178 --- /dev/null +++ b/public/emoji/thought_bubble.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/trans_heart.png b/public/emoji/trans_heart.png new file mode 100644 index 0000000..46527f1 Binary files /dev/null and b/public/emoji/trans_heart.png differ diff --git a/public/emoji/transgender_flag.svg b/public/emoji/transgender_flag.svg new file mode 100644 index 0000000..6701f8e --- /dev/null +++ b/public/emoji/transgender_flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/twitch-logo.png b/public/emoji/twitch-logo.png new file mode 100644 index 0000000..dbe97f5 Binary files /dev/null and b/public/emoji/twitch-logo.png differ diff --git a/public/emoji/twitter-logo.png b/public/emoji/twitter-logo.png new file mode 100644 index 0000000..b30cb7c Binary files /dev/null and b/public/emoji/twitter-logo.png differ diff --git a/public/emoji/vhs.svg b/public/emoji/vhs.svg new file mode 100644 index 0000000..e786fb2 --- /dev/null +++ b/public/emoji/vhs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/western_dragon.svg b/public/emoji/western_dragon.svg new file mode 100644 index 0000000..596a7b5 --- /dev/null +++ b/public/emoji/western_dragon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/emoji/wikijs_logo.svg b/public/emoji/wikijs_logo.svg new file mode 100644 index 0000000..8e126c2 --- /dev/null +++ b/public/emoji/wikijs_logo.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/emoji/wireguard_logo.png b/public/emoji/wireguard_logo.png new file mode 100644 index 0000000..d3ec336 Binary files /dev/null and b/public/emoji/wireguard_logo.png differ diff --git a/public/emoji/world_map.svg b/public/emoji/world_map.svg new file mode 100644 index 0000000..1b0ffbc --- /dev/null +++ b/public/emoji/world_map.svg @@ -0,0 +1,74 @@ + + + + + + + + Mutant Standard emoji 2020.04 + + + + + Dzuk + http://mutant.tech/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..b162109 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/images/AliceBarista.png b/public/images/AliceBarista.png new file mode 100755 index 0000000..25ef199 Binary files /dev/null and b/public/images/AliceBarista.png differ diff --git a/public/images/AliceBarista_crop.png b/public/images/AliceBarista_crop.png new file mode 100755 index 0000000..fb13f94 Binary files /dev/null and b/public/images/AliceBarista_crop.png differ diff --git a/public/images/AliceBarista_shirt.png b/public/images/AliceBarista_shirt.png new file mode 100755 index 0000000..5eb08d7 Binary files /dev/null and b/public/images/AliceBarista_shirt.png differ diff --git a/public/images/AliceDefault.png b/public/images/AliceDefault.png new file mode 100755 index 0000000..0cc9d8b Binary files /dev/null and b/public/images/AliceDefault.png differ diff --git a/public/images/AliceEmojiAliceYay.png b/public/images/AliceEmojiAliceYay.png new file mode 100755 index 0000000..ca126b0 Binary files /dev/null and b/public/images/AliceEmojiAliceYay.png differ diff --git a/public/images/AliceHeartBlack2.png b/public/images/AliceHeartBlack2.png new file mode 100755 index 0000000..960fae8 Binary files /dev/null and b/public/images/AliceHeartBlack2.png differ diff --git a/public/images/AliceHeartDefault.png b/public/images/AliceHeartDefault.png new file mode 100755 index 0000000..1fdbcb0 Binary files /dev/null and b/public/images/AliceHeartDefault.png differ diff --git a/public/images/AliceHeartRainbow.png b/public/images/AliceHeartRainbow.png new file mode 100755 index 0000000..8b3cb15 Binary files /dev/null and b/public/images/AliceHeartRainbow.png differ diff --git a/public/images/AliceHeartTrans.png b/public/images/AliceHeartTrans.png new file mode 100755 index 0000000..b65702e Binary files /dev/null and b/public/images/AliceHeartTrans.png differ diff --git a/public/images/AliceRarrrr.png b/public/images/AliceRarrrr.png new file mode 100755 index 0000000..9251262 Binary files /dev/null and b/public/images/AliceRarrrr.png differ diff --git a/public/images/AliceWeh.png b/public/images/AliceWeh.png new file mode 100755 index 0000000..f3f0e8f Binary files /dev/null and b/public/images/AliceWeh.png differ diff --git a/public/images/AliceisSleepy.png b/public/images/AliceisSleepy.png new file mode 100755 index 0000000..6406ed3 Binary files /dev/null and b/public/images/AliceisSleepy.png differ diff --git a/public/images/CutiePair.png b/public/images/CutiePair.png new file mode 100755 index 0000000..ee4bc99 Binary files /dev/null and b/public/images/CutiePair.png differ diff --git a/public/images/Dax.jpg b/public/images/Dax.jpg new file mode 100755 index 0000000..aff0cb6 Binary files /dev/null and b/public/images/Dax.jpg differ diff --git a/public/images/Gumby.png b/public/images/Gumby.png new file mode 100644 index 0000000..4195750 Binary files /dev/null and b/public/images/Gumby.png differ diff --git a/public/images/TildeTilde.png b/public/images/TildeTilde.png new file mode 100755 index 0000000..df2f6bc Binary files /dev/null and b/public/images/TildeTilde.png differ diff --git a/public/images/TildeTildeCloud.png b/public/images/TildeTildeCloud.png new file mode 100755 index 0000000..2245dff Binary files /dev/null and b/public/images/TildeTildeCloud.png differ diff --git a/public/images/TildeTildeHeart.png b/public/images/TildeTildeHeart.png new file mode 100755 index 0000000..86947c5 Binary files /dev/null and b/public/images/TildeTildeHeart.png differ diff --git a/public/images/WereFoxCafe.png b/public/images/WereFoxCafe.png new file mode 100755 index 0000000..42529cc Binary files /dev/null and b/public/images/WereFoxCafe.png differ diff --git a/public/images/alexis_annoyed.png b/public/images/alexis_annoyed.png new file mode 100644 index 0000000..90884cb Binary files /dev/null and b/public/images/alexis_annoyed.png differ diff --git a/public/images/alexis_coffee.png b/public/images/alexis_coffee.png new file mode 100644 index 0000000..082443e Binary files /dev/null and b/public/images/alexis_coffee.png differ diff --git a/public/images/alexis_heart.png b/public/images/alexis_heart.png new file mode 100644 index 0000000..7684898 Binary files /dev/null and b/public/images/alexis_heart.png differ diff --git a/public/images/alexis_shrug.png b/public/images/alexis_shrug.png new file mode 100644 index 0000000..0afb3cd Binary files /dev/null and b/public/images/alexis_shrug.png differ diff --git a/public/images/alexis_sunglasses.png b/public/images/alexis_sunglasses.png new file mode 100644 index 0000000..135fe1b Binary files /dev/null and b/public/images/alexis_sunglasses.png differ diff --git a/public/images/alexis_wink.png b/public/images/alexis_wink.png new file mode 100644 index 0000000..cb7a52d Binary files /dev/null and b/public/images/alexis_wink.png differ diff --git a/public/images/alexis_witch.jpg b/public/images/alexis_witch.jpg new file mode 100644 index 0000000..abf290b Binary files /dev/null and b/public/images/alexis_witch.jpg differ diff --git a/public/images/alice_Furtive.svg b/public/images/alice_Furtive.svg new file mode 100755 index 0000000..c7bae57 --- /dev/null +++ b/public/images/alice_Furtive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_Shades.svg b/public/images/alice_Shades.svg new file mode 100755 index 0000000..c981501 --- /dev/null +++ b/public/images/alice_Shades.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_Shadesmlem.svg b/public/images/alice_Shadesmlem.svg new file mode 100755 index 0000000..db2a904 --- /dev/null +++ b/public/images/alice_Shadesmlem.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_Sweatdrop.svg b/public/images/alice_Sweatdrop.svg new file mode 100755 index 0000000..95f5c22 --- /dev/null +++ b/public/images/alice_Sweatdrop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_TWT.svg b/public/images/alice_TWT.svg new file mode 100755 index 0000000..5e5fb58 --- /dev/null +++ b/public/images/alice_TWT.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_blobderg.svg b/public/images/alice_blobderg.svg new file mode 100755 index 0000000..19904c7 --- /dev/null +++ b/public/images/alice_blobderg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_bongo-alternating-upleft.svg b/public/images/alice_bongo-alternating-upleft.svg new file mode 100755 index 0000000..34043b1 --- /dev/null +++ b/public/images/alice_bongo-alternating-upleft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_bongo-alternating-upright.svg b/public/images/alice_bongo-alternating-upright.svg new file mode 100755 index 0000000..0d3cba9 --- /dev/null +++ b/public/images/alice_bongo-alternating-upright.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_bongo-down.svg b/public/images/alice_bongo-down.svg new file mode 100755 index 0000000..5598042 --- /dev/null +++ b/public/images/alice_bongo-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_bongo-up.svg b/public/images/alice_bongo-up.svg new file mode 100755 index 0000000..6987f94 --- /dev/null +++ b/public/images/alice_bongo-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/alice_ref_sheet.jpg b/public/images/alice_ref_sheet.jpg new file mode 100644 index 0000000..80f628c Binary files /dev/null and b/public/images/alice_ref_sheet.jpg differ diff --git a/public/images/alice_sideeye.svg b/public/images/alice_sideeye.svg new file mode 100755 index 0000000..bc41147 --- /dev/null +++ b/public/images/alice_sideeye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/avie.png b/public/images/avie.png new file mode 100644 index 0000000..dd812b2 Binary files /dev/null and b/public/images/avie.png differ diff --git a/public/images/bunny_jane_alice_barista.png b/public/images/bunny_jane_alice_barista.png new file mode 100755 index 0000000..ffaab53 Binary files /dev/null and b/public/images/bunny_jane_alice_barista.png differ diff --git a/public/images/eri.png b/public/images/eri.png new file mode 100755 index 0000000..22443e4 Binary files /dev/null and b/public/images/eri.png differ diff --git a/public/images/gumby.jpg b/public/images/gumby.jpg new file mode 100644 index 0000000..9aaa0f6 Binary files /dev/null and b/public/images/gumby.jpg differ diff --git a/public/images/heather_AliceBarista.png b/public/images/heather_AliceBarista.png new file mode 100755 index 0000000..1d38253 Binary files /dev/null and b/public/images/heather_AliceBarista.png differ diff --git a/public/images/hero_image.png b/public/images/hero_image.png new file mode 100755 index 0000000..16a09e4 Binary files /dev/null and b/public/images/hero_image.png differ diff --git a/public/images/holly.png b/public/images/holly.png new file mode 100644 index 0000000..51e7f47 Binary files /dev/null and b/public/images/holly.png differ diff --git a/public/images/karma.png b/public/images/karma.png new file mode 100755 index 0000000..ea79ddc Binary files /dev/null and b/public/images/karma.png differ diff --git a/public/images/kofi_logo.png b/public/images/kofi_logo.png new file mode 100644 index 0000000..34bb341 Binary files /dev/null and b/public/images/kofi_logo.png differ diff --git a/public/images/liberapay_donate.svg b/public/images/liberapay_donate.svg new file mode 100644 index 0000000..1ca05be --- /dev/null +++ b/public/images/liberapay_donate.svg @@ -0,0 +1 @@ +Donate \ No newline at end of file diff --git a/public/images/lindsays.png b/public/images/lindsays.png new file mode 100755 index 0000000..ee15bd3 Binary files /dev/null and b/public/images/lindsays.png differ diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000..291dad1 Binary files /dev/null and b/public/images/logo.png differ diff --git a/public/images/mascot_image.png b/public/images/mascot_image.png new file mode 100755 index 0000000..6653a11 Binary files /dev/null and b/public/images/mascot_image.png differ diff --git a/public/images/patreon_logo.png b/public/images/patreon_logo.png new file mode 100644 index 0000000..b1ee074 Binary files /dev/null and b/public/images/patreon_logo.png differ diff --git a/public/images/server_thumbnail.jpg b/public/images/server_thumbnail.jpg new file mode 100755 index 0000000..4b034e5 Binary files /dev/null and b/public/images/server_thumbnail.jpg differ diff --git a/public/images/thufie.png b/public/images/thufie.png new file mode 100755 index 0000000..2b6c04f Binary files /dev/null and b/public/images/thufie.png differ diff --git a/public/images/werefox_logo.svg b/public/images/werefox_logo.svg new file mode 100644 index 0000000..ddf76bb --- /dev/null +++ b/public/images/werefox_logo.svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/public/styles/tailwind.min.css b/public/styles/tailwind.min.css index 12e5cd4..316b563 100644 --- a/public/styles/tailwind.min.css +++ b/public/styles/tailwind.min.css @@ -1 +1 @@ -/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1rem;padding-left:1rem}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px;padding-right:0;padding-left:0}}@media (min-width:1536px){.container{max-width:1536px}}.static{position:static}.mx-auto{margin-left:auto;margin-right:auto}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.flex{display:flex}.hidden{display:none}.min-h-screen{min-height:100vh}.max-w-3xl{max-width:48rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.basis-full{flex-basis:100%}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.justify-center{justify-content:center}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.bg-alice-werefox-grey{--tw-bg-opacity:1;background-color:rgb(36 36 36/var(--tw-bg-opacity))}.bg-alice-werefox-grey-dark{--tw-bg-opacity:1;background-color:rgb(18 18 18/var(--tw-bg-opacity))}.bg-alice-werefox-grey-light{--tw-bg-opacity:1;background-color:rgb(204 204 204/var(--tw-bg-opacity))}.bg-alice-werefox-grey-lightest{--tw-bg-opacity:1;background-color:rgb(238 238 238/var(--tw-bg-opacity))}.p-2{padding:.5rem}.p-4{padding:1rem}.py-4{padding-top:1rem}.pb-4,.py-4{padding-bottom:1rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-nerd{font-family:DejaVuSansMono}.font-open{font-family:OpenDyslexic}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-alice-werefox-grey-dark{--tw-text-opacity:1;color:rgb(18 18 18/var(--tw-text-opacity))}.text-alice-werefox-grey-light{--tw-text-opacity:1;color:rgb(204 204 204/var(--tw-text-opacity))}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2,.ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-alice-werefox-red{--tw-ring-opacity:1;--tw-ring-color:rgb(201 52 57/var(--tw-ring-opacity))}.ring-alice-werefox-red-dark{--tw-ring-opacity:1;--tw-ring-color:rgb(128 0 8/var(--tw-ring-opacity))}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@font-face{font-family:OpenDyslexic;src:url(/fonts/OpenDyslexic-Regular.otf)}@font-face{font-family:DejaVuSansMono;src:url(/fonts/DejaVuSansMono.ttf)}.before\:content-\[\'Open\'\]:before{--tw-content:"Open";content:var(--tw-content)}@keyframes yip{0%,to{transform:scale(1)}50%{transform:scale(1.01)}}.hover\:animate-yip:hover{animation:yip .1s ease-in-out}.hover\:text-alice-werefox-blue-dark:hover{--tw-text-opacity:1;color:rgb(51 0 255/var(--tw-text-opacity))}.hover\:text-alice-werefox-blue-light:hover{--tw-text-opacity:1;color:rgb(145 151 243/var(--tw-text-opacity))}.hover\:ring-alice-werefox-blue:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(27 41 224/var(--tw-ring-opacity))}.group[open] .group-open\:before\:content-\[\'Close\'\]:before{--tw-content:"Close";content:var(--tw-content)}@media (min-width:768px){.md\:flex-row{flex-direction:row}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.md\:pl-8{padding-left:2rem}.md\:pr-8{padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\:bg-alice-werefox-grey{--tw-bg-opacity:1;background-color:rgb(36 36 36/var(--tw-bg-opacity))}.dark\:bg-alice-werefox-grey-dark{--tw-bg-opacity:1;background-color:rgb(18 18 18/var(--tw-bg-opacity))}.dark\:text-alice-werefox-grey-light{--tw-text-opacity:1;color:rgb(204 204 204/var(--tw-text-opacity))}.dark\:ring-alice-werefox-red{--tw-ring-opacity:1;--tw-ring-color:rgb(201 52 57/var(--tw-ring-opacity))}.dark\:hover\:text-alice-werefox-blue-light:hover{--tw-text-opacity:1;color:rgb(145 151 243/var(--tw-text-opacity))}.dark\:hover\:ring-alice-werefox-blue:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(27 41 224/var(--tw-ring-opacity))}} \ No newline at end of file +/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1rem;padding-left:1rem}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px;padding-right:0;padding-left:0}}@media (min-width:1536px){.container{max-width:1536px}}.static{position:static}.relative{position:relative}.mx-auto{margin-left:auto;margin-right:auto}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.flex{display:flex}.hidden{display:none}.min-h-screen{min-height:100vh}.max-w-3xl{max-width:48rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.basis-full{flex-basis:100%}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.justify-center{justify-content:center}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.bg-alice-werefox-grey{--tw-bg-opacity:1;background-color:rgb(36 36 36/var(--tw-bg-opacity))}.bg-alice-werefox-grey-dark{--tw-bg-opacity:1;background-color:rgb(18 18 18/var(--tw-bg-opacity))}.bg-alice-werefox-grey-light{--tw-bg-opacity:1;background-color:rgb(204 204 204/var(--tw-bg-opacity))}.bg-alice-werefox-grey-lightest{--tw-bg-opacity:1;background-color:rgb(238 238 238/var(--tw-bg-opacity))}.p-2{padding:.5rem}.p-4{padding:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-4{padding-top:1rem}.pb-4,.py-4{padding-bottom:1rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-nerd{font-family:DejaVuSansMono}.font-open{font-family:OpenDyslexic}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-alice-werefox-grey-dark{--tw-text-opacity:1;color:rgb(18 18 18/var(--tw-text-opacity))}.text-alice-werefox-grey-light{--tw-text-opacity:1;color:rgb(204 204 204/var(--tw-text-opacity))}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2,.ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-alice-werefox-red{--tw-ring-opacity:1;--tw-ring-color:rgb(201 52 57/var(--tw-ring-opacity))}.ring-alice-werefox-red-dark{--tw-ring-opacity:1;--tw-ring-color:rgb(128 0 8/var(--tw-ring-opacity))}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@font-face{font-family:OpenDyslexic;src:url(/fonts/OpenDyslexic-Regular.otf)}@font-face{font-family:DejaVuSansMono;src:url(/fonts/DejaVuSansMono.ttf)}.before\:content-\[\'Open\'\]:before{--tw-content:"Open";content:var(--tw-content)}@keyframes yip{0%,to{transform:scale(1)}50%{transform:scale(1.01)}}.hover\:animate-yip:hover{animation:yip .1s ease-in-out}.hover\:text-alice-werefox-blue-dark:hover{--tw-text-opacity:1;color:rgb(51 0 255/var(--tw-text-opacity))}.hover\:text-alice-werefox-blue-light:hover{--tw-text-opacity:1;color:rgb(145 151 243/var(--tw-text-opacity))}.hover\:ring-alice-werefox-blue:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(27 41 224/var(--tw-ring-opacity))}.group[open] .group-open\:before\:content-\[\'Close\'\]:before{--tw-content:"Close";content:var(--tw-content)}@media (min-width:768px){.md\:flex-row{flex-direction:row}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.md\:pl-8{padding-left:2rem}.md\:pr-8{padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\:bg-alice-werefox-grey{--tw-bg-opacity:1;background-color:rgb(36 36 36/var(--tw-bg-opacity))}.dark\:bg-alice-werefox-grey-dark{--tw-bg-opacity:1;background-color:rgb(18 18 18/var(--tw-bg-opacity))}.dark\:text-alice-werefox-grey-light{--tw-text-opacity:1;color:rgb(204 204 204/var(--tw-text-opacity))}.dark\:ring-alice-werefox-red{--tw-ring-opacity:1;--tw-ring-color:rgb(201 52 57/var(--tw-ring-opacity))}.dark\:hover\:text-alice-werefox-blue-light:hover{--tw-text-opacity:1;color:rgb(145 151 243/var(--tw-text-opacity))}.dark\:hover\:ring-alice-werefox-blue:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(27 41 224/var(--tw-ring-opacity))}} \ No newline at end of file diff --git a/public/tailwind.css b/public/tailwind.css new file mode 100644 index 0000000..afe7654 --- /dev/null +++ b/public/tailwind.css @@ -0,0 +1,1169 @@ +/* +! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.container { + width: 100%; + margin-right: auto; + margin-left: auto; + padding-right: 1rem; + padding-left: 1rem; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + padding-right: 0rem; + padding-left: 0rem; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.static { + position: static; +} + +.relative { + position: relative; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.ml-1 { + margin-left: 0.25rem; +} + +.ml-2 { + margin-left: 0.5rem; +} + +.ml-4 { + margin-left: 1rem; +} + +.mr-1 { + margin-right: 0.25rem; +} + +.mr-2 { + margin-right: 0.5rem; +} + +.mr-4 { + margin-right: 1rem; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.hidden { + display: none; +} + +.h-6 { + height: 1.5rem; +} + +.h-8 { + height: 2rem; +} + +.h-4 { + height: 1rem; +} + +.min-h-screen { + min-height: 100vh; +} + +.min-h-full { + min-height: 100%; +} + +.w-6 { + width: 1.5rem; +} + +.w-8 { + width: 2rem; +} + +.w-full { + width: 100%; +} + +.w-4 { + width: 1rem; +} + +.min-w-full { + min-width: 100%; +} + +.max-w-3xl { + max-width: 48rem; +} + +.max-w-fit { + max-width: -moz-fit-content; + max-width: fit-content; +} + +.max-w-full { + max-width: 100%; +} + +.max-w-sm { + max-width: 24rem; +} + +.flex-1 { + flex: 1 1 0%; +} + +.basis-full { + flex-basis: 100%; +} + +.-scale-100 { + --tw-scale-x: -1; + --tw-scale-y: -1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.scale-50 { + --tw-scale-x: .5; + --tw-scale-y: .5; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.-scale-x-100 { + --tw-scale-x: -1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +@keyframes bounce { + 0%, 100% { + transform: translateY(-25%); + animation-timing-function: cubic-bezier(0.8,0,1,1); + } + + 50% { + transform: none; + animation-timing-function: cubic-bezier(0,0,0.2,1); + } +} + +.animate-bounce { + animation: bounce 1s infinite; +} + +@keyframes wiggle { + 0%, 100% { + transform: rotate(-1deg); + } + + 50% { + transform: rotate(1deg); + } +} + +.animate-wiggle { + animation: wiggle 7s ease-in-out infinite; +} + +@keyframes jiggle { + 0%, 100% { + transform: rotate(0deg); + } + + 25% { + transform: rotate(-10deg); + } + + 75% { + transform: rotate(10deg); + } +} + +.animate-jiggle { + animation: jiggle 5s cubic-bezier(0.75,0.25,0.25,0.75) infinite; +} + +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} + +.grid-rows-9 { + grid-template-rows: repeat(9, minmax(0, 1fr)); +} + +.flex-row { + flex-direction: row; +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.gap-0 { + gap: 0px; +} + +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} + +.space-y-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} + +.overflow-visible { + overflow: visible; +} + +.rounded-lg { + border-radius: 0.5rem; +} + +.rounded-sm { + border-radius: 0.125rem; +} + +.bg-alice-werefox-grey { + --tw-bg-opacity: 1; + background-color: rgb(36 36 36 / var(--tw-bg-opacity)); +} + +.bg-alice-werefox-grey-dark { + --tw-bg-opacity: 1; + background-color: rgb(18 18 18 / var(--tw-bg-opacity)); +} + +.bg-alice-werefox-grey-light { + --tw-bg-opacity: 1; + background-color: rgb(204 204 204 / var(--tw-bg-opacity)); +} + +.bg-alice-werefox-grey-lightest { + --tw-bg-opacity: 1; + background-color: rgb(238 238 238 / var(--tw-bg-opacity)); +} + +.object-contain { + -o-object-fit: contain; + object-fit: contain; +} + +.p-2 { + padding: 0.5rem; +} + +.p-4 { + padding: 1rem; +} + +.p-8 { + padding: 2rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.pb-1 { + padding-bottom: 0.25rem; +} + +.pb-4 { + padding-bottom: 1rem; +} + +.pl-2 { + padding-left: 0.5rem; +} + +.pr-2 { + padding-right: 0.5rem; +} + +.pt-1 { + padding-top: 0.25rem; +} + +.pt-4 { + padding-top: 1rem; +} + +.text-center { + text-align: center; +} + +.align-top { + vertical-align: top; +} + +.align-middle { + vertical-align: middle; +} + +.font-nerd { + font-family: DejaVuSansMono; +} + +.font-open { + font-family: OpenDyslexic; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.text-alice-werefox-grey-dark { + --tw-text-opacity: 1; + color: rgb(18 18 18 / var(--tw-text-opacity)); +} + +.text-alice-werefox-grey-light { + --tw-text-opacity: 1; + color: rgb(204 204 204 / var(--tw-text-opacity)); +} + +.text-alice-werefox-red-dark { + --tw-text-opacity: 1; + color: rgb(128 0 8 / var(--tw-text-opacity)); +} + +.text-alice-werefox-red-darker { + --tw-text-opacity: 1; + color: rgb(85 0 6 / var(--tw-text-opacity)); +} + +.ring-2 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + +.ring-4 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + +.ring-alice-werefox-grey { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(36 36 36 / var(--tw-ring-opacity)); +} + +.ring-alice-werefox-red { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(201 52 57 / var(--tw-ring-opacity)); +} + +.ring-alice-werefox-red-dark { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(128 0 8 / var(--tw-ring-opacity)); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +@font-face { + font-family: "OpenDyslexic"; + + src: url("/fonts/OpenDyslexic-Regular.otf"); +} + +@font-face { + font-family: "DejaVuSansMono"; + + src: url("/fonts/DejaVuSansMono.ttf"); +} + +.before\:content-\[\'Open\'\]::before { + --tw-content: 'Open'; + content: var(--tw-content); +} + +@keyframes yip { + 0%, 100% { + transform: scale(1, 1); + } + + 50% { + transform: scale(1.01, 1.01); + } +} + +.hover\:animate-yip:hover { + animation: yip 0.1s ease-in-out; +} + +.hover\:text-alice-werefox-blue-dark:hover { + --tw-text-opacity: 1; + color: rgb(51 0 255 / var(--tw-text-opacity)); +} + +.hover\:text-alice-werefox-blue-light:hover { + --tw-text-opacity: 1; + color: rgb(145 151 243 / var(--tw-text-opacity)); +} + +.hover\:ring-alice-werefox-blue:hover { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(27 41 224 / var(--tw-ring-opacity)); +} + +.hover\:ring-alice-werefox-blue-dark:hover { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(51 0 255 / var(--tw-ring-opacity)); +} + +.focus\:text-alice-werefox-blue-dark:focus { + --tw-text-opacity: 1; + color: rgb(51 0 255 / var(--tw-text-opacity)); +} + +.group[open] .group-open\:before\:content-\[\'Close\'\]::before { + --tw-content: 'Close'; + content: var(--tw-content); +} + +@media (min-width: 640px) { + .sm\:h-6 { + height: 1.5rem; + } + + .sm\:w-6 { + width: 1.5rem; + } + + .sm\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .sm\:grid-rows-2 { + grid-template-rows: repeat(2, minmax(0, 1fr)); + } + + .sm\:gap-2 { + gap: 0.5rem; + } + + .sm\:text-lg { + font-size: 1.125rem; + line-height: 1.75rem; + } +} + +@media (min-width: 768px) { + .md\:flex-row { + flex-direction: row; + } + + .md\:space-y-0 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0px * var(--tw-space-y-reverse)); + } + + .md\:px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; + } + + .md\:pl-8 { + padding-left: 2rem; + } + + .md\:pr-8 { + padding-right: 2rem; + } +} + +@media (min-width: 1280px) { + .xl\:grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + + .xl\:grid-rows-1 { + grid-template-rows: repeat(1, minmax(0, 1fr)); + } +} + +@media (prefers-color-scheme: dark) { + .dark\:bg-alice-werefox-grey { + --tw-bg-opacity: 1; + background-color: rgb(36 36 36 / var(--tw-bg-opacity)); + } + + .dark\:bg-alice-werefox-grey-dark { + --tw-bg-opacity: 1; + background-color: rgb(18 18 18 / var(--tw-bg-opacity)); + } + + .dark\:text-alice-werefox-grey-light { + --tw-text-opacity: 1; + color: rgb(204 204 204 / var(--tw-text-opacity)); + } + + .dark\:text-alice-werefox-grey-lightest { + --tw-text-opacity: 1; + color: rgb(238 238 238 / var(--tw-text-opacity)); + } + + .dark\:text-alice-werefox-red-light { + --tw-text-opacity: 1; + color: rgb(224 133 135 / var(--tw-text-opacity)); + } + + .dark\:ring-alice-werefox-grey-darker { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity)); + } + + .dark\:ring-alice-werefox-red { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(201 52 57 / var(--tw-ring-opacity)); + } + + .dark\:hover\:text-alice-werefox-blue-light:hover { + --tw-text-opacity: 1; + color: rgb(145 151 243 / var(--tw-text-opacity)); + } + + .dark\:hover\:ring-alice-werefox-blue:hover { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(27 41 224 / var(--tw-ring-opacity)); + } + + .dark\:focus\:text-alice-werefox-blue-light:focus { + --tw-text-opacity: 1; + color: rgb(145 151 243 / var(--tw-text-opacity)); + } +} diff --git a/src/components.rs b/src/components.rs new file mode 100644 index 0000000..d7b1ad1 --- /dev/null +++ b/src/components.rs @@ -0,0 +1,11 @@ +pub mod basic_page; +pub mod werefox_card; +pub mod werefox_card_title; +pub mod introduction_card; +pub mod footer_card; +pub mod footer_button; +pub mod title_card; +pub mod home_page; +pub mod page_button; +pub mod identity_button; +pub mod project_card; \ No newline at end of file diff --git a/src/components/basic_page.rs b/src/components/basic_page.rs new file mode 100644 index 0000000..7671540 --- /dev/null +++ b/src/components/basic_page.rs @@ -0,0 +1,22 @@ +use crate::components::footer_card::*; +use crate::components::title_card::*; +use dioxus::prelude::*; + +#[component] +pub fn BasicPage(page_title: String, children: Element) -> Element { + rsx! { + div { class: "min-h-screen bg-alice-werefox-grey-light dark:bg-alice-werefox-grey font-nerd", + head { + link { rel: "me", href: "https://bark.lgbt/@alicew" } + link { rel: "me", href: "https://dragon.style/@alice" } + link { rel: "me", href: "https://mspsocial.net/@alice" } + link { rel: "icon", href: "/favicon.ico" } + } + div { class: "container space-y-4 mx-auto px-4 py-4", + TitleCard { card_title: page_title } + {children}, + FooterCard {} + } + } + } +} diff --git a/src/components/footer_button.rs b/src/components/footer_button.rs new file mode 100644 index 0000000..4bbc1e2 --- /dev/null +++ b/src/components/footer_button.rs @@ -0,0 +1,15 @@ +use dioxus::prelude::*; +use dioxus_router::prelude::*; + +#[component] +pub fn FooterButton(url: String, inner_text: String) -> Element { + rsx! { + div { class: "flex-1 overflow-visible", + Link { to: "{url}", + div { class: "ml-1 mr-1 rounded-sm ring-2 ring-alice-werefox-red-dark dark:ring-alice-werefox-red hover:ring-alice-werefox-blue-dark dark:hover:ring-alice-werefox-blue text-alice-werefox-red-darker dark:text-alice-werefox-red-light hover:text-alice-werefox-blue-dark dark:hover:text-alice-werefox-blue-light transition", + p { class: "pl-2 pr-2 text-center sm:text-md text-sm", "{inner_text}" } + } + } + } + } +} diff --git a/src/components/footer_card.rs b/src/components/footer_card.rs new file mode 100644 index 0000000..fa72080 --- /dev/null +++ b/src/components/footer_card.rs @@ -0,0 +1,29 @@ +use dioxus::prelude::*; +use crate::components::footer_button::*; + +#[component] +pub fn FooterCard() -> Element { + rsx! { + footer { class: "p-4 space-y-2 rounded-lg ring-2 ring-alice-werefox-grey dark:ring-alice-werefox-grey-darker bg-alice-werefox-grey-lightest dark:bg-alice-werefox-grey-dark", + div { class: "flex text-alice-werefox-red-darker dark:text-alice-werefox-red-light", + div { class: "flex-1" } + FooterButton { url: "https://info.werefox.cafe/contacts", inner_text: "Contact" } + FooterButton { url: "https://gitea.werefox.cafe/ada/werefox-cafe", inner_text: " /src" } + div { class: "flex-1" } + } + div { class: "text-center text-xs text-alice-werefox-grey-darkest dark:text-alice-werefox-grey-lightest", + "This site uses" + div { class: "inline-block pt-1 pb-1", + FooterButton { url: "https://mutant.tech", inner_text: "Mutant Standard emoji" } + } + ", which are licensed under a" + div { class: "inline-block pt-1 pb-1", + FooterButton { + url: "https://creativecommons.org/licenses/by-nc-sa/4.0/", + inner_text: "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License" + } + } + } + } + } +} \ No newline at end of file diff --git a/src/components/home_page.rs b/src/components/home_page.rs new file mode 100644 index 0000000..d74fe09 --- /dev/null +++ b/src/components/home_page.rs @@ -0,0 +1,23 @@ +use crate::components::footer_card::FooterCard; +use crate::components::title_card::TitleCard; +use dioxus::prelude::*; + +#[component] +pub fn HomePage(page_title: String, card_title: String, children: Element) -> Element { + rsx! { + div { class: "min-h-screen bg-alice-werefox-grey-light dark:bg-alice-werefox-grey font-nerd", + head { + title { "{page_title}" } + link { rel: "icon", href: "/favicon.ico" } + link { rel: "me", href: "https://bark.lgbt/@alicew" } + link { rel: "me", href: "https://dragon.style/@alice" } + link { rel: "me", href: "https://mspsocial.net/@alice" } + } + div { class: "container space-y-4 mx-auto px-4 py-4", + TitleCard { card_title: card_title } + {children}, + FooterCard {} + } + } + } +} diff --git a/src/components/identity_button.rs b/src/components/identity_button.rs new file mode 100644 index 0000000..275eb95 --- /dev/null +++ b/src/components/identity_button.rs @@ -0,0 +1,17 @@ +use dioxus::prelude::*; +use crate::utils::prop_structs::ImageProps; + +#[component] +pub fn IdentityButton(button_text: String, image_props: ImageProps) -> Element { + rsx! { + div { class: "animate-wiggle container max-w-sm mx-auto md:px-2 p-2", + div { class: "block text-lg text-center rounded-sm ring-2 ring-alice-werefox-red-dark dark:ring-alice-werefox-red hover:ring-alice-werefox-blue-dark dark:hover:ring-alice-werefox-blue text-alice-werefox-red-dark dark:text-alice-werefox-red-light hover:text-alice-werefox-blue-dark dark:hover:text-alice-werefox-blue-light hover:animate-yip transition", + img { class: "relative inline-block w-4 h-4 align-middle mb-1", + src: "{image_props.src}", + alt: "{image_props.alt}" + } + " {button_text}" + } + } + } +} \ No newline at end of file diff --git a/src/components/introduction_card.rs b/src/components/introduction_card.rs new file mode 100644 index 0000000..42211e0 --- /dev/null +++ b/src/components/introduction_card.rs @@ -0,0 +1,29 @@ +use dioxus::prelude::*; + +#[component] +pub fn IntroductionCard() -> Element { + rsx! { + div { class: "items-center justify-center space-y-4 p-8 overflow-wrap w-full text-lg text-center text-alice-werefox-red-dark dark:text-alice-werefox-red-light", + div { class: "object-contain relative inline-block w-8 h-8 mb-1 align-middle", + img { + src: "/emoji/:alicecoolmlem:.png", + alt: "Alice with sunglasses and her tongue out" + } + } + div { p { "\"A pop punk dragon on the Internet\"" } } + div { p { "\"Somewhere between a hot date and a hot mess\"" } } + div { p { "\"A poetic disaster, and owns it\"" } } + div { + p { + "Feel free to click/tap any of the buttons above this to learn more about my different aspects of personality. Down below, I've got some more neat little pages and useful info you can look at. " + } + } + div { class: "object-contain relative inline-block w-8 h-8 mb-1 align-middle", + img { + src: "/emoji/:aliceheartblack:.png", + alt: "Alice chomping on black heart" + } + } + } + } +} diff --git a/src/components/page_button.rs b/src/components/page_button.rs new file mode 100644 index 0000000..af6ca19 --- /dev/null +++ b/src/components/page_button.rs @@ -0,0 +1,25 @@ +use dioxus::prelude::*; +use dioxus_router::prelude::*; + +use crate::info_app::Route; +use crate::utils::prop_structs::ImageProps; + +#[component] +pub fn PageButton(button_text: String, button_route: Route, image_props: ImageProps) -> Element { + rsx! { + nav { + div { class: "w-full inline-block text-lg text-center rounded-sm ring-2 bg-alice-werefox-grey-lightest dark:bg-alice-werefox-grey-dark ring-alice-werefox-red-dark dark:ring-alice-werefox-red hover:ring-alice-werefox-blue-dark dark:hover:ring-alice-werefox-blue text-alice-werefox-red-dark dark:text-alice-werefox-red-light hover:text-alice-werefox-blue-dark dark:hover:text-alice-werefox-blue-light focus:text-alice-werefox-blue-dark dark:focus:text-alice-werefox-blue-light hover:animate-yip transition", + Link { + class: "p-2 w-full inline-block text-lg text-center rounded-sm ring-2 bg-alice-werefox-grey-lightest dark:bg-alice-werefox-grey-dark ring-alice-werefox-red-dark dark:ring-alice-werefox-red hover:ring-alice-werefox-blue-dark dark:hover:ring-alice-werefox-blue text-alice-werefox-red-dark dark:text-alice-werefox-red-light hover:text-alice-werefox-blue-dark dark:hover:text-alice-werefox-blue-light focus:text-alice-werefox-blue-dark dark:focus:text-alice-werefox-blue-light hover:animate-yip transition", + to: button_route, + img { + class: "animate-jiggle sm:w-6 sm:h-6 w-4 h-6 inline-block align-top", + src: image_props.src, + alt: image_props.alt + } + " {button_text}" + } + } + } + } +} diff --git a/src/components/project_card.rs b/src/components/project_card.rs new file mode 100644 index 0000000..49f79fc --- /dev/null +++ b/src/components/project_card.rs @@ -0,0 +1,26 @@ +use crate::utils::prop_structs::*; +use dioxus::prelude::*; + +#[component] +pub fn ProjectCard( + project_title: String, + project_description: String, + project_link: String, + image_props: ImageProps, +) -> Element { + rsx! { + div { + a { href: "{project_link}", + ul { class: "p-4 space-y-2 rounded-sm ring-2 text-alice-werefox-red-dark dark:text-alice-werefox-red-light hover:text-alice-werefox-blue-dark dark:hover:text-alice-werefox-blue-light ring-alice-werefox-red-dark dark:ring-alice-werefox-red hover:ring-alice-werefox-blue-dark dark:hover:ring-alice-werefox-blue hover:animate-yip transition", + div { class: "text-lg text-center", + span { class: "animate-jiggle sm:w-6 sm:h-6 w-4 h-6 inline-block align-top", + img { src: "{image_props.src}", alt: "{image_props.alt}" } + } + " {project_title}" + } + div { class: "text-md text-center", "{project_description}" } + } + } + } + } +} diff --git a/src/components/title_card.rs b/src/components/title_card.rs new file mode 100644 index 0000000..2dcce70 --- /dev/null +++ b/src/components/title_card.rs @@ -0,0 +1,16 @@ + +use dioxus::prelude::*; + +#[component] +pub fn TitleCard(card_title: String) -> Element { + rsx! { + div { class: "p-4 w-full rounded-sm ring-4 ring-alice-werefox-red-dark dark:ring-alice-werefox-red bg-alice-werefox-grey-lightest dark:bg-alice-werefox-grey-dark text-xl text-center text-alice-werefox-red-dark dark:text-alice-werefox-red-light", + span { class: "animate-bounce align-middle inline-block w-6 h-6", img { + class: "-scale-x-100", + src: "/emoji/:alice:.png", + alt: "It's Alice in emoji form." + } } + "- {card_title}" + } + } +} \ No newline at end of file diff --git a/void-fe/src/components/void_buttons.rs b/src/components/void_buttons.rs similarity index 100% rename from void-fe/src/components/void_buttons.rs rename to src/components/void_buttons.rs diff --git a/void-fe/src/components/void_content.rs b/src/components/void_content.rs similarity index 100% rename from void-fe/src/components/void_content.rs rename to src/components/void_content.rs diff --git a/void-fe/src/components/void_footer.rs b/src/components/void_footer.rs similarity index 100% rename from void-fe/src/components/void_footer.rs rename to src/components/void_footer.rs diff --git a/void-fe/src/components/void_page.rs b/src/components/void_page.rs similarity index 100% rename from void-fe/src/components/void_page.rs rename to src/components/void_page.rs diff --git a/void-fe/src/components/void_poem.rs b/src/components/void_poem.rs similarity index 100% rename from void-fe/src/components/void_poem.rs rename to src/components/void_poem.rs diff --git a/void-fe/src/components/void_title.rs b/src/components/void_title.rs similarity index 100% rename from void-fe/src/components/void_title.rs rename to src/components/void_title.rs diff --git a/src/components/werefox_card.rs b/src/components/werefox_card.rs new file mode 100644 index 0000000..5b6b69c --- /dev/null +++ b/src/components/werefox_card.rs @@ -0,0 +1,19 @@ +use crate::components::werefox_card_title::WerefoxCardTitle; +use crate::utils::prop_structs::ImageProps; +use dioxus::prelude::*; + +#[component] +pub fn WerefoxCard( + card_title: String, + children: Element, + title_emoji: Option, +) -> Element { + rsx! { + div { class: "p-4 space-y-4 text-center text-alice-werefox-red-dark dark:text-alice-werefox-red-light rounded-lg ring-2 ring-alice-werefox-red-dark dark:ring-alice-werefox-red bg-alice-werefox-grey-lightest dark:bg-alice-werefox-grey-dark", + WerefoxCardTitle { card_title: card_title, title_emoji: title_emoji } + div { class: "p-4 space-y-4 rounded-sm ring-2 ring-alice-werefox-red-dark dark:ring-alice-werefox-red", + { children } + } + } + } +} diff --git a/src/components/werefox_card_title.rs b/src/components/werefox_card_title.rs new file mode 100644 index 0000000..9e42d6a --- /dev/null +++ b/src/components/werefox_card_title.rs @@ -0,0 +1,24 @@ +use crate::utils::prop_structs::ImageProps; +use dioxus::prelude::*; + +#[component] +pub fn WerefoxCardTitle(card_title: String, title_emoji: Option) -> Element { + rsx! { + div { class: "rounded-sm ring-2 ring-alice-werefox-red-dark dark:ring-alice-werefox-red", + p { class: "p-4 text-center text-md sm:text-lg text-alice-werefox-red-dark dark:text-alice-werefox-red-light", + match title_emoji { + Some(t) => rsx! { + span { + img { class: "object-contain relative inline-block w-8 h-8 mb-1 align-middle", + src: "{t.src}", + alt: "{t.alt}" + } + } + " {card_title}" + }, + _ => rsx! { "{card_title}" } + } + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..f2ec4e7 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,356 @@ +//! # Rust Info Site Frontend +//! +//! Rendering functions for the site using [Dioxus](https://dioxuslabs.com/). + +#![allow(non_snake_case)] + +// use utils::{prop_structs::PoemDatabase, user_prefs::UserPrefs}; +// use manganis; + +pub mod components; +pub mod utils; + +// Urls are relative to your Cargo.toml file +const _TAILWIND_URL: &str = manganis::mg!(file("public/tailwind.css")); + +/// A module that handles the functions needed +/// to render the site. +pub mod info_app { + + // import the prelude to get access to the `rsx!` macro and the `Scope` and `Element` types + pub use dioxus::prelude::*; + + // use crate::components::void_buttons::*; + // use crate::components::void_content::*; + // use crate::components::void_footer::*; + use crate::components::basic_page::*; + use crate::components::home_page::*; + use crate::components::identity_button::*; + use crate::components::introduction_card::*; + use crate::components::page_button::*; + use crate::components::project_card::*; + use crate::components::title_card::*; + use crate::components::werefox_card::*; + use crate::utils::prop_structs::*; + // use crate::components::void_poem::*; + // use crate::components::void_title::*; + // use crate::utils::helpers; + // use crate::utils::user_prefs::*; + // use crate::{components::basic_page::*, utils::prop_structs::PageProps}; + + use dioxus_router::prelude::*; + // use dioxus_use_storage::use_local_storage; + + #[derive(Routable, PartialEq, Clone)] + pub enum Route { + #[route("/")] + #[redirect("/:..segments", |segments: Vec| Route::Home {})] + Home {}, + #[route("/projects")] + Projects {}, + #[route("/testimonials")] + Testimonials {}, + #[route("/hrt")] + Hrt {}, + #[route("/faq")] + Faq {}, + #[route("/support")] + Support {}, + } + pub fn DioxusApp() -> Element { + rsx! { Router:: {} } + } + + // #[cfg(target_family = "wasm")] + // fn PageNotFound() -> Element { + // rsx! { + // p { "That page doesn't exist, sorry!" } + + // } + // } + + #[component] + /// Renders the app and returns the rendered Element. + pub fn Home() -> Element { + let identity_list = [ + ( + "29", + ImageProps { + src: "/emoji/18_plus.svg".to_string(), + alt: "Over 18 emoji".to_string(), + }, + ), + ( + "Transfemme", + ImageProps { + src: "/emoji/female_symbol.svg".to_string(), + alt: "Female symbol emoji".to_string(), + }, + ), + ( + "She/It", + ImageProps { + src: "/emoji/speech_bubble_left.svg".to_string(), + alt: "A speech bubble emoji".to_string(), + }, + ), + ( + "Pansexual", + ImageProps { + src: "/emoji/pansexual_flag.svg".to_string(), + alt: "Pansexual flag emoji".to_string(), + }, + ), + ( + "Lesbian", + ImageProps { + src: "/emoji/lesbian_flag.svg".to_string(), + alt: "Lesbian flag emoji".to_string(), + }, + ), + ( + "Dragon", + ImageProps { + src: "/emoji/:alicehappy:.png".to_string(), + alt: "Alice happy emoji".to_string(), + }, + ), + ]; + let project_list = [ + ( + "Stuff I Do!", + Route::Projects {}, + ImageProps { + src: "/emoji/crt_prompt.svg".to_string(), + alt: "CRT prompt emoji".to_string(), + }, + ), + ( + "See Testimonials!", + Route::Testimonials {}, + ImageProps { + src: "/emoji/awoo.svg".to_string(), + alt: "Awoo emoji".to_string(), + }, + ), + ( + "HRT Tracker!", + Route::Hrt {}, + ImageProps { + src: "/emoji/trans_heart.png".to_string(), + alt: "Transgender heart emoji".to_string(), + }, + ), + ( + "FAQ", + Route::Faq {}, + ImageProps { + src: "/emoji/red_question_mark.svg".to_string(), + alt: "Red question mark emoji".to_string(), + }, + ), + ( + "Support Me?", + Route::Support {}, + ImageProps { + src: "/emoji/green_money.svg".to_string(), + alt: "Green money emoji".to_string(), + }, + ), + ]; + rsx! { + HomePage { page_title: "About a Werefox", card_title: "Hi! I'm Alice Werefox!", + WerefoxCard { card_title: "Basic Info".to_string(), title_emoji: None, + div { class: "grid xl:grid-rows-1 xl:grid-cols-6 sm:grid-rows-2 sm:grid-cols-3 grid-rows-9 grid-cols-1 sm:gap-2 gap-0", + for e in identity_list { + IdentityButton { button_text: e.0, image_props: e.1 } + } + } + } + WerefoxCard { card_title: "Welcome to my little info site!", title_emoji: None, IntroductionCard {} } + WerefoxCard { card_title: "Neat Pages!", title_emoji: None, + div { class: "flex flex-col space-y-4", + for e in project_list { + PageButton { button_text: e.0, button_route: e.1, image_props: e.2 } + } + } + } + } + } + } + + #[component] + pub fn Projects() -> Element { + let project_list = [ + ( + "Streaming", + "I stream regularly! Sometimes randomizers, sometimes just a chill time with a fun game.", + "https://twitch.tv/alice_werefox", + ImageProps { + src: "/emoji/twitch-logo.png".to_string(), + alt: "Twitch logo".to_string(), + }, + ), + ( + "Poetry", + "Sometimes, I write poetry. It's not always the happiest, but I am proud of it. It would mean a lot to me if you took a look!", + "https://void.werefox.cafe", + ImageProps { + src: "/emoji/pen.svg".to_string(), + alt: "Pen emoji".to_string(), + }, + ), + ( + "Programming", + "Much like this site, sometimes I program things! Gotta at least try and put that Comp. Sci. degree to good use!", + "https://gitea.werefox.cafe/ada", + ImageProps { + src: "/emoji/laptop.svg".to_string(), + alt: "Laptop emoji".to_string(), + }, + ), + ( + "Valentine's Day Letter", + "Here's a little treat I put together for Valentine's Day one year, and I decided to just keep it up all year. Feel free to take a look if you ever need a little pick-me-up.", + "https://letter.werefox.cafe", + ImageProps { + src: "/emoji/red_heart.svg".to_string(), + alt: "Red heart emoji".to_string(), + }, + ), + ]; + rsx! { + BasicPage { page_title: "Some stuff I do!", + div { class: "rounded-lg ring-2 ring-alice-werefox-grey dark:ring-alice-werefox-grey-darker bg-alice-werefox-grey-light dark:bg-alice-werefox-grey", + WerefoxCard { card_title: "Personal Projects", + for project in project_list { + ProjectCard { project_title: project.0, project_description: project.1, project_link: project.2, image_props: project.3 } + } + } + } + } + } + } + + #[component] + pub fn Testimonials() -> Element { + rsx! { div {} } + } + + #[component] + pub fn Hrt() -> Element { + rsx! { div {} } + } + + #[component] + pub fn Faq() -> Element { + rsx! { div {} } + } + + #[component] + pub fn Support() -> Element { + rsx! { div {} } + } + + // Renders the app and returns the rendered Element. + // pub fn PoemListPage(props: VoidProps) -> Element { + // #[cfg(target_family = "wasm")] + // let poem_database = POEM_DATABASE + // .get() + // .expect("Poem database is not initialized") + // .clone(); + // #[cfg(any(target_family = "unix", target_family = "windows"))] + // let poem_database = props.poem_database.clone(); + // let user_prefs = props.user_prefs.clone(); + // let (user_theme, user_font) = user_prefs.get_pref_classes(ThemedComponent::Page); + // rsx! { + // div { class: "{user_theme} {user_font}", + // PageBase { + // Title { title: "A Letter to the Void".to_string(), is_html: false, user_prefs: user_prefs.clone() } + // BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } + // PoemList { poem_database: poem_database.clone(), user_prefs: user_prefs.clone() } + // BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } + // Footer { theme: user_prefs.clone().get_theme(), font: user_prefs.get_font() } + // } + // } + // } + // } + + // pub fn PoemPage(props: VoidProps) -> Element { + // #[cfg(target_family = "wasm")] + // let poem_database = POEM_DATABASE + // .get() + // .expect("Poem database is not initialized") + // .clone(); + // #[cfg(any(target_family = "unix", target_family = "windows"))] + // let poem_database = props.poem_database.clone(); + // let user_prefs = props.user_prefs.clone(); + // let (user_theme, user_font) = user_prefs.get_pref_classes(ThemedComponent::Page); + // // #[cfg(any(target_family = "unix", target_family = "windows"))] + // let slug = props + // .slug + // .as_ref() + // .expect("A slug was given in the props.") + // .clone(); + // // #[cfg(target_family = "wasm")] + // // let slug = String::from( + // // use_route() + // // .segment("slug") + // // .expect("No slug specified."), + // // ); + // rsx! { + // div { class: "{user_theme} {user_font}", + // PageBase { + // BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } + // GetPoem { slug: slug.clone(), poem_database: poem_database.clone(), user_prefs: user_prefs.clone() } + // ButtonGroup { + // NavigationButton { title: "Oldest".to_string(), slug: poem_database.get_oldest_entry(slug.clone()), user_prefs: user_prefs.clone() } + // NavigationButton { title: "Previous".to_string(), slug: poem_database.get_previous_entry(slug.clone()), user_prefs: user_prefs.clone() } + // NavigationButton { title: "Random".to_string(), slug: poem_database.get_random_entry(), user_prefs: user_prefs.clone() } + // NavigationButton { title: "Next".to_string(), slug: poem_database.get_next_entry(slug.clone()), user_prefs: user_prefs.clone() } + // NavigationButton { title: "Latest".to_string(), slug: poem_database.get_latest_entry(slug.clone()), user_prefs: user_prefs.clone() } + // } + // BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } + // Footer { theme: user_prefs.clone().get_theme(), font: user_prefs.get_font() } + // } + // } + // } + // } + + // pub fn SettingsPage(props: UserPrefs) -> Element { + // let user_prefs = props.clone(); + // let (user_theme, user_font) = user_prefs.get_pref_classes(ThemedComponent::Page); + // // Get rid of this and create a general card component with children. + // let (user_theme_card, user_font_card) = user_prefs.get_pref_classes(ThemedComponent::Card); + // rsx! { + // div { class: "{user_theme} {user_font}", + // PageBase { + // Title { title: "Settings".to_string(), is_html: false, user_prefs: user_prefs.clone() } + // BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } + // div { class: "p-4 flex flex-col space-y-4 mx-auto max-w-full justify-center", + // div { class: "p-4 flex flex-col space-y-4 text-xl text-center ring-4 {user_theme_card} {user_font_card}", + // p { + // "Theme" + // } + // ButtonGroup { + // NavigationButton { title: "Light".to_string(), slug: "/settings/?theme=light".to_string(), user_prefs: user_prefs.clone() } + // NavigationButton { title: "Dark".to_string(), slug: "/settings/?theme=dark".to_string(), user_prefs: user_prefs.clone() } + // NavigationButton { title: "Auto".to_string(), slug: "/settings/?theme=auto".to_string(), user_prefs: user_prefs.clone() } + // } + // } + // div { class: "p-4 flex flex-col space-y-4 text-xl text-center ring-4 {user_theme_card} {user_font_card}", + // p { + // "Font" + // } + // ButtonGroup { + // NavigationButton { title: "Nerd Font".to_string(), slug: "/settings/?font=nerd".to_string(), user_prefs: user_prefs.clone(), override_font: "font-nerd".to_string() } + // NavigationButton { title: "Open Dyslexic".to_string(), slug: "/settings/?font=open".to_string(), user_prefs: user_prefs.clone(), override_font: "font-open".to_string() } + // } + // } + // } + // BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.get_font() } + // } + // } + // } + // } +} diff --git a/src/main.rs b/src/main.rs index 5b166aa..d2ee68d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,17 @@ -use void_be::web_app_backend; -#[rocket::main] -async fn main() -> Result<(), rocket::Error> { - let _rocket = web_app_backend::build_rocket().await.launch().await; - Ok(()) +#![allow(non_snake_case, unused)] + +use console_error_panic_hook; +use info_werefox_cafe::info_app; + +// TODO: Replace this, as it doesn't play nicely with dioxus fullstack. +// use wasm_logger; +use dioxus::prelude::*; + +fn main() { + // init debug tool for WebAssembly + // wasm_logger::init(wasm_logger::Config::default()); + console_error_panic_hook::set_once(); + + launch(info_app::DioxusApp); } diff --git a/void-fe/src/utils.rs b/src/utils.rs similarity index 100% rename from void-fe/src/utils.rs rename to src/utils.rs diff --git a/src/utils/helpers.rs b/src/utils/helpers.rs new file mode 100644 index 0000000..5a476d1 --- /dev/null +++ b/src/utils/helpers.rs @@ -0,0 +1,198 @@ +// use markdown::Options; +// use rand::seq::SliceRandom; +// use rust_embed::RustEmbed; +// use std::collections::{HashMap, VecDeque}; + +// use super::prop_structs::{PoemDatabase, PoemStruct}; +// #[derive(RustEmbed)] +// #[folder = "data/other"] +// struct OtherData; + +// #[derive(RustEmbed)] +// #[folder = "data/poems"] +// pub struct Poems; + +// impl PoemDatabase { +// pub fn new() -> PoemDatabase { +// PoemDatabase { +// poem_list: Vec::<(String, String)>::new(), +// poem_hashmap: HashMap::::new(), +// } +// } + +// // There's no need to actually make a database yet, but maybe in the future... +// #[cfg(any(target_family = "unix", target_family = "windows"))] +// pub async fn build_poem_database(&mut self) { +// use dioxus::dioxus_core::Component; +// use markdown::CompileOptions; +// let markdown_options = &mut Options::gfm(); +// markdown_options.compile = CompileOptions { +// allow_dangerous_html: true, +// ..CompileOptions::default() +// }; + +// for p in Poems::iter() { +// let filename = p.to_string(); +// let poem_content = Poems::get(&filename).expect("Found poem {filename:?}"); +// let mut poem_to_str = std::str::from_utf8(poem_content.data.as_ref()) +// .expect("Poem is valid UT8.") +// .lines(); +// let poem_title = poem_to_str.next().expect("No title specified."); +// let poem_content = poem_to_str.into_iter().collect::>().join("\n"); +// let poem_title_to_html_string = +// markdown::to_html_with_options(poem_title, markdown_options).unwrap(); +// let poem_content_to_html_string = +// markdown::to_html_with_options(poem_content.as_str(), &Options::gfm()).unwrap(); +// let mut split_filename = filename.trim_end_matches(".md").split("_"); +// let creation_date = split_filename.next().expect("Obtained creation date"); +// let slug = split_filename.next().expect("Obtained slug"); +// self.poem_list +// .push((creation_date.to_string(), slug.to_string())); +// let poem_struct = PoemStruct { +// title: poem_title_to_html_string, +// content: poem_content_to_html_string, +// creation_date: creation_date.to_string(), +// }; +// self.poem_hashmap.insert(slug.to_string(), poem_struct); +// } +// self.poem_list.sort_by_key(|k| k.0.clone()) +// } + +// #[cfg(any(target_family = "wasm"))] +// pub fn build_poem_database(&mut self) { +// for p in Poems::iter() { +// let filename = p.to_string(); +// let poem_content = Poems::get(&filename).expect("Found poem {filename:?}"); +// let mut poem_to_str = std::str::from_utf8(poem_content.data.as_ref()) +// .expect("Poem is valid UT8.") +// .lines(); +// let poem_title = poem_to_str.next().expect("No title specified."); +// let poem_content = poem_to_str.into_iter().collect::>().join("\n"); +// let poem_title_to_html_string = +// markdown::to_html_with_options(poem_title, &Options::gfm()).unwrap(); +// let poem_content_to_html_string = +// markdown::to_html_with_options(poem_content.as_str(), &Options::gfm()).unwrap(); +// let mut split_filename = filename.trim_end_matches(".md").split("_"); +// let creation_date = split_filename.next().expect("Obtained creation date"); +// let slug = split_filename.next().expect("Obtained slug"); +// self.poem_list +// .push((creation_date.to_string(), slug.to_string())); +// let poem_struct = PoemStruct { +// title: poem_title_to_html_string.to_string(), +// content: poem_content_to_html_string, +// creation_date: creation_date.to_string(), +// }; +// self.poem_hashmap.insert(slug.to_string(), poem_struct); +// } +// self.poem_list.sort_by_key(|k| k.0.clone()) +// } + +// pub fn get_poem(&self, slug: String) -> PoemStruct { +// self.poem_hashmap +// .get(slug.as_str()) +// .expect("Grabbed poem from database") +// .clone() +// } + +// pub fn get_poem_list(&self) -> Vec<(String, String)> { +// self.poem_list +// .iter() +// .map(|s| { +// ( +// s.1.clone(), +// self.poem_hashmap +// .get(&s.1) +// .expect("Got poemstruct from database") +// .title +// .clone(), +// ) +// }) +// .collect::>() +// .clone() +// } + +// pub fn get_oldest_entry(&self, current: String) -> String { +// let mut poem_list = VecDeque::from_iter(self.poem_list.iter()); +// let oldest = poem_list +// .pop_front() +// .expect("There is an entry in this list of poems.") +// .1 +// .clone(); +// if current == oldest { +// return format!("/poems/{current}#"); +// } +// format!("/poems/{oldest}") +// } + +// pub fn get_latest_entry(&self, current: String) -> String { +// let mut poem_list = self.poem_list.clone(); +// let latest = poem_list +// .pop() +// .expect("There is an entry in this list of poems.") +// .1 +// .clone(); +// if current == latest { +// return format!("/poems/{current}#"); +// } +// format!("/poems/{latest}") +// } + +// pub fn get_previous_entry(&self, current: String) -> String { +// let poem_list = self.poem_list.clone(); +// match poem_list.iter().enumerate().find_map(|(index, p)| { +// if p.1 == current { +// if index != 0 { +// Some(poem_list[index - 1].1.clone()) +// } else { +// None +// } +// } else { +// None +// } +// }) { +// Some(entry) => format!("/poems/{entry}"), +// None => format!("/poems/{current}"), +// } +// } + +// pub fn get_next_entry(&self, current: String) -> String { +// let poem_list = self.poem_list.clone(); +// match poem_list.iter().enumerate().find_map(|(index, p)| { +// if p.1 == current { +// if index != poem_list.len() - 1 { +// Some(poem_list[index + 1].1.clone()) +// } else { +// None +// } +// } else { +// None +// } +// }) { +// Some(entry) => format!("/poems/{entry}"), +// None => format!("/poems/{current}"), +// } +// } +// // #[cfg(not(target_family = "wasm"))] +// pub fn get_random_entry(&self) -> String { +// let poem_list = self.poem_list.clone(); +// let mut rng = rand::thread_rng(); +// let random_entry = poem_list +// .choose(&mut rng) +// .expect("Got a valid entry") +// .1 +// .clone(); +// // let random_entry = "introductions"; +// format!("/poems/{random_entry}") +// } +// } + +// pub fn get_homepage_paragraph() -> String { +// let homepage_paragraph_content = +// OtherData::get("homepage.md").expect("Found homepage paragraph."); +// let homepage_paragraph_to_string = +// std::str::from_utf8(homepage_paragraph_content.data.as_ref()) +// .expect("Homepage file is valid UTF-8"); +// let test = +// markdown::to_html_with_options(homepage_paragraph_to_string, &Options::gfm()).unwrap(); +// test +// } diff --git a/src/utils/prop_structs.rs b/src/utils/prop_structs.rs new file mode 100644 index 0000000..222e4b2 --- /dev/null +++ b/src/utils/prop_structs.rs @@ -0,0 +1,73 @@ +// use std::collections::HashMap; +// // use crate::void_app::{Element, Props}; +// use super::user_prefs::UserPrefs; +use dioxus::prelude::*; + +#[derive(PartialEq, Props, Clone)] +pub struct ImageProps { + pub src: String, + pub alt: String, +} + +// #[derive(PartialEq, Props, Clone)] +// pub struct PoemRequest { +// pub slug: String, +// pub user_prefs: UserPrefs, +// } + +// #[derive(PartialEq, Props, Clone)] +// pub struct TitleProps { +// pub title: String, +// pub is_html: bool, +// pub user_prefs: UserPrefs, +// } + +// #[derive(PartialEq, Props, Clone)] +// pub struct ContentProps { +// pub content: String, +// pub user_prefs: UserPrefs, +// } + +// #[derive(PartialEq, Props, Clone)] +// pub struct ButtonProps { +// pub title: String, +// pub slug: String, +// pub user_prefs: UserPrefs, +// pub override_font: Option, +// } + +// #[derive(Default, PartialEq, Props, Clone)] +// pub struct VoidProps { +// pub slug: Option, +// pub poem_database: PoemDatabase, +// pub user_prefs: UserPrefs, +// } + +// #[derive(Default, PartialEq, Props, Clone, Debug)] +// pub struct PoemDatabase { +// pub poem_list: Vec<(String, String)>, +// pub poem_hashmap: HashMap, +// } + +// #[derive(PartialEq, Clone, Debug)] +// pub struct PoemStruct { +// pub title: String, +// pub content: String, +// pub creation_date: String, +// } + +// // These next three should all just be one prop. +// #[derive(PartialEq, Props, Clone)] +// pub struct PoemChildren { +// pub children: Element, +// } + +// #[derive(PartialEq, Props, Clone)] +// pub struct PageChildren { +// pub children: Element, +// } + +// #[derive(PartialEq, Props, Clone)] +// pub struct ContentChildren { +// pub children: Element, +// } diff --git a/void-fe/src/utils/user_prefs.rs b/src/utils/user_prefs.rs similarity index 100% rename from void-fe/src/utils/user_prefs.rs rename to src/utils/user_prefs.rs diff --git a/void-fe/tailwind.config.js b/tailwind.config.js similarity index 100% rename from void-fe/tailwind.config.js rename to tailwind.config.js diff --git a/templates/index.html.hbs b/templates/index.html.hbs deleted file mode 100644 index 60f47d6..0000000 --- a/templates/index.html.hbs +++ /dev/null @@ -1,16 +0,0 @@ - - - - {{app_title}} - - - - - - - {{{style_include}}} - - -
{{{test}}}
- - diff --git a/void-be/Cargo.toml b/void-be/Cargo.toml deleted file mode 100644 index 175e7c3..0000000 --- a/void-be/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "void-be" -version = "0.1.0" -authors = ["Ada Werefox "] -edition = "2021" - -[dependencies] -void-fe = { path = "../void-fe" } -dioxus-ssr = { workspace = true } -once_cell = { workspace = true } - -# If you're unsure about why we're depending on a release candidate, -# check the Rocket documentation: -# https://rocket.rs/v0.5-rc/guide/upgrading/ -rocket = { workspace = true } - -# Needed to enable handlebar template support -[dependencies.rocket_dyn_templates] -version = "=0.1.0" -features = ["handlebars"] diff --git a/void-be/src/lib.rs b/void-be/src/lib.rs deleted file mode 100644 index 78aa105..0000000 --- a/void-be/src/lib.rs +++ /dev/null @@ -1,201 +0,0 @@ -//! # Rust Letter Backend -//! -//! `rust_letter_be` handles the backend execution using Rocket. - -#[macro_use] -extern crate rocket; - -/// A module that handles the backend for the site. -pub mod web_app_backend { - - use once_cell::sync::OnceCell; - use rocket::fs::FileServer; - use rocket::http::{Cookie, CookieJar}; - use rocket::response::Redirect; - use rocket::{Build, Rocket}; - use rocket_dyn_templates::{context, Template}; - use void_fe::utils::prop_structs::{PoemDatabase, VoidProps, ContentProps}; - use void_fe::utils::user_prefs::*; - use void_fe::void_app::{self, VirtualDom}; - pub use void_fe::components::void_content::RenderContent; - use void_fe::utils::helpers::get_homepage_paragraph; - - static POEM_DATABASE: OnceCell = OnceCell::new(); - - async fn get_user_prefs(cookies: &CookieJar<'_>) -> UserPrefs { - let user_theme = match cookies.get("theme") { - Some(c) => match c.value() { - "auto" => ThemePref::Auto, - "light" => ThemePref::Light, - "dark" => ThemePref::Dark, - _ => { - cookies.remove("theme"); - cookies.add(Cookie::new("theme", "auto")); - ThemePref::Auto - } - }, - None => { - cookies.add(Cookie::new("theme", "auto")); - ThemePref::Auto - } - }; - let user_font = match cookies.get("font") { - Some(c) => match c.value() { - "nerd" => FontPref::NerdFont, - "open" => FontPref::OpenDyslexic, - _ => { - cookies.remove("font"); - cookies.add(Cookie::new("font", "open")); - FontPref::OpenDyslexic - } - }, - None => { - cookies.add(Cookie::new("font", "open")); - FontPref::OpenDyslexic - } - }; - UserPrefs::new(user_theme, user_font) - } - - async fn set_user_theme(cookies: &CookieJar<'_>, theme: &str) { - if theme == "light" || theme == "dark" || theme == "auto" { - cookies.remove("theme"); - cookies.add(Cookie::new("theme", format!("{theme}"))); - } else { - return; - } - } - - async fn set_user_font(cookies: &CookieJar<'_>, font: &str) { - if font == "nerd" || font == "open" { - cookies.remove("font"); - cookies.add(Cookie::new("font", format!("{font}"))); - } else { - return; - } - } - - #[get("/")] - async fn index(cookies: &CookieJar<'_>) -> Template { - let user_prefs = get_user_prefs(cookies).await; - let void_props = VoidProps { - slug: None, - poem_database: POEM_DATABASE - .get() - .expect("Poem database is not initialized") - .clone(), - user_prefs: user_prefs, - }; - // let content_props = ContentProps { - // content: get_homepage_paragraph(), - // user_prefs: user_prefs - // }; - // let mut vdom = VirtualDom::new_with_props(void_app::HomePage, void_props); - let mut vdom = VirtualDom::new_with_props(void_app::HomePage, void_fe::void_app::HomePageProps { props: void_props }); - let _ = vdom.rebuild_in_place(); - let output = dioxus_ssr::render(&vdom); - Template::render( - "index", - context! { - app_title: "A Letter to the Void", - style_include: "", - test: &output, - dark_mode: "", - }, - ) - } - - #[get("/", rank = 3)] - async fn settings(cookies: &CookieJar<'_>) -> Template { - let user_prefs = get_user_prefs(cookies).await; - let mut vdom = VirtualDom::new_with_props(void_app::SettingsPage, user_prefs); - let _ = vdom.rebuild_in_place(); - let output = dioxus_ssr::render(&vdom); - Template::render( - "index", - context! { - app_title: "Settings", - style_include: "", - test: &output, - dark_mode: "" - }, - ) - } - - #[get("/?", rank = 2)] - async fn theme(cookies: &CookieJar<'_>, theme: &str) -> Redirect { - set_user_theme(cookies, theme).await; - Redirect::to("/settings") - } - - #[get("/?")] - async fn font(cookies: &CookieJar<'_>, font: &str) -> Redirect { - set_user_font(cookies, font).await; - Redirect::to("/settings") - } - - #[get("/")] - async fn poem_list(cookies: &CookieJar<'_>) -> Template { - let user_prefs = get_user_prefs(cookies).await; - let void_props = VoidProps { - slug: None, - poem_database: POEM_DATABASE - .get() - .expect("Poem database is not initialized") - .clone(), - user_prefs: user_prefs, - }; - let mut vdom = VirtualDom::new_with_props(void_app::PoemListPage, void_props); - let _ = vdom.rebuild_in_place(); - let output = dioxus_ssr::render(&vdom); - Template::render( - "index", - context! { - app_title: "A Letter to the Void", - style_include: "", - test: &output, - dark_mode: "", - }, - ) - } - - #[get("/")] - async fn poem(cookies: &CookieJar<'_>, entry: &str) -> Template { - let user_prefs = get_user_prefs(cookies).await; - let void_props = VoidProps { - slug: Some(entry.to_string()), - poem_database: POEM_DATABASE - .get() - .expect("Poem database is not initialized") - .clone(), - user_prefs: user_prefs, - }; - let mut vdom = VirtualDom::new_with_props(void_app::PoemPage, void_props); - let _ = vdom.rebuild_in_place(); - let output = dioxus_ssr::render(&vdom); - Template::render( - "index", - context! { - app_title: "A Letter to the Void", - style_include: "", - test: &output, - dark_mode: "", - }, - ) - } - - /// This runs `rocket::build()` with the needed mounts and routes. - pub async fn build_rocket() -> Rocket { - let mut poem_database = PoemDatabase::new(); - poem_database.build_poem_database().await; - POEM_DATABASE.set(poem_database).expect("Could not initialize poem database."); - rocket::build() - .mount("/images", FileServer::from("public/images")) - .mount("/styles", FileServer::from("public/styles")) - .mount("/fonts", FileServer::from("public/fonts")) - .mount("/poems", routes![poem_list, poem]) - .mount("/settings", routes![settings, theme, font]) - .mount("/", routes![index]) - .attach(Template::fairing()) - } -} diff --git a/void-fe/.vscode/settings.json b/void-fe/.vscode/settings.json deleted file mode 100644 index c4e74fa..0000000 --- a/void-fe/.vscode/settings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "rust-analyzer.cargo.extraArgs": ["--profile", "rust-analyzer"], - // "rust-analyzer.cargo.buildScripts.invocationLocation": "root", - "rust-analyzer.cargo.target": "wasm32-unknown-unknown", - "rust-analyzer.cargo.buildScripts.overrideCommand": ["dx", "build"], - "rust-analyzer.check.overrideCommand": ["dx", "check", "--quiet", "--message-format=json"], - "rust-analyzer.check.invocationLocation": "root", - "rust-analyzer.check.targets": ["wasm32-unknown-unknown"], - "rust-analyzer.runnables.command": "dx serve", - "rust-analyzer.cargo.buildScripts.enable": false, - "rust-analyzer.linkedProjects": [ - "./Cargo.toml" - ], - "rust-analyzer.diagnostics.disabled": ["unresolved-proc-macro"], - // "rust-analyzer.procMacro.enable": true, - // "rust-analyzer.procMacro.attributes.enable": true, - "rust-analyzer.showUnlinkedFileNotification": false, - "rust-analyzer.hover.actions.run.enable": true, - "rust-analyzer.hover.actions.debug.enable": true, - "rust-analyzer.hover.documentation.enable": true, - "rust-analyzer.hover.actions.enable": true -} diff --git a/void-fe/Cargo.toml b/void-fe/Cargo.toml deleted file mode 100644 index d3b673b..0000000 --- a/void-fe/Cargo.toml +++ /dev/null @@ -1,42 +0,0 @@ -[package] -name = "void-fe" -version = "0.1.0" -authors = ["Ada Werefox "] -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -# dioxus = { workspace = true } -markdown = { workspace = true } -once_cell = { workspace = true } -# dioxus-web = "0.5.0-alpha.0" -dioxus-autofmt = "0.5.0-alpha.0" -# WebAssembly Debug -wasm-logger = "0.2.0" -console_error_panic_hook = "0.1.7" -log = "0.4.17" -dioxus-helmet = "0.2.4" -dioxus-use-storage = "0.3.1" -rand = "0.8.5" -dioxus-html-macro = "0.3.0" - -[dependencies.getrandom] -version = "0.2.12" -features = ["js"] - -[dependencies.serde] -version = "1.0.197" -features = ["derive"] - -[dependencies.dioxus-router] -version = "0.5.0-alpha.0" -features = ["web"] - -[dependencies.rust-embed] -version = "8.3.0" -features = ["debug-embed"] - -[dependencies.dioxus] -version = "0.5.0-alpha.0" -features = ["web"] diff --git a/void-fe/build.rs b/void-fe/build.rs deleted file mode 100644 index 80daf7a..0000000 --- a/void-fe/build.rs +++ /dev/null @@ -1,20 +0,0 @@ -fn main() { - let mut tailwind = std::process::Command::new("npx"); - tailwind.args( - "tailwindcss -i src/index.css -c tailwind.config.js -o ../public/styles/tailwind.min.css --minify" - .split(" "), - ); - tailwind.env("NODE_ENV", "production"); - match tailwind.spawn() { - Ok(_) => (), - Err(_) => { - print!("Didn't find npx in the path, can't compile CSS. Is Node installed?"); - () - } - } -} -// let mut content = Vec::new(); -// for f in std::fs::read_dir("../data/poems").unwrap() { -// content.push(std::fs::read_to_string(f.unwrap().path()).unwrap()); -// } -// } diff --git a/void-fe/data/other/homepage.md b/void-fe/data/other/homepage.md deleted file mode 100644 index b289838..0000000 --- a/void-fe/data/other/homepage.md +++ /dev/null @@ -1,6 +0,0 @@ - -Welcome to the Void! \ -\ -"A Letter to the Void" is a passion project of mine in which I wrote poems about my past life experiences, present, and hopes for the future throughout my transition. The topics range from my feelings through transitioning (of course), past abuse, mental health exploration, and an overall journey to grow and become a better creature. I hope you enjoy the time you spend here, and sincerely, thank you. \ -\ -🖤 *Alice Icehart Werefox* \ No newline at end of file diff --git a/void-fe/data/poems/2021-02-27_audio-reading.md b/void-fe/data/poems/2021-02-27_audio-reading.md deleted file mode 100644 index 8503ba5..0000000 --- a/void-fe/data/poems/2021-02-27_audio-reading.md +++ /dev/null @@ -1,44 +0,0 @@ -# im on repeat -*Author's note: Unfortunately, I've lost the audio reading for this.* - -Death is like a memory. Ceaseless, and comforting\ -Knowing things will end has always helped me feel like I'm free\ -I can do what I want, I can say what I feel\ -In the end, I know, I know the end is coming, what's the deal? - -I'm looping,\ -I'm stagnant,\ -Feel like I'm on repeat\ -My heart has got a leak - -I'm writing\ -These lines\ -About my broken dreams\ -About my fucking sheets - -I'm hating\ -my thoughts\ -About my bad streaks\ -About my endless sleep - -break free\ -break free\ -break free\ -break free - -And when the thoughts and my memories come flowing through an endless string\ -I can't stop typing because they never stop they never cease\ -I'm just a stream of consciousness, typing on a digital sheet\ -Some lines they'll never read, a face they'll never see\ -And if this is the end of me then please try to remember me\ -I'm breaking down, I'm broken, but I'm still here and you're seeing me\ -Why can't I stop these bad feelings? I know everyone cares for me - -but all I see\ -when I look at the broken screen\ -are the fears and insecurities - -I'm nothing\ -I'm hopeless\ -I'm looping\ -I'm on repeat \ No newline at end of file diff --git a/void-fe/data/poems/2021-02-28_iced-coffee.md b/void-fe/data/poems/2021-02-28_iced-coffee.md deleted file mode 100644 index 4856c84..0000000 --- a/void-fe/data/poems/2021-02-28_iced-coffee.md +++ /dev/null @@ -1,32 +0,0 @@ -# Iced Coffee -Listen to the song on Soundcloud - -*Iced coffee on a cold Winter's day* \ -*Iced coffee bittersweet at the taste* \ -*Do you see me? I probably fade* \ -*Fade into darkness and I'll go away* - -Hmm.... - -Why can't you see me this mirror is broken \ -Why can't you see me I can't be this broken \ -Every line keeping me from satisfaction \ -I'm wondering why you can keep me in traction \ -I'm falling I'm sinking this love is a sinkhole \ -I don't understand why you keep me, this freakshow \ -I see you and there's so much better contestants \ -Competing and winning and gaining attention \ -And I'm consolation, the prize for obsession \ -Don't know why you'd even give me just a second - -*Iced coffee on a cold Winter's day*\ -*Iced coffee bittersweet at the taste*\ -*Do you see me? I probably fade*\ -*Fade into darkness and I'll go away* - -*Hmmmm....*\ -*Hmmmm....*\ -*Hmmmm....* **(it's like... I don't really even know why I bother)**\ -*Hmmmm....* **(am I even worth paying attention to in the first place?)**\ -*Hmmmm....*\ -*Hmmmm....* \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-01_sweetheart-sweet-tea-6ck4.md b/void-fe/data/poems/2021-03-01_sweetheart-sweet-tea-6ck4.md deleted file mode 100644 index 6292ecd..0000000 --- a/void-fe/data/poems/2021-03-01_sweetheart-sweet-tea-6ck4.md +++ /dev/null @@ -1,44 +0,0 @@ -# Sweetheart, Sweet Tea -Do you remember? \ -The first time that we had met \ -Oh, I'm sure I don't regret that memory \ -Do you remember? \ -It's a story I'll forget \ -But the resolution finds itself yet - -You said you'd never leave me, hun \ -Oh, please just don't deceive me, hun \ -My honeysuckle, lemon sweetener \ -She won't leave me if I keep her \ -Close and in my comfort space \ -I know my heart I can't replace \ -But if you find the heart to keep me \ -I know that you'll never leave me - -Do you remember? \ -It's getting harder to forget \ -Every memory we make along the way \ -Do you remember? \ -The first time I called you "friend"\ -Oh, the resolution finds itself yet - -You said you'd never leave me, hun \ -Oh, please just don't deceive me, hun \ -My honeysuckle, lemon sweetener \ -She won't leave me if I keep her \ -Close and in my comfort space \ -I know my heart I can't replace \ -But if you find the heart to keep me \ -I know that you'll never leave me - -Honeysuckle, lemon sweetener \ -She won't leave me if I keep her \ -But if you find the heart to keep me \ -I know that you'll never lead me on - -Do you remember? \ -Every day I don't regret \ -Oh, I'm sure I won't forget your simple smile \ -Do you remember? \ -Hopefully you're satisfied \ -Cus the resolution lets me stay a while \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-02_writing-myself-into-my-own-grave-ill-never-be-happy.md b/void-fe/data/poems/2021-03-02_writing-myself-into-my-own-grave-ill-never-be-happy.md deleted file mode 100644 index fa4d6de..0000000 --- a/void-fe/data/poems/2021-03-02_writing-myself-into-my-own-grave-ill-never-be-happy.md +++ /dev/null @@ -1,49 +0,0 @@ -# Writing Myself Into My Own Grave (“I’ll never be happy”) -*You should keep your distance*\ -*You should never stay*\ -*You should learn your lesson*\ -*I’m never okay*\ -*I’ll always be wanting*\ -*More than I can say*\ -*Use your fucking head now*\ -*And please stay away*\ -*“I’ll never be happy”*\ -*That’s the simple phrase*\ -*Always pushing boundaries*\ -*Always such a pain*\ -*Writing lines is hopeless*\ -*Just pills to help delay*\ -*You should learn your lesson*\ -*I’m never okay* - -Mhm mhm.\ -**(It’s time for a break)** - -*I’m never satisfied, don’t you think that you’d agree?*\ -*Just a sad, pathetic, hopeless mess with endless strife and grief*\ -*You can say that I’m perfection, you can tell me that you care*\ -*You can say I deserve better, now just let me go from there*\ -*I’m nobody’s posession, no one’s aiming for my pride*\ -*And deserving better never helped me, I think that’s a lie*\ -*Now it’s not about attention, and it’s not about my worth*\ -*It’s not about a partnership I’ll never find on Earth*\ -*It’s the simple fact I’m broken and I’m tearing at the seams*\ -*Try to keep myself together helping other people, see?* - -*I worry about people*\ -*I worry how I’m seen*\ -*I worry what they think of me when I’m not on their screen*\ -*I worry if they think of me at all, just the same*\ -*I wonder if they worry ‘bout me too, when they’re in-game*\ -*I always seem to focus on if everyone’s alright*\ -*I always seem to go to bed and wonder through the night* - -*“Are they okay?”*\ -*“Did they see me?”*\ -*“Am I helping?”*\ -*I’m repeating* - -*I go to bed*\ -*I close my eyes*\ -*Another day*\ -*Another night* \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-03_introductions.md b/void-fe/data/poems/2021-03-03_introductions.md deleted file mode 100644 index 88ce2be..0000000 --- a/void-fe/data/poems/2021-03-03_introductions.md +++ /dev/null @@ -1,25 +0,0 @@ -# Introductions -Hi! I'm Alice, and um... Uh.\ -I have something I wanna say, I guess... - -*Fuck yeah, I'm a trans girl*\ -*A "fuck the thoughts you had" girl*\ -*Yeah, I'm a bad bitch and I won't clean up my act, girl* - -Hah - -*I'm a poet and a hot mess*\ -*Don't wear a fucking suit and tie, I wanna wear cute dress*\ -**(moan)** *"Yes, ma'am," damn, I bet you wanna date this*\ -*Well, get in line, sweetie, I'm in high demand, wait list* - -Yeah - -*And I'm impatient*\ -*Only 3 months, downed the pills, and it leaves me fuckin restless*\ -*Your heart is on my wish list*\ -*Got pussy on my mind and not just 'cus I wanna lick clits* - -Damn \ -Better calm down a bit here \ -**(Is it hot in here? Or is that just me?)** \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-07_molded-hearts-and-melted-love.md b/void-fe/data/poems/2021-03-07_molded-hearts-and-melted-love.md deleted file mode 100644 index d02bcec..0000000 --- a/void-fe/data/poems/2021-03-07_molded-hearts-and-melted-love.md +++ /dev/null @@ -1,40 +0,0 @@ -# Molded Hearts and Melted Love -*Author’s Note: This song/poem has heavy overtones of relationship abuse. Please be aware of that before you read.* - -I’ve never been the one to think I’m waiting on their time\ -But days go by I’m wondering if they’re really satisfied\ -They tell me that that love me, and they’re happy to oblige\ -But when I ask for more forgiveness, it’s too much, I can’t deny - -I let myself believe that I’m the one who’s done wrong\ -And I can fix it baby, please, just let me write this little song\ -All the problems, all the issues, I can change myself you’ll see\ -I can mold myself so maybe you’ll stop yelling at me, please - -They’re wonderful, they’re pleasant, and I tell them every day\ -They message me on weekdays, other friends must stay away\ -When we’re calling every night I hear their voice just start to fade\ -They’re telling me it’s fine, and yet I know it’s not okay - -I let myself believe that I’m the one who’s done wrong\ -And I can fix it baby, please, just let me write this little song\ -All the problems, all the issues, I can change myself you’ll see\ -I can mold myself so maybe you’ll stop yelling at me, please - -I want them to be happy, I want them to be pleased\ -Why can’t I just be perfect? I’ll be anything they need\ -Since when did love become a game of trying to succeed\ -I hate this, every day I cry, I need to be set free - -(And yet)\ -I let myself believe that I’m the one who’s done wrong\ -And I can fix it baby, please, just let me write this little song\ -All the problems, all the issues, I can change myself you’ll see\ -I can mold myself so maybe you’ll stop yelling at me, please - -All the problems, all the issues, I can change myself you’ll see\ -I can mold myself so maybe you’ll stop yelling at me, please - -[Epilogue] - -(I love you, I just want you to love me... No, please, please say something... No don’t leave please just- I’m sorry. I’m sorry, I shouldn’t have said anything, you’re right.... I’ll stop talking to them... I’m sorry, please... Okay. Yes... Alright... I love you.... Are you okay?... I love you... I’m sorry... I’ll change, please just don’t leave me...) \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-07_poetry-to-the-void.md b/void-fe/data/poems/2021-03-07_poetry-to-the-void.md deleted file mode 100644 index 59349e3..0000000 --- a/void-fe/data/poems/2021-03-07_poetry-to-the-void.md +++ /dev/null @@ -1,18 +0,0 @@ -# Poetry to the Void -*Author's note: here's a bit of freeform poetry I wrote a while back that I thought I'd share. I know it doesn't flow super well, but I'm proud of it, and I think it's good sometimes to write stuff that's a bit off beat when it's meaningful to do so* - -Empty hearts and empty sheets \ -I'm sleeping in my dreams \ -And I wish I could say they were the same feel that I get when I see your name on my screen \ -Wish you were in my dreams when I'm fast asleep and I can't control the pace or the scene \ -But when I wake up it's still a fantasy \ -I'm alone and unseen \ -Empty hearts and black dreams \ -I'm sleeping in my sheets \ -And I wish that I could say you were here with me when I wake up and hear your name in my mind \ -Wish you were by my side and held tight and I can't convey how good it feels every time \ -But when I wake up it's still a fantasy \ -I'm alone and unseen \ -Tell me the difference between day dreaming and the way you pass right through my hands when I try to hold you \ -I'm missing someone I've never felt in the presence of my room or my heart before and I can't explain it, can't convey it \ -Still just writing lines to a void that comforts me as much as the paper I'd recycle when I'm done bleeding ink on the page \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-08_a-moments-rest-at-a-peaceful-shore.md b/void-fe/data/poems/2021-03-08_a-moments-rest-at-a-peaceful-shore.md deleted file mode 100644 index bda0322..0000000 --- a/void-fe/data/poems/2021-03-08_a-moments-rest-at-a-peaceful-shore.md +++ /dev/null @@ -1,14 +0,0 @@ -# A Moment's Rest at a Peaceful Shore -The wind calms, the storm in my mind settles\ -The static pervading off the edges of my mind's perspective finally begins to focus itself into a clearer darkness - -My thoughts wedge themselves into place\ -For a brief moment, I am collected, as the fears and insecurities of my life slowly inch themselves further away - -The tide is low, I am standing at the shore\ -A breeze gently brushes past my skin as I ponder when the wind will pick up again and leave me to brave its harsh gusts - -Evidently, the storm will return\ -The static will regain its strength, and my thoughts will cloud themselves once more as I attempt to continue forward - -For now, in this moment, I am at peace \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-13_black-rose-gray-skies.md b/void-fe/data/poems/2021-03-13_black-rose-gray-skies.md deleted file mode 100644 index 6965b34..0000000 --- a/void-fe/data/poems/2021-03-13_black-rose-gray-skies.md +++ /dev/null @@ -1,59 +0,0 @@ -# Black Rose, Gray Skies -**[Intro]**\ -Black rose, thorns sharp and trapped inside a clear vessel\ -Petals falling, won't you please come and save this wilting weed\ -Slower still, it's a tragic, but slow death inside the glass cage\ -Seasons change, nights fade and dissipate into similar shades of gray - -**[Chorus]**\ -*On the windowsill, perched and perfectly still*\ -*I can see the brightest stars in the sky*\ -*Yes, the wind is still, make a wish, if you will*\ -*And I will too in hopes that time goes by* - -**[Verse 1]**\ -*This is*\ -*Not a cry for help, I don't need my princess Belle*\ -*I just want to truly be set free*\ -*I am*\ -*Trapped in this case, though it's safe, I'm afraid*\ -*Will I be the rose I see inside?*\ -*You can*\ -*Find me up here, perched and perfectly still*\ -*Kicked my feet and staring up so high*\ -*Black rose*\ -*Prick me again, make me bleed, little friend*\ -*Oh, if only I weren't in my mind* - -**[Chorus]**\ -*On the windowsill, perched and perfectly still*\ -*I can see the brightest stars in the sky*\ -*Yes, the wind is still, make a wish, if you will*\ -*And I will too in hopes that time goes by* - -**[Verse 2]**\ -*I don't*\ -*Want to be afraid, there's much progress I have made*\ -*And I'm only getting further, still*\ -*I am*\ -*Trapped inside my cage, don't see a way I can escape*\ -*A cognitive prison, against my will*\ -*Looking down*\ -*Will never help, I see my death, my biggest doubts*\ -*A fall that's deep enough that it would kill*\ -*So I*\ -*Keep my head held high, looking up into the sky*\ -*As the petals wilt onto the 'sill* - -**[Chorus]**\ -*On the windowsill, perched and perfectly still*\ -*I can see the brightest stars in the sky*\ -*Yes, the wind is still, make a wish, if you will*\ -*And I will too in hopes that time goes by* - -**[Epilogue]**\ -I look down at the black rose, the vessel is as glossy and beautiful as the treasure it contains\ -The stars in the sky look down at me and smile, and I can feel their warm glow from here\ -If I could be that rose, take it outside its cell and transfuse its radiant beauty\ -I am a dreamer in the hopes that one day the vessel shatters and I too will be set free\ -A rose like no other, with thorns trimmed, and petals full as it blooms in the new morning Sun \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-17_bittersweet-cheers.md b/void-fe/data/poems/2021-03-17_bittersweet-cheers.md deleted file mode 100644 index fb96bf7..0000000 --- a/void-fe/data/poems/2021-03-17_bittersweet-cheers.md +++ /dev/null @@ -1,61 +0,0 @@ -# Bittersweet, Cheers -**[Intro]**\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*things are gonna change, yeah*\ -*things are gonna change* - -**[Verse 1]**\ -*I try to tell myself I'm happier in place*\ -*but that's a lie, dear*\ -*we all know my fears*\ -*I'm just worried what you think and what you'll say*\ -*am I talented yet?*\ -*questions in my own head* - -**[Pre-Chorus]**\ -*and if my friends and followers know me*\ -*then they'll know this song before I show them it* - -**[Chorus]**\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*another year gone, am I stuck in place?*\ -*but when I look back I don't recognize my own face*\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*even for better, for worse, I'm here*\ -*and my words are echoing clear, my dear* - -**[Verse 2]**\ -*feels like I can't write a happy poem*\ -*but what's there to say?*\ -*not happy everyday*\ -*and I don't need you to feel sorry for me*\ -*this one's for my peers*\ -*bittersweet thoughts, cheers* - -**[Pre-Chorus]**\ -*and if my friends and followers know me*\ -*then they'll know this song before I show them it* - -**[Chorus]**\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*another year gone, am I stuck in place?*\ -*but when I look back I don't recognize my own face*\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*things are gonna change, yeah*\ -*things are gonna change*\ -*even for better, for worse, I'm here*\ -*and my words are echoing clear, my dear* - -*another year gone, am I stuck in place?*\ -*but I don't look back, I just keep my pace* \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-18_notification-high.md b/void-fe/data/poems/2021-03-18_notification-high.md deleted file mode 100644 index bf558fc..0000000 --- a/void-fe/data/poems/2021-03-18_notification-high.md +++ /dev/null @@ -1,30 +0,0 @@ -# Notification High -**[Chorus]**\ -*I'm hot, I'm cool, I'm the best you've ever seen*\ -*not my ego, not a brag, just the facts up on the screen*\ -*I take selfies cus I'm worth it and you all just need to see*\ -*click, snap, upload, tap, here come the notifs loud and clear* - -**[Verse 1]**\ -*I can't help it if you're falling over me (click, snap, upload, tap)*\ -*though it sure is fun to see your little squeaks (click, snap, upload, tap)*\ -*judge me perfect, I'm a quirky little freak (click, snap, upload, tap)*\ -*boost my pictures, tell me sweet words, pray to God that I will see (click, snap upload, tap)* - -**[Chorus]**\ -*I'm hot, I'm cool, I'm the best you've ever seen*\ -*not my ego, not a brag, just the facts up on the screen*\ -*I take selfies cus I'm worth it and you all just need to see*\ -*click, snap, upload, tap, here come the notifs loud and clear* - -**[Bridge]**\ -*click, snap, upload, tap, click, snap, upload, tap* (I sometimes think that I'm too much, it's true)\ -*click, snap, upload, tap, click, snap, upload, tap* (I sometimes act like I don't have a clue)\ -*click, snap, upload, tap, click, snap, upload, tap* (I sometimes worry if it is the truth)\ -*click, snap, upload, tap, click, snap, upload, tap* (All this attention, this attention, this attention, this attention) - -**[Chorus]**\ -*I'm hot, I'm cool, I'm the best you've ever seen*\ -*not my ego, not a brag, just the facts up on the screen*\ -*I take selfies cus I'm worth it and you all just need to see*\ -*click, snap, upload, tap, here come the notifs loud and clear* \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-28_echoes.md b/void-fe/data/poems/2021-03-28_echoes.md deleted file mode 100644 index 4a3159c..0000000 --- a/void-fe/data/poems/2021-03-28_echoes.md +++ /dev/null @@ -1,71 +0,0 @@ -# Echoes -**[Verse 1]** - -*Echoes*\ -*Of someone I used to be*\ -*Though I think I left myself quite far behind*\ -*Troubles*\ -*Of my life, they fade away*\ -*Getting distant as I keep myself on time* - -**[Pre-Chorus]** - -*You can't see me, you can't see me*\ -*But I'm growing*\ -*Just believe me, just believe me*\ -*I can show it*\ -*I thought I was done with proving*\ -*Myself worthy* - -*No, I'm not*\ -*The show goes on, I'm sorry* - -**[Chorus]** - -*Echoes, echoes, echoes*\ -*Remind me of a time, my dear*\ -*When I was once alone beside myself*\ -*Echoes, echoes, echoes*\ -*Used to read between the lines to clear*\ -*Me up on blurry lenses in my mind* - -*Now the echoes fade away*\ -*And I'm not who I used to be, but that's okay, it fades away some day* - -**[Verse 2]** - -*Pictures*\ -*Of a thing I used to see*\ -*Yet I keep it out of focus in the end*\ -*Memories*\ -*The scenes of yesterday*\ -*I'm so happy that I'm not who I was then* - -**[Pre-Chorus]** - -*You can't see me, you can't see me*\ -*But I'm growing*\ -*Just believe me, just believe me*\ -*I can show it*\ -*I thought I was done with proving*\ -*Myself worthy* - -*No, I'm not*\ -*The show goes on, I'm sorry* - -**[Chorus]** - -*Echoes, echoes, echoes*\ -*Remind me of a time, my dear*\ -*When I was once alone beside myself*\ -*Echoes, echoes, echoes*\ -*Used to read between the lines to clear*\ -*Me up on blurry lenses in my mind* - -*Now the echoes fade away*\ -*And I'm not who I used to be, but that's okay, it fades away some day* - -*Echoes, echoes, echoes* - -*Now the echoes fade away*\ -*And I'm not who I used to be, but that's okay, it fades away some day* \ No newline at end of file diff --git a/void-fe/data/poems/2021-03-29_youll-grow-out-of-this.md b/void-fe/data/poems/2021-03-29_youll-grow-out-of-this.md deleted file mode 100644 index 2ae3fb1..0000000 --- a/void-fe/data/poems/2021-03-29_youll-grow-out-of-this.md +++ /dev/null @@ -1,34 +0,0 @@ -# "You'll Grow Out Of This" -**[Verse 1]** - -*I write songs I'll never sing*\ -*Like I write lines you'll never read*\ -*And I can't help but be afraid*\ -*That I can't finish anything* - -**[Verse 2]** - -*My emotions not in check*\ -*Sorry, did I just say that?*\ -*I don't know why I am so sad*\ -*Now I'll cry and say my bad* - -**[Chorus]** - -*This is where I'd make a break, a part of this song to repeat*\ -*But I don't care what it should say, 'cus I'm already bored, okay?*\ -*This is where I'd write some lines to keep myself from going on*\ -*And if I don't then you'll move on because this song is way too long* - -**[Verse 3]** - -*ADHD isn't grand*\ -*It's more than just attention span*\ -*I just hope you'll understand*\ -*That I cannot control my hands* - -**[Verse 4]** - -*I could write more songs I guess*\ -*Instead of doing all the rest*\ -*Depends on if I finish this* \ No newline at end of file diff --git a/void-fe/data/poems/2021-04-04_foxes-are-predators.md b/void-fe/data/poems/2021-04-04_foxes-are-predators.md deleted file mode 100644 index 36811be..0000000 --- a/void-fe/data/poems/2021-04-04_foxes-are-predators.md +++ /dev/null @@ -1,43 +0,0 @@ -# Foxes Are Predators -*I used to think about the monsters underneath my bed*\ -*Hiding in the darkness, now they're stuck inside my head*\ -*Why does everything I write feel like a call for help?*\ -*Reaching out and seeing that no one knows how to tell* - -*I've become the predator*\ -*The arrow on your hearts*\ -*Flailing wildly, spewing toxins*\ -*That's the hardest part*\ -*I'm no hunter, I don't bite, I think you might agree*\ -*Lately I've been seeing there's a deeper side of me* - -*Used to think about the many friendships I had held*\ -*Keeping people close, wondering if they kept me as well*\ -*Why does my destructive cycle keep on catching me?*\ -*Pushing them away and watching how they distance me* - -*I've become the predator*\ -*The arrow on your hearts*\ -*Flailing wildly, spewing toxins*\ -*That's the hardest part*\ -*I'm no hunter, I don't bite, I think you might agree*\ -*Lately I've been seeing there's a deeper side of me* - -*Lately I've been seeing there's a deeper side of me*\ -*Come on, see me closer, and I think you might agree*\ -*Look into my spiraling and thinking well of me*\ -*Promise that I'll hurt you, but don't misunderstand me* - -*I don't want to be villainous or toxic at my core*\ -*I really wish that I could just stop hurting anymore*\ -*I don't know how to fix this, but I'm trying all my tricks*\ -*I cannot keep on hurting people, 'cus it makes me sick* - -*I need you to believe me because sometimes I can't see it*\ -*So please look a little closer and I promise I will be a bit*\ -*More kind and empathetic and the person that you wanna be*\ -*Friends with, and maybe partners, maybe that's a little private see*\ -*I can't tell if I'm spiraling right now my thoughts keep flowing*\ -*And I don't know if you ever will quite know just what I'm knowing*\ -*Yeah, so let me finish writing and I'll get back to conspiring*\ -*How I'll be a better predator for you* \ No newline at end of file diff --git a/void-fe/data/poems/2021-04-27_missing-the-mark.md b/void-fe/data/poems/2021-04-27_missing-the-mark.md deleted file mode 100644 index a24faaa..0000000 --- a/void-fe/data/poems/2021-04-27_missing-the-mark.md +++ /dev/null @@ -1,24 +0,0 @@ -# Missing The Mark -*Lately I've been thinking 'bout how miserable I've been*\ -*Sadness never comforts me, but it's been my best friend*\ -*And I could write more lines 'bout how I wish I could see*\ -*All the love and friendship all my peers tell me they see* - -*Oh God, I wish*\ -*I could be happy for myself*\ -*Oh God, I wish*\ -*I could be happy for myself* - -*Keeping myself busy so the bad thoughts stay away*\ -*Telling myself good things so emotions won't go stray*\ -*Battles, always battles, fight the bad side of my brain*\ -*No, I'm not alone, but still it sometimes feels that way* - -*Oh God, I wish*\ -*I could be happy for myself*\ -*Oh God, I wish*\ -*I could be happy for myself*\ -*Oh God, I wish*\ -*I could be happy for myself* - -**It always seems it should be easier than this** \ No newline at end of file diff --git a/void-fe/data/poems/2021-05-19_support-class.md b/void-fe/data/poems/2021-05-19_support-class.md deleted file mode 100644 index c331761..0000000 --- a/void-fe/data/poems/2021-05-19_support-class.md +++ /dev/null @@ -1,21 +0,0 @@ -# Support Class -*Words like knives carving thoughts into the pages of my life*\ -*Like scattered scraps of paper torn and fluttering in the wind*\ -*So too am I temporary and fleeting* - -*Like fingers pulling back and tearing at a lockbox of treasures*\ -*The tendrils scratching and aggressively tugging at my heart*\ -*It makes me feel wanted* - -*The thoughts and feelings and memories and doting and loving phrases echo in my mind ceaselessly to remind me that I am better and more whole than I was before*\ -*And when I look up into the stars and see them shining back at me it is a reminder that I am a small and insignificant being, but that I am wanted and loved and cared for all the same*\ -*And maybe when it's thoughts like this I don't feel so alone and afraid*\ -*And maybe I can learn for myself to love who I have become again* - -*We fall into these traps like moths and flies sinking deeply*\ -*Desperately clawing and bemoaning our woes and fears*\ -*But it's not too late* - -*Fight, bite, bark, and resist the plagues in your own self conscious*\ -*I am the protagonist of my own hopes, dreams, and desires*\ -*And you all are my support* \ No newline at end of file diff --git a/void-fe/data/poems/2021-05-27_i-wish-i-wore-my-garters.md b/void-fe/data/poems/2021-05-27_i-wish-i-wore-my-garters.md deleted file mode 100644 index 93a48c7..0000000 --- a/void-fe/data/poems/2021-05-27_i-wish-i-wore-my-garters.md +++ /dev/null @@ -1,38 +0,0 @@ -# I Wish I Wore My Garters -*I hate my bedroom door*\ -*I have to try a couple times to push it open*\ -*I hate to feel like I'm confined*\ -*I have to pee, and now I wanna go outside*\ -*But I'm still trapped inside my mind* - -*I hate this wooden floor* \ -*The second floor was just a little too intrusive* \ -*And every time I have to climb* \ -*A flight of stairs to get to where I feel I'm fine* \ -*But I'm still trapped inside my mind* - -*This feels good, yeah, this feels real*\ -*This feels healthy, so it seems*\ -*A shot of dopamine has got me wondering if this keeps*\ -*Circling, winding, aching headaches*\ -*Swirling thoughts and catching feelings, too* \ -*I'll see you soon* - -*I hate my ceiling fan* \ -*I have to keep it on because if not it's too hot* \ -*But I don't mean that I look nice*\ -*I have to keep the room from heating up this time*\ -*But I'm still trapped inside my mind* - -*I hate my bedroom door* \ -*I have to try a couple times to push it open* \ -*I hate to feel like I'm confined* \ -*So many walls and I'm not fine* \ -*I want to get outside my mind* \ -*I can't stop thinking every time* \ -*I don't want thoughts to make me cry*\ -*I just want to feel satisfied* \ -*There's just so many times I've tried*\ -*I hope my partner helps me smile* \ -*I bet my friends will stay a while*\ -*But I'm still trapped inside my mind* \ No newline at end of file diff --git a/void-fe/data/poems/2021-07-21_since-when-did-winter-end.md b/void-fe/data/poems/2021-07-21_since-when-did-winter-end.md deleted file mode 100644 index 84f92f5..0000000 --- a/void-fe/data/poems/2021-07-21_since-when-did-winter-end.md +++ /dev/null @@ -1,53 +0,0 @@ -# Since When Did Winter End -*I’m a mess*\ -*A disaster, but I see it in a better light now than I did before*\ -*I’m a mess*\ -*But I manage every moment, and I get along well when it’s not as warm* - -*Seasons change, people change*\ -*I’m not a perfect model*\ -*I can tell you how to improve*\ -*While I lament all my struggles*\ -*Then you’ll see* - -*When Winter ends I think I get*\ -*A little less upsetting*\ -*So it seems* - -*Here’s the thing*\ -*I know it’s not quite summer, but I’ll make believe it’s just as bright outside*\ -*Here’s the thing*\ -*You would think it would be better, but predictions haven’t ever been my pride* - -*Seasons change, people change*\ -*It’s not always the weather*\ -*I look around at all the leaves*\ -*And see that change is better*\ -*It’s insane* - -*When Winter ends I think I get*\ -*A little less upsetting*\ -*So it seems* - -*It’s surreal*\ -*Can’t believe so much has happened, I reminisce and then I wonder if it’s real*\ -*It’s surreal*\ -*I know Winter’s fast approaching, I’m prepared and I’m excited now, I feel* - -*Seasons change, people change*\ -*I can’t believe I’m here now*\ -*The time goes by and I still*\ -*Think that yesterday was 1 month*\ -*I’m impressed* - -*When Winter ends I think I get*\ -*A little less upsetting*\ -*So it seems* - -*When Winter ends I think I get*\ -*A little less upsetting*\ -*A little less depressing*\ -*A little less regretting*\ -*A little less repressing*\ -*A little less regressing*\ -*So it seems* \ No newline at end of file diff --git a/void-fe/data/poems/2021-07-25_shes-not-who-she-used-to-be.md b/void-fe/data/poems/2021-07-25_shes-not-who-she-used-to-be.md deleted file mode 100644 index 23630f2..0000000 --- a/void-fe/data/poems/2021-07-25_shes-not-who-she-used-to-be.md +++ /dev/null @@ -1,36 +0,0 @@ -# She's Not Who She Used To Be -*She looks in the mirror and likes what she sees*\ -*It's obvious she's not who she used to be*\ -*Thought she had her life found out by 14*\ -*But isn't it easy to think that, it seems*\ -*Thinking it's over just ain't quite her style*\ -*"Running, I'm running" she said for a while*\ -*Run from her problems, run from mistakes*\ -*Run because she doesn't understand things* - -*She's not a model, she's not a queen*\ -*Stressed and depressed, she would look up and scream*\ -*Running in circles, she said she was fine*\ -*"It'll always be this way" she said with a sigh*\ -*That's just who she is, and it won't ever change*\ -*She felt like she'd always be looked at as strange*\ -*Hiding her gender, hiding her heart*\ -*Keeping it secret's the easiest part* - -*"I'm fed up, I'm stuck, and I've had enough"*\ -*She wanted a change, she knew it'd be tough*\ -*She took a deep breath and decided to try*\ -*She quit her job, outed herself, and then cried*\ -*There's no point in trying to live a big lie*\ -*There's no point in not even trying to try*\ -*She talked to some friends and she knew what to do*\ -*"I'll fight for myself, cus it's long overdue"* - -*She looks in the mirror and likes what she sees*\ -*It's obvious she's not who she used to be*\ -*The sad, lonely teenager just wanting friends*\ -*The stressed, upset college kid hiding her dread*\ -*"I know I'm a girl, and I see it right now"*\ -*Things line up neatly, and clearer, somehow*\ -*That's my big story, that's who you see* \ -*I'm glad that I'm not who I used to be* \ No newline at end of file diff --git a/void-fe/data/poems/2021-11-21_probably-bad-for-you.md b/void-fe/data/poems/2021-11-21_probably-bad-for-you.md deleted file mode 100644 index b630800..0000000 --- a/void-fe/data/poems/2021-11-21_probably-bad-for-you.md +++ /dev/null @@ -1,45 +0,0 @@ -# Probably Bad For You -*When did all the lights begin to fade away?*\ -*I see them now, I see them now*\ -*When did you decide to leave me hurt this way?*\ -*I'm healing now, won't bleed it out* - -*All the little silly things you said to put me down*\ -*And all the guilt trips sink into a funnel in the ground and now *\ -*It's clear I'm not gonna be by your side next year* - -*And now I'm probably bad for you*\ -*I know I'm kind of a sin to you*\ -*And maybe I'm still in love with you*\ -*But I am probably bad for you* - -*So when did you decide what's right from what's wrong?*\ -*Well, I'll sort it out, I'll sort it out*\ -*When did you decide I'm not the shining star you sought?*\ -*I'm shining now, bright through the clouds* - -*All the little silly things you said all those thoughts drown*\ -*And all the nights I stayed up hoping you would call me out and now*\ -*It's clear I'm not gonna be by your side next year* - -*And now I'm probably bad for you*\ -*I know I'm kind of a sin to you*\ -*And maybe I'm still in love with you*\ -*But I am probably bad for you* - -*Keep me close, keep me near*\ -*Tell me things I wanna hear*\ -*Let me know I'm not too far from home*\ -*Satisfy me just once more*\ -*Send excuses to my door*\ -*And don't forget to post it all, my dear*\ -*It's clear I'm not gonna be by your side next year* - -*I know I'm probably bad for you*\ -*I know I'm kind of a sin to you*\ -*And I don't think I'm in love with you*\ -*'Cus now I'm definitely bad for you* - -*All the little silly things I did to keep me in your mind*\ -*And all the times I sat alone at home and wondered why and now*\ -*It's clear I don't wanna be by your side next year* \ No newline at end of file diff --git a/void-fe/data/poems/2022-01-20_filtered-thoughts.md b/void-fe/data/poems/2022-01-20_filtered-thoughts.md deleted file mode 100644 index 1658bc3..0000000 --- a/void-fe/data/poems/2022-01-20_filtered-thoughts.md +++ /dev/null @@ -1,20 +0,0 @@ -# Filtered Thoughts -*Sometimes I wonder if I could write to save my life*\ -*Sometimes I wonder if all the effort's worth the strife*\ -*I've been down this road before and now the twists are turns are pleasant*\ -*Don't get too comfy, though, because I'm throwing another curveball at you* - -*All the rhythms and the sounds and the echoes leave me restless*\ -*I've been thinking, I've been thinking, I've been thinking of the present*\ -*Turning circles in my head and now I'm spiraling down under but*\ -*Don't take me there because Australia's just too many timezones apart* - -*Fuck you, I don't need this judgemental mindless headspace*\ -*I've been trying to keep up with all the thoughts and it's got me displaced*\ -*I can feel like I'm alone, but like I'm here, and now it doesn't make sense*\ -*I wish you could see beyond these filtered thoughts, I'm crying when I'm silent* - -*It might feel like I'm just rambling in the distance*\ -*It might feel like there's no pattern here and it's all senseless*\ -*The waves of my mind keep my time and now I'm pondering still*\ -*Sometimes I wonder if I'm loved for my posts or my personality* \ No newline at end of file diff --git a/void-fe/data/poems/2022-05-22_i-can-never-see-past-next-week.md b/void-fe/data/poems/2022-05-22_i-can-never-see-past-next-week.md deleted file mode 100644 index bc87752..0000000 --- a/void-fe/data/poems/2022-05-22_i-can-never-see-past-next-week.md +++ /dev/null @@ -1,18 +0,0 @@ -# I can never see past next week -*A moment of peace in a busy world of busy people*\ -*Staring out the window, the view of the balcony just blissfully capturing what my heart feels*\ -*Though the loving embrace of the morning sun shines on me again, I can't help but let those thoughts intrude*\ -*Still fearing the storm*\ -*Still waiting for it to show* - -*A path I know I am to travel again and travel fully*\ -*There is time again until I must stand up and walk this path with ceaseless confidence*\ -*Whether or not I am a changed woman, the journey continues ever onward toward the horizon*\ -*Never ending past the hills*\ -*Never did I quite sit still* - -__Silence__\ -__Stillness__\ -__Serenity__ - -*Someday, I will make my break upon that path again* \ No newline at end of file diff --git a/void-fe/data/poems/2022-09-06_27.md b/void-fe/data/poems/2022-09-06_27.md deleted file mode 100644 index b9cafc4..0000000 --- a/void-fe/data/poems/2022-09-06_27.md +++ /dev/null @@ -1,44 +0,0 @@ -# 27 -**27**\ -*I used to think that day was just a far off dream for me*\ -*Dreading when I wake because I can't see past next week*\ -*"What's the point of living if I'm just living a lie?"*\ -*Those echoes in my memory are far away tonight* - -**27**\ -*I used to think that I was all alone feeling this pain*\ -*Using words and writing poems to keep up the pace*\ -*Whisper reassurances to myself to feel safe*\ -*Hugging pillows tightly as I'm drifting in this space* - -**27**\ -*Now the railing that I'm safely behind keeps me sane*\ -*I'm not quite the black rose that I pricked, but just the same*\ -*I still can't see past next week, but maybe that's okay*\ -*Maybe in this case my age was not an early grave* - -**27**\ -*Now I use a new name and I wear a different face*\ -*But I'm still the same girl even if I'm less afraid*\ -*Back then I sat on sidelines to watch everyone else live*\ -*And now, for once, it's my turn, I've got something new to give* - -**27**\ -*I don't need to tell myself that I'm not worth living*\ -*I don't need to hold onto my reassurances*\ -*I don't need to feel like if I left no one would care*\ -*I've made it this far and now I'm letting myself live* - -**27**\ -*I'm doing my best and I know that's all I can do* \ -*I know it's enough and I know you will see it, too*\ -*This life is so precious and that's why, now, I can say* \ -*I'm glad that I know that I'll be turning 28* - -*There's no big ending, no big rhyme to close off this chapter* \ -*I'm not ending anything with a bang or a whimper* \ -*Just acknowledging what I've now firmly put behind me* - -This is how it ends \ -This is how it starts \ -I deserve it. \ No newline at end of file diff --git a/void-fe/data/poems/2023-01-31_they-said-i-could-be-anything-when-i-grew-up-but-i-was-already-a-girl-im.md b/void-fe/data/poems/2023-01-31_they-said-i-could-be-anything-when-i-grew-up-but-i-was-already-a-girl-im.md deleted file mode 100644 index 13649cd..0000000 --- a/void-fe/data/poems/2023-01-31_they-said-i-could-be-anything-when-i-grew-up-but-i-was-already-a-girl-im.md +++ /dev/null @@ -1,58 +0,0 @@ -# They Said I Could Be Anything When I Grew Up, But I Was Already A Girl (I'm Living Proof) -*I still can't see past next week\ -It feels like an eternity and I\ -Can't keep waiting up\ -Life's for living 'til we're dead\ -But I'm not finished writing yet and I\ -Hope you're keeping up\ -I can't keep saying "it'll be next year"* - -(I wanna be "me" today)\ -*Fuck your opinion - I'm not listening\ -Cause I won't let those words take hold of me\ -I'm not afraid to be me (fuck, if I'm not a girl, then what gives you the right to tell me)\ -Fuck your opinion - I'm not listening\ -Cause I'm done being afraid to reach my peak\ -I'm not afraid to be me\ -I'm not afraid to be me* - -*I still can't see past next week\ -I'd even fear it in my sleep and I\ -Can't keep waking up\ -Dreams are meant to be lived out\ -No, I won't let you shape my doubts and I\ -Won't stop looking up\ -I can't keep saying "it'll be next year"* - -(I wanna be "me" today)\ -*Fuck your opinion - I'm not listening\ -Cause I won't let those words take hold of me\ -I'm not afraid to be me (fuck, if I'm not a girl, then what gives you the right to tell me)\ -Fuck your opinion - I'm not listening\ -Cause I'm done being afraid to reach my peak\ -I'm not afraid to be me\ -I'm not afraid to be me* - -*There's always so damn much to fear\ -There's always something creeping near\ -And I can't wait inside my room forever clutching my own sides* - -*There's always someone making fun\ -There's always some fuck with a gun\ -But I can't let that stop me living for the first time in my life* - -(I wanna be "me" today)\ -*Fuck your opinion - I'm not listening\ -Cause I won't let those words take hold of me\ -I'm not afraid to be me (fuck, if I'm not a girl, then what gives you the right to tell me)\ -Fuck your opinion - I'm not listening\ -Cause I'm done being afraid to reach my peak\ -I'm not afraid to be me\ -I'm not afraid to be me* - -(I'm not afraid to be me) *Fuck your gender roles, fuck biology*\ -(I'm not afraid to be me) *I know that I'm a girl, don't need to "wait and see"*\ -(I'm not afraid to be me) *'Cause I'm not done yet, I'm just at the start*\ -(I'm not afraid to be me) *I'll keep on writing 'til I empty out my heart* - -[**Yeah, in case you hadn't noticed, I'm a fucking girl - deal with it.**] \ No newline at end of file diff --git a/void-fe/data/poems/2023-02-15_drop-kicked-from-senselessness.md b/void-fe/data/poems/2023-02-15_drop-kicked-from-senselessness.md deleted file mode 100644 index 5f9e12a..0000000 --- a/void-fe/data/poems/2023-02-15_drop-kicked-from-senselessness.md +++ /dev/null @@ -1,14 +0,0 @@ -# Drop Kicked From Senselessness -*Soft, muttered frequencies on the periphery of my subconscious*\ -*A tune I used to hear that flickers its presence*\ -*Giving me leverage of which to confine myself within the most secluded of spaces*\ -*That distant melody echoing against the walls of my mind*\ -*Silent, familiar wavelengths of nothingness that protrude*\ -*The flooding sensations of lights fluttering among darkness*\ -**Stop. Stop this.** - -*As the static fades out from its crescendo I am thrust outside those walls again*\ -*Glimmering bleak reality returning its vibrancy to mock my estate*\ -*The tempo and pacing and rhythm of the natural beats consume the timeline of my vision*\ -*Balancing myself and weighing my feet as though I've dropped from a short ledge*\ -*And that tune that was once so prominent is back in its chambers* \ No newline at end of file diff --git a/void-fe/data/poems/2023-02-28_what-do-you-mean-youre-not-gay-you-fucking-dated-me.md b/void-fe/data/poems/2023-02-28_what-do-you-mean-youre-not-gay-you-fucking-dated-me.md deleted file mode 100644 index fabce54..0000000 --- a/void-fe/data/poems/2023-02-28_what-do-you-mean-youre-not-gay-you-fucking-dated-me.md +++ /dev/null @@ -1,53 +0,0 @@ -# What do you mean you're not gay, you fucking dated me -*Waiting on you to blink me to life*\ -*She said I'm her backup [gal] in the end*\ -*I've never been one to pull away*\ -*Say what you like, babe, love drunk in my bed*\ -*It never seemed like I was worth all the fuss*\ -*But if you made up your mind, then who could I trust?* - -*I'm wasting my years on you, babe*\ -*So you can call me your [girl]friend, or friend, anyway*\ -*It was never like you to change*\ -*The way that you view my life*\ -*So fuck off, screw you, I'm fine* - -*I'm just a mess who can't see my fate*\ -*Tell me again how to better serve you*\ -*Writing a post to get out my thoughts*\ -*I'd just be worse off, you told me the truth*\ -*"I just don't see you as a girl," she would try*\ -*And now you won't hear me say "this is my damn life"* - -*I'm wasting my years on you, babe*\ -*So you can call me your [girl]friend, or friend, anyway*\ -*It was never like you to change*\ -*The way that you view my life*\ -*So fuck off, screw you, I'm fine* - -*Tell me I'm not so useful anymore*\ -*You're moving on, and I'm just a bore*\ -*Say it to my face with this faded haze* - -**(spoken, ranting, raw)**\ -Cus let's face it, you wouldn't have the guts to say it sober\ -I'm worth so much more than you ever made me feel like\ -And the thought of you ending it on the note of how bad you feel just makes me angrier\ -It's like you literally never considered my feelings in your own selfish decisions\ -And then you have the fucking nerve to come to me\ -Saying shit like "I feel bad that things ended this way"\ -All while fucking deadnaming me in the process\ -I'm glad that you gave up on me, because I should have done it sooner\ -Oh, and that surgery you told me not to pursue because it would make you sad?\ -Fuck you. I'm getting it. I've needed it. Just leave me the fuck alone\ -Go back to your sad life with your miserable "career" and choke on it\ -You couldn't even make enough change to give yourself happiness\ -Why would I expect you to do so for me? - -*I'm wasting my years on you, babe*\ -*So you can call me your [girl]friend, or friend, anyway*\ -*It was never like you to change*\ -*The way that you view my life*\ -*So fuck off, screw you, I'm fine*\ -Fuck off, screw you, I'm fine. - diff --git a/void-fe/data/poems/2023-03-03_senseless-murmurs-of-the-estranged-the-last-night.md b/void-fe/data/poems/2023-03-03_senseless-murmurs-of-the-estranged-the-last-night.md deleted file mode 100644 index 9366aaa..0000000 --- a/void-fe/data/poems/2023-03-03_senseless-murmurs-of-the-estranged-the-last-night.md +++ /dev/null @@ -1,51 +0,0 @@ -# Senseless Murmurs of the Estranged (~~The~~ Last Night) -*Slithering fangs and pointy tails*\ -*Tell me if I'm not feeling well*\ -*My mindscape's hazard lights sing symphonies that plead me not to crash*\ -*Maybe that last line's just a touch-*\ -*I'm feeling obsessed with feeling up*\ -*But the rhythm of our continued stumbling keeps me anchored on the act* - -*Maybe I'm not making sense*\ -*Break it down a little first* - -*Singing out my heartstrings like they never gave a pause*\ -*I'm writing another washed out drawn out rant recalling how we stalled*\ -*And you were always the one I asked for in my nighttime bender gleam*\ -*Separate the colors, strip my words, and paint the walls with apathy* - -*Cold night summer sunsets bail*\ -*Another take out date night last meal*\ -*Surrender my senses call my cell and keep my phrases right on track*\ -*The writing is on the wall tonight*\ -*Blinding reflections kill my sight*\ -*A murderous moment of dismemberment from feelings that you lack* - -*Maybe I'm not making sense*\ -*Break it down a little first* - -*Singing out my heartstrings like they never gave a pause*\ -*I'm writing another washed out drawn out rant recalling how we stalled*\ -*And you were always the one I asked for in my nighttime bender gleam*\ -*Separate the colors, strip my words, and paint the walls with apathy* - -*Call me out on conflict resolution from temptation of my thoughts*\ -*Shatter the glass and flip the script of all the preface that you wrought*\ -*I'm not seeing light;*\ -*this blurry image right;*\ -*choke my eyes, drain my voice;*\ -*break my ego, mayday;*\ -*I'll take solace knowing this will be the last night of this play*\ -*Where I'm the actor, you're the audience and I'm the one who pays* - -*Maybe I'm not making sense*\ -*Break it down a little first* - -*Singing out my heartstrings like they never gave a pause*\ -*I'm writing another washed out drawn out rant recalling how we stalled*\ -*And I can't stab myself in places that I know I shouldn't keep-*\ -*Me- I mean you, and this is true, I'm waking from this heavy sleep*\ -*I'll write my will, I've had my doubts, I'm singing songs, I'm bleeding out*\ -*Waterfalls perched on the windows of my dreary excess pout*\ -*And you were always the one I asked for in my nighttime bender gleam*\ -*Separate the colors, strip my words, and paint the walls with apathy* \ No newline at end of file diff --git a/void-fe/data/poems/2023-04-10_iced-coffe-part-2.md b/void-fe/data/poems/2023-04-10_iced-coffe-part-2.md deleted file mode 100644 index 66010a4..0000000 --- a/void-fe/data/poems/2023-04-10_iced-coffe-part-2.md +++ /dev/null @@ -1,75 +0,0 @@ -# Iced Coffee - Part 2 -*(Author's note: The first part of this is exactly the same as my original poem, "Iced Coffee". I included it both as a way to directly show my own growth in the poem and for convenience.)* - -*Iced coffee, on a cold Winter's day* \ -*Iced coffee, bittersweet at the taste* \ -*Do you see me? I probably fade* \ -*Fade into darkness, and I'll go away* - -Hmm.... - -*Why can't you see me? This mirror is broken* \ -*Why can't you see me? I can't be this broken* \ -*Every line keeping me from satisfaction* \ -*I'm wondering why you can keep me in traction* \ -*I'm falling, I'm sinking, this love is a sinkhole* \ -*I don't understand why you keep me, this freakshow* \ -*I see you and there's so much better contestants* \ -*Competing and winning and gaining attention* \ -*And I'm consolation, the prize for obsession* \ -*Don't know why you'd even give me just a second* - -*Iced coffee, on a cold Winter's day* \ -*Iced coffee, bittersweet at the taste* \ -*Do you see me? I probably fade* \ -*Fade into darkness and I'll go away* - -*Hmmmm....* \ -*Hmmmm....* \ -*Hmmmm....* **(it's like... I don't really even know why I bother)** \ -*Hmmmm....* **(am I even worth paying attention to in the first place?)** \ -*Hmmmm....* \ -*Hmmmm....* - -*Iced coffee, on a cold Winter's day* \ -*Iced coffee, bittersweet at the taste* \ -*Now you see me, and I'll be okay* \ -*I have my darkness so far tucked away* - -(chuckle) - -*I never thought I would tell you I've accepted* \ -*That I've resolved all of my feelings of shame* \ -*I've moved on and found others who keep me present* \ -*Remind me that being alone is okay* \ -*I look back and think about that pain you caused me* \ -*And realize I should have voiced my refrain* \ -*You never owed me all your time and attention* \ -*You never owed me anything, just the same* - -*We both agree there are much bigger aggressions* \ -*Than anger from feeling abandoned or strayed* \ -*I'm happy to find some common resolution* \ -*I'm happy we don't talk and I'm not afraid* \ -*I feel so much better about my own presence* \ -*I feel so much better and now I can say* \ -*That drinking iced coffee no longer reminds me* \ -*Of feeling isolated from your embrace* \ -*So I wrote more verses to speak of acceptance* \ -*I'm closing the book on that unhappy moment* - -*Iced coffee, on a cold Winter's day* \ -*Iced coffee, bittersweet at the taste* \ -*Now you see me, and I'll be okay* \ -*I have my darkness so far tucked away* - -*Hmmmm....* \ -*Hmmmm....* \ -*Hmmmm....* **(I wrote "Iced Coffee" to express some feelings I had at the time)**\ -*Hmmmm....* **(and while those feelings were valid. I realize now)**\ -*Hmmmm....* **(that the insecurity I felt had more to do with my self-worth)**\ -*Hmmmm....* **(and my reliance on needing someone to hold onto)**\ -*Hmmmm....* **(in order to keep myself feeling happy and safe)**\ -*Hmmmm....* **(I just wanted to express that I've grown since then)**\ -*Hmmmm....* \ -*Hmmmm....* \ No newline at end of file diff --git a/void-fe/data/poems/2023-05-16_what-should-you-say.md b/void-fe/data/poems/2023-05-16_what-should-you-say.md deleted file mode 100644 index 45d3d78..0000000 --- a/void-fe/data/poems/2023-05-16_what-should-you-say.md +++ /dev/null @@ -1,73 +0,0 @@ -# Gender Isn't Something You Can Make Someone Be (What Should You Say?) - -What should you say? \ -What should you do? \ -When there are so many people out there \ -Looking up at you \ -\ -I can't stop being so impressive \ -I can't stop being so obscene \ -Showing myself to the whole damn world \ -Making everyone say "that's who I wanna be" \ -\ -It's true that it's scary being "normal" \ -It's true that the journey's quite a drag \ -Queen in the making, I'm celebrating \ -Can't shoot me down in this middle act \ -\ -What should you say? \ -What should you do? \ -When there are so many people out there \ -Looking up at you, I'd say \ -\ -Fuck it, this life is right for me \ -Fuck it, laws can't keep me from being me \ -You wanna get me hiding under my bed \ -Parading colors like it was the national flag \ -\ -It's too hard to be cisgender \ -It's too hard to be unseen \ -I can't hide who I am and that's just \ -What they don't wanna see from me \ -\ -What should you say? \ -What should you do? \ -When there are so many people out there \ -Looking up at you \ -\ -I'm a monster, I'm a scene \ -Cut throat killers, living dreams \ -I'm the topic of the week, committing phrases on the screen \ -\ -No way back to home right now \ -There's nothing safe about the South \ -I'm no predator, but my pen writes bullets shooting from my snout \ -\ -Radical conservatives \ -Can kiss my ass and choke on it \ -Yeah, I'm not normal, but maybe normal's not a word that should persist \ -\ -I'm happy, I'm laughing, I'm living my life \ -You can't stop me when you put me in your sights \ -I'll wave my flag proudly and give you a punch \ -Can not see you liking that treatment too much \ -\ -What should you say? \ -What should you do? \ -When there are so many people out there \ -Looking up at you \ -\ -This is where I'd end the story \ -Somewhere happy and complete \ -But we're just getting started here \ -Don't keep running from your dreams \ -\ -It may seem hopeless to hold on \ -But we're all stronger and they'll see \ -The only things killing trans teens \ -Are bigots yelling in the streets \ -\ -So what should you say? \ -What should you do? \ -When there are so many people out there \ -Looking up at you diff --git a/void-fe/data/poems/2023-05-23_what-kind-of-dragon-has-acrophobia.md b/void-fe/data/poems/2023-05-23_what-kind-of-dragon-has-acrophobia.md deleted file mode 100644 index 876c2a9..0000000 --- a/void-fe/data/poems/2023-05-23_what-kind-of-dragon-has-acrophobia.md +++ /dev/null @@ -1,35 +0,0 @@ -# What Kind Of Dragon Has Acrophobia -_I may be a dragon, but I don't breathe fire for the thrill_ \ -_I may be a killer, but I killed my sinning shrill_ \ -_Voice in my head telling me to fight my fears_ \ -_Scales, claws gone scraping at my heart_ \ -_I'll never die, I'll never fall as long as my wings_ \ -_Can save me from my own self-doubt_ \ -\ -_The gnawing fangs of my own perpetual arrogance_ \ -_Blowing smoke like vapor waves flowing in a dance_ \ -_To invoke my surreptitious slithering tongue_ \ -_Making marks at poignant chapters_ \ -_The footnotes of my autobiography made live_ \ -_Seeking through the lines on the hunt_ \ -\ -_Tear my own holes in the plot_ \ -_Rip apart pages from the script_ \ -_Why am I always afraid to fall_ \ -_Why do I miss being human_ \ -_In a world where I'm anything_ \ -_But the same chained avian_ \ -_Singing songs to myself_ \ -_Writing words I'll burn up_ \ -\ -_The silence of the past leaves echoes in my soul_ \ -_And even though the play continues onward still_ \ -_I can't stop asking myself who I am in the end_ \ -_Questioning myself and defying my insecurity_ \ -\ -_I am a dragon at heart_ \ -_and when I soar I'll ignite_ \ -_the spirits of my greatest endeavors_ \ -_brought to life not by my own accord,_ \ -_but with the assistance of those who tend_ \ -_to the ashes I create around me_ \ No newline at end of file diff --git a/void-fe/data/poems/2023-06-14_hope-you-think-about-me.md b/void-fe/data/poems/2023-06-14_hope-you-think-about-me.md deleted file mode 100644 index 936d868..0000000 --- a/void-fe/data/poems/2023-06-14_hope-you-think-about-me.md +++ /dev/null @@ -1,52 +0,0 @@ -# hope you think about me - -_When I think about you_ \ -_When I think about me_ \ -_I think about every little problem that I wish I couldn't see_ \ -_When I'm lying awake_ \ -_When I'm trying to sleep_ \ -_I wanna just make the most of all my little dreams and memories_ \ -_Hope you think about me_ - -_Yeah, I'm kind of a freak_ \ -_A mess of scales and sharp teeth_ \ -_But I make myself out to be the softest of the dragons on your screen_ \ -_I'm a little bit hurt_ \ -_Just a little obscene_ \ -_Tie myself a new tourniquet to heal the places that I still might bleed_ - -_Yeah, I'm not perfect_ \ -_Yeah, I'm still not "me"_ \ -_But it's still worth it_ \ -_To walk down this street_ \ -_Hope you think about me_ \ -_Hope you think about me_  - -_She's a little uncouth_ \ -_She's a bit of a geek_ \ -_Don't you think it's just terribly attractive how she mumbles in her sleep_ \ -_Stumbling over her words_ \ -_Still, she's smiling at me_ \ -_Can't she just take the words out of your mouth and write them down effortlessly_ - -_I'm still improving_ \ -_I'm still not done_ \ -_Glad that I'm not_ \ -_The only one_ \ -_Hope you think about me_ \ -_Hope you think about me_ - -_I'm marching toward this new horizon_ \ -_With my hopes and dreams intact_ \ -_There's still so much I've yet to live for_ \ -_The past is left behind my back_ \ -_I'm still figuring this out, one step, one breath, one at a time_ \ -_I wanna learn how I can fly to let my wings lift me up high_ \ -_I'm so scared to take my jump now, this is it, no turning back_ \ -_I feel the tailwind brush against me, but I'm still not ready yet_ - -_Hope you think about me_ \ -_Hope you think about me_ **(Another night goes by, one breath at a time)** \ -_Hope you think about me_ **(I'm still not ready, but at least you know I'm trying)** \ -_Hope you think about me_ **(I do my best, and all the rest that I can say is...)** \ -_Hope you think about me_ \ No newline at end of file diff --git a/void-fe/data/poems/2023-08-29_another-day.md b/void-fe/data/poems/2023-08-29_another-day.md deleted file mode 100644 index cb2a900..0000000 --- a/void-fe/data/poems/2023-08-29_another-day.md +++ /dev/null @@ -1,52 +0,0 @@ -# Another day - -*It's been a while now, huh?* \ -*I haven't wanted to write anything since then* \ -*It's quite a ride, though, huh?* \ -*Twisted turns in my head make me want to stop* - -*The days are moving on so slow* \ -*Time was never on my side much, though* \ -*And I could write another thousand words today* \ -*But there's not much you don't already know* - -*Can't think of one more line* \ -*I put the pen to the paper, but there it ends* \ -*Gotta write one more rhyme* \ -*Make the words come out more, effortlessly* - -*The days are moving on so slow* \ -*Time was never on my side much, though* \ -*And I could write another thousand words today* \ -*But there's not much you don't already know* - -*I tried to write my life out* \ -*I tried to do my best* \ -*I made my own decisions* \ -*Foolish, I confess* \ -*I live the consequences* \ -*I keep on moving forward* - -*My head keeps on spinning* \ -*I'm always repeating* \ -*These words are all searing* \ -*Are you all done hearing?* - -*The days are moving on so slow* \ -*Time was never on my side much, though* \ -*And I could write another thousand words today* \ -*But there's not much you don't already know* - -**They call it writer's block, but I don't feel like anyone's blocking me** \ -**I'm my own locked safe, and I've gone and lost the key** \ -**Trying my best, a dragon's fire is strong in the end** \ -**Eventually, the lock breaks, and I build a new safe again** \ -**It's a cycle that I struggle to comprehend and to stop** \ -**But the ends justify the means, I'll take one for the team** \ -**The next one's easier, each time one more drops** \ -**And I learn a little more about me** - -*The days are moving on so slow* \ -*Time was never on my side much, though* \ -*And I could write another thousand words today* \ -*But there's not much you don't already know* \ No newline at end of file diff --git a/void-fe/data/poems/2023-10-14_today.md b/void-fe/data/poems/2023-10-14_today.md deleted file mode 100644 index a41d464..0000000 --- a/void-fe/data/poems/2023-10-14_today.md +++ /dev/null @@ -1,29 +0,0 @@ -# Today. -Next year. \ -Next month. \ -Next week. \ -Today. - -Today, I feel the breeze. \ -I keep my feet planted. \ -I spread my wings. - -Today. \ -The breeze picks up. \ -I'm feeling nervous. \ -I start my run. - -Today. \ -I prepare to leap. \ -One extra check. \ -I'm almost there. - -Today. \ -I shake my head. \ -I find my ground. \ -I'm still just standing. \ -I contemplate. - -Like sleep paralysis in the early hours of the morning, like a sudden jolt from a lucid daydream, I'm still just standing. All I can see right now is today, and today, I'm still just standing. - -Today, like my hesitance to ambition, is temporary. Daydreams only last until you make them your reality. \ No newline at end of file diff --git a/void-fe/data/poems/2023-11-06_where-i-stand.md b/void-fe/data/poems/2023-11-06_where-i-stand.md deleted file mode 100644 index 1cea716..0000000 --- a/void-fe/data/poems/2023-11-06_where-i-stand.md +++ /dev/null @@ -1,50 +0,0 @@ -# Where I Stand - -I used to think that I was special, like a rose in a bouquet \ -Now I'm learning that my prickly thorns might ruin everything \ -I thought I was complacent, thought I knew just who I am \ -Now I'm deviating, turns and twisting, awol from my plan \ -I should've known \ -We're characters all reaping what we sew - -What if I'm not enough? \ -What if I'm just a bluff? \ -What if I'm not anything for anyone besides when things are tough? \ -What if I'm just a trick? \ -What if I'm just for kicks? \ -I can't say I'm not proud of who I am, just contemplating where I stand - -Every morning brings a mourning, from the things that still decay \ -But foundation is a castle built on sand that starts to shake \ -I wanted to be Winter, but the Sunrise fits my name \ -I wanted to be everything I tried to shun away \ -I should've known \ -As far as seasons go, I'm waiting out the snow - -What if I'm not enough? \ -What if I'm just a bluff? \ -What if I'm not anything for anyone besides when things are tough? \ -What if I'm just a trick? \ -What if I'm just for kicks? \ -I can't say I'm not proud of who I am, just contemplating where I stand - -New horizons, new beginnings \ -I won't be my own eclipse \ -I can ride the solar flares \ -Become my own Mistress \ -And as long as we're still playing \ -Pay attention, listen close \ -I'm still terrified of being \ -All the things I hate the most - -What if I'm not enough? \ -What if I'm just a bluff? \ -What if I'm not anything for anyone besides when things are tough? \ -What if I'm just a trick? \ -What if I'm just for kicks? \ -I can't say I'm not proud of who I am, just contemplating where I stand - -Take me back to where we started \ -I can't retrace the footsteps buried in the sand \ -Guess I know I've just departed \ -Made my leap, and now I'm seeing how it goes diff --git a/void-fe/data/poems/2023-11-14_stillwater-pond.md b/void-fe/data/poems/2023-11-14_stillwater-pond.md deleted file mode 100644 index 225e698..0000000 --- a/void-fe/data/poems/2023-11-14_stillwater-pond.md +++ /dev/null @@ -1,52 +0,0 @@ -# Stillwater Pond -_She said "sweetie, whatcha thinkin'?"_ \ -_I stared down at the ground_ \ -_I don't think life is easy, and it's hitting me right now_ \ -_We walked right down the sidewalk and I opened up my mouth_ \ -_"My life is in a strange place,_ \ -_Like sitting at a pond,_ \ -_And noticing the stillness, and taking in the calm"_ - -(Mmmhmm) _I don't know what I'm doing, can't you tell?_ \ -(Mmmhmm) _Not used to all the silence in my head_ \ -(Mmmhmm) _And I'll be honest, I make my life hell_ \ -(Mmmhmm) _So how am I supposed to do the rest?_ - -_Don't keep making your storms, girl, it's all you can do, to keep pushing through_ \ -_Appreciate all the quiet, 'cus now your life is just up to you_ \ -_You had it all along_ \ -_Never had to write this song_ \ -_So as long as we're sitting, here's the truth_ \ -_You don't need to know what to do_ - -_I used to resort to drinking_ \ -_It could numb the pain I felt_ \ -_Every weekend I'd repeat it, and the weekdays just as well_ \ -_I chose to just deny it, grin and bare, I'd tell myself_ \ -_Now I'm not still in college_ \ -_Or in a shitty job_ \ -_So I told myself at my age I should practice self love_ - -(Mmmhmm) _Maybe I'm in more control than I let on_ \ -(Mmmhmm) _When I stop the issues new ones just appear_ \ -(Mmmhmm) _Wait, I'm starting to think they're already gone_ \ -(Mmmhmm) _I should take my own advice, get out of here_ - -_Don't keep making your storms, girl, it's all you can do, to keep pushing through_ \ -_Appreciate all the quiet, 'cus now your life is just up to you_ \ -_You had it all along_ \ -_Never had to write this song_ \ -_So as long as we're sitting, here's the truth_ \ -_You don't need to know what to do_ - -_I'm sitting at the airport_ \ -_I'm on standby for the flight_ \ -_I don't feel so agitated_ \ -_About figuring out life_ \ -_There's no way to have answers_ \ -_And I don't need to plan_ \ -_I'll just fucking make it_ \ -_Just a step at a time_ \ -_Take a breath, it'll be fine_ \ -_You don't need to be right_ \ -_Just keep doing what you can_ \ No newline at end of file diff --git a/void-fe/data/poems/2023-12-09_dear-diary.md b/void-fe/data/poems/2023-12-09_dear-diary.md deleted file mode 100644 index 450c476..0000000 --- a/void-fe/data/poems/2023-12-09_dear-diary.md +++ /dev/null @@ -1,41 +0,0 @@ -# Dear Diary - -_I'm not a perfect person, but I'm better than I've been_ \ -_Maybe I'm still trying not to be another sin_ \ -_But I won't hide the issues, put my feelings on display_ \ -_Because the only way I'll grow is if I feel them out someday_ - -_It's hard for me to say the things that make me feel ashamed_ \ -_I'll write another poem, hide my feelings on the page_ \ -_And maybe after that someday I won't need therapy_ \ -_So here's to me and here's to you_ \ -_I'm hoping someday I won't hide away the truth_ - -_I used to be someone I'm not and hope I disappear_ \ -_I gave up hoping anyone would ever want me here_ \ -_It's so much easier to just sink back inside my clothes_ \ -_Maybe if I wear them dark enough, my silhouette won't show_ - -_I'm told that I'm annoying, that I never shut my mouth_ \ -_So I made my own muzzle and affixed it to my snout_ \ -_But every now and then I'd break it off and speak my mind_ \ -_I'd better make a new one, so nobody hears me cry_ - -_Got used to shaping myself so I'd finally fit in_ \ -_And every time I'd do it, I could fake a stupid grin_ \ -_I got so good I'd profile every person I had met_ \ -_Speak the words and take the actions that would make them be my friend_ - -_Soon enough I'd get so good I'd forget who I am_\ -_And everyone who knew me knew a different kind of mask_ - -_Eventually it catches up, the pieces fall apart_ \ -_You stand there and you wonder who you are and where to start_ \ -_The fear sets in and then you start to ponder if it's true_ \ -_Should you be afraid that no one really likes the real you_ - -_It's hard for me to say the things that make me feel ashamed_ \ -_I'll write another poem, hide my feelings on the page_ \ -_And maybe after that someday, you'll read between the lines_ \ -_So here's to me, the real me_ \ -_Trying to trust that you'll love who I want to be_ \ No newline at end of file diff --git a/void-fe/data/poems/2023-12-11_3-years.md b/void-fe/data/poems/2023-12-11_3-years.md deleted file mode 100644 index 328752b..0000000 --- a/void-fe/data/poems/2023-12-11_3-years.md +++ /dev/null @@ -1,27 +0,0 @@ -# 3 years - -_From three months to three years_ \ -_Every little worry I had is faded away_ \ -_And I still have more to go_ - -_Lots of folks say they lost track_ \ -_I think I'm the only one who celebrates, really_ \ -_I ponder why it matters to me_ - -_I guess it matters because it used to matter_ \ -_That number used to mean the world to me_ \ -_It was my way to happiness_ - -Three years. - -Three years, and I've uprooted my life again. - -Three years, and I try to make plans with friends. - -Three years, and I realize there is no end. - -_I look in the mirror, and I see ***exactly*** what I want to see. And it's great, it's wonderful, it's me. But my heart still bleeds. The ink hasn't dried on the page. I'm more satisfied than I've been in my life, and I'm still not satisfied._ - -_Maybe, in another three years, I'll have a better idea of what satisfaction is for me. I know it's not this, but that's okay. Maybe in another three years, I'll accept that I'm never satisfied. Maybe, maybe, just maybe, I'll understand why._ - -_It's hard to ask for what you need when you don't know what it is. I thought it was comfort, I thought it was compassion, I thought it was stability. Somewhere in trying to get what I need, I lost sight of myself._ \ No newline at end of file diff --git a/void-fe/src/components.rs b/void-fe/src/components.rs deleted file mode 100644 index ae03ce6..0000000 --- a/void-fe/src/components.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod void_buttons; -pub mod void_footer; -pub mod void_page; -pub mod void_poem; -pub mod void_title; -pub mod void_content; \ No newline at end of file diff --git a/void-fe/src/lib.rs b/void-fe/src/lib.rs deleted file mode 100644 index f054f6d..0000000 --- a/void-fe/src/lib.rs +++ /dev/null @@ -1,222 +0,0 @@ -//! # Rust Letter Frontend -//! -//! Rendering functions for the site using [Dioxus](https://dioxuslabs.com/). - -#![allow(non_snake_case)] - -use utils::{prop_structs::PoemDatabase, user_prefs::UserPrefs}; - -pub mod components; -pub mod utils; -/// A module that handles the functions needed -/// to render the site. -pub mod void_app { - - // import the prelude to get access to the `rsx!` macro and the `Scope` and `Element` types - pub use dioxus::prelude::*; - - use crate::components::void_buttons::*; - use crate::components::void_content::*; - use crate::components::void_footer::*; - use crate::components::void_page::PageBase; - use crate::components::void_poem::*; - use crate::components::void_title::*; - use crate::utils::helpers; - use crate::utils::prop_structs::*; - use crate::utils::user_prefs::*; - - #[cfg(any(target_family = "wasm"))] - use dioxus_helmet::Helmet; - #[cfg(any(target_family = "wasm"))] - use dioxus_router::prelude::*; - #[cfg(any(target_family = "wasm"))] - use dioxus_use_storage::use_local_storage; - #[cfg(any(target_family = "wasm"))] - use once_cell::sync::OnceCell; - #[cfg(any(target_family = "wasm"))] - static POEM_DATABASE: OnceCell = OnceCell::new(); - - #[cfg(target_family = "wasm")] - #[derive(Routable, PartialEq, Clone)] - pub enum Route { - #[route("/")] - // #[redirect("/")]//, || Route::HomePage {slug: "/".to_string(), poem_database: poem_database.clone(), user_prefs: user_prefs.clone(),})] - HomePage { props: VoidProps }, - #[route("/poems")] - PoemListPage { - slug: String, - poem_database: PoemDatabase, - user_prefs: UserPrefs, - }, - #[route("/poems/:slug")] - PoemPage { - slug: String, - poem_database: PoemDatabase, - user_prefs: UserPrefs, - }, - #[route("/settings")] - SettingsPage { theme: ThemePref, font: FontPref }, - // #[route("/settings/dark")] - // SettingsPage { theme: String, font: String }, - // #[route("/settings/font")] - // SettingsPage { theme: String, font: String }, - #[route("")] - PageNotFound {}, - } - #[cfg(target_family = "wasm")] - pub fn DioxusApp() -> Element { - // let mut poem_database = PoemDatabase::new(); - // poem_database.build_poem_database(); - - // let user_prefs = UserPrefs::new(ThemePref::Auto, FontPref::OpenDyslexic); - let mut poem_database = PoemDatabase::new(); - poem_database.build_poem_database(); - POEM_DATABASE - .set(poem_database) - .expect("Could not initialize poem database."); - - rsx! { - Router:: {} - } - } - - #[cfg(target_family = "wasm")] - fn PageNotFound() -> Element { - rsx! { - p { "That page doesn't exist, sorry!" } - } - } - - #[component] - /// Renders the app and returns the rendered Element. - pub fn HomePage(props: VoidProps) -> Element { - #[cfg(target_family = "wasm")] - let poem_database = POEM_DATABASE - .get() - .expect("Poem database is not initialized") - .clone(); - - #[cfg(any(target_family = "unix", target_family = "windows"))] - let poem_database = props.poem_database.clone(); - let user_prefs = props.user_prefs.clone(); - let (user_theme, user_font) = user_prefs.get_pref_classes(ThemedComponent::Page); - let page_title = "A Letter to the Void".to_string(); - rsx! { - div { class: "{user_theme} {user_font}", - PageBase { - Title { title: page_title, is_html: false, user_prefs: user_prefs.clone() } - RenderContent { content: helpers::get_homepage_paragraph(), user_prefs: user_prefs.clone() } - ButtonGroup { - NavigationButton { title: "See Latest Entry".to_string(), slug: poem_database.get_latest_entry("".to_string()), user_prefs: user_prefs.clone() } - NavigationButton { title: "See Oldest Entry".to_string(), slug: poem_database.get_oldest_entry("".to_string()), user_prefs: user_prefs.clone() } - NavigationButton { title: "See A Random Entry".to_string(), slug: poem_database.get_random_entry(), user_prefs: user_prefs.clone() } - NavigationButton { title: "See All Entries".to_string(), slug: "/poems".to_string(), user_prefs: user_prefs.clone() } - } - Footer { theme: user_prefs.clone().get_theme(), font: user_prefs.get_font() } - } - } - } - } - - /// Renders the app and returns the rendered Element. - pub fn PoemListPage(props: VoidProps) -> Element { - #[cfg(target_family = "wasm")] - let poem_database = POEM_DATABASE - .get() - .expect("Poem database is not initialized") - .clone(); - #[cfg(any(target_family = "unix", target_family = "windows"))] - let poem_database = props.poem_database.clone(); - let user_prefs = props.user_prefs.clone(); - let (user_theme, user_font) = user_prefs.get_pref_classes(ThemedComponent::Page); - rsx! { - div { class: "{user_theme} {user_font}", - PageBase { - Title { title: "A Letter to the Void".to_string(), is_html: false, user_prefs: user_prefs.clone() } - BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } - PoemList { poem_database: poem_database.clone(), user_prefs: user_prefs.clone() } - BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } - Footer { theme: user_prefs.clone().get_theme(), font: user_prefs.get_font() } - } - } - } - } - - pub fn PoemPage(props: VoidProps) -> Element { - #[cfg(target_family = "wasm")] - let poem_database = POEM_DATABASE - .get() - .expect("Poem database is not initialized") - .clone(); - #[cfg(any(target_family = "unix", target_family = "windows"))] - let poem_database = props.poem_database.clone(); - let user_prefs = props.user_prefs.clone(); - let (user_theme, user_font) = user_prefs.get_pref_classes(ThemedComponent::Page); - // #[cfg(any(target_family = "unix", target_family = "windows"))] - let slug = props - .slug - .as_ref() - .expect("A slug was given in the props.") - .clone(); - // #[cfg(target_family = "wasm")] - // let slug = String::from( - // use_route() - // .segment("slug") - // .expect("No slug specified."), - // ); - rsx! { - div { class: "{user_theme} {user_font}", - PageBase { - BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } - GetPoem { slug: slug.clone(), poem_database: poem_database.clone(), user_prefs: user_prefs.clone() } - ButtonGroup { - NavigationButton { title: "Oldest".to_string(), slug: poem_database.get_oldest_entry(slug.clone()), user_prefs: user_prefs.clone() } - NavigationButton { title: "Previous".to_string(), slug: poem_database.get_previous_entry(slug.clone()), user_prefs: user_prefs.clone() } - NavigationButton { title: "Random".to_string(), slug: poem_database.get_random_entry(), user_prefs: user_prefs.clone() } - NavigationButton { title: "Next".to_string(), slug: poem_database.get_next_entry(slug.clone()), user_prefs: user_prefs.clone() } - NavigationButton { title: "Latest".to_string(), slug: poem_database.get_latest_entry(slug.clone()), user_prefs: user_prefs.clone() } - } - BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } - Footer { theme: user_prefs.clone().get_theme(), font: user_prefs.get_font() } - } - } - } - } - - pub fn SettingsPage(props: UserPrefs) -> Element { - let user_prefs = props.clone(); - let (user_theme, user_font) = user_prefs.get_pref_classes(ThemedComponent::Page); - // Get rid of this and create a general card component with children. - let (user_theme_card, user_font_card) = user_prefs.get_pref_classes(ThemedComponent::Card); - rsx! { - div { class: "{user_theme} {user_font}", - PageBase { - Title { title: "Settings".to_string(), is_html: false, user_prefs: user_prefs.clone() } - BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.clone().get_font() } - div { class: "p-4 flex flex-col space-y-4 mx-auto max-w-full justify-center", - div { class: "p-4 flex flex-col space-y-4 text-xl text-center ring-4 {user_theme_card} {user_font_card}", - p { - "Theme" - } - ButtonGroup { - NavigationButton { title: "Light".to_string(), slug: "/settings/?theme=light".to_string(), user_prefs: user_prefs.clone() } - NavigationButton { title: "Dark".to_string(), slug: "/settings/?theme=dark".to_string(), user_prefs: user_prefs.clone() } - NavigationButton { title: "Auto".to_string(), slug: "/settings/?theme=auto".to_string(), user_prefs: user_prefs.clone() } - } - } - div { class: "p-4 flex flex-col space-y-4 text-xl text-center ring-4 {user_theme_card} {user_font_card}", - p { - "Font" - } - ButtonGroup { - NavigationButton { title: "Nerd Font".to_string(), slug: "/settings/?font=nerd".to_string(), user_prefs: user_prefs.clone(), override_font: "font-nerd".to_string() } - NavigationButton { title: "Open Dyslexic".to_string(), slug: "/settings/?font=open".to_string(), user_prefs: user_prefs.clone(), override_font: "font-open".to_string() } - } - } - } - BackToHomePage { theme: user_prefs.clone().get_theme(), font: user_prefs.get_font() } - } - } - } - } -} diff --git a/void-fe/src/main.rs b/void-fe/src/main.rs deleted file mode 100644 index a45aefc..0000000 --- a/void-fe/src/main.rs +++ /dev/null @@ -1,22 +0,0 @@ -#[cfg(target_family = "wasm")] -use console_error_panic_hook; - -#[cfg(target_family = "wasm")] -use void_fe::void_app; - -#[cfg(target_family = "wasm")] -use wasm_logger; - -#[cfg(any(target_family = "unix", target_family = "windows"))] -fn main() { - print!("You can't run this without targeting web assembly. Try running `dioxus serve`.") -} - -#[cfg(target_family = "wasm")] -fn main() { - // init debug tool for WebAssembly - wasm_logger::init(wasm_logger::Config::default()); - console_error_panic_hook::set_once(); - - dioxus::prelude::launch(void_app::DioxusApp); -} diff --git a/void-fe/src/utils/helpers.rs b/void-fe/src/utils/helpers.rs deleted file mode 100644 index b8d096b..0000000 --- a/void-fe/src/utils/helpers.rs +++ /dev/null @@ -1,198 +0,0 @@ -use markdown::Options; -use rand::seq::SliceRandom; -use rust_embed::RustEmbed; -use std::collections::{HashMap, VecDeque}; - -use super::prop_structs::{PoemDatabase, PoemStruct}; -#[derive(RustEmbed)] -#[folder = "data/other"] -struct OtherData; - -#[derive(RustEmbed)] -#[folder = "data/poems"] -pub struct Poems; - -impl PoemDatabase { - pub fn new() -> PoemDatabase { - PoemDatabase { - poem_list: Vec::<(String, String)>::new(), - poem_hashmap: HashMap::::new(), - } - } - - // There's no need to actually make a database yet, but maybe in the future... - #[cfg(any(target_family = "unix", target_family = "windows"))] - pub async fn build_poem_database(&mut self) { - use dioxus::dioxus_core::Component; - use markdown::CompileOptions; - let markdown_options = &mut Options::gfm(); - markdown_options.compile = CompileOptions { - allow_dangerous_html: true, - ..CompileOptions::default() - }; - - for p in Poems::iter() { - let filename = p.to_string(); - let poem_content = Poems::get(&filename).expect("Found poem {filename:?}"); - let mut poem_to_str = std::str::from_utf8(poem_content.data.as_ref()) - .expect("Poem is valid UT8.") - .lines(); - let poem_title = poem_to_str.next().expect("No title specified."); - let poem_content = poem_to_str.into_iter().collect::>().join("\n"); - let poem_title_to_html_string = - markdown::to_html_with_options(poem_title, markdown_options).unwrap(); - let poem_content_to_html_string = - markdown::to_html_with_options(poem_content.as_str(), &Options::gfm()).unwrap(); - let mut split_filename = filename.trim_end_matches(".md").split("_"); - let creation_date = split_filename.next().expect("Obtained creation date"); - let slug = split_filename.next().expect("Obtained slug"); - self.poem_list - .push((creation_date.to_string(), slug.to_string())); - let poem_struct = PoemStruct { - title: poem_title_to_html_string, - content: poem_content_to_html_string, - creation_date: creation_date.to_string(), - }; - self.poem_hashmap.insert(slug.to_string(), poem_struct); - } - self.poem_list.sort_by_key(|k| k.0.clone()) - } - - #[cfg(any(target_family = "wasm"))] - pub fn build_poem_database(&mut self) { - for p in Poems::iter() { - let filename = p.to_string(); - let poem_content = Poems::get(&filename).expect("Found poem {filename:?}"); - let mut poem_to_str = std::str::from_utf8(poem_content.data.as_ref()) - .expect("Poem is valid UT8.") - .lines(); - let poem_title = poem_to_str.next().expect("No title specified."); - let poem_content = poem_to_str.into_iter().collect::>().join("\n"); - let poem_title_to_html_string = - markdown::to_html_with_options(poem_title, &Options::gfm()).unwrap(); - let poem_content_to_html_string = - markdown::to_html_with_options(poem_content.as_str(), &Options::gfm()).unwrap(); - let mut split_filename = filename.trim_end_matches(".md").split("_"); - let creation_date = split_filename.next().expect("Obtained creation date"); - let slug = split_filename.next().expect("Obtained slug"); - self.poem_list - .push((creation_date.to_string(), slug.to_string())); - let poem_struct = PoemStruct { - title: poem_title_to_html_string.to_string(), - content: poem_content_to_html_string, - creation_date: creation_date.to_string(), - }; - self.poem_hashmap.insert(slug.to_string(), poem_struct); - } - self.poem_list.sort_by_key(|k| k.0.clone()) - } - - pub fn get_poem(&self, slug: String) -> PoemStruct { - self.poem_hashmap - .get(slug.as_str()) - .expect("Grabbed poem from database") - .clone() - } - - pub fn get_poem_list(&self) -> Vec<(String, String)> { - self.poem_list - .iter() - .map(|s| { - ( - s.1.clone(), - self.poem_hashmap - .get(&s.1) - .expect("Got poemstruct from database") - .title - .clone(), - ) - }) - .collect::>() - .clone() - } - - pub fn get_oldest_entry(&self, current: String) -> String { - let mut poem_list = VecDeque::from_iter(self.poem_list.iter()); - let oldest = poem_list - .pop_front() - .expect("There is an entry in this list of poems.") - .1 - .clone(); - if current == oldest { - return format!("/poems/{current}#"); - } - format!("/poems/{oldest}") - } - - pub fn get_latest_entry(&self, current: String) -> String { - let mut poem_list = self.poem_list.clone(); - let latest = poem_list - .pop() - .expect("There is an entry in this list of poems.") - .1 - .clone(); - if current == latest { - return format!("/poems/{current}#"); - } - format!("/poems/{latest}") - } - - pub fn get_previous_entry(&self, current: String) -> String { - let poem_list = self.poem_list.clone(); - match poem_list.iter().enumerate().find_map(|(index, p)| { - if p.1 == current { - if index != 0 { - Some(poem_list[index - 1].1.clone()) - } else { - None - } - } else { - None - } - }) { - Some(entry) => format!("/poems/{entry}"), - None => format!("/poems/{current}"), - } - } - - pub fn get_next_entry(&self, current: String) -> String { - let poem_list = self.poem_list.clone(); - match poem_list.iter().enumerate().find_map(|(index, p)| { - if p.1 == current { - if index != poem_list.len() - 1 { - Some(poem_list[index + 1].1.clone()) - } else { - None - } - } else { - None - } - }) { - Some(entry) => format!("/poems/{entry}"), - None => format!("/poems/{current}"), - } - } - // #[cfg(not(target_family = "wasm"))] - pub fn get_random_entry(&self) -> String { - let poem_list = self.poem_list.clone(); - let mut rng = rand::thread_rng(); - let random_entry = poem_list - .choose(&mut rng) - .expect("Got a valid entry") - .1 - .clone(); - // let random_entry = "introductions"; - format!("/poems/{random_entry}") - } -} - -pub fn get_homepage_paragraph() -> String { - let homepage_paragraph_content = - OtherData::get("homepage.md").expect("Found homepage paragraph."); - let homepage_paragraph_to_string = - std::str::from_utf8(homepage_paragraph_content.data.as_ref()) - .expect("Homepage file is valid UTF-8"); - let test = - markdown::to_html_with_options(homepage_paragraph_to_string, &Options::gfm()).unwrap(); - test -} diff --git a/void-fe/src/utils/prop_structs.rs b/void-fe/src/utils/prop_structs.rs deleted file mode 100644 index 18beefe..0000000 --- a/void-fe/src/utils/prop_structs.rs +++ /dev/null @@ -1,67 +0,0 @@ -use std::collections::HashMap; -// use crate::void_app::{Element, Props}; -use super::user_prefs::UserPrefs; -use dioxus::prelude::*; - -#[derive(PartialEq, Props, Clone)] -pub struct PoemRequest { - pub slug: String, - pub user_prefs: UserPrefs, -} - -#[derive(PartialEq, Props, Clone)] -pub struct TitleProps { - pub title: String, - pub is_html: bool, - pub user_prefs: UserPrefs, -} - -#[derive(PartialEq, Props, Clone)] -pub struct ContentProps { - pub content: String, - pub user_prefs: UserPrefs, -} - -#[derive(PartialEq, Props, Clone)] -pub struct ButtonProps { - pub title: String, - pub slug: String, - pub user_prefs: UserPrefs, - pub override_font: Option, -} - -#[derive(Default, PartialEq, Props, Clone)] -pub struct VoidProps { - pub slug: Option, - pub poem_database: PoemDatabase, - pub user_prefs: UserPrefs, -} - -#[derive(Default, PartialEq, Props, Clone, Debug)] -pub struct PoemDatabase { - pub poem_list: Vec<(String, String)>, - pub poem_hashmap: HashMap, -} - -#[derive(PartialEq, Clone, Debug)] -pub struct PoemStruct { - pub title: String, - pub content: String, - pub creation_date: String, -} - -// These next three should all just be one prop. -#[derive(PartialEq, Props, Clone)] -pub struct PoemChildren { - pub children: Element, -} - -#[derive(PartialEq, Props, Clone)] -pub struct PageChildren { - pub children: Element, -} - -#[derive(PartialEq, Props, Clone)] -pub struct ContentChildren { - pub children: Element, -}