diff options
Diffstat (limited to 'www')
| -rw-r--r-- | www/.well-known/openpgpkey/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp | bin | 0 -> 427 bytes | |||
| -rw-r--r-- | www/.well-known/openpgpkey/luuduct.ai/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp | bin | 0 -> 427 bytes | |||
| -rw-r--r-- | www/.well-known/openpgpkey/luuduct.ai/policy | 0 | ||||
| -rw-r--r-- | www/.well-known/openpgpkey/policy | 0 | ||||
| -rw-r--r-- | www/form.css | 190 | ||||
| -rw-r--r-- | www/index.html | 153 | ||||
| -rw-r--r-- | www/message.html | 87 | ||||
| -rw-r--r-- | www/styles.css | 123 |
8 files changed, 553 insertions, 0 deletions
diff --git a/www/.well-known/openpgpkey/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp b/www/.well-known/openpgpkey/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp Binary files differnew file mode 100644 index 0000000..f0fa994 --- /dev/null +++ b/www/.well-known/openpgpkey/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp diff --git a/www/.well-known/openpgpkey/luuduct.ai/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp b/www/.well-known/openpgpkey/luuduct.ai/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp Binary files differnew file mode 100644 index 0000000..f0fa994 --- /dev/null +++ b/www/.well-known/openpgpkey/luuduct.ai/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp diff --git a/www/.well-known/openpgpkey/luuduct.ai/policy b/www/.well-known/openpgpkey/luuduct.ai/policy new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/www/.well-known/openpgpkey/luuduct.ai/policy diff --git a/www/.well-known/openpgpkey/policy b/www/.well-known/openpgpkey/policy new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/www/.well-known/openpgpkey/policy diff --git a/www/form.css b/www/form.css new file mode 100644 index 0000000..e2e42ae --- /dev/null +++ b/www/form.css @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +.ascii-form-container { + width: 80ch; + max-width: 100%; + margin: 16px 0; + display: flex; + flex-direction: column; + gap: 16px; + box-sizing: border-box; +} + +.ascii-box { + display: flex; + flex-direction: column; + width: 100%; +} + +.ascii-bar { + font: inherit; + line-height: 1.2; + white-space: pre; + user-select: none; + color: inherit; +} + +.ascii-body { + display: flex; + align-items: stretch; + min-height: 1.5em; + background-repeat: repeat-y; + background-position: left top, right top; + background-image: + url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1ch' height='1.5em'><text x='0' y='1.15em' font-family='monospace' font-size='16px' fill='%23000000'>|</text></svg>"), + url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1ch' height='1.5em'><text x='0' y='1.15em' font-family='monospace' font-size='16px' fill='%23000000'>|</text></svg>"); +} + +@media (prefers-color-scheme: dark) { + .ascii-body { + background-image: + url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1ch' height='1.5em'><text x='0' y='1.15em' font-family='monospace' font-size='16px' fill='%23ffffff'>|</text></svg>"), + url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1ch' height='1.5em'><text x='0' y='1.15em' font-family='monospace' font-size='16px' fill='%23ffffff'>|</text></svg>"); + } +} + +.ascii-content-padding { + display: flex; + align-items: center; + width: 100%; + padding: 0 2ch; + box-sizing: border-box; +} + +.ascii-prompt { + color: #090; + font-weight: bold; + user-select: none; + margin-right: 1ch; +} + +.ascii-input, +.ascii-textarea { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + background: transparent; + border: none; + outline: none; + font: inherit; + color: inherit; + padding: 0; + margin: 0; + width: 100%; + box-sizing: border-box; + border-radius: 0; + line-height: 1.5; +} + +.ascii-textarea { + display: block; + resize: none; + overflow-y: hidden; + min-height: 6em; + field-sizing: content; +} + +.ascii-input::placeholder, +.ascii-textarea::placeholder { + color: #666; + opacity: 0.7; +} + +@media (prefers-color-scheme: dark) { + .ascii-prompt { + color: #0f0; + } + .ascii-input::placeholder, + .ascii-textarea::placeholder { + color: #555; + } +} + +.ascii-actions { + display: flex; + gap: 2ch; + margin-top: 8px; +} + +.ascii-btn { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + background: transparent; + border: none; + outline: none; + font: inherit; + padding: 0; + margin: 0; + cursor: pointer; + white-space: pre; + font-weight: bold; +} + +.ascii-btn-submit { + color: #090; +} + +.ascii-btn-reset { + color: #a00; +} + +.ascii-btn-submit:hover, +.ascii-btn-submit:focus { + background: #090; + color: #fff; +} + +.ascii-btn-reset:hover, +.ascii-btn-reset:focus { + background: #a00; + color: #fff; +} + +@media (prefers-color-scheme: dark) { + .ascii-btn-submit { + color: #0f0; + } + .ascii-btn-submit:hover, + .ascii-btn-submit:focus { + background: #0f0; + color: #000; + } + .ascii-btn-reset { + color: #f33; + } + .ascii-btn-reset:hover, + .ascii-btn-reset:focus { + background: #f33; + color: #000; + } +} + +.ascii-status { + font: inherit; + color: #06c; + white-space: pre-wrap; + padding: 4px 0; + user-select: none; +} + +@media (prefers-color-scheme: dark) { + .ascii-status { + color: #6cf; + } +} diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..f02c538 --- /dev/null +++ b/www/index.html @@ -0,0 +1,153 @@ +<!doctype html> +<!-- +Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>. +--> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + + <title>Doan Luu Duc Tai</title> + + <link rel="stylesheet" href="styles.css"> + </head> + + <body> + + <div id="page"> + + <div class="badge">[ JS-free ]</div> + + <div id="content"> + + <pre> +<a href="/" class="logo"> + ____ ___ _ _ _ +| _ \ / _ \ / \ | \ | | +| | | | | | |/ _ \ | \| | +| |_| | |_| / ___ \| |\ | +|____/ \___/_/ \_\_| \_| LUU DUC TAI +</a> + +<a href="/">Home</a> <a href="#projects">Projects</a> <a href="#services">Services</a> <a href="#contact">Contact</a> <a href="message.html">Message Me</a> + + ++------------------------------------------------------------------------------+ +| | +| Doan Luu Duc Tai | +| | +| Email: <a href="mailto:doan@luuduct.ai">doan@luuduct.ai</a> | +| <a href="https://smp11.simplex.im/a#ikrTZ8sfleSZEifKV2wI8foAVwkbKfOoKc6TO2P4ZT8">SimpleX Chat</a> | +| <a href="https://signal.me/#eu/Xr5_r_ei8UYUpd7Lus4536PnlKvW28LXBjg3Lb71BtFp4iDVXoRF4ZVPQYw_0Guk">Signal</a> | +| | +| GPG: <a href="https://openpgpkey.luuduct.ai/.well-known/openpgpkey/luuduct.ai/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp?l=doan">8990FFC0F9D95FAA4C04520BADF3DE23F687C623</a> | +| Cv25519 | +| | ++------------------------------------------------------------------------------+ + + + + +<span id="projects">Projects</span> +________________________________________________________________________________ + + +<a href="https://git.doan.luuduct.ai/csprdg/">csprdg</a> + Conjecturally Secure Pseudo-Random Document Generator + + +<a href="https://git.doan.luuduct.ai/csprsg/">csprsg</a> + Conjecturally Secure Pseudo-Random Spreadsheet Generator + + +<a href="https://git.doan.luuduct.ai/fileshare/">fileshare</a> + LAN File Server + + +<a href="https://git.doan.luuduct.ai/vfetch/">vfetch</a> + neofetch but the ascii part is a video + + + + +<span id="services">Services</span> +________________________________________________________________________________ + + +<a href="https://git.doan.luuduct.ai/">git.doan.luuduct.ai</a> +* A <a href="https://git.zx2c4.com/cgit">cgit</a> instance, <span class="good">functional without JS</span>. + + Personal Git repositories + + +<a href="https://search.doan.luuduct.ai/">search.doan.luuduct.ai</a> +* A <a href="https://github.com/searxng/searxng">SearXNG</a> instance, <span class="good">functional without JS</span>. + + Private search engine + + +<a href="https://meet.doan.luuduct.ai/">meet.doan.luuduct.ai</a> +* A <a href="https://github.com/miroslavpejic85/mirotalk">MiroTalk</a> instance, <span class="warn" title="Practice your due diligence: read the source code, audit dependencies, and check what JavaScript is executed.">JS-required, non-<a href="https://www.gnu.org/software/librejs/index.html">LibreJS</a>-compliant</span>, <a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPLv3</a>-licensed. + + Video conferencing + + + + +<span id="contact">Contact</span> +________________________________________________________________________________ + ___ ___ _ _ _ _ _ _ _ _ ___ _ _ ___ _____ _ ___ +| \ / _ \ /_\ | \| | | | | | | | | | | | \| | | |/ __| |_ _/_\ |_ _| +| |) | (_) / _ \| .` | | |_| |_| | |_| | | |) | |_| | (__ | |/ _ \ | | +|___/ \___/_/ \_\_|\_| |____\___/ \___/ |___/ \___/ \___| |_/_/ \_\___| + + + +Message: + + <a href="message.html">[ Send Encrypted Message ]</a> + + +Email: + + <a href="mailto:doan@luuduct.ai">doan@luuduct.ai</a> + + +GPG: + + <a href="https://openpgpkey.luuduct.ai/.well-known/openpgpkey/luuduct.ai/hu/t76q8xqkeassgy1kr38re1ppj6cpc1dp?l=doan">8990FFC0F9D95FAA4C04520BADF3DE23F687C623</a> + Cv25519 + + +<a href="https://simplex.chat">SimpleX Chat</a> + + <a href="https://smp11.simplex.im/a#ikrTZ8sfleSZEifKV2wI8foAVwkbKfOoKc6TO2P4ZT8">SimpleX Contact Link</a> + + +<a href="https://signal.org/">Signal</a> + + <a href="https://signal.me/#eu/Xr5_r_ei8UYUpd7Lus4536PnlKvW28LXBjg3Lb71BtFp4iDVXoRF4ZVPQYw_0Guk">@v3QKypba7PzWPAuv2Eu2wRFgUVDuYDhm.73</a> + + + + + </pre> + + </div> + </div> + + </body> +</html> diff --git a/www/message.html b/www/message.html new file mode 100644 index 0000000..a463a1c --- /dev/null +++ b/www/message.html @@ -0,0 +1,87 @@ +<!doctype html> +<!-- +Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>. +--> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + + <title>Message Me - Doan Luu Duc Tai</title> + + <link rel="stylesheet" href="styles.css"> + <link rel="stylesheet" href="form.css"> + </head> + + <body> + + <div id="page"> + + <div class="badge">[ JS-free ]</div> + + <div id="content"> + + <pre> +<a href="/" class="logo"> + ____ ___ _ _ _ +| _ \ / _ \ / \ | \ | | +| | | | | | |/ _ \ | \| | +| |_| | |_| / ___ \| |\ | +|____/ \___/_/ \_\_| \_| LUU DUC TAI +</a> + </pre> + + <form id="message-form" action="/send-message" method="POST" class="ascii-form-container"> + + <div class="ascii-box"> + <div class="ascii-bar">+--[ Reply Contact (Optional) ]------------------------------------------------+</div> + <div class="ascii-body"> + <div class="ascii-content-padding"> + <span class="ascii-prompt">></span> + <input type="text" id="sender-input" name="sender" class="ascii-input" maxlength="120" autocomplete="off" spellcheck="false"> + </div> + </div> + <div class="ascii-bar">+------------------------------------------------------------------------------+</div> + </div> + + <div class="ascii-box"> + <div class="ascii-bar">+--[ Message Body ]------------------------------------------------------------+</div> + <div class="ascii-body"> + <div class="ascii-content-padding"> + <textarea id="message-input" name="message" class="ascii-textarea" rows="4" required></textarea> + </div> + </div> + <div class="ascii-bar">+------------------------------------------------------------------------------+</div> + </div> + + <div class="ascii-actions"> + <button type="submit" id="submit-btn" class="ascii-btn ascii-btn-submit">[ < SEND > ]</button> + <button type="reset" id="reset-btn" class="ascii-btn ascii-btn-reset">[ < CLEAR > ]</button> + </div> + + </form> + + <pre> +________________________________________________________________________________ + +<a href="/">Return to Home Page</a> + </pre> + + </div> + </div> + + </body> +</html> diff --git a/www/styles.css b/www/styles.css new file mode 100644 index 0000000..35b7695 --- /dev/null +++ b/www/styles.css @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +body { + overflow-y: scroll; + font: 16px monospace, monospace; + margin: 0; + padding: 0; +} + +pre { + margin: 0; + overflow-x: auto; +} + +a { + color: #06c; + text-decoration: none; +} + +.good { + color: #090; + font-weight: bold; +} + +.warn { + color: #c90; + font-weight: bold; +} + +.logo { + color: #a00; + text-decoration: none; +} + +.logo:hover { + text-decoration: none; +} + +.badge { + position: absolute; + top: 16px; + left: calc(50% + 280px); + color: #090; + font-weight: bold; + white-space: nowrap; +} + +#page { + display: table; + margin: 16px auto; + position: relative; +} + +#content { + max-width: 80ch; + width: 100%; +} + +.good a, .warn a { + color: inherit; + text-decoration: underline; +} + +.good a { + text-decoration-style: wavy; +} + +.warn a { + text-decoration-style: dotted; +} + +@media (prefers-color-scheme: dark) { + body { + background: #000; + color: #fff; + } + + a { + color: #6cf; + } + + .logo { + color: #f33; + } + + .badge { + color: #0f0; + } + + .good { + color: #0f0; + } + + .warn { + color: #ff0; + } +} + +@media (max-width: 999px) { + body { + font-size: 1.94vw; + } + + .badge { + left: auto; + right: 16px; + } +} |
