diff options
-rw-r--r-- | .gitignore | 6 | ||||
-rw-r--r-- | Cargo.lock | 1272 | ||||
-rw-r--r-- | Cargo.toml | 23 | ||||
-rw-r--r-- | src/main.rs | 60 | ||||
-rw-r--r-- | static/about/index.php (renamed from about/index.php) | 0 | ||||
-rw-r--r-- | static/assets/amy.png (renamed from assets/amy.png) | bin | 346630 -> 346630 bytes | |||
-rw-r--r-- | static/assets/amy.webp (renamed from assets/amy.webp) | bin | 44532 -> 44532 bytes | |||
-rw-r--r-- | static/assets/bg.png (renamed from assets/bg.png) | bin | 150111 -> 150111 bytes | |||
-rw-r--r-- | static/assets/favicon.ico (renamed from assets/favicon.ico) | bin | 327262 -> 327262 bytes | |||
-rw-r--r-- | static/assets/icons/close-box.svg (renamed from assets/icons/close-box.svg) | 0 | ||||
-rw-r--r-- | static/assets/icons/dots-horizontal-circle.svg (renamed from assets/icons/dots-horizontal-circle.svg) | 0 | ||||
-rw-r--r-- | static/assets/icons/email-variant.svg (renamed from assets/icons/email-variant.svg) | 0 | ||||
-rw-r--r-- | static/assets/icons/phone-classic.svg (renamed from assets/icons/phone-classic.svg) | 0 | ||||
-rw-r--r-- | static/assets/icons/send-circle.svg (renamed from assets/icons/send-circle.svg) | 0 | ||||
-rw-r--r-- | static/assets/icons/star-box.svg (renamed from assets/icons/star-box.svg) | 0 | ||||
-rw-r--r-- | static/assets/logo-simple.png (renamed from assets/logo-simple.png) | bin | 9332 -> 9332 bytes | |||
-rw-r--r-- | static/assets/logo-small.png (renamed from assets/logo-small.png) | bin | 46158 -> 46158 bytes | |||
-rw-r--r-- | static/assets/logo.png (renamed from assets/logo.png) | bin | 89452 -> 89452 bytes | |||
-rw-r--r-- | static/assets/logo.webp (renamed from assets/logo.webp) | bin | 10338 -> 10338 bytes | |||
-rw-r--r-- | static/assets/signature.png (renamed from assets/signature.png) | bin | 17196 -> 17196 bytes | |||
-rw-r--r-- | static/assets/signature.webp (renamed from assets/signature.webp) | bin | 11102 -> 11102 bytes | |||
-rw-r--r-- | static/desktop.css (renamed from desktop.css) | 0 | ||||
-rw-r--r-- | static/favicon.ico (renamed from favicon.ico) | bin | 327262 -> 327262 bytes | |||
-rw-r--r-- | static/footer.php (renamed from footer.php) | 0 | ||||
-rw-r--r-- | static/header.php (renamed from header.php) | 0 | ||||
-rw-r--r-- | static/index.php (renamed from index.php) | 0 | ||||
-rw-r--r-- | static/policies/index.php (renamed from policies/index.php) | 0 | ||||
-rw-r--r-- | static/widescreen.css (renamed from widescreen.css) | 0 | ||||
-rw-r--r-- | templates/base.hbs | 317 | ||||
-rw-r--r-- | templates/index.hbs | 468 |
30 files changed, 2146 insertions, 0 deletions
@@ -1,3 +1,9 @@ _site/ *.core PHPMailer-master + + +# Added by cargo + +/target +*.core diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..8372740 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1272 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" +dependencies = [ + "getrandom 0.2.3", + "once_cell", + "version_check", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "buf_redux" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" +dependencies = [ + "memchr", + "safemem", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cpufeatures" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c99696f6c9dd7f35d486b9d04d7e6e202aa3e8c40d553f2fdf5e7e0c6a71ef" +dependencies = [ + "libc", +] + +[[package]] +name = "ct" +version = "0.1.0" +dependencies = [ + "handlebars", + "lazy_static", + "rusqlite", + "serde", + "tokio", + "warp", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adc00f486adfc9ce99f77d717836f0c5aa84965eb0b4f051f4e83f7cab53f8b" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99" + +[[package]] +name = "futures-io" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582" + +[[package]] +name = "futures-sink" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53" + +[[package]] +name = "futures-task" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2" + +[[package]] +name = "futures-util" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78" +dependencies = [ + "autocfg", + "futures-core", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", +] + +[[package]] +name = "h2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "handlebars" +version = "3.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" +dependencies = [ + "log", + "pest", + "pest_derive", + "quick-error 2.0.1", + "serde", + "serde_json", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashlink" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "headers" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b7591fb62902706ae8e7aaff416b1b0fa2c0fd0878b46dc13baa3712d8a855" +dependencies = [ + "base64", + "bitflags", + "bytes", + "headers-core", + "http", + "mime", + "sha-1 0.9.7", + "time", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "http" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" + +[[package]] +name = "httpdate" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" + +[[package]] +name = "hyper" +version = "0.14.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b61cf2d1aebcf6e6352c97b81dc2244ca29194be1b276f5d8ad5c6330fffb11" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "input_buffer" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" +dependencies = [ + "bytes", +] + +[[package]] +name = "itoa" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" + +[[package]] +name = "libsqlite3-sys" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d" +dependencies = [ + "pkg-config", + "vcpkg", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "mio" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "multipart" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050aeedc89243f5347c3e237e3e13dc76fbe4ae3742a57b94dc14f69acf76d4" +dependencies = [ + "buf_redux", + "httparse", + "log", + "mime", + "mime_guess", + "quick-error 1.2.3", + "rand 0.7.3", + "safemem", + "tempfile", + "twoway", +] + +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +dependencies = [ + "maplit", + "pest", + "sha-1 0.8.2", +] + +[[package]] +name = "pin-project" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.3", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core 0.6.3", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "rusqlite" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57adcf67c8faaf96f3248c2a7b419a0dbc52ebe36ba83dd57fe83827c1ea4eb3" +dependencies = [ + "bitflags", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "memchr", + "smallvec", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "serde" +version = "1.0.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha-1" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0c8611594e2ab4ebbf06ec7cbbf0a99450b8570e96cbf5188b5d5f6ef18d81" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" + +[[package]] +name = "smallvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "socket2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "syn" +version = "1.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if", + "libc", + "rand 0.8.4", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "tinyvec" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b7b349f11a7047e6d1276853e612d152f5e8a352c61917887cc2169e2366b4c" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "once_cell", + "pin-project-lite", + "signal-hook-registry", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-stream" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1a5f475f1b9d077ea1017ecbc60890fda8e54942d680ca0b1d2b47cfa2d861b" +dependencies = [ + "futures-util", + "log", + "pin-project", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "tungstenite" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ada8297e8d70872fa9a551d93250a9f407beb9f37ef86494eb20012a2ff7c24" +dependencies = [ + "base64", + "byteorder", + "bytes", + "http", + "httparse", + "input_buffer", + "log", + "rand 0.8.4", + "sha-1 0.9.7", + "url", + "utf-8", +] + +[[package]] +name = "twoway" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" +dependencies = [ + "memchr", +] + +[[package]] +name = "typenum" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" + +[[package]] +name = "unicode-normalization" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "warp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332d47745e9a0c38636dbd454729b147d16bd1ed08ae67b3ab281c4506771054" +dependencies = [ + "bytes", + "futures", + "headers", + "http", + "hyper", + "log", + "mime", + "mime_guess", + "multipart", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..2a7bb32 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "ct" +version = "0.1.0" +edition = "2018" +authors = ["Adam T. Carpenter <atc@53hor.net>"] + +[dependencies] +#env_logger = { version = "0.8", default-features = false } +#log = "0.4" +#serde_urlencoded = "0.7" +handlebars = "3" +lazy_static = "1.4" +rusqlite = "0.25" +warp = "0.3" + +[dependencies.serde] +version = "1" +features = ["derive"] + +[dependencies.tokio] +version = "1" +default-features = false +features = ["rt-multi-thread", "macros", "signal"] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..cbabc10 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,60 @@ +use handlebars::Handlebars; +use serde::Serialize; +use serde_json::json; +use std::sync::Arc; +use std::time::SystemTime; +use warp::{Filter, Rejection}; + +#[tokio::main] +async fn main() -> Result<(), Box<dyn std::error::Error>> { + // Build template registry + let mut hbs = Handlebars::new(); + hbs.register_template_file("base", "templates/base.hbs")?; + hbs.register_template_file("index", "templates/index.hbs")?; + let hbs = Arc::new(hbs); + + // Build routes + let routes = index_filter(hbs.clone()) + .or(evals_list()) + .or(warp::fs::dir("static")); + + // Start server + warp::serve(routes).run(([127, 0, 0, 1], 8080)).await; + + // Done + Ok(()) +} + +fn index_filter( + hbs: Arc<Handlebars<'static>>, +) -> impl Filter<Extract = (impl warp::Reply,), Error = Rejection> + Clone { + warp::get() + .and(warp::path::end()) + .map(move || render("index", hbs.clone(), json!({"year", year().unwrap()}))) +} + +fn evals_list() -> impl Filter<Extract = (&'static str,), Error = Rejection> + Clone { + warp::get() + .and(warp::path("evals")) + .and(warp::path::end()) + .map(|| "evals here") +} + +fn render<T>(template: &str, hbs: Arc<Handlebars>, value: T) -> impl warp::Reply +where + T: Serialize, +{ + let render = hbs + .render(template, &value) + .unwrap_or_else(|err| err.to_string()); + warp::reply::html(render) +} + +const UNIX_YEAR: u64 = 31556926; + +fn year() -> Result<u64, Box<dyn std::error::Error>> { + let date = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH)? + .as_secs(); + Ok(date / UNIX_YEAR) +} diff --git a/about/index.php b/static/about/index.php index 0b09bfc..0b09bfc 100644 --- a/about/index.php +++ b/static/about/index.php diff --git a/assets/amy.png b/static/assets/amy.png Binary files differindex ea2f165..ea2f165 100644 --- a/assets/amy.png +++ b/static/assets/amy.png diff --git a/assets/amy.webp b/static/assets/amy.webp Binary files differindex 6ca2282..6ca2282 100644 --- a/assets/amy.webp +++ b/static/assets/amy.webp diff --git a/assets/bg.png b/static/assets/bg.png Binary files differindex a0c9ab8..a0c9ab8 100644 --- a/assets/bg.png +++ b/static/assets/bg.png diff --git a/assets/favicon.ico b/static/assets/favicon.ico Binary files differindex 8ba4c15..8ba4c15 100644 --- a/assets/favicon.ico +++ b/static/assets/favicon.ico diff --git a/assets/icons/close-box.svg b/static/assets/icons/close-box.svg index 717756e..717756e 100644 --- a/assets/icons/close-box.svg +++ b/static/assets/icons/close-box.svg diff --git a/assets/icons/dots-horizontal-circle.svg b/static/assets/icons/dots-horizontal-circle.svg index ca1de94..ca1de94 100644 --- a/assets/icons/dots-horizontal-circle.svg +++ b/static/assets/icons/dots-horizontal-circle.svg diff --git a/assets/icons/email-variant.svg b/static/assets/icons/email-variant.svg index e8ef2dd..e8ef2dd 100644 --- a/assets/icons/email-variant.svg +++ b/static/assets/icons/email-variant.svg diff --git a/assets/icons/phone-classic.svg b/static/assets/icons/phone-classic.svg index 814990b..814990b 100644 --- a/assets/icons/phone-classic.svg +++ b/static/assets/icons/phone-classic.svg diff --git a/assets/icons/send-circle.svg b/static/assets/icons/send-circle.svg index 1b7e5c3..1b7e5c3 100644 --- a/assets/icons/send-circle.svg +++ b/static/assets/icons/send-circle.svg diff --git a/assets/icons/star-box.svg b/static/assets/icons/star-box.svg index 2973ca8..2973ca8 100644 --- a/assets/icons/star-box.svg +++ b/static/assets/icons/star-box.svg diff --git a/assets/logo-simple.png b/static/assets/logo-simple.png Binary files differindex b299e66..b299e66 100644 --- a/assets/logo-simple.png +++ b/static/assets/logo-simple.png diff --git a/assets/logo-small.png b/static/assets/logo-small.png Binary files differindex a128e24..a128e24 100644 --- a/assets/logo-small.png +++ b/static/assets/logo-small.png diff --git a/assets/logo.png b/static/assets/logo.png Binary files differindex 81e0776..81e0776 100644 --- a/assets/logo.png +++ b/static/assets/logo.png diff --git a/assets/logo.webp b/static/assets/logo.webp Binary files differindex 16ab275..16ab275 100644 --- a/assets/logo.webp +++ b/static/assets/logo.webp diff --git a/assets/signature.png b/static/assets/signature.png Binary files differindex 7d115de..7d115de 100644 --- a/assets/signature.png +++ b/static/assets/signature.png diff --git a/assets/signature.webp b/static/assets/signature.webp Binary files differindex 8ce6e28..8ce6e28 100644 --- a/assets/signature.webp +++ b/static/assets/signature.webp diff --git a/desktop.css b/static/desktop.css index 2f2b342..2f2b342 100644 --- a/desktop.css +++ b/static/desktop.css diff --git a/favicon.ico b/static/favicon.ico Binary files differindex 8ba4c15..8ba4c15 100644 --- a/favicon.ico +++ b/static/favicon.ico diff --git a/footer.php b/static/footer.php index 91bc9d6..91bc9d6 100644 --- a/footer.php +++ b/static/footer.php diff --git a/header.php b/static/header.php index 42925fa..42925fa 100644 --- a/header.php +++ b/static/header.php diff --git a/index.php b/static/index.php index c3aef21..c3aef21 100644 --- a/index.php +++ b/static/index.php diff --git a/policies/index.php b/static/policies/index.php index 1fdd037..1fdd037 100644 --- a/policies/index.php +++ b/static/policies/index.php diff --git a/widescreen.css b/static/widescreen.css index 8231129..8231129 100644 --- a/widescreen.css +++ b/static/widescreen.css diff --git a/templates/base.hbs b/templates/base.hbs new file mode 100644 index 0000000..a16e6eb --- /dev/null +++ b/templates/base.hbs @@ -0,0 +1,317 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <title> + Tutoring Excellence Online and in Hampton Roads, VA - Carpenter Tutoring, + LLC + </title> + <style> + /* Colors */ + :root { + --darkteal: rgb(0, 100, 108); + --green: rgb(88, 169, 143); + --darkerteal: rgb(29, 133, 137); + --gray: rgb(157, 210, 211); + --teal: rgb(58, 165, 166); + --cyan: rgb(156, 210, 210); + --darkgray: rgb(127, 177, 181); + --darkgreen: rgb(59, 136, 114); + --yellow: rgb(186, 214, 187); + } + + /* Elements */ + + html, + body { + margin: 0; + padding: 0; + font-family: "PT Sans", sans-serif; + color: dimgray; + } + + body { + background-image: url("/assets/bg.png"); + } + + .banner { + font-size: 1em; + text-align: center; + padding: 3em; + background-color: white; + } + + nav { + display: flex; + background-color: white; + flex-direction: column-reverse; + } + + nav img { + height: 1.4em; + } + + nav a { + font-family: "PT Sans", sans-serif; + color: dimgray; + text-align: center; + text-decoration: none; + padding: 1em 1em; + transition: 0.15s; + } + + nav a:hover { + color: var(--darkteal); + background-color: lightgray; + } + + div.buttons { + display: flex; + flex-direction: column; + } + + h1 { + font-size: 3em; + color: var(--darkteal); + font-family: "Architects Daughter", cursive; + } + + h2 { + font-size: 2em; + color: var(--darkteal); + font-family: "Indie Flower", cursive; + } + + section { + font-size: 1.5em; + margin: 0; + padding: 1em; + } + + section.quiet { + background-color: white; + } + + .button img { + margin-right: 1em; + } + + button.button, + a.button { + display: flex; + align-items: center; + background-color: var(--teal); + padding-left: 1em; + padding-right: 1em; + padding-top: 0.5em; + padding-bottom: 0.5em; + margin-right: 0.5em; + margin-bottom: 0.5em; + text-decoration: none; + color: white; + border-radius: 3em; + transition: 0.15s; + } + + button.button:hover, + a.button:hover { + box-shadow: 0 4px 8px 0 lightgray, 0 6px 20px 0 lightgray; + } + + button { + font-family: "PT Sans", sans-serif; + border: none; + font-size: 0.75em; + } + + a.primary { + background-color: var(--darkteal); + } + + footer { + background-color: white; + text-align: center; + padding: 3em; + font-size: 1.5em; + } + + footer a, + section a { + color: var(--darkteal); + text-decoration: underline; + } + + .card { + font-size: 0.9em; + background-color: white; + padding: 1em; + border-radius: 1em; + margin-left: 0; + margin-right: 0; + } + + form input, + form textarea { + font-family: "PT Sans", sans-serif; + margin-bottom: 1.5em; + box-sizing: border-box; + width: 100%; + border: 1px solid lightgray; + padding: 1em; + } + + form input { + border-radius: 3em; + } + + textarea { + border-radius: 1em; + resize: none; + } + + table { + width: 100%; + border-collapse: collapse; + } + + table th { + text-align: right; + color: var(--darkteal); + } + + table td, + table th { + vertical-align: bottom; + } + + tr:nth-child(even) { + background-color: lightgray; + } + + picture img { + width: 100%; + } + + .shadowy img { + box-shadow: 0 4px 8px 0 dimgray, 0 6px 20px 0 dimgray; + } + + figcaption { + text-align: right; + color: var(--darkteal); + font-family: "Architects Daughter", cursive; + } + + section.flexible { + display: flex; + flex-direction: column; + } + + #reviews .card, + #offerings .card { + margin: 1em; + text-align: center; + } + + #reviews, + #offerings { + padding-left: 0; + padding-right: 0; + display: flex; + flex-wrap: wrap; + justify-content: center; + } + + .modal { + position: fixed; + z-index: 1; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: white; + background-color: rgba(1, 1, 1, 0.4); + overflow: auto; + display: none; + font-size: 1.5em; + } + + .modal .card { + max-height: 90%; + max-width: 60%; + } + + .modal a, + .card a.button { + float: right; + } + + :target.modal { + display: flex; + justify-content: center; + align-items: center; + } + + :target.modal .card { + overflow: auto; + } + </style> + <link rel="preconnect" href="https://fonts.gstatic.com" /> + <link + href="https://fonts.googleapis.com/css2?family=Architects+Daughter&family=Indie+Flower&family=PT+Sans&display=swap" + rel="stylesheet" /> + <link rel="stylesheet" href="/desktop.css" /> + <link rel="stylesheet" href="/widescreen.css" /> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="description" content="Tutoring Excellence Online and in Hampton Roads, VA" /> + <meta property="og:description" content="Tutoring excellence online and in-person" /> + <meta property="og:image" content="http://carpentertutoring.com/assets/logo.webp" /> + <meta property="og:image:secure_url" content="https://carpentertutoring.com/assets/logo.webp" /> + <meta property="og:site_name" content="Carpenter Tutoring" /> + <meta property="og:title" content="Tutoring Excellence Online and in Hampton Roads, VA - Carpenter Tutoring, LLC" /> + <meta property="og:type" content="website" /> + <meta property="og:url" content="https://carpentertutoring.com" /> +</head> + +<body> + <nav> + <a href="/#contact">Contact Me</a> + <a href="/#reviews">Reviews</a> + <a href="/about">About</a> + <a href="/policies">Policies</a> + <a href="/#pricing">Pricing</a> + <a href="/#offerings">Offerings</a> + <a href="/#"><img src="/assets/logo-simple.png" /></a> + </nav> + + <main> + {{~> main}} + </main> + + <footer> + <figure class="logo"> + <picture> + <source srcset="/assets/logo.webp" type="image/webp" /> + <source srcset="/assets/logo.png" type="image/png" /> + <img src="/assets/logo.png" /> + </picture> + </figure> + <p> + © + <!-- TODO:<?php echo date('Y'); ?>--> + Carpenter Tutoring, LLC. All rights reserved. + </p> + <p> + <a href="https://g.page/carpenter-tutoring?share">Visit me on Google</a> + | + <a href="https://g.page/carpenter-tutoring/review?np">Submit a review</a> + | + <a href="mailto:webmaster@carpentertutoring.com"> + Having trouble with our site? + </a> + </p> + </footer> +</body> + +</html> diff --git a/templates/index.hbs b/templates/index.hbs new file mode 100644 index 0000000..bb2c33e --- /dev/null +++ b/templates/index.hbs @@ -0,0 +1,468 @@ +{{#> base}} +{{#*inline "main"}} +<!--banner--> +<section class="banner"> + <h1>CARPENTER TUTORING</h1> + <h2> + <b>Discovering <em>your</em> path to success</b> + </h2> + + <div class="buttons"> + <a class="button" href="/#contact"> <img src="/assets/icons/email-variant.svg" alt="mailbox" /> Send a + message</a> + <a class="button primary" href="tel:1-757-335-7555"> + <img src="/assets/icons/phone-classic.svg" alt="phone" /> + (757) 335-7555</a> + </div> +</section> + +<!-- welcome--> +<section class="quiet flexible"> + <div> + <h2> + Welcome, and thank you for your interest in Carpenter Tutoring! + </h2> + + <p> + Carpenter Tutoring is a private tutoring service based in Suffolk, + Virginia. I offer in-person sessions throughout the Hampton Roads + area and remote sessions anywhere in the country. Most of my + offerings are one-on-one, and group sessions and classes are also + available. No matter your budget, I am confident that we can find an + arrangement that will provide your student services without creating + financial strain. + </p> + + <p> + I invite you to explore my site to learn more about the <a href="/#offerings"> + services I offer + </a>, + <a href="/about">my background</a> + , + and some of <a href="/policies">my policies</a>. Thank you for visiting, and + please do not hesitate to reach out with any questions. I would be thrilled to + assist you! + </p> + + <figure class="signature"> + <picture> + <source srcset="/assets/signature.webp" type="image/webp" /> + <source srcset="/assets/signature.png" type="image/png" /> + <img src="/assets/signature.png" /> + </picture> + </figure> + + </div> + + <figure class="shadowy"> + <picture> + <source srcset="/assets/amy.webp" type="image/webp" /> + <source srcset="/assets/amy.png" type="image/png" /> + <img src="/assets/amy.png" /> + </picture> + <figcaption>Amy Carpenter, M.Ed.</figcaption> + </figure> +</section> + +<!-- offering modals --> +<div id="offering-subject-tutoring" class="modal"> + <div class="card"> + <p> + My regular subject specific offerings include: + + <ul> + <li> All levels of reading/language arts/English</li> + <li> Writing (formal and creative)</li> + <li> All levels of Latin</li> + <li> Math through Algebra II/Geometry</li> + <li> Introductory Biology, Physics, and Chemistry (not at the honors or AP + level)</li> + </ul> + + Special arrangements can be made for subjects that fall outside of these + offerings. Please contact me directly for more information. + + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-college-prep" class="modal"> + <div class="card"> + <p> + Work with a former Higher Education professional to + determine what types of schools and/or degree programs may be a good fit + for your interests and desires. Additionally, learn how to write an + attention-grabbing personal essay for college applications and receive + guidance on institution-specific supplemental essays. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-test-prep" class="modal"> + <div class="card"> + <p> + One-on-one content instruction, practice testing, and + testing strategization for a number of standardized tests, including but + not limited to: + + <ul> + <li> SAT & ACT</li> + <li> PSAT</li> + <li> ISEE</li> + <li> SSAT</li> + <li> GED</li> + <li> MAT</li> + <li> GRE</li> + <li> LSAT</li> + </ul> + + Please contact me directly if you'd like assistance for a test not listed + here. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-music-lessons" class="modal"> + <div class="card"> + <p> + Instruments offered include piano, guitar, drums, and voice. + Instrument lessons include a combination of formal instruction and + ear-training, which allows students to select the songs they'd like to + learn. Music composition lessons focus on the techniques necessary for + writing original songs, whether they be instrumental or singer/songwriter + style. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-evals" class="modal"> + <div class="card"> + <p> + Both evaluations are based on materials submitted through an online + portal. Letters are returned within a week of your notice that all documents + have been uploaded.</p> + <p> <b>$30 option</b>: Considers math and language arts materials, + satisfies proof of progress with a personalized letter and evaluator + credentials </p> + <p><b>$70 option</b>: Considers at least math and language arts materials + plus any other subject(s) you desire, satisfies proof of progress with a + personalized letter and evaluator credentials, provides homeschool families + with a separate document detailing identified areas of strength, areas of + weakness, and recommendations for addressing weaknesses. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-college-writing" class="modal"> + <div class="card"> + <p> + Learn how to shift high-school level writing to that which will be expected in + college. Topics covered include moving beyond the five-paragraph essay, writing + research papers, and choosing a topic for essays with open prompts. In-session + exercises will allow students to implement these skills in real time with + immediate feedback. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-academic-coaching" class="modal"> + <div class="card"> + <p> + Academic Coaching offers all the benefits of Study Skills and Time Management + appointments plus ongoing planning and accountability support. As an Academic + Coach, I keep track of your student's upcoming assignments and assessments and + help craft a schedule week to week for them to accomplish their goals. Students + come away as more independent and confident planners and self-advocates. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-study-skills" class="modal"> + <div class="card"> + <p> + Study Skills sessions will allow students to develop a toolkit for + successful study habits. Learn about techniques to fight mental fatigue and + tools for mental recall. Study Skills sessions also cover ways to address + motivation, attention, and avoidance. Topics will be tailored for your specific + needs. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-dissertation-coaching" class="modal"> + <div class="card"> + <p> + Dissertation coaching consists of one-on-one work to strengthen the effort you + have already put in. Draw out the significance of your research by honing in on + the implications, connections, and recommendations that stem from your + findings. Together, we will break past a surface-level review of your study to + generate the greatest impact possible. Dissertation coaching can also focus on + general writing mechanics, clarity of message, and/or consistency of voice. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<div id="offering-time-management" class="modal"> + <div class="card"> + <p> + Learn how to balance all of the demands in your life. Time + Management sessions are tailored to your needs and can include building an + hour-by-hour schedule of your week, creating a long-term plan for assignments + and responsibilities, and discussing time and stress management techniques. + </p> + <a href="#offerings" class="button"><img src="/assets/icons/close-box.svg" alt="close" />Close</a> + </div> +</div> + +<!-- offerings cards --> +<section id="offerings"> + + <div class="card"> + <h2>Subject Tutoring</h2> + <p>Tutoring for specific courses or disciplines + </p> + <a class="button" href="#offering-subject-tutoring"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>Time Management</h2> + <p> + Personalized plans for managing academics, extracurriculars, and + other commitments + </p> + <a class="button" href="#offering-time-management"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>Study Skills</h2> + <p>Learn how to make the most of your study time</p> + <a class="button" href="#offering-study-skills"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>Academic Coaching</h2> + <p> + Time management and study skills blended with continuing + accountability + </p> + <a class="button" href="#offering-academic-coaching"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>College Application Assistance</h2> + <p> + Assistance with generating a college list and crafting application + essays + </p> + <a class="button" href="#offering-college-prep"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>College-Level Writing</h2> + <p>Get a head start on meeting professors' expectations</p> + <a class="button" href="#offering-college-writing"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>Dissertation Coaching</h2> + <p>Ensure your research is communicated effectively and eloquently</p> + <a class="button" href="#offering-dissertation-coaching"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>Standardized Test Prep</h2> + <p> + Tailored assistance in preparing for a variety of standardized tests + </p> + <a class="button" href="#offering-test-prep"><img src="/assets/icons/dots-horizontal-circle.svg" alt="expand" /> + Learn more</a> + </div> + + <div class="card"> + <h2>Music Lessons</h2> + <p>Instrument and/or composition lessons for students of all ages</p> + <a class="button" href="#offering-music-lessons"><img src="/assets/icons/dots-horizontal-circle.svg" + alt="expand" /> Learn more</a> + </div> + + <div class="card"> + <h2>Proof of Progress Evaluations</h2> + <p> + Two levels of portfolio-based evaluations for homeschool families + looking to satisfy Proof of Progress or gain insight into their + child's learning + </p> + <a class="button" href="#offering-evals"><img src="/assets/icons/dots-horizontal-circle.svg" alt="expand" /> + Learn more</a> + </div> + +</section> + +<!-- pricing --> +<section class="quiet" id="pricing"> + <h2>Pricing Guide</h2> + + <table> + <tbody> + <tr> + <td></td> + <td>Remote</td> + <td>In-Person</td> + </tr> + + <tr> + <th> + <a href="#offering-subject-tutoring">Subject</a>, <a href="#offering-time-management">Time + Management</a>, <a href="#offering-study-skills">Study Skills Tutoring</a>, <a + href="#offering-music-lessons">Music Lessons</a> + </th> + <td>$50/hr</td> + <td>$60/hr</td> + </tr> + + <tr> + <th> + <a href="#offering-academic-coaching">Academic Coaching</a>, <a + href="#offering-dissertation-coaching">Dissertation Coaching</a>, <a + href="#offering-test-prep">Test Prep</a>, <a href="#offering-college-prep">College + Application Assistance</a> + </th> + <td>$60/hr</td> + <td>$70/hr</td> + </tr> + + <tr> + <th>Small Group Sessions, Group Lessons</th> + <td>$30/hr</td> + <td>$40/hr</td> + </tr> + <tr> + <th><a href="#offering-evals">Simplified Homeschool Evaluations</a></th> + <td colspan="2">$30</td> + </tr> + <tr> + <th><a href="#offering-evals">Detailed Homeschool Evaluations</a></th> + <td colspan="2">$70</td> + </tr> + </tbody> + </table> + + <h3> + <a href="/policies">See a list of my policies and procedures regarding scheduling, + payment, and booking.</a> + </h3> + +</section> + +<!-- contact box --> +<section id="contact"> + + <form class="card" action="/#contact" method="post"> + <h2>Contact</h2> + + <label for="name">Name</label> + <input name="name" type="text" id="name" placeholder="Jane Doe" required /> + + <label for="email">Email Address</label> + <input name="email" type="email" id="email" placeholder="jdoe85@aol.com" required /> + + <label for="body">Question/Comment</label> + <textarea name="body" id="body" + placeholder="Briefly describe your inquiry, including any services or areas of study you're interested in." + required></textarea> + + <button type="submit" class="button"><img src="/assets/icons/send-circle.svg" alt="send" />Send</button> + </form> + +</section> + +<!-- reviews --> +<section id="reviews"> + + <div class="card"> + <h2>Connor Fenton</h2> + <blockquote> + I was a Graduate student at the College of William and Mary who + needed to pass a Latin Language test as part of my degree + requirements. I was struggling with refreshing my Latin after a few + years out of the classroom and Amy was both professional and + helpful. With her tutoring I was able to pass my test and finish my + degree. She is very considerate and easy to work with. + </blockquote> + <p> + <a href="https://goo.gl/maps/73wWvyS7azkBBkA39">View on Google</a> + or + <a href="https://g.page/carpenter-tutoring/review?np">leave a review.</a> + </p> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + </div> + + <div class="card"> + <h2>Marie & Robert</h2> + <blockquote> + I highly recommend Amy as a dissertation coach. Amy is a very kind + and patient person. Over the time we worked together, she helped me + take down the barriers that were preventing me from moving forward + in my process and assisted me in creating a plan to get to the + finish line and achieve my goal. She was very helpful with revising + and editing my writing to strengthen it. She helped me think + creatively, so I could clarify and expand upon my findings. Amy not + only pointed out grammatical errors and typos, but she made sure I + was able to keep my voice consistent in my writing. Because of her, + I was able to finish my doctoral degree, something that I will be + forever grateful to her for. + </blockquote> + <p> + <a href="https://goo.gl/maps/73wWvyS7azkBBkA39">View on Google</a> + or + <a href="https://g.page/carpenter-tutoring/review?np">leave a review.</a> + </p> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + </div> + + <div class="card"> + <h2>Lee Crabtree</h2> + <blockquote> + Amy is a wonderful tutor who helped my child (who does not like + help at all) though [sic] some difficult classes where the teacher + was not providing the support my child needed. Highly recommended. + </blockquote> + <p> + <a href="https://goo.gl/maps/73wWvyS7azkBBkA39">View on Google</a> + or + <a href="https://g.page/carpenter-tutoring/review?np">leave a review.</a> + </p> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + <img src="/assets/icons/star-box.svg" alt="star" /> + </div> + +</section> +{{/inline}} +{{/base}} |