newera/init

Signed-off-by: Ari Archer <ari@ari.lt>
This commit is contained in:
Arija A. 2024-05-21 16:56:35 +03:00
parent 9daab4469f
commit 0474b22a5b
104 changed files with 214 additions and 18521 deletions

View file

@ -1,19 +0,0 @@
---
BasedOnStyle: LLVM
IndentWidth: 4
SortIncludes: false
AlignConsecutiveAssignments: true
AlignConsecutiveBitFields: true
AlignConsecutiveMacros: true
AlignEscapedNewlines: true
AllowShortCaseLabelsOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: true
AllowShortLambdasOnASingleLine: true
BinPackParameters: false
IndentCaseBlocks: true
IndentCaseLabels: true
IndentExternBlock: true
IndentGotoLabels: true
---

View file

@ -1,13 +0,0 @@
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
}
}

174
.gitignore vendored
View file

@ -1,7 +1,167 @@
_*.css
node_modules/
*.min.*
/api/apis.json
/api/pages.json
/api_hash
!.minexclude
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/
# Databases
*.db
# Other
.ccls-cache/
!py.typed

View file

@ -1,5 +0,0 @@
{
"m.homeserver": {
"base_url": "https://matrix.ari.lt"
}
}

View file

@ -1,3 +0,0 @@
{
"m.server": "matrix.ari.lt:443"
}

View file

@ -1,30 +0,0 @@
{
"contacts": [
{
"matrix_id": "@ari:ari.lt",
"email_address": "ari@ari.lt",
"lt.ari.jabber_id": "ari@ari.lt",
"role": "m.role.admin",
"lt.ari.website": "https://ari.lt/"
},
{
"matrix_id": "@zayd:envs.net",
"email_address": "wanderer@envs.net",
"role": "m.role.mod",
"lt.ari.website": "https://wanderer.envs.net/"
},
{
"matrix_id": "@lda:a.freetards.xyz",
"role": "m.role.mod",
"lt.ari.website": "https://freetards.xyz/"
},
{
"matrix_id": "@fourier:ari.lt",
"role": "m.role.mod",
"lt.ari.website": "https://freetards.xyz/"
}
],
"support_page": "https://ari.lt/matrix",
"lt.ari.room": "#root:ari.lt",
"lt.ari.abuse": "#abuse:ari.lt"
}

View file

@ -1,34 +0,0 @@
{
"server": "62.171.174.136",
"domain": "ari.lt",
"description": "Ari-web server",
"keywords": [
"ari-web",
"selfhosted",
"email",
"messaging",
"webapps",
"hosting"
],
"staff": [
{
"name": "Ari Archer",
"email": "ari@ari.lt",
"website": "https://ari.lt/",
"role": "owner",
"matrix": "@ari:ari.lt",
"xmpp": "ari@ari.lt",
"of": ["*"]
}
],
"name": "Ari::web -> Server",
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos",
"affiliated-with": ["pain.agency", "h2.gay"],
"hardware": {
"ram": 16,
"cpu": 6,
"storage": 400,
"network": 0.8
}
}

View file

@ -1,112 +0,0 @@
{
"matrix.ari.lt": {
"source": "https://matrix.ari.lt/git",
"description": "The ari.lt Matrix homeserver using Dendrite",
"license": "MIT",
"public": false,
"extra": "Required to contact admin for signup",
"keywords": ["ari-web", "matrix", "messaging", "im", "dendrite"],
"privacy": "https://ari.lt/matrix",
"terms": "https://ari.lt/matrix"
},
"vim-or-emacs.ari.lt": {
"source": "https://vim-or-emacs.ari.lt/git",
"description": "Vim or Emacs?",
"license": "GPL-3.0-or-later",
"public": true,
"keywords": ["ari-web", "poll", "statistics", "vim", "emacs"],
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos"
},
"git.ari.lt": {
"source": "https://git.ari.lt/git",
"description": "Ari-web forgejo instance",
"license": "MIT",
"public": true,
"extra": "Required to contact admin for signup",
"keywords": ["ari-web", "git", "forgejo"],
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos"
},
"searx.ari.lt": {
"source": "https://searx.ari.lt/git",
"description": "SearXNG instance by ari-web",
"license": "MIT",
"public": true,
"extra": "The instance may be slow, suggest to disable a couple of search engines in settings before using",
"keywords": ["ari-web", "searx", "search"],
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos"
},
"pad.ari.lt": {
"source": "https://pad.ari.lt/git",
"description": "Cryptpad instance: End-to-end encrypted collabware, hosted by ari-web",
"license": "MIT",
"public": true,
"keywords": ["ari-web", "e2ee", "cryptpad", "collabware"],
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos"
},
"mail.ari.lt": {
"source": "https://mail.ari.lt/git",
"description": "Ari-web mailcow instance",
"license": "MIT",
"public": false,
"extra": "Contact Admin for an address and its aliases",
"keywords": ["ari-web", "email", "mailcow"],
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos"
},
"rc.ari.lt": {
"source": "https://rc.ari.lt/git",
"description": "Ari-web roundcube mail instance",
"license": "MIT",
"public": true,
"keywords": [
"ari-web",
"email",
"mailcow",
"email client",
"roundcube"
],
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos"
},
"schildi.ari.lt": {
"source": "https://schildi.ari.lt/git",
"description": "Schildichat Matrix client instance by ari-web",
"license": "MIT",
"public": true,
"keywords": ["ari-web", "schildichat", "schildi", "matrix client"],
"privacy": "https://ari.lt/matrix",
"terms": "https://ari.lt/matrix"
},
"cinny.ari.lt": {
"source": "https://cinny.ari.lt/git",
"description": "Cinny Matrix client instance by ari-web",
"license": "MIT",
"public": true,
"keywords": ["ari-web", "cinny", "matrix client"],
"privacy": "https://ari.lt/matrix",
"terms": "https://ari.lt/matrix"
},
"pb.ari.lt": {
"source": "https://pb.ari.lt/git",
"description": "Ari-web privatebin instance: End-to-end encrypted pastebin",
"license": "MIT",
"public": true,
"keywords": ["ari-web", "privatebin", "pastebin", "e2ee"],
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos"
},
"xmpp.ari.lt": {
"source": "https://xmpp.ari.lt/git",
"description": "The ari-web XMPP server using prosody",
"license": "MIT",
"public": false,
"extra": "Required to contact admin for signup",
"keywords": ["ari-web", "e2ee", "prosody", "xmpp"],
"privacy": "https://ari.lt/xmpp",
"terms": "https://ari.lt/xmpp"
}
}

View file

@ -1,26 +0,0 @@
UNLICENSE
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>

View file

@ -1,18 +0,0 @@
build:
npm run build
netlifyapis:
sh ./scripts/netlifyapis.sh
clean:
[ -z "${CI}" ] || rm -rfv requirements.txt \
runtime.txt \
README.md \
git.sh \
scripts \
.vscode \
.github
netlify: build netlifyapis clean
.PHONY: build clean netlify

View file

@ -1,131 +0,0 @@
# The network protocol
The network protocol consists of 2 different files:
- `.well-known/network/server.json` - defines the server information
- `.well-known/network/services.json` - defines the services information
All the servers and services must support HTTPS.
## Server
The server file, `.well-known/network/server.json`, has the following structure:
```json
{
"server": "62.171.174.136",
"domain": "ari.lt",
"description": "Ari-web server",
"keywords": [
"ari-web",
"selfhosted",
"email",
"messaging",
"webapps",
"hosting"
],
"staff": [
{
"name": "Ari Archer",
"email": "ari@ari.lt",
"website": "https://ari.lt/",
"role": "owner",
"matrix": "@ari:ari.lt",
"xmpp": "ari@ari.lt",
"of": ["*"]
}
],
"name": "Ari::web -> Server",
"privacy": "https://ari.lt/privacy",
"terms": "https://ari.lt/tos",
"affiliated-with": ["pain.agency", "h2.gay"],
"hardware": {
"ram": 16,
"cpu": 6,
"storage": 400,
"network": 0.8
}
}
```
(This is an example)
And this is what the fields mean:
\*required
- \*`server`: The server domain or IP address, a domain (or IP) that directly points to your server.
- \*`domain`: The representative domain of the server, does not have to run on the same server as `server`.
- \*`description`: The description of your server, usually small, up to 1024 characters.
- \*`keywords`: The keywords of your server. This is used for categorization and discovery of your server in the network. Up to 32 tags, of up to 32 characters each.
- \*`staff`: A list of staff contacts. See required entries below.
- `name`: The name of the staff member, may repeat to add alternative accounts.
- `email`: The email of the staff member.
- `role`: The role of the staff member, usually:
- `owner`
- `admin`
- `mod`
- `audit` (person who may review code, configurations, etc. from time to time)
- `of`: The list of services that this staff member _may_ manage. Globbing supported (such as `*.ari.lt`).
- Other keys will be listed as-is.
- \*`name`: The name of your server, any string up to 128 characters.
- `privacy`: General privacy statement of your server, such as logging,
- `terms`: General privacy statement of your server, such as logging,
- \*`affiliated-with`: The affiliated servers in your network. Your server won't be able to talk to other servers not listed in the this list.
- \*`hardware`: The hardware of your server, in gigabytes
- `ram`: The memory/RAM your server has in total, excluding swap.
- `cpu`: The CPU threads on your server.
- `storage`: The total storage your server has.
- `network`: The network speed in GBit/s. (for example 0.8 is 800 mbit/s)
That is all for the server configuration
This file should be served with the following HTTP headers:
- `Access-Control-Allow-Origin` = `*`
- `Access-Control-Allow-Methods` = `GET`
- `Content-Type` = `application/json`
## Services
The services configuration, `.well-known/network/server.json`, has the following structure:
```json
{
"matrix.ari.lt": {
"source": "https://matrix.ari.lt/git",
"description": "The ari.lt Matrix homeserver using Dendrite",
"license": "MIT",
"public": false,
"extra": "Required to contact admin for signup",
"keywords": ["ari-web", "matrix", "messaging", "im", "dendrite"],
"privacy": "https://ari.lt/matrix",
"terms": "https://ari.lt/matrix"
},
...
}
```
(This is an example)
This is what those fields mean:
\*required
- The keys of the object are the domain names used for the service hosting.
- `source`: The source code/configuration/etc. of your service.
- \*`description`: The description of your service. Up to 1024 characters.
- `license`: The license of your `source` or content on the page. Up to 128 characters.
- \*`public`: Whether or not any random passer-by can sign up and use this service without any extra steps.
- `extra`: Any extra information about the service. Up to 512 characters.
- \*`keywords`: The keywords for your service, used for discovery and categorization. Up to 32 tags, of up to 32 characters each.
- `privacy`: Privacy statement of your service.
- `terms`: Terms of your service.
You may add as many services as you want.
This file should be served with the following HTTP headers:
- `Access-Control-Allow-Origin` = `*`
- `Access-Control-Allow-Methods` = `GET`
- `Content-Type` = `application/json`

150
README.md
View file

@ -1,150 +0,0 @@
<h1 align="center">Website</h1>
<p align="center">
<img src="https://img.shields.io/github/last-commit/ari-lt/ari.lt?color=red&style=flat-square">
<img src="https://img.shields.io/github/repo-size/ari-lt/ari.lt?color=red&style=flat-square">
<img src="https://img.shields.io/github/issues/ari-lt/ari.lt?color=red&style=flat-square">
<img src="https://img.shields.io/github/stars/ari-lt/ari.lt?color=red&style=flat-square">
</p>
<p align="center">
<a href="https://app.netlify.com/sites/ari-lt/deploys">
<img alt="Netlify Status" src="https://api.netlify.com/api/v1/badges/d82361d9-c471-41d0-ba9b-b5fbe07ca843/deploy-status" /> </a>
</p>
### [My website's](https://www.ari.lt/) source code.
# Badge
the badge( s ) is licensed under UNLICENSE :
```
UNLICENSE
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>
```
## original
author : Ari Archer - [@TruncatedDinosour](https://ari.lt/gh) - <https://ari.lt/> - <ari.web.xyz@gmail.com>
in html :
```html
<a href="https://ari.lt/"> <img src="https://ari.lt/badge.png" loading="lazy" alt="ari-web badge" height="31px" width="88px" /> </a>
```
in markdown :
```md
[![ari-web badge](https://ari.lt/badge.png)](https://ari.lt/)
```
[![ari-web badge](https://ari.lt/badge.png)](https://ari.lt/)
## yellow
author : Tobskep - <https://tobskep.com/>
in html :
```html
<a href="https://ari.lt/"> <img src="https://ari.lt/badge-yellow.png" loading="lazy" alt="ari-web badge" height="31px" width="88px" /> </a>
```
in markdown :
```md
[![ari-web badge](https://ari.lt/badge-yellow.png)](https://ari.lt/)
```
[![ari-web badge](https://ari.lt/badge-yellow.png)](https://ari.lt/)
# Customising when self-hosting
1. Clone the repository: `git clone https://ari.lt/git ari-web`
2. Enter the directory: `cd ari-web`
3. See the `/content/styles/config` and `/content/js/config` directories.
4. Open it in live server: `python3 -m http.server 5500`
5. Go to http://0.0.0.0:5500/ in your browser
6. Edit all stuff that is `ARI-WEB-SPECIFIC` in [netlify.toml](/netlify.toml)
7. Publish on [netlify](https://netlify.com/)
# API hashes
If you want to call to a very expensive API it might become
slow, so there's hashes for them, they are sha256 hashes of
those JSON files in the api
So what you do, replace all `.` in the API name with \_,
then make the request to `/api_hash/..._hash.txt` and you will
get the hash, for example: <https://www.ari.lt/api_hash/apis_json_hash.txt>
# Standard
See [the standard](/STANDARD.md) to see how ari-web is structured and
how to properly modify ari-web
# Usage API
The [usage api](https://www.ari.lt/api/usage.json)
has all the statistics I get from netlify, it serves as
an archive and growth monitor
Schema:
```json
{
"<YYYY-MM-DD>": {
"total": <total bandwidth used in MB>,
"top": {
"<top usage site 1>": <total bandwidth used in MB>,
"<top usage site 2>": <total bandwidth used in MB>,
"<top usage site 3>": <total bandwidth used in MB>
}
}
}
```
The date is the day I added those stats, total is total
bandwidth used up to that point, top is the top 3 site's
usage and its keys are the (sub)domain names and the values
of those keys are the used bandwidth out of the total
The bandwidth keys are all floats for easy parsing, they
represent the bandwidth used in MB
The top sites will most likely not have the total bandwidth
fully used, so as a measure you can use this formula to calculate
how much per avg sites are using:
```py
(data["<YYYY-MM-DD>"]["total"] - sum(data["<YYYY-MM-DD>"]["top"].values())) / (len(ari_web_sites) - 3)
```
# Subdomains
Check <https://ari.lt/lh>

View file

@ -1,86 +0,0 @@
# ari-web standard
this document describes how ari-web is built, what rules
it follows and what standard it practices
- folder structure
- api
- 1 API route
- e.g. <https://blog.ari.lt/blog.json>, you can make the request to
that route and thats all, hashing of it works basically the same,
but wtihout `/api/` -- <https://blog.ari.lt/blog_json_hash.txt>
- \>1 API route
- use `/api` directory for APIs based on JSON if you have multiple ones
- `/api/*.json` is any API route
- `/api` purely should return a redirect to a JSON file in `/api` containing
an index of all API routes
- `/api_hash/*_json_hash.txt` where wildcard is api route name returns a sha256 sum
of that specific route
- `/content/`
- content includes all your content
- `img` -- images
- `js` -- javascript
- `styles` / `css` -- CSS ( or SCSS )
- `etc` -- other content
- `/favicons/`
- this directory should purely be on the parent level domain, e.g. `ari.lt`,
this should include all of your favicons and its versions / revisions you might
use
- `/page/`
- this should include all of your pages
- this directory should purely include directories and text files
use directories for pages and text files for pages that dont make
use of html ( e.g. <https://ari.lt/page/minimal.txt>, otherwise
you should have a subdirectory and in it you should have an `index.html`
file, e.g. <https://ari.lt/page/info/index.html>, which compresses
into <https://ari.lt/page/info/>
- `/index.html`
- as per HTTP this is just your home page -- `/`, you should not put it in
`/page/`, this should be in the root level directory
- `/robots.txt` and `/sitemap.xml`
- these once again should follow general format of robots and sitemap,
although this should purely be on the parent-level domain
- `/manifest.json`
- this is your site manifest, you should have it
- \*see redirects for all `parent-level` points
- licensing
- all of your code must be free and open source under a shareable license
- id suggest your license to be accessible through your site
- redirects
- `/404.html` must be a redirect to `/page/404/index.html`
- `/favicon.ico` should be a redirect to one of your favicons in the `/favicons/` directory
- `/git` should redirect to the source code on the website, preferably on git
- `/git/*` should also be redirected into the source code but with the splat appended to it
- `/*` should redirect to `/page/*` if `/*` does not exist
- `/*` should 'redirect' to `/page/404/index.html` with status code `404` if `/*` nor `/page/*` exists
- content
- content should preferably should be minified at build time on the build server
rather than in the source code, source code should be readable for a human reader
- all minified content should link to the source code through a human-readable comment
in the source code, for example HTML -- `<!-- source code @ /git -->` or similar
- your content should strive to be accessible for all people of different abilities,
for example, try if possible make it easy for blind readers, A11Y
- your content should strive to be portable for all browsers that have at least
a couple hundred users
- markup
- use semantic markup
- use JS licensing
- dont force JS on people, explain why you need it if its disabled
- all `script`s must be placed in the `head` element, use `defer` attribute
- make sure to specify `lang` attribute in your `html`
- escape all html-unsafe characters with escapes
- make sure to use `charset`, `X-UA-Compatible` and `viewport` meta tags
to make it easy for people
- `<meta charset="UTF-8" />`
- `<meta http-equiv="X-UA-Compatible" content="IE=edge" />`
- `<meta name="viewport" content="width=device-width, initial-scale=1.0" />`
- make sure to link to your `robots.txt` using the `meta` tag and `manifest.json`
using `link`
- `og:type` should have a defined value preferably
- `color-scheme` and `theme-color` should also preferably be defined
- textual content
- dates : `yyyy/mm/dd` for dates `yyyy-mm-dd` for timestamps
# changelog
- `2023-03-18` -- init

24
TODO.md
View file

@ -1,24 +0,0 @@
- [x] Fac command: POST to https://elijah-dev.tk/fa.php with the fa parameter being some code
- Used to have it, removed it on 2022/10/20
- [x] Chat subdomain using WebRTC
- We have [CaO](https://user.ari.lt/), not going to implement
- [x] Store files in IndexedDB
- [Overly complex API, i dont want to deliver this much JS, i already deliver quite a package](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)
- [x] Export/Import
- [x] Python code runner
- `terminal` branch is not being worked on anymore
- [x] Minimal UI framework
- [x] Convert some of the pages to use that framework
- Stupid idea ngl
- [x] WASM
- Fun challenge, but will ruin browser support, although keeping this idea for some commands :)
- [x] Custom ari-web assembler ?
- Ari-web ASM -> (WAT ?) -> WASM -> run
- `terminal` branch is not being worked on anymore
- [ ] More theme generators
- [ ] ViM themes
- [ ] Suckless themes
- [ ] Dmenu
- [ ] St
- [ ] DWM
- [ ] Emacs themes

View file

@ -1,51 +0,0 @@
{
"%android": {
"disallowed-android-versions": ["p", "pie", "9", "t", "13"]
},
"android": {
"Your GitHub username": {
"placeholder": "Your GitHub username",
"id": "gh-username"
},
"Android version": {
"placeholder": "The version of Android you are building",
"id": "and-version"
},
"Stock Android Version": {
"placeholder": "The latest version of Android your OEM has released. You may disregard this your issue isn't a bringup issue",
"id": "stock-and-version",
"optional": true
},
"ROM": {
"placeholder": "Provide the name of the ROM you are building AND a link to their GitHub organization",
"id": "rom-url"
},
"Device": {
"placeholder": "This must be YOUR tree that has been pushed to YOUR GitHub with all of your current changes",
"id": "dev-url"
},
"Kernel": {
"placeholder": "This must be YOUR tree that has been pushed to YOUR GitHub with all of your current changes.",
"id": "kern-url"
},
"Vendor": {
"placeholder": "This must be YOUR tree that has been pushed to YOUR GitHub with all of your current changes.",
"id": "ven-url"
},
"Common Tree(s)": {
"placeholder": "This must be YOUR tree that has been pushed to YOUR GitHub with all of your current changes. Disregard this if your device does not use any common trees",
"id": "ctree-url",
"optional": true
},
"Error Log URL": {
"placeholder": "Please only use hastebin.com, katb.in, nekob.in, or gist.github.com. Pastebin links will not be accepted.",
"id": "err-url"
},
"Additional notes": {
"placeholder": "Additional things you have tried to do",
"id": "additional",
"optional": true,
"textbox": true
}
}
}

View file

@ -1,6 +0,0 @@
[
"https://blog.ari-web.xyz/blog.json",
"https://files.ari-web.xyz/files.json",
"https://blog.ari.lt/blog.json",
"https://files.ari.lt/files.json"
]

View file

@ -1,16 +0,0 @@
[
"www.ari-web.xyz",
"files.ari-web.xyz",
"blog.ari-web.xyz",
"legacy.blog.ari-web.xyz",
"school.ari-web.xyz",
"user.ari-web.xyz",
"etc.ari-web.xyz",
"www.ari.lt",
"files.ari.lt",
"blog.ari.lt",
"legacy.blog.ari.lt",
"school.ari.lt",
"us.ari.lt",
"etc.ari.lt"
]

View file

@ -1,178 +0,0 @@
{
"2022-08-17": {
"total": 137,
"top": {
"files.ari-web.xyz": 45.1,
"legacy.blog.ari-web.xyz": 31.8,
"ari-web.xyz": 29.9
}
},
"2022-08-28": {
"total": 30,
"top": {
"legacy.blog.ari-web.xyz": 9.2,
"ari-web.xyz": 8.6,
"blog.ari-web.xyz": 7.3
}
},
"2022-09-23": {
"total": 11,
"top": {
"ari-web.xyz": 3.4,
"blog.ari-web.xyz": 2.4,
"legacy.blog.ari-web.xyz": 2.2
}
},
"2022-09-28": {
"total": 40,
"top": {
"files.ari-web.xyz": 19.8,
"blog.ari-web.xyz": 5.6,
"ari-web.xyz": 5.6
}
},
"2022-11-13": {
"total": 90,
"top": {
"files.ari-web.xyz": 36.9,
"blog.ari-web.xyz": 24.3,
"ari-web.xyz": 20.3
}
},
"2022-12-15": {
"total": 69,
"top": {
"blog.ari-web.xyz": 27.5,
"ari-web.xyz": 20.1,
"files.ari-web.xyz": 12.9
}
},
"2023-02-03": {
"total": 69,
"top": {
"blog.ari-web.xyz": 45.5,
"legacy.blog.ari-web.xyz": 9.1,
"ari-web.xyz": 6.1
}
},
"2023-02-06": {
"total": 82,
"top": {
"blog.ari-web.xyz": 49.1,
"legacy.blog.ari-web.xyz": 15.4,
"ari-web.xyz": 7.3
}
},
"2023-02-16": {
"total": 131,
"top": {
"blog.ari-web.xyz": 84.1,
"legacy.blog.ari-web.xyz": 17.2,
"ari-web.xyz": 12.5
}
},
"2023-04-04": {
"total": 116,
"top": {
"blog.ari-web.xyz": 31.4,
"user.ari-web.xyz": 29.8,
"ari-web.xyz": 21.4
}
},
"2023-10-29": {
"total": 141,
"top": {
"blog.ari-web.xyz": 117.8,
"ari-web.xyz": 11.5,
"files.ari-web.xyz": 6.6
}
},
"2024-01-10": {
"total": 687,
"top": {
"ari.lt": 456.5,
"blog.ari.lt": 192.8,
"legacy.blog.ari.lt": 12.2
}
},
"2024-01-16": {
"total": 941,
"top": {
"ari.lt": 648.4,
"blog.ari.lt": 246.4,
"legacy.blog.ari.lt": 14.6
}
},
"2024-01-29": {
"total": 464,
"top": {
"ari.lt": 355.1,
"blog.ari.lt": 69.5,
"files.ari.lt": 27.9
}
},
"2024-02-06": {
"total": 1024,
"top": {
"ari.lt": 595.1,
"files.ari.lt": 374.8,
"blog.ari.lt": 124.2
}
},
"2024-02-14": {
"total": 2048,
"top": {
"ari.lt": 869.9,
"files.ari.lt": 563.5,
"blog.ari.lt": 182
}
},
"2024-02-16": {
"total": 2144,
"top": {
"ari.lt": 919.1,
"files.ari.lt": 606.2,
"blog.ari.lt": 196.7
}
},
"2024-02-29": {
"total": 2512,
"top": {
"files.ari.lt": 1003.3,
"ari.lt": 514.9,
"blog.ari.lt": 128.3
}
},
"2024-03-17": {
"total": 3172,
"top": {
"files.ari.lt": 1228.0,
"ari.lt": 1126.4,
"blog.ari.lt": 244.4
}
},
"2024-03-29": {
"total": 820,
"top": {
"ari.lt": 500.7,
"files.ari.lt": 194.0,
"blog.ari.lt": 196.3
}
},
"2024-04-05": {
"total": 1512,
"top": {
"ari.lt": 775.5,
"files.ari.lt": 259.6,
"blog.ari.lt": 170.9
}
},
"2024-05-16": {
"total": 2148,
"top": {
"ari.lt": 1331.2,
"blog.ari.lt": 349.3,
"files.ari.lt": 228.6
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

BIN
badge.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -1,118 +0,0 @@
"use strict";
import TEST_OPTIONS from "./options.js";
function calculate_rarity() {
let test_div = document.getElementById("unique-test");
let score = [];
let exit = false;
Array.from(test_div.children).forEach((child) => {
if (exit) return;
let question_num = child.getAttribute("data-question");
let question_answer = null;
Array.from(child.children[1].children).forEach((answer) => {
if (
answer instanceof HTMLLabelElement ||
exit ||
question_answer !== null
)
return;
if (answer.checked) {
question_answer = parseFloat(
answer.getAttribute("data-rarity")
);
return;
}
});
if (question_answer === null) {
alert(`Unasnwered question: ${question_num}`);
exit = true;
return;
}
score.push(question_answer);
});
return score;
}
function display_score() {
let score = calculate_rarity();
let score_percent =
(score.reduce((partial, answer) => partial + answer, 0) /
score.length) *
100;
if (score.length === TEST_OPTIONS.length) {
let existing_answer_div = document.getElementById("score");
let answer_div = existing_answer_div
? existing_answer_div
: document.createElement("div");
answer_div.setAttribute("id", "score");
answer_div.onclick = () => {
answer_div.remove();
document.body.style.overflow = "initial";
};
let answer_h1 = document.createElement("h1");
answer_h1.innerText = `Your uniqueness% is: ${score_percent}%`;
answer_div.appendChild(answer_h1);
document.body.appendChild(answer_div);
document.body.style.overflow = "hidden";
}
}
function main() {
let test_div = document.getElementById("unique-test");
document.getElementById("unique-test-submit").onclick = () =>
display_score();
TEST_OPTIONS.forEach((qitem, qindex) => {
let question_div = document.createElement("div");
let question_title = document.createElement("h2");
let question_options = document.createElement("div");
question_div.setAttribute("data-question", qindex);
question_title.innerText = `#${qindex}: ${qitem["title"]}`;
qitem["options"].forEach((option, oindex) => {
let option_radio = document.createElement("input");
let option_label = document.createElement("label");
let radio_id = `${qindex}-${oindex}`;
let radio_options = {
type: "radio",
name: qindex,
id: radio_id,
"data-rarity": option["rarity"],
};
Object.keys(radio_options).forEach((attr) =>
option_radio.setAttribute(attr, radio_options[attr])
);
option_label.setAttribute("for", radio_id);
option_label.innerText = option["title"];
question_options.appendChild(option_radio);
question_options.appendChild(option_label);
});
question_div.appendChild(question_title);
question_div.appendChild(question_options);
test_div.appendChild(question_div);
});
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,204 +0,0 @@
"use strict";
function make_range(from, to) {
return (from + to) / 2;
}
function make_percent(percent) {
return (100 - percent) * 0.01;
}
function yes_no(percent) {
return [
{ title: "Yes", rarity: percent },
{ title: "No", rarity: 1 - percent },
];
}
/*
* Rarity is between 0 and 1, to make it
* more human readable use make_percent() function
* for example make_percent(10) would return 0.9
* as if a thing affects 10% of the population
* 90% would be untouched by average
*
* If an option is in a range, for example from
* 55% to 79% use the make_range() function, for example:
* make_percent(make_range(55, 79)) would be 0.67 (67%)
* The percent should be how common a thing is, not
* how rare
*
* For a yes/no question use yes_no() function passing
* it in a percent value
*/
const TEST_OPTIONS = [
{
title: "What is your eye colour?",
options: [
{ title: "Blue", rarity: make_percent(1) },
{ title: "Brown", rarity: make_percent(make_range(55, 79)) },
{ title: "Grey", rarity: make_percent(1) },
{ title: "Green", rarity: make_percent(2) },
{ title: "Hazel", rarity: make_percent(10) },
{ title: "Red/violet", rarity: make_percent(1) },
],
},
{
title: "What is your natural hair colour?",
options: [
{ title: "Black", rarity: make_percent(make_range(75, 85)) },
{ title: "Brown", rarity: make_percent(11) },
{ title: "Blond", rarity: make_percent(3) },
{ title: "White", rarity: make_percent(1) },
{ title: "Red", rarity: make_percent(1) },
],
},
{
title: "Are you a part of the LGBT community?",
options: yes_no(make_percent(make_range(1.2, 6.8))),
},
{
title: "What is your race?",
options: [
{ title: "White", rarity: make_percent(100 - 61.6) },
{ title: "Black", rarity: make_percent(16.72) },
{ title: "Hispanic", rarity: make_percent(8.42) },
{ title: "Asian", rarity: make_percent(59.76) },
{ title: "Other", rarity: make_percent(10.2) },
],
},
{
title: "Do you have an ASD?",
options: yes_no(make_percent(1)),
},
{
title: "What continent do you live in?",
options: [
{ title: "Asia", rarity: make_percent(59.54) },
{ title: "Africa", rarity: make_percent(17.2) },
{ title: "Europe", rarity: make_percent(9.59) },
{ title: "North America", rarity: make_percent(7.6) },
{ title: "South America", rarity: make_percent(5.53) },
{ title: "Australia", rarity: make_percent(0.55) },
{ title: "Antarctica", rarity: make_percent(0) }, // ???
],
},
{
title: "Do you have children?",
options: yes_no(make_percent(80)),
},
{
title: "Do you know more than one language?",
options: yes_no(make_percent(40)),
},
{
title: "Are you vegetarian?",
options: yes_no(make_percent(22)),
},
{
title: "Are you vegan?",
options: yes_no(make_percent(1)),
},
{
title: "Do you have depression?",
options: yes_no(make_percent(make_percent(3.8))),
},
{
title: "Do you have a job?",
options: yes_no(make_percent(make_percent(55.8))),
},
{
title: "Do you have an eating disorder?",
options: yes_no(make_percent(make_percent(9))),
},
{
title: "Are you left-handed?",
options: yes_no(make_percent(make_percent(10))),
},
{
title: "Do you have diabetes?",
options: yes_no(make_percent(make_percent(10))),
},
{
title: "Do you have social anxiety?",
options: yes_no(make_percent(make_percent(7.1))),
},
{
title: "Do you have asthma?",
options: yes_no(make_percent(make_percent(make_range(5, 10)))),
},
{
title: "Are you lactose intolerant?",
options: yes_no(make_percent(make_percent(68))),
},
{
title: "Are you fatherless?",
options: yes_no(make_percent(33)),
},
{
title: "Are you a virgin?",
options: yes_no(make_percent(make_range(0.3, 14))),
},
{
title: "Do you use social media?",
options: yes_no(make_percent(58.4)),
},
{
title: "Are you under 18?",
options: yes_no(make_percent(29.3)),
},
{
title: "Do you have dimples?",
options: yes_no(make_percent(make_range(20, 30))),
},
{
title: "Do you know how to code?",
options: yes_no(make_percent(0.5)),
},
{
title: "Do you live in a city?",
options: yes_no(make_percent(55)),
},
{
title: "Have you had COVID-19 in 2021",
options: yes_no(make_percent(43.9)),
},
{
title: "Do you have heart problems?",
options: yes_no(make_percent(1.72)),
},
{
title: "Do you have a chronic illness?",
options: yes_no(make_percent(95)),
},
{
title: "Do you have mental issues and/or disorders?",
options: yes_no(make_percent(10.7)),
},
{
title: "Do you have cancer?",
options: yes_no(make_percent(1.3)),
},
{
title: "Do you have tatoos?",
options: yes_no(make_percent(38)),
},
{
title: "Can you wiggle your ears?",
options: yes_no(make_percent(make_range(10, 20))),
},
{
title: "Can you wiggle your nose?",
options: yes_no(make_percent(5)),
},
{
title: "Do you have morton's toe?",
options: yes_no(make_percent(15)),
},
{
title: "Do you have hypermobile joints?",
options: yes_no(make_percent(make_range(10, 25))),
},
];
export default TEST_OPTIONS;

View file

@ -1,219 +0,0 @@
"use strict";
// Confetti.js source: https://www.cssscript.com/confetti-falling-animation/
let max_partics = 150; // set max confetti count
let partic_spd = 2; // set the particle animation speed
let confetti; // call to start confetti animation
let stop_confetti; // call to stop adding confetti
let rm_confetti; // call to stop the confetti animation and remove all confetti immediately
(function () {
confetti = start_confetti_inner;
stop_confetti = stop_confetti_inner;
rm_confetti = remove_confetti_inner;
let ctx, canvas;
let clrs = [
"DodgerBlue",
"OliveDrab",
"Gold",
"Pink",
"SlateBlue",
"LightBlue",
"Violet",
"PaleGreen",
"SteelBlue",
"SandyBrown",
"Chocolate",
"Crimson",
];
let confetti_on = false;
let anim_t = null;
let particles = [];
let wav_angle = 0;
function reset_particle(part, width, height) {
part.color = clrs[(Math.random() * clrs.length) | 0];
part.x = Math.random() * width;
part.y = Math.random() * height - height;
part.diameter = Math.random() * 10 + 5;
part.tilt = Math.random() * 10 - 10;
part.tiltAngleIncrement = Math.random() * 0.07 + 0.05;
part.tiltAngle = 0;
return part;
}
function stop_confetti_inner() {
confetti_on = false;
}
function remove_confetti_inner() {
stop_confetti();
setTimeout(() => canvas.remove(), 500);
particles = [];
}
function start_confetti_inner(text, textclr) {
let width = window.innerWidth;
let height = window.innerHeight;
window.req_animf = (function () {
return (
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (callback) {
return window.setTimeout(callback, 16.6666667);
}
);
})();
canvas = document.getElementById("c");
if (canvas === null) {
canvas = document.createElement("canvas");
canvas.setAttribute("id", "c");
canvas.setAttribute(
"style",
"display:block;z-index:999999;pointer-events:none;overflow-y:hidden;min-width:100%;min-height:100%;position:fixed;top:0;left:0;"
);
document.body.appendChild(canvas);
canvas.width = width;
canvas.height = height;
window.addEventListener(
"resize",
() => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
},
true
);
}
ctx = canvas.getContext("2d");
while (particles.length < max_partics)
particles.push(reset_particle({}, width, height));
confetti_on = true;
if (anim_t === null) {
(function anim() {
ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);
if (particles.length === 0) {
anim_t = null;
ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);
} else {
try {
upd_partics();
drw_partics();
anim_t = req_animf(anim);
ctx.textAlign = "center";
ctx.fillStyle = textclr;
ctx.font = "2em sans-serif";
ctx.fillText(text, canvas.width / 2, canvas.height / 2);
} catch (e) {
console.error(e);
alert(`\u{0001f389} ${text} \u{0001f389}`);
particles = [];
return stop_confetti();
}
}
})();
}
}
function drw_partics() {
let part, x;
for (let i = 0; i < particles.length; i++) {
part = particles[i];
ctx.beginPath();
ctx.lineWidth = part.diameter;
ctx.strokeStyle = part.color;
x = part.x + part.tilt;
ctx.moveTo(x + part.diameter / 2, part.y);
ctx.lineTo(x, part.y + part.tilt + part.diameter / 2);
ctx.stroke();
}
}
function upd_partics() {
let width = window.innerWidth;
let height = window.innerHeight;
let part;
wav_angle += 0.01;
for (let i = 0; i < particles.length; i++) {
part = particles[i];
if (!confetti_on && part.y < -15) part.y = height + 100;
else {
part.tiltAngle += part.tiltAngleIncrement;
part.x += Math.sin(wav_angle);
part.y +=
(Math.cos(wav_angle) + part.diameter + partic_spd) * 0.5;
part.tilt = Math.sin(part.tiltAngle) * 15;
}
if (part.x > width + 20 || part.x < -20 || part.y > height) {
if (confetti_on && particles.length <= max_partics)
reset_particle(part, width, height);
else {
particles.splice(i, 1);
i--;
}
}
}
}
})();
function human_num(n) {
let tmp_numr = NUMERICS[n - 1];
return `${n}${tmp_numr ? tmp_numr : NUMERICS[NUMERICS.length - 1]}`;
}
function main() {
let ctime = new Date();
if (
BIRTHDAY.getDate() == ctime.getDate() &&
BIRTHDAY.getMonth() == ctime.getMonth() &&
BIRTHDAY.getFullYear() != ctime.getFullYear() &&
(!("bday" in window.localStorage) ||
window.localStorage["bday"] != ctime.getFullYear())
) {
let bday = ctime.getFullYear() - BIRTHDAY.getFullYear();
confetti(
`happy ${human_num(bday)} birthday, ${SITE_NAME} !`,
"#f0f7ff"
);
setTimeout(() => {
stop_confetti();
rm_confetti();
}, 5000);
window.localStorage.setItem("bday", ctime.getFullYear());
}
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,192 +0,0 @@
"use strict";
const FORM_CHECKERS = {
android: (e, edata) => {
let data = Object.fromEntries(new FormData(e.target).entries());
function no_has_gh(str) {
return str.indexOf(data["gh-username"]) === -1;
}
if (!/^[0-9a-zA-Z]+$/.test(data["gh-username"]))
alert("Invalid github username");
else if (
edata["disallowed-android-versions"].includes(
data["and-version"].toLowerCase()
)
)
alert("Disallowed android version");
else if (data["ctree-url"])
if (no_has_gh(data["ctree-url"]))
alert(
"You have not provided any (valid) url from common trees"
);
else if (no_has_gh(data["dev-url"])) alert("No valid device url");
else if (data["err-url"].indexOf("pastebin.com") !== -1)
alert("Pastebin is not allowed");
else if (no_has_gh(data["kern-url"]))
alert("No valid kernel tree given");
else if (data["rom-url"].indexOf("github") === -1)
alert("No github url provided for the rom");
else if (no_has_gh(data["ven-url"]))
alert("No valid vendor url specified");
else return true;
return false;
},
};
function append_children(parent, ...children) {
for (let child of children) parent.appendChild(child);
}
function submit_btn() {
let submit = document.createElement("button");
submit.innerText = "Submit";
submit.id = "submit-button";
return submit;
}
function to_clipboard(text) {
if (window.clipboardData && window.clipboardData.setData) {
return window.clipboardData.setData("Text", text);
} else if (
document.queryCommandSupported &&
document.queryCommandSupported("copy")
) {
var textarea = document.createElement("textarea");
textarea.textContent = text;
textarea.style.position = "fixed";
document.body.appendChild(textarea);
textarea.select();
try {
return document.execCommand("copy");
} catch (ex) {
console.warn("Copy to clipboard failed.", ex);
return prompt("Copy to clipboard: Ctrl+C, Enter", text);
} finally {
document.body.removeChild(textarea);
}
}
}
function render_type(type, data) {
if (type.startsWith("%") || !(type in data)) {
document.body.innerHTML = "<h1>Not a valid type, not rendering</h1>";
setTimeout(() => (document.location = "."), 1000);
return;
}
document.body.innerHTML =
"<h1>Rendering form... (if this takes too long please see the dev console)</h1>";
let form = document.createElement("form");
form.id = "form";
for (let [key, value] of Object.entries(data[type])) {
let label = document.createElement("label");
label.innerText = key;
label.setAttribute("for", value.id);
let input = document.createElement(
value.textbox ? "textarea" : "input"
);
input.id = input.name = value.id;
input.placeholder = input.title = value.placeholder;
input.required = !value.optional;
append_children(form, input, label, document.createElement("br"));
}
form.appendChild(submit_btn());
document.body.innerHTML = "";
let title = document.createElement("h1");
title.innerText = `Error report form: ${type}`;
document.body.innerHTML = `${title.outerHTML}${form.outerHTML}`;
document.getElementById("form").addEventListener("submit", (e) => {
e.preventDefault();
let is_good = true;
if (type in FORM_CHECKERS)
is_good = FORM_CHECKERS[type](e, data[`%${type}`]);
if (is_good) {
let text = `Error submission form: ${type}
From: ${document.location}
`;
for (let [key, value] of new FormData(e.target).entries()) {
if (!value) continue;
text += `${
document.querySelector(`label[for="${key}"]`).innerText
}: ${value}\n`;
}
document.body.innerText = text;
document.body.onclick = () => {
to_clipboard(document.body.innerText);
alert("Copied to clipboard");
};
}
return false;
});
}
function render_full(data) {
document.body.innerHTML = "<h1>Pick a type (no `t` GET param found)</h1>";
let label = document.createElement("label");
label.setAttribute("for", "types");
label.innerText = "Pick the error report type:";
let select = document.createElement("select");
select.name = "types";
select.id = "types";
let submit = submit_btn();
submit.onclick = () => {
let val = select.value;
if (!val) alert("Not a valid type :(");
render_type(val, data);
};
for (let key in data) {
if (key.startsWith("%")) continue;
let option = document.createElement("option");
option.value = key;
option.innerText = key;
select.appendChild(option);
}
append_children(document.body, label, select, submit);
}
function main() {
let type = new URL(document.location).searchParams.get("t");
fetch("/api/errtemplate.json")
.then((response) => {
return response.json();
})
.then((data) => {
if (type) render_type(type, data);
else render_full(data);
})
.catch((err) => {
alert(`Error, please report it to ${document.domain}/git: ${err}`);
});
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,46 +0,0 @@
"use strict";
const BLOG_SITE = "https://blog.ari.lt/";
const COMMENT_SITE = "https://user.ari.lt/";
const FETCH_BLOG_POSTS = () =>
fetch("https://blog.ari.lt/recents.json").then((r) => r.json());
const FETCH_COMMENTS = () => {
return fetch("https://server.ari.lt/total")
.then((r) => r.text())
.then((t) => {
let total = parseInt(t);
let fetch_from = total - 14;
if (fetch_from < 0) fetch_from = total;
return fetch(
`https://server.ari.lt/${fetch_from}/${total}`
).then((r) => r.json());
});
};
const FETCH_PAGES = () => fetch("/api/pages.json").then((r) => r.json());
// let dt = new Date();
// const BIRTHDAY = new Date(dt.getFullYear() - 2, dt.getMonth(), dt.getDate(), 0, 0, 0, 0);
const BIRTHDAY = new Date(2020, 9, 17, 0, 0, 0, 0); // ari-web start : 2020/10/17
const NUMERICS = ["st", "nd", "rd", "th"];
const SITE_NAME = "ari-web";
const EXTRA_PAGES = [
"/mr",
"/etc",
"/page/blog",
"/data",
"/gh",
"/overlay",
"/dotfiles",
"/tdotfiles",
"/git",
"/user",
"/btc",
];
const DO_FETCH = true;

View file

@ -1,52 +0,0 @@
"use strict";
function main() {
document.getElementById("export-button").addEventListener("click", () => {
if (!window.localStorage.length) {
alert("No data to export");
return;
}
document.getElementById("export").value = btoa(
JSON.stringify(window.localStorage)
);
});
document.getElementById("import-button").addEventListener("click", () => {
let import_data = document.getElementById("import").value;
if (!import_data) {
alert("No import data provided");
return;
}
try {
let data = JSON.parse(atob(import_data));
if (!Object.keys(data).length) {
alert("Cannot import no data");
return;
}
if (!confirm("Are you sure you want to import this data?")) return;
if (
confirm(
"Do you want to overwrite your data fully (OK) or overwrite the parts that are in the data (CANCEL)"
)
)
window.localStorage.clear();
Object.keys(data).forEach((k) => localStorage.setItem(k, data[k]));
alert("Data imported");
} catch (e) {
alert(`Invalid data provided: ${e}`);
return;
}
window.location.href = "/";
});
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,99 +0,0 @@
"use strict";
/* TODO comments ( us.ari.lt ) */
function resize_term() {
document.getElementById("term-wrap").style.width = `${
document.querySelector("article").offsetWidth
}px`;
}
async function main() {
window.addEventListener("resize", resize_term);
resize_term();
let blog = document.getElementById("blog-posts");
// let comment = document.getElementById("latest-comments");
let more = document.getElementById("discover");
let site = document.getElementById("site");
site.innerText = SITE_NAME;
site.onclick = () => {
if (window.term === undefined) window.term = 0;
if (window.getSelection) {
if (window.getSelection().empty) window.getSelection().empty();
else if (window.getSelection().removeAllRanges)
window.getSelection().removeAllRanges();
} else if (document.selection) document.selection.empty();
site.innerText += ` ${++window.term} :O`;
setTimeout(() => (site.innerText = SITE_NAME), 100);
loadterm();
};
document.getElementById("blog-link").href = BLOG_SITE;
document.getElementById("comments-link").href = COMMENT_SITE;
if (!DO_FETCH) return;
FETCH_BLOG_POSTS().then((j) => {
blog.innerText = "";
Object.entries(j).forEach((post) => {
let id = post[0];
post = post[1];
mkelem(
"li",
[
mkelem(
"a",
[
post["title"],
" -- ",
new Date(post["created"] * 1000).toUTCString(),
],
null,
{ href: `${BLOG_SITE}/b/${id}` },
),
mkelem("pre", linkify(post["content"]).concat([" ..."])),
],
blog,
);
});
});
// FETCH_COMMENTS().then((j) => {
// comment.innerText = "";
// Object.entries(j)
// .reverse()
// .forEach((post) => {
// let id = post[0];
// post = post[1];
// mkelem(
// "li",
// [
// mkelem("a", `#${id} by ${post[0]}`, null, {
// href: `${COMMENT_SITE}/#${id}`,
// }),
// mkelem("pre", linkify(post[1], COMMENT_SITE)),
// ],
// comment,
// );
// });
// });
FETCH_PAGES().then((j) => {
more.innerText = "";
for (let page of j.concat(EXTRA_PAGES))
mkelem("li", mkelem("a", page, null, { href: page }), more);
});
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,16 +0,0 @@
"use strict";
var scroll_element = 0;
const scroll_elements = document.getElementsByClassName("content");
function scrollDown() {
++scroll_element;
let elem = scroll_elements[scroll_element];
elem.scrollIntoView({ behavior: "smooth" });
if (elem) elem.scrollIntoView(true);
}
function scrollUp() {
document.body.scrollTop = document.documentElement.scrollTop = 0;
scroll_element = 0;
}

View file

@ -1,55 +0,0 @@
"use strict";
var c = document.getElementById("matrix");
var ctx = c.getContext("2d");
//chinese characters - taken from the unicode charset
var chinese =
"田由甲申甴电甶男甸甹町画甼甽甾甿畀畁畂畃畄畅畆畇畈畉畊畋界畍畎畏畐畑 1234567890x_+=*&{}[]()%$";
//converting the string into an array of single characters
chinese = chinese.split("");
var font_size = 10;
var columns = c.width; //number of columns for the rain
//an array of drops - one per column
var drops = [];
//x below is the x coordinate
//1 = y co-ordinate of the drop(same for every drop initially)
for (var x = 0; x < columns; x++) drops[x] = 1;
function resize() {
c.height = window.innerHeight;
c.width = window.innerWidth;
}
resize();
//drawing the characters
function draw() {
//Black BG for the canvas
//translucent BG to show trail
ctx.fillStyle = "rgba(0, 0, 0, 0.08)";
ctx.fillRect(0, 0, c.width, c.height);
ctx.fillStyle = "#0F0"; //green text
ctx.font = font_size + "px arial";
//looping over drops
for (var i = 0; i < drops.length; i++) {
//a random chinese character to print
var text = chinese[Math.floor(Math.random() * chinese.length)];
// x = i*font_size, y = value of drops[i]*font_size
ctx.fillText(text, i * font_size, drops[i] * font_size);
//sending the drop back to the top randomly after it has crossed the screen
//adding a randomness to the reset to make the drops scattered on the Y axis
if (drops[i] * font_size > c.height && Math.random() > 0.975)
drops[i] = 0;
//incrementing Y coordinate
drops[i]++;
}
}
window.addEventListener("resize", resize);
setInterval(draw, 10);

View file

@ -1,64 +0,0 @@
"use strict";
function cmd_help() {
let ul = document.createElement("ul");
Object.keys(window)
.filter((name) => name.startsWith("cmd_"))
.map((name) => name.slice(4))
.forEach((cmd) => mkelem("li", cmd, ul));
return [
"congratulations, you are now in the ari-web terminal\nheres some commands :\n\n",
ul,
];
}
function cmd_exit(_, hist, term_wrap) {
term_wrap.style.display = "none";
hist.innerHTML = "";
return [];
}
function cmd_reboot() {
window.location.reload();
return ["rebooting ..."];
}
function cmd_clear(_, hist) {
hist.innerHTML = "";
return [];
}
function cmd_echo(args) {
return [args];
}
function cmd_webfetch() {
let head = `user@${SITE_NAME}`;
return [
`\`8.\`888b ,8' ${head}
\`8.\`888b ,8' ${"-".repeat(head.length)}
\`8.\`888b ,8' OS: WebOS
\`8.\`888b .b ,8' Kernel: Wkernel 1.0
\`8.\`888b 88b ,8' Shell: Wsh
\`8.\`888b .\`888b,8' Terminal: HTML
\`8.\`888b8.\`8888' CPU: ${SITE_NAME[0].toUpperCase()}${SITE_NAME.slice(
1
)} web cpu (1) @ 1GHz
\`8.\`888\`8.\`88' Memory: 2 B / 8B
\`8.\`8' \`8,\`' Init: WebRC
\`8.\` \`8' Packages: ${
document.scripts.length + document.styleSheets.length + 1
} (document)`,
];
}
function cmd_rand() {
return ["" + Math.random() * 11e10];
}
function cmd_date() {
return new Date().toString();
}

View file

@ -1,98 +0,0 @@
"use strict";
function loadterm() {
if (window.term >= 3) {
document.getElementById("term-wrap").style.display = "";
document.getElementById("term-input").focus();
window.term = 0;
}
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function evaluate_command(command, output, hist, term_wrap) {
let cmd = await command.split(/ (.+)/);
if (cmd.lnegth >= 3) await cmd.pop();
let cmd_fn = window[`cmd_${cmd[0]}`];
if (!cmd_fn) {
output.innerText = `'${cmd[0]}' is not a valid command`;
return;
}
for (let elem of await cmd_fn(
cmd.length > 1 ? cmd[1] : "",
hist,
term_wrap
)) {
switch (elem.constructor) {
case String:
for (let c of elem) {
let last = output.childNodes[output.childNodes.length - 1];
if (last instanceof Text) last.textContent += c;
else await output.appendChild(document.createTextNode(c));
await sleep(6);
}
break;
default: {
let load = document.createTextNode("...");
await output.appendChild(load);
await sleep(24);
load.remove();
await output.appendChild(elem);
}
}
}
}
async function run_command(hist, input, input_wrap, term_wrap) {
let hist_wrap = document.createElement("div");
let hist_item = input_wrap.cloneNode(true);
hist_item.removeAttribute("id");
hist_item.children[0].removeAttribute("id");
hist_item.children[0].disabled = true;
let output = document.createElement("pre");
await hist_wrap.appendChild(hist_item);
hist_wrap.appendChild(output);
await hist.appendChild(hist_wrap);
new ResizeObserver((entries) => entries[0].target.scrollIntoView()).observe(
output
);
input.blur();
input_wrap.style.display = "none";
await evaluate_command(input.value, output, hist, term_wrap);
input.value = "";
input_wrap.style.display = "";
await input.focus();
await input.scrollIntoView();
}
function main() {
let term_wrap = document.getElementById("term-wrap");
let input = document.getElementById("term-input");
let hist = document.getElementById("term-hist");
let input_wrap = document.getElementById("input-wrap");
input.onkeypress = (e) => {
if (
(e.keyCode ? e.keyCode : e.which) === 13 &&
(input.value = input.value.trim())
)
run_command(hist, input, input_wrap, term_wrap);
};
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,20 +0,0 @@
"use strict";
export var tty_clrs = {
black: { rgb: [0, 0, 0], mod: "0" },
red: { rgb: [170, 0, 0], mod: "1" },
green: { rgb: [0, 170, 0], mod: "2" },
brown: { rgb: [170, 85, 0], mod: "3" },
blue: { rgb: [0, 0, 170], mod: "4" },
magenta: { rgb: [170, 0, 170], mod: "5" },
cyan: { rgb: [0, 170, 170], mod: "6" },
light_gray: { rgb: [170, 170, 170], mod: "7" },
gray: { rgb: [85, 85, 85], mod: "8" },
bold_red: { rgb: [255, 85, 85], mod: "9" },
bold_green: { rgb: [85, 255, 85], mod: "A" },
bold_yellow: { rgb: [255, 255, 85], mod: "B" },
bold_blue: { rgb: [85, 85, 255], mod: "C" },
bold_magenta: { rgb: [255, 85, 255], mod: "D" },
bold_cyan: { rgb: [85, 255, 255], mod: "E" },
bold_white: { rgb: [255, 255, 255], mod: "F" },
};

View file

@ -1,34 +0,0 @@
"use strict";
import {
clear_states,
generate_theme,
export_element_as_file,
copy_elem_to_clip,
} from "./menu.js";
const ONCLICK_EVENTS = {
"clear-states": () => {
clear_states();
window.location.reload();
},
"generate-theme": generate_theme,
"export-file": export_element_as_file,
copy: copy_elem_to_clip,
};
function main() {
for (let id in ONCLICK_EVENTS)
document.getElementById(id).addEventListener("click", async () => {
ONCLICK_EVENTS[id]();
let self_elem = document.getElementById(id);
let old_text = self_elem.innerText;
self_elem.innerText = "Done!";
await new Promise((r) => setTimeout(r, 800));
self_elem.innerText = old_text;
});
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,166 +0,0 @@
"use strict";
import { gp, rgb_to_hex } from "../utils/index.js";
import { tty_clrs } from "./clrs.js";
const CLRS = ["r", "g", "b"];
function new_colourpicker(id, clr_map) {
let div = document.createElement("div");
div.id = id;
CLRS.forEach((item, index) => {
let clr = document.createElement("input");
clr.type = "range";
clr.min = 0;
clr.max = 255;
clr.name = item;
clr.value = clr_map[index];
clr.addEventListener("input", () => update_colour(id));
div.appendChild(clr);
});
return div;
}
function update_colour(id) {
let picker = document.getElementById(id);
let gc = (value) => Number(picker.children[value].value); // get colour
let rgb = [gc("r"), gc("g"), gc("b")];
picker.style.backgroundColor = `rgb(${rgb.join(",")})`;
localStorage.setItem(id, JSON.stringify({ rgb: rgb }));
tty_clrs[id].rgb = rgb;
generate_theme();
}
function load_from_localtorage() {
let keys = Object.keys(tty_clrs);
Object.keys(localStorage).forEach((key) => {
if (keys.includes(key))
tty_clrs[key].rgb = JSON.parse(localStorage.getItem(key))[
"rgb"
].map(Number);
});
}
export function generate_theme(query = "#theme-output") {
document.body.style.backgroundColor = `rgb(${tty_clrs["black"].rgb.join(
","
)})`;
document.body.style.color = `rgb(${tty_clrs["light_gray"].rgb.join(",")})`;
for (let header of document.querySelectorAll("h1, h2:first-of-type"))
header.style.color = `rgb(${tty_clrs["bold_white"].rgb.join(",")})`;
let elem = document.querySelector(query);
if (!elem) throw ReferenceError(`${query} did not match any results`);
let text = `# Theme generated using: ${window.location.href}
# Installation: Just add these lines to your ~/.bashrc
__tty_theme() {
[ "$TERM" = 'linux' ] || return # Only run in a TTY
`;
for (let key in tty_clrs) {
let key_rgb = tty_clrs[key].rgb;
let key_hex = rgb_to_hex(key_rgb);
let rgb_str = `rgb(${key_rgb.join(", ")})`;
text += ` printf "\\e]P${tty_clrs[key].mod}${key_hex}" # ${key}${gp(
key,
14
)}${rgb_str}${gp(rgb_str, 20)}#${key_hex}\n`;
}
text += `
clear # To fix the background
}
__tty_theme
`;
elem.innerText = text;
}
export function export_element_as_file(query = "#theme-output") {
generate_theme(query);
let blob = new Blob([document.querySelector(query).innerText], {
type: "text/plain",
});
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveBlob(blob, "ari_web_theme.bash");
else {
let elem = window.document.createElement("a");
elem.href = window.URL.createObjectURL(blob);
elem.download = "ari_web_theme.bash";
document.body.appendChild(elem);
elem.click();
document.body.removeChild(elem);
}
}
export function clear_states() {
Object.keys(localStorage).forEach((key) => {
if (Object.keys(tty_clrs).includes(key)) localStorage.removeItem(key);
});
}
export function copy_elem_to_clip(query = "#theme-output") {
let elem = document.querySelector(query);
if (!elem) throw ReferenceError(`Query '${query}' did not return anything`);
let text_area = document.createElement("textarea");
text_area.style.position = "fixed";
text_area.style.top = 0;
text_area.style.left = 0;
text_area.style.width = "2em";
text_area.style.height = "2em";
text_area.style.padding = 0;
text_area.style.border = "none";
text_area.style.outline = "none";
text_area.style.boxShadow = "none";
text_area.style.background = "transparent";
text_area.value = elem.innerText;
document.body.appendChild(text_area);
text_area.focus();
text_area.select();
document.execCommand("copy");
document.body.removeChild(text_area);
}
function main() {
load_from_localtorage();
let menu = document.getElementById("menu");
for (let key in tty_clrs) {
let [r, g, b] = tty_clrs[key].rgb;
let picker = new_colourpicker(key, [r, g, b]);
picker.style.backgroundColor = `rgb(${r}, ${g}, ${b})`;
menu.appendChild(picker);
}
generate_theme();
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,95 +0,0 @@
"use strict";
import { tty_clrs } from "./clrs.js";
import { rgb_to_hex } from "../utils/index.js";
const HEX_REGEX = /^#[0-9A-F]{6}$/i;
function change_clr(id) {
let box = document.getElementById(`${id}-box`);
let out = document.getElementById(id);
if (!box.value || !box.value.match(HEX_REGEX)) {
out.style.backgroundColor = document.body.style.backgroundColor;
return;
}
out.style.backgroundColor = box.value;
}
function hex_to_rgb(hex) {
if (hex.length != 7) throw SyntaxError("Invalid hex");
let rgb_hex = hex.substring(1).match(/.{1,2}/g);
return [
parseInt(rgb_hex[0], 16),
parseInt(rgb_hex[1], 16),
parseInt(rgb_hex[2], 16),
];
}
function commit(fields) {
Array.from(fields.children).forEach((item) => {
let clr_name = item.getAttribute("data-clr-name");
let clr = item.children[0].value;
if (clr_name && !clr && clr_name in localStorage)
localStorage.removeItem(clr_name);
if (!clr || !clr.match(HEX_REGEX)) return;
localStorage.setItem(
clr_name,
JSON.stringify({ rgb: hex_to_rgb(clr) })
);
});
alert("Settings saved!");
}
function load_local_storage() {
let keys = Object.keys(tty_clrs);
Object.keys(localStorage).forEach((key) => {
if (keys.includes(key)) {
let box = document.getElementById(`${key}-box`);
if (!box) return;
box.value = `#${rgb_to_hex(
JSON.parse(localStorage.getItem(key))["rgb"].map(Number)
)}`;
box.onkeyup();
}
});
}
function main() {
let clr_fields = document.getElementById("clr-fields");
document.getElementById("commit").onclick = () => commit(clr_fields);
for (const key in tty_clrs) {
let entry = document.createElement("li");
entry.setAttribute("data-clr-name", key);
let entry_box = document.createElement("input");
entry_box.type = "text";
entry_box.id = `${key}-box`;
entry_box.placeholder = `#${rgb_to_hex(tty_clrs[key].rgb)}`;
let entry_test = document.createElement("span");
entry_test.id = key;
entry_test.innerText = `Test: ${key}`;
entry_box.onkeyup = () => change_clr(key);
entry.appendChild(entry_box);
entry.appendChild(entry_test);
clr_fields.appendChild(entry);
}
load_local_storage();
}
document.addEventListener("DOMContentLoaded", main);

View file

@ -1,27 +0,0 @@
"use strict";
function mkelem(elem, content, parent, attrs) {
let e = document.createElement(elem);
if (attrs) Object.keys(attrs).forEach((k) => e.setAttribute(k, attrs[k]));
switch (content.constructor) {
case String:
e.innerText = content;
break;
case Array:
for (let c of content)
e.appendChild(
c.constructor === String ? document.createTextNode(c) : c
);
break;
default:
e.appendChild(content);
break;
}
parent?.appendChild(e);
return e;
}

View file

@ -1,21 +0,0 @@
"use strict";
// Get padding
export function gp(str, pad) {
let ammount = pad - str.length;
if (ammount <= 0) return "";
return " ".repeat(ammount);
}
export function component_to_hex(c) {
let hex = c.toString(16);
return hex.length === 1 ? "0" + hex : hex;
}
export function rgb_to_hex(rgb) {
let hex = "";
rgb.forEach((item) => (hex += component_to_hex(item)));
return hex;
}

View file

@ -1,9 +0,0 @@
* {
font-family: sans-serif;
}
body {
margin: auto;
max-width: 1200px;
padding: 4em;
}

View file

@ -1,128 +0,0 @@
*,
*::before,
*::after {
background-color: blue;
color: yellow;
text-shadow: 0px 0px 16px black;
font-weight: bold;
scrollbar-width: none;
-ms-overflow-style: none;
-webkit-box-sizing: border-box;
box-sizing: border-box;
word-wrap: break-word;
/* word-break: break-all; */
scroll-behavior: smooth;
}
::-webkit-scrollbar {
display: none;
}
code,
code *,
pre,
pre * {
white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
}
body {
margin: auto;
padding: 2rem;
min-height: 100vh;
max-width: 1500px;
text-rendering: optimizeSpeed;
display: flex;
flex-direction: column;
}
h1 {
text-align: center;
margin: 1em;
font-size: 2em;
background-color: green;
}
marquee {
background-color: green;
}
li {
margin: 0.5em;
}
code {
white-space: pre-wrap !important;
}
p {
font-size: 1.3em;
}
.center {
text-align: center;
}
.split {
display: grid;
grid-template-columns: auto 40%;
}
.split div:first-child {
margin-left: 4em;
margin-right: 4em;
}
a {
color: pink;
font-size: 1.3em;
}
li {
list-style-type: square;
}
h2,
h2 * {
text-align: center;
background-color: crimson;
}
footer {
margin-top: auto;
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
-webkit-animation-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
-webkit-animation-iteration-count: 1 !important;
animation-iteration-count: 1 !important;
-webkit-transition-duration: 0.01ms !important;
-o-transition-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
@media (prefers-contrast: more) {
*,
*::before,
*::after {
background-color: black !important;
color: white !important;
}
}

View file

@ -1,90 +0,0 @@
*,
*::before,
*::after {
background-color: #181818;
color: whitesmoke;
font-family: sans-serif;
word-wrap: break-word;
word-break: break-all;
}
body {
padding: 2em;
margin: auto;
max-width: 1000px;
}
h1,
h2:not(div[data-question] > h2) {
text-align: center;
}
div[data-question] h2 {
margin: 0.3em 0.1em 0.2em;
}
header {
margin: 1em;
}
input {
margin: initial;
padding: initial;
}
button {
margin: 1em;
width: 30%;
padding: 1em;
border-color: transparent;
border-radius: 3px;
background-color: #202020;
}
button:hover,
button:focus {
cursor: pointer;
background-color: #222222;
}
p {
padding: 1em;
}
a {
font-weight: bold;
}
a:hover,
a:focus {
color: ghostwhite;
}
input {
margin: 0 0.5em 0.1em;
}
#score {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #282828aa;
z-index: 2;
cursor: pointer;
}
#score h1 {
background-color: initial;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
margin: 0;
}

View file

@ -1,85 +0,0 @@
*,
*::before,
*::after {
background-color: #181818;
color: whitesmoke;
font-family: sans-serif;
}
body {
max-width: 1200px;
margin: auto;
padding: 4em;
}
h1,
h2 {
margin-bottom: 0.7em;
text-align: center;
}
#types {
margin-left: 1em;
}
#types,
label[for="types"] {
font-weight: bold;
margin-top: 2em;
}
#submit-button {
display: block;
margin: 1em;
width: 20%;
border: none;
padding: 0.5em;
background-color: rgba(0, 0, 0, 0.3);
transition: background-color 0.4s ease-in-out;
}
#submit-button:focus,
#submit-button:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.8);
transition: background-color 0.4s ease-in-out;
}
label {
margin-left: 1em;
}
form * {
margin-bottom: 0.5em;
}
textarea {
resize: none;
height: 10em;
}
textarea,
input {
padding: 0.3em;
width: 60%;
}
@media screen and (max-width: 800px) {
form * {
display: block;
width: 100%;
}
label::after {
content: "^";
}
body {
padding: 2em;
}
#submit-button {
width: 100%;
margin: 0;
}
}

View file

@ -1,19 +0,0 @@
body {
line-height: 1.5;
background-color: #181818;
font-family: sans-serif;
color: whitesmoke;
padding: 2em;
}
main {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
}
p {
margin-top: 1em;
}

View file

@ -1,69 +0,0 @@
*,
::after,
::before {
margin: 0;
padding: 0;
-webkit-box-sizing: border-box;
box-sizing: border-box;
scroll-behavior: smooth;
color-scheme: dark;
}
body {
-ms-overflow-style: none;
scrollbar-width: none;
}
body::-webkit-scrollbar {
display: none;
}
ol[role="list"],
ul[role="list"] {
list-style: none;
}
body {
min-height: 100vh;
text-rendering: optimizeSpeed;
line-height: 1.5;
}
img,
picture {
max-width: 100%;
display: block;
}
button,
input,
select,
textarea {
font: inherit;
}
label {
cursor: pointer;
}
@media (prefers-reduced-motion: reduce) {
*,
::after,
::before {
scroll-behavior: auto;
-webkit-animation-duration: 0s !important;
animation-duration: 0s !important;
-webkit-animation-iteration-count: 1 !important;
animation-iteration-count: 1 !important;
-webkit-transition-duration: 0s !important;
-o-transition-duration: 0s !important;
transition-duration: 0s !important;
scroll-behavior: auto !important;
}
}

View file

@ -1,10 +0,0 @@
$ok_colour: #0fd30f;
$warn_colour: #ffff00;
$error_colour: #ff0000;
$bg_colour: #070707;
$default_content_colour: #ffffff;
$boot_header_colour: #9acd32;
$font_default: monospace;
$boot_ver: "1.0";
$shell_colour: $ok_colour;
$shell_font_size: 1.7em;

View file

@ -1,3 +0,0 @@
$default-font: sans-serif;
$bg: black;
$default-font-colour: white;

View file

@ -1,84 +0,0 @@
@import "../config/_main.scss";
$bg1: lighten($bg_colour, 10%);
$bg2: lighten($bg1, 10%);
$bg3: lighten($bg2, 10%);
.editor {
position: fixed;
display: flex;
justify-content: center;
padding: 5em;
z-index: 999999;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 2em;
background-color: $bg1;
}
.editor textarea {
width: 50%;
height: 100%;
padding: 1em;
resize: none;
white-space: pre;
overflow-wrap: normal;
overflow: scroll;
outline: none;
border: none;
background-color: $bg2;
margin-right: 4em;
margin-left: 4em;
font-size: 1.3em;
}
.editor .editor-buttons {
width: 8%;
}
.editor .editor-buttons button {
display: block;
padding: 1em;
margin-bottom: 0.5em;
width: 100%;
border: none;
font-weight: bold;
background-color: $bg2;
}
.editor .editor-buttons button:hover,
.editor .editor-buttons button:focus {
background-color: $bg3;
cursor: pointer;
}
.editor h1 {
margin-bottom: 1em;
text-align: center;
width: 1ch;
word-wrap: break-word;
word-break: break-all;
}

View file

@ -1,56 +0,0 @@
:root {
--switch-fg: #f9f6e8;
--switch-bg-inactive: #666c7f;
--switch-bg-active: #87afaf;
}
*,
*::before,
*::after {
background-color: #2b2e36;
color: #f9f6e8;
font-family: sans-serif;
}
label:not(label[for]) {
float: right;
padding: 1em;
}
body {
padding: 1em;
margin: auto;
max-width: 1000px;
min-height: 100vh;
}
.switch {
padding: 1em;
}
.content *, .content {
display: block
}
#pages {
display: grid;
height: 100%;
grid-template-rows: auto auto;
grid-gap: 1em;
align-items: center;
}
#pages div {
height: 100%;
padding: 4em;
}
#pages div h2 {
text-align: center;
}
div .disabled {
z-index: 9999;
background-color: rgba(0, 0, 0, 0.5);
}

View file

@ -1,72 +0,0 @@
/* :root {
--switch-fg: #f9f6e8;
--switch-bg-inactive: #666c7f;
--switch-bg-active: #87afaf;
} */
*,
*::before,
*::after {
background-color: #2b2e36;
color: #f9f6e8;
font-family: sans-serif;
}
label:not(label[for]) {
float: right;
padding: 1em;
}
body {
padding: 1em;
margin: auto;
max-width: 1000px;
height: 100vh;
}
/* .switch {
padding: 1em;
} */
.content *,
.content {
display: block;
}
#pages {
display: grid;
height: 100%;
grid-template-rows: auto auto;
grid-gap: 1em;
align-items: center;
}
#pages > div {
height: 100%;
padding: 4em;
}
#pages * h2 {
text-align: center;
}
textarea {
width: 100%;
height: 50%;
margin: 1em;
padding: 1em;
resize: none;
}
button {
padding: 0.5em;
background-color: #666c7f;
border-color: transparent;
cursor: pointer;
transition: background-color 0.2s ease-in-out;
}
button:hover, button:focus {
background-color: #87afaf;
}

View file

@ -1,37 +0,0 @@
@import "../config/_main.scss";
:root {
color-scheme: dark;
}
*, *::before, *::after {
-webkit-box-sizing: border-box;
box-sizing: border-box;
font-family: $font_default;
color: $default_content_colour;
padding: 0;
margin: 0;
background-color: $bg_colour;
margin-bottom: 2em;
}
.iframe {
width: 50%;
min-width: 300px;
max-width: 1000px;
}
.upload * {
font-weight: bold;
}
.upload button {
padding: 0.3em;
}
.upload button[disabled] {
color: darkgray;
}

View file

@ -1,132 +0,0 @@
:root {
--bg: #121212;
--bg1: #101010;
--bg2: #424242;
--bg3: #151515;
--fg: #ffd700;
--fg1: #f9a602;
}
*,
*::before,
*::after {
font-family: sans-serif;
background-color: var(--bg);
}
pre {
padding: 0.5em;
margin: 0.2em;
}
pre,
pre * {
background-color: var(--bg1);
}
main li,
main li *,
pre {
white-space: pre-wrap;
}
main li,
header li {
margin-bottom: 0.5em;
}
.mobile-only {
display: none;
}
main {
display: -ms-grid;
display: grid;
-ms-grid-columns: 2fr 2.5em 1fr;
grid-template-columns: 2fr 1fr;
grid-gap: 2.5em;
}
body {
margin: auto;
max-width: 1450px;
padding: 3em;
}
h2 {
margin-bottom: 0.5em;
margin-top: 1em;
}
h1 > span {
color: var(--fg1);
cursor: pointer;
position: relative;
}
h1 > span::before {
content: "click me";
position: absolute;
top: -1.5ch;
background-color: transparent;
color: var(--bg2);
font-size: 0.5em;
letter-spacing: 0.5ch;
}
h1::-moz-selection,
h1 *::-moz-selection {
display: none;
}
h1::-moz-selection,
h1 *::-moz-selection {
display: none;
}
h1::selection,
h1 *::selection {
display: none;
}
a {
color: var(--fg);
text-decoration: none;
}
a:hover,
a:focus {
text-decoration: underline;
}
@media only screen and (max-width: 830px) {
.mobile-only {
display: block;
}
nav > ul {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-ms-flex-pack: distribute;
justify-content: space-around;
margin-top: 1em;
}
nav > ul > li {
list-style: none;
}
main {
display: block;
}
h1 {
text-align: center;
}
}

View file

@ -1,47 +0,0 @@
*,
*::before,
*::after {
color: whitesmoke;
background-color: black;
line-height: 1.5;
font-family: sans-serif;
}
li {
padding: 0.2em;
}
*:not(h1) {
font-size: 1.08em;
}
ul {
margin: 1em;
}
h1 {
text-align: center;
font-size: 2em;
}
body {
max-width: 1200px;
margin: auto;
padding: 2em;
}
a {
color: #b1b4c0;
text-decoration: none;
}
a:focus,
a:hover {
text-decoration: underline;
}
blockquote,
blockquote * {
line-height: 1;
text-align: center;
}

View file

@ -1,25 +0,0 @@
:root {
--ns-bg: #af5f5f;
--ns-fg: #262220;
}
*[ns],
*[nsb],
*[nsb] *,
*[ns] * {
background-color: var(--ns-bg);
color: var(--ns-fg);
font-weight: bold;
line-height: 1.5;
}
*[ns] {
padding: 0.2em;
display: inline;
}
*[nsb] {
display: block;
text-align: center;
padding: 2em;
}

View file

@ -1,50 +0,0 @@
@import "../config/_novpn.scss";
* {
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
color: $default-font-colour;
font-family: $default-font;
scroll-behavior: smooth;
}
html,
body {
width: 100%;
height: 100%;
margin: 0;
}
#matrix {
position: fixed;
display: block;
width: 100%;
height: 100%;
border-width: 1px;
border-style: solid;
border-color: $bg;
background-color: $bg;
z-index: -1;
overflow: hidden;
}
.content {
position: sticky;
display: block;
height: 100%;
}
.page-intro {
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}

View file

@ -1,41 +0,0 @@
#term-wrap {
display: flex;
flex-direction: column;
position: fixed;
bottom: 1em;
padding: 1em;
max-height: 50%;
min-height: 30%;
overflow-y: scroll;
box-shadow: 0 0 100px 40px var(--bg1);
}
#term-wrap,
#term-wrap > div,
#term-hist,
#term-hist > div,
#term-hist > div > div {
background-color: var(--bg3);
}
#term-hist {
flex: 1;
}
#term-wrap:nth-child(2) {
flex: 1;
}
#term-hist li {
list-style-position: inside;
}
.cmd {
width: 80%;
border: none;
outline: none;
margin-left: 0.5ch;
margin-top: 0.5em;
background-color: transparent;
padding: 0.1em;
}

View file

@ -1,20 +0,0 @@
span {
color: #7ed44c;
font-weight: bold;
}
body {
padding: 2em;
margin: auto;
max-width: 1100px;
min-height: 100vh;
text-rendering: optimizeSpeed;
}
h1 {
text-align: center;
}
i {
color: lightgray;
}

View file

@ -1,84 +0,0 @@
:root {
--switch-fg: #ffffff;
--switch-bg-active: #2196f3;
--switch-bg-inactive: #cccccc;
--switch-transision-time: 0.2s;
--switch-width: 60px;
--switch-height: 34px;
--switch-slider-width: 26px;
--switch-slider-height: var(--switch-slider-width);
--switch-slider-left: 4px;
--switch-slider-bottom: var(--switch-slider-left);
}
.switch {
position: relative;
display: inline-block;
width: var(--switch-width);
height: var(--switch-height);
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: var(--switch-bg-inactive);
-webkit-transition: var(--switch-transision-time);
-o-transition: var(--switch-transision-time);
transition: var(--switch-transision-time);
}
.slider:before {
position: absolute;
content: "";
width: var(--switch-slider-width);
height: var(--switch-slider-height);
left: var(--switch-slider-left);
bottom: var(--switch-slider-bottom);
background-color: var(--switch-fg);
-webkit-transition: var(--switch-transision-time);
-o-transition: var(--switch-transision-time);
transition: var(--switch-transision-time);
}
input:checked + .slider {
background-color: var(--switch-bg-active);
}
input:focus + .slider {
-webkit-box-shadow: 0 0 1px var(--switch-bg-active);
box-shadow: 0 0 1px var(--switch-bg-active);
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}

View file

@ -1,42 +0,0 @@
li[data-clr-name]::before {
content: attr(data-clr-name) ": ";
}
li[data-clr-name] {
margin-bottom: 0.5em;
}
*,
*::before,
*::after {
background-color: #262220;
color: #f9f6e8;
}
body {
max-width: 1000px;
}
h1 {
margin-bottom: 1em;
}
span {
padding-left: 1em;
}
li {
display: block;
list-style: none;
}
li span {
float: right;
}
#commit {
padding: 0.5em;
width: 30%;
margin: 0.3em;
float: right;
}

View file

@ -1,101 +0,0 @@
@import url("https://cdn.jsdelivr.net/npm/hack-font@3/build/web/hack.min.css");
*,
*::before,
*::after {
font-family: sans-serif;
color: inherit;
scroll-behavior: smooth;
}
pre {
font-family: Hack, hack, monospace;
font-weight: bold;
}
body {
padding: 2em;
max-width: 1600px;
margin: auto;
}
.split {
display: -ms-grid;
display: grid;
-ms-grid-columns: auto 4em auto;
grid-template-columns: auto auto;
grid-gap: 4em;
}
h1,
h2 {
padding: 0.2em;
text-align: center;
}
h2 {
padding-bottom: 2em;
}
a {
text-decoration: underline;
}
.nojs {
background-color: darkred !important;
padding: 1em !important;
}
.nojs * {
color: whitesmoke !important;
font-weight: bold !important;
font-family: sans-serif !important;
}
.buttons {
padding: 1em;
text-align: center;
}
.buttons button {
padding: 0.5em;
margin: 0.1em;
margin-bottom: 1em;
background-color: #404040;
color: #fcfcfc;
border: none;
-webkit-transition: 0.3s -webkit-filter ease-in-out;
transition: 0.3s -webkit-filter ease-in-out;
-o-transition: 0.3s filter ease-in-out;
transition: 0.3s filter ease-in-out;
transition: 0.3s filter ease-in-out, 0.3s -webkit-filter ease-in-out;
}
button:hover,
button:focus {
cursor: pointer;
-webkit-filter: brightness(120%);
filter: brightness(120%);
}
#menu {
text-align: center;
margin: 4em 0 4em 0;
}
#menu div input {
margin: 0.1em;
}
@media only screen and (max-width: 1300px) {
.split {
display: block;
-ms-grid-columns: auto;
grid-template-columns: auto;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

View file

@ -1,139 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Index</title>
<meta name="description" content="My personal website" />
<meta
name="keywords"
content="website, webdev, linux, programming, ari, ari-web, Ari Archer, terminal, dark, blog, javascript, opensource, free, index, comments, blogging, js, foss"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<meta name="theme-color" content="#121212" />
<link rel="stylesheet" href="/content/styles/generic/main.min.css" />
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<link rel="stylesheet" href="/content/styles/index/index.css" />
<link rel="stylesheet" href="/content/styles/term/index.css" />
<link rel="manifest" href="/manifest.json" />
<script type="text/javascript">
<!--//--><![CDATA[//><!--
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* Copyright (C) 2023 Ari Archer
*
* The JavaScript code in this page is free software: you can redistribute
* it and/or modify it under the terms of the GNU General Public License
* (GNU GPL) as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version. The code is
* distributed WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL
* for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided
* you include this license notice and a URL through which recipients can
* access the Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
//--><!]]>
</script>
<script src="https://user.ari.lt/content/js/linkify.js"></script>
<script src="/content/js/config/index.js"></script>
<script src="/content/js/ui/index.js"></script>
<script src="/content/js/bday/index.js" defer></script>
<script src="/content/js/term/cmd.js" defer></script>
<script src="/content/js/term/index.js" defer></script>
<script src="/content/js/index/index.js" defer></script>
</head>
<body>
<article>
<header>
<h1>
welcome to the <a href="/git">open source</a> land of
<span id="site">...</span>, you are visitor number
<img id=visitors src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg" style="display:inline;height:1em;vertical-align:top" alt="visitor count" /> !
brought to you by Ari Archer and <a href="/thanks">her supporters</a>
</h1>
<i>Here for the Matrix homeserver? See <a href="/matrix">/matrix</a></i>
<br/>
<iframe id="bucket-webring" style="width: 25%; height: 1.5rem; border: none;" src="https://webring.bucketfish.me/embed.html?name=ari dot lt"></iframe>
<br/>
<i><a href="https://webring.dinhe.net">dinhe.net webring</a> | <a href='https://webring.dinhe.net/prev/https://ari.lt/'>Previous</a> <a href='https://webring.dinhe.net/next/https://ari.lt/'>Next</a></i>
<nav class="mobile-only">
<ul>
<li><a href="#blog">latest blog posts</a></li>
<li><a href="#comments">latest comments</a></li>
<li><a href="#discover">more pages</a></li>
</ul>
</nav>
</header>
<main>
<div id="blog">
<h2>latest <a id="blog-link">blog posts</a></h2>
<ul id="blog-posts">
loading blog posts ...
</ul>
</div>
<div>
<div id="comments">
<h2>latest <a id="comments-link">comments</a></h2>
<ul id="latest-comments">
loading comments ( TODO as the server is down ) ...
</ul>
</div>
<div id="more">
<h2>discover more</h2>
<ul id="discover">
loading available pages ...
</ul>
</div>
</div>
</main>
<footer id="term-wrap" style="display: none">
<div id="term-hist"></div>
<div id="input-wrap">
$
<input
type="text"
placeholder="type `help` for help"
spellcheck="false"
id="term-input"
class="cmd"
/>
</div>
</footer>
</article>
</body>
</html>

View file

@ -1,15 +0,0 @@
{
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
"short_name": "Ari-web",
"name": "Ari::web -> Index",
"description": "My personal website",
"icons": [{
"src": "/favicon.ico",
"sizes": "128x128",
"type": "image/png"
}],
"start_url": ".",
"display": "standalone",
"theme_color": "#fbfbfb",
"background_color": "#121212"
}

View file

@ -1,253 +0,0 @@
[build]
command = "make netlify"
[[redirects]]
from = "/404.html"
to = "/page/404/index.html"
status = 302
force = true
[[redirects]]
from = "/gentoo_stage3_nmor"
to = "https://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/releases/amd64/autobuilds/current-stage3-amd64-nomultilib-openrc/"
status = 301
force = true
# used to be https://codeberg.org/Ashley/poketube
[[redirects]]
from = "/yt/*"
to = "https://www.youtube.com/:splat"
status = 302
force = true
[[redirects]]
from = "/m"
to = "/yt/watch?v=8MMa35B3HT8"
status = 302
force = true
# https://codeberg.org/teddit/teddit
[[redirects]]
from = "/r/*"
to = "https://teddit.net/r/:splat"
status = 302
force = true
[[redirects]]
from = "/api"
to = "/api/apis.json"
status = 302
force = true
# ARI-WEB-SPECIFIC #
[[redirects]]
from = "/favicon.ico"
to = "/favicons/ari-web-ukraine.ico"
status = 200
force = true
[[redirects]]
from = "/user"
to = "https://us.ari.lt/"
status = 301
force = true
[[redirects]]
from = "/git/*"
to = "/lh/ari.lt/:splat"
status = 301
force = true
[[redirects]]
from = "/dotfiles/*"
to = "/gh/dotfiles-cleaned/:splat"
status = 301
force = true
[[redirects]]
from = "/tdotfiles/*"
to = "/gh/dotfiles-termux/:splat"
status = 301
force = true
[[redirects]]
from = "/dotfile/:distro/*"
to = "/gh/dotfiles-cleaned/tree/:distro/:splat"
status = 301
force = true
[[redirects]]
from = "/overlay/*"
to = "/gh/dinolay/:splat"
status = 301
force = true
[[redirects]]
from = "/gentooatom/*"
to = "/gh/dinolay/tree/main/:splat"
status = 301
force = true
# https://answers.netlify.com/t/how-do-i-do-cross-domain-redirects-to-github-repositories-from-netlify/52258/2?u=b00bleatea
[[redirects]]
from = "/gh/*"
to = "https://github.com/TruncatedDinoSour/:splat"
status = 301
force = true
[[redirects]]
from = "/lh/*"
to = "https://github.com/ari-lt/:splat"
status = 301
force = true
## BACKWARDS COMPATIBILITY ##
[[redirects]]
from = "/data/*"
to = "https://files.ari.lt/files/:splat"
status = 301
force = true
[[redirects]]
from = "/page/blog/*"
to = "https://blog.ari.lt/:splat"
status = 301
force = true
[[redirects]]
from = "/page/blog"
to = "https://blog.ari.lt/"
status = 301
force = true
[[redirects]]
from = "/90s.html"
to = "/page/90s/index.html"
status = 301
force = true
[[redirects]]
from = "/etc"
to = "https://etc.ari.lt/"
status = 301
force = true
####################
[[redirects]]
from = "/gentoo_stage3_nmorh"
to = "https://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/releases/amd64/autobuilds/current-stage3-amd64-hardened-nomultilib-openrc/"
status = 301
force = true
[[redirects]]
from = "/mp"
to = "https://www.youtube.com/playlist?list=PL7UuKajElTaChff3BkcJE6620lSuSUaDC"
status = 301
force = true
[[redirects]]
from = "/mr"
to = "https://blog.ari.lt/b/my-music-artist-recommendations/"
status = 301
force = true
[[redirects]]
from = "/btc"
to = "https://www.blockchain.com/explorer/addresses/btc/bc1qn3k75kmyvpw9sc58t63hk4ej4pc0d0w52tvj7w"
status = 301
force = true
[[redirects]]
from = "/xmr"
to = "https://moneroexplorer.org/search?value=451VZy8FPDXCVvKWkq5cby3V24ApLnjaTdwDgKG11uqbUJYjxQWZVKiiefi4HvFd7haeUtGFRBaxgKNTr3vR78pkMzgJaAZ"
status = 301
force = true
[[redirects]]
from = "/:page"
to = "/page/:page"
status = 302
force = false
[[redirects]]
from = "/*"
to = "/page/404/index.html"
status = 404
force = false
# Processing
[build.processing]
skip_processing = false
[build.processing.html]
pretty_urls = false
[build.processing.css]
bundle = true
minify = true
[build.processing.js]
bundle = false
minify = true
[build.processing.images]
compress = true
# --------------
[[headers]]
for = "/badge.png"
[headers.values]
Access-Control-Allow-Origin = "*"
Access-Control-Allow-Methods = "GET"
[[headers]]
for = "/api/*"
[headers.values]
Access-Control-Allow-Origin = "*"
Access-Control-Allow-Methods = "GET"
[[headers]]
for = "/api_hash/*"
[headers.values]
Access-Control-Allow-Origin = "*"
Access-Control-Allow-Methods = "GET"
[[headers]]
for = "/.well-known/network/*"
[headers.values]
Access-Control-Allow-Origin = "*"
Access-Control-Allow-Methods = "GET"
Content-Type = "application/json"
[[headers]]
for = "/.well-known/matrix/*"
[headers.values]
Access-Control-Allow-Origin = "*"
Access-Control-Allow-Methods = "GET"
Content-Type = "application/json"
[[headers]]
for = "/.well-known/*"
[headers.values]
Access-Control-Allow-Origin = "*"
Access-Control-Allow-Methods = "GET"
[[headers]]
for = "/*"
[headers.values]
Strict-Transport-Security = "max-age=63072000; includeSubDomains; preload"
X-Frame-Options = "deny"
X-Content-Type-Options = "nosniff"
Content-Security-Policy = "upgrade-insecure-requests"
X-Permitted-Cross-Domain-Policies = "none"
Referrer-Policy = "no-referrer"

11098
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,37 +0,0 @@
{
"name": "ari.lt",
"version": "1.0.0",
"description": "My website's source code",
"scripts": {
"serve": "live-server --no-browser",
"build": "./scripts/build.sh"
},
"repository": {
"type": "git",
"url": "https://ari.lt/gh/website.git"
},
"keywords": [
"website",
"terminal",
"ari-web",
"linux",
"shell",
"javascript",
"dark",
"sass"
],
"author": "Ari Archer <ari.web.xyz@gmail.com>",
"license": "SEE LICENSE IN LICENSE",
"bugs": {
"url": "https://ari.lt/git/issues"
},
"homepage": "https://ari.lt/git#readme",
"devDependencies": {
"autoprefixer-cli": "^1.0.0",
"eslint": "^8.14.0",
"html-minifier": "^4.0.0",
"live-server": "^1.2.2",
"node-sass": "^7.0.1",
"uglify-js": "^3.17.1"
}
}

View file

@ -1,56 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; 404</title>
<meta name="description" content="My personal website" />
<meta
name="keywords"
content="website, webdev, linux, programming, ari, terminal, dark, 404, not found, http 404"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<link rel="stylesheet" href="/content/styles/generic/main.min.css" />
<link rel="stylesheet" href="/content/styles/404/index.css" />
</head>
<body>
<h1 class="title">HTTP/404 ~ not found</h1>
<p>
it was a beautiful day, and i decided to take a walk in the park, i
had my phone with me, and i thought it would be a great idea to
browse the internet while walking,
<a href="#!">i clicked on a link</a>, and suddenly, i found myself
lost !! the page i was looking for was not found, and i was stuck on
an HTTP/404 error page :( i tried to refresh the page, but it didnt
work, i felt lost and frustrated ...
</p>
<p>
as i walked around, i realized that i was actually lost in the park
! i had no idea where i was and i had no way of finding my way back,
i felt scared and alone, i wished i had paid more attention to my
surroundings instead of being so engrossed in my phone ...
</p>
<p>
i eventually found my <a href="/">way back</a>, but the experience
left me feeling emotional and sad, it made me realize how much we
rely on technology and how it can lead us astray :O from that day
on, i promised myself to be more present in the moment and not let
technology take over my life
</p>
<img id=visitors src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg" style="display:inline;height:1em;vertical-align:top" alt="visitor count" />
</body>
</html>

View file

@ -1,415 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0" /> -->
<title>Ari::web -&gt; 90s</title>
<meta name="description" content="Ari-web if it was made in the 90s" />
<meta
name="keywords"
content="90s, ari-web, ari, ari archer, blog, design, ari web"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="/content/styles/90s/styles.css" />
<base target="_blank" />
</head>
<body>
<h1><marquee>Ari-web!!</marquee></h1>
<h1>
This page has been started on 2022-09-03 for
<img id=visitors src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg" style="display:inline;height:1em;vertical-align:top" alt="visitor count" />
people to see
</h1>
<div class="split">
<div>
<h2>Welcome to ari-web!!1!!11111111111;1!!</h2>
<p>
Hi queen, this is one of my webpages :D, I do stuff here ig
</p>
<h2>Who even are you?</h2>
<p>
I'm Ari, an open source LGBT Lithuanian developer, I like
playing with code, It's my hobby, I also like cooking ig :)
</p>
<h2>Kay, so, what is this</h2>
<p>
So basically, ari-web started as a personal site (well still
is), then it grew into a bigger project and it keeps groing
every day by me adding more features, pages and subdomains
to consume, add and modify content on!
</p>
<h2>Nono, what is *THIS*</h2>
<p>
Oh, this, idk tbh, I just wanted to make something for me to
have fun with, decided on a 90s aesthetic page, I got
everything from the bad HTML, CSS and colours to scrolling
text and even web buttons at the bottom of the page, the
footer
</p>
<h2>Nice, so what's up with the sidebar</h2>
<p>
It's just a fun thing ig, actually has a lot of content
ari-web provides in there, might want to check it out, also
has some contanct information just in case you might want to
contact me
</p>
<h2>Anything else?</h2>
<p>
Nah, not really, I might update this page by adding some
events and shit xD
</p>
<br />
<hr />
<br />
<h2>2022-05-30: A shitton of people visiting my website</h2>
<p>
I even made a blog abt it
<a
href="https://blog.ari.lt/b/wtf-is-going-on-and-why-is-my-site-blowing-up/"
>here</a
>, was very exciting ig lol
</p>
</div>
<div>
<h1>Pages and stuff</h1>
<ul>
<li><a href="https://ari.lt/">Main page</a></li>
<li>
<a href="https://blog.ari.lt/">Blog</a>
<ul>
<li>
<a href="https://legacy.blog.ari.lt/"
>Legacy blog</a
>
</li>
</ul>
</li>
<li>
<a href="https://user.ari.lt/"
>Comments and opinions!11</a
>
</li>
<li>
<a href="https://school.ari.lt/"
>School shit (very bad and cringe, also not GPL nor
foss!)</a
>
</li>
<li>
<a href="https://files.ari.lt/"
>File hosting index :D</a
>
</li>
<li>
<a href="https://etc.ari.lt/">Random stuff</a>
</li>
<li>
<p>Contact me :D</p>
<ul>
<li>
<a href="mailto:ari.web.xyz@gmail.com"
>E-mail</a
>
</li>
<li>
<a href="/gh">GitHub</a>
</li>
<li>
<p>
Plus I'm always going to answer in CaO
(Comments and opinions)
</p>
</li>
</ul>
</li>
<li>
<p>Source code</p>
<ul>
<li>
<a href="https://ari.lt/git">Main page</a>
</li>
<li>
<a href="https://blog.ari.lt/git">Blog</a>
<ul>
<li>
<a
href="https://legacy.blog.ari.lt/git"
>Legacy blog</a
>
</li>
</ul>
</li>
<li>
<a href="https://user.ari.lt/git"
>Comments and opinions!11</a
>
</li>
<li>
<a href="https://files.ari.lt/git"
>File hosting index :D</a
>
</li>
<li>
<a href="https://etc.ari.lt/git"
>Random stuff</a
>
</li>
</ul>
</li>
<li>
<p>Pages</p>
<ul>
<li><a href="/api">API</a></li>
<li><a href="/amiunique">Am I unique quiz</a></li>
<li>
<a href="/minimal.txt"
>Minimal and old deprecated text-based
page</a
>
</li>
<li><a href="/novpn">NoVPN</a></li>
<li><a href="/reset">Account reset</a></li>
<li>
<a href="/ttytheme"
>TTY theme generator for Loonix
<img
src="https://cdn.emojidex.com/emoji/hdpi/Tux.png"
/></a>
</li>
<li><a href="/be">Build error submission</a></li>
<li><a href="/info">Important ari-web info</a></li>
</ul>
</li>
<li>
<p>/dev/urandom</p>
<ul>
<li><a href="/yt">A FOSS youtube solution</a></li>
<li><a href="/r">A FOSS reddit solution</a></li>
<li>
<a href="/favicon.ico"
>The icon!
<img src="/favicon.ico" width="30px"
/></a>
</li>
<li>
<p>Dotfiles</p>
<ul>
<li>
<a href="/dotfiles"
>Current desktop dotfiles</a
>
</li>
<li>
<a href="/tdotfiles"
>Current mobile dotfiles</a
>
</li>
</ul>
</li>
<li>
<a href="/overlay">Gentoo GNU/Linux overlay</a>
</li>
<li>
<p>Gentoo stage3s</p>
<ul>
<li>
<a href="/gentoo_stage3_nmorh"
>Gentoo stage3 no-multilib OpenRC
(hardened)</a
>
</li>
<li>
<a href="/gentoo_stage3_nmor"
>Gentoo stage3 no-multilib OpenRC
(normal)</a
>
</li>
</ul>
</li>
<li>
<a href="/mp">Music playlist</a>
<ul>
<li><a href="/m">Favourite song</a></li>
</ul>
</li>
<li>
<a
href="https://hstspreload.org/?domain=ari.lt"
>Yay! HSTS</a
>
</li>
<li>
<p>Favicons</p>
<ul>
<li>
<a href="/favicons/ari-web-easter.ico"
>Easter</a
>
</li>
<li>
<a href="/favicons/ari-web-lgbt.ico"
>LGBT</a
>
</li>
<li>
<a href="/favicons/ari-web-normal.ico"
>Normal</a
>
</li>
<li>
<a href="/favicons/ari-web-ukraine.ico"
>Ukraine</a
>
</li>
<li>
<a href="/favicons/ari-web-hw.ico"
>Halloween</a
>
</li>
<li>
<a
href="/favicons/ari-web-christmas.ico"
>Christmas</a
>
</li>
<li>
<a href="/favicons/ari-web-love.ico"
>Love/valetine's day</a
>
</li>
<li>
<a href="/favicons/ari-web-down.ico"
>Down syndrome awareness day</a
>
</li>
<li>
<a href="/favicons/ari-web-blm.ico"
>Black lives matter</a
>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>Important stuff ig</p>
<ul>
<li><a href="/LICENSE">License</a></li>
<li><a href="/robots.txt">Robots</a></li>
<li><a href="/sitemap.xml">Sitemap</a></li>
</ul>
</li>
<li>
<p>
More coming soon if I find it enough to index it
here
</p>
</li>
<!-- END -->
</ul>
</div>
</div>
<footer class="center">
<p>
<img
src="https://raw.githubusercontent.com/ro1y/88x31s/master/100hot%202.gif"
alt="100hot"
/>
<img
src="https://raw.githubusercontent.com/ro1y/88x31s/master/2cows.gif"
alt="2cows"
/>
<img
src="https://upload.wikimedia.org/wikipedia/commons/9/93/GPLv3_Logo.svg"
width="68px"
alt="GPLv3"
/>
<img
src="https://raw.githubusercontent.com/ro1y/88x31s/master/88x31_kill9.png"
alt="kill9"
/>
<img
src="https://raw.githubusercontent.com/ro1y/88x31s/master/acab2.gif"
alt="ACAB"
/>
<img
src="https://raw.githubusercontent.com/ro1y/88x31s/master/any88x31.gif"
alt="AnyBrowser"
/>
<img
src="https://raw.githubusercontent.com/ro1y/88x31s/master/clobber.gif"
alt="Smile"
/>
<img
src="https://raw.githubusercontent.com/ro1y/88x31s/master/coke.png"
alt="Coca-Cola"
/>
<img
src="https://kitecreature.net/assets/images/88x31/roly-saynotoweb3.gif"
alt="KeepTheWebFree"
/>
</p>
<h2>
Thank u
<a href="https://kitecreature.net/" target="_blank">roly</a>
for the buttons &lt;3
</h2>
</footer>
</body>
</html>

View file

@ -1,119 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; UniquenessTest</title>
<meta
name="description"
content="How unique are you -- test by Ari::web"
/>
<meta
name="keywords"
content="personality, unique, rareness, personal, percent, math, test, tests, quiz"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<link rel="stylesheet" href="/content/styles/amiunique/index.css" />
<script type="text/javascript">
<!--//--><![CDATA[//><!--
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* Copyright (C) 2022 Ari Archer
*
* The JavaScript code in this page is free software: you can redistribute
* it and/or modify it under the terms of the GNU General Public License
* (GNU GPL) as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version. The code is
* distributed WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL
* for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided
* you include this license notice and a URL through which recipients can
* access the Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
//--><!]]>
</script>
<script
type="module"
src="/content/js/amiunique/index.js"
defer
></script>
</head>
<body>
<article>
<header>
<h1>How unique are you statistically?</h1>
<h2>
Test by Ari::web for over
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="
display: inline;
height: 1em;
vertical-align: top;
"
alt="visitor count"
/>
people to see
</h2>
<p>
None of your information is going to be stored, sent or seen
by anyone but you, this test is fully anonymous and
client-side only, if you don't want to trust me,
<a href="/git">the source code is open!</a>
Also it would be nice if you contributed and added more
questions :) see <code>options.js</code> file in
/content/js/amiunique/options.js
</p>
</header>
<main>
<noscript>
<h1>
This test requires
<a href="https://www.enable-javascript.com/"
>JavaScript to be enabled</a
>, if you just don't trust me, see the paragraph above
</h1>
<style>
#test {
display: none;
}
</style>
</noscript>
<div id="test">
<div id="unique-test"></div>
<button id="unique-test-submit">
Calculate my results
</button>
</div>
</main>
</article>
</body>
</html>

View file

@ -1,78 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Be</title>
<meta name="description" content="Error submission forms for ABOT" />
<meta
name="keywords"
content="ari, ari-web, form, page-form, android, linux, google, be, build error, building, error"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<meta name="theme-color" content="#181818" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<link rel="stylesheet" href="/content/styles/be/index.css" />
<link rel="stylesheet" href="/content/styles/noscript/index.css" />
<script type="text/javascript">
<!--//--><![CDATA[//><!--
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* Copyright (C) 2022 Ari Archer
*
* The JavaScript code in this page is free software: you can redistribute
* it and/or modify it under the terms of the GNU General Public License
* (GNU GPL) as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version. The code is
* distributed WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL
* for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided
* you include this license notice and a URL through which recipients can
* access the Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
//--><!]]>
</script>
<script src="/content/js/be/index.js" defer></script>
</head>
<body>
<h1>
Please stand by while I'm fetching the required data...
<noscript>
<span ns>Failed, no JavaScript enabled</span>
</noscript>
</h1>
<noscript>
<div nsb ns>Don't trust me? <a href="/git">The code is FOSS</a></div>
</noscript>
<h2>
If this takes too long please check the dev tools using CTRL + SHIFT
+ I and opening the console, you are visitor <img id=visitors src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg" style="display:inline;height:1em;vertical-align:top" alt="visitor count" />
</h2>
</body>
</html>

View file

@ -1,54 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: 4FAD 63E9 36B3 0590 6A6C 4894 A50D 5B4B 599A F8A2
Comment: Ari Archer (Ari Archer's GPG key pair) <ari@ari.lt>
xsFNBGGRbl4BEADDr+J9MKZLpaBBJUnv6UJU4WeplHaSTEUU5250TUtF4rl5frdv
VcCuM8RjghIhf+WfZyifD2OGXWd7Mmxx8luDVoYLpUtEir3M0GqeWyyUJI+euNNC
Nu7nGSullIta0xb09pST1epS2OEVmIG45YJKOuVmBogjld4miXX+tyUyVpukpgoK
6ixd3KhB2e944dED2sNPi4Gh1bqu0Na9fHf6osak5QRZ0SvEoDTZs711LHfd1pBA
aY5WO625Lx+jvWNkK70BglKqSTriZE780S7amw+x+O53cpM799Suc+7nl8PPT5C8
V+g1H6xES2DDCbpIw8yXfQk9dN+xVfnGOWgsI6gLjCNtBmDB5WSYhSsUYvOSKi6y
D8bcy4NXkZD2443kVDEBP4OxWAZT9fXKRN2G6h9c6XPZ2Cbr8hiiBogVsvpGK22H
6pf/53zgod6PSJ/3GxnHVARNZt0qdif/TpWmjBCjSQt++aouQuivkdKD4jKbZGZg
gIx+gnBQyRs4UB8+xRQNoLb/P2zVFAmGCa4ksXBbPVj6sO7BZp9NpYRXdq4zQ63x
/gKW0higCfnRoNAaSumn3wuj+OGmWYTh6XZSQ6qE/25aN3HLKVcljFK6VPLV55aw
+XZAUNKzgG6GCZCTv2gavfSJJjwE/EO6ckcv+tJ/ulEnGo/pGQszGH0pPwARAQAB
zTNBcmkgQXJjaGVyIChBcmkgQXJjaGVyJ3MgR1BHIGtleSBwYWlyKSA8YXJpQGFy
aS5sdD7CwZEEEwEIADsWIQRPrWPpNrMFkGpsSJSlDVtLWZr4ogUCZd5LcwIbAwUL
CQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRClDVtLWZr4ogJXD/9zSv8oKfOo
EqlreluHHl1uFy44JA/1L/hks4+wGy32iCpey9f3dLLUWWAGqnbouvxImvKcduNE
hCs4xGBCYMTrGwBLcuBJ3/rEqZcf5nUvX91L29uafiMs/Vdsyhl+vdkZnZMCHYJ/
k7tz7K34ZFFgWWrurZrDTE/HsmYnoyayGcvNqvP5ry9giEU+4nbQX5r+FZTgD6Aa
AD+lCtPjmChUi8BHVGqN8LBkCGwlmCkUWcKCDBNpEGV2TiBqwbLVK7UOtKIxBCL6
TeWBfFkTAt8dicX/Y9cQdENMZF5btOfYlB72kM54MZFX3OeJT2zRrl3Zyj7OsXPM
IyDBXHkiouFY3nwqmvU4e6tJ68OA7igRjw6l6KqdtsJIUkg6b80tQJyILBkFxfUR
Slmc85O1bxIzkSrSe/xQjtGPIFtX9z9M5Y29EUrQA5Kkwqjm18jY/q67KZsLCCYP
HKGYsQK8ATTXBu1oFF+j3U4XAXBjZQykuweqaG6ia2IxsNIO3s/jpwomPcqdMmK7
yknXWLw30QjYI61J3CAyhZSe55ygsUtj50fs1mAAIiJa7Q1hLxGBZkx5pWZ9v65q
dajDoNM7NlXyLqc8Ip3n79ewxNduefdCIXtDbXKjzFPCxJundLRJ7QGsDvUkw1J+
XsnPppvn8ZGNq/5tW0zoN9AjJU40xUkmKs7BTQRhkW5eARAApX+rTwmC18YlSOGx
BHxNN74/FOHBcImvvud8xZEWHYzaZNwELji0CqaUDY+0qkeKEPi3qCy+r1uKs+bM
ENCg6EMVTbgNaYaViat8ZW+oDWLwRJRFPrI/ALByDi0CxJ9zws9V46fiM+K7B2xa
VUxJErLPWfDzc8PeKNYEul3LzHTmi2R2sbd3K/9P/5j0MiUiZSO+piyZGKbcP0pI
rm1elPvbP15U0YDuh2KcqDLNwgKAUxopmevu6DeN9BzaeSZhX1ixBOZMsCT1zXdO
VLIPZ+9IZJTiJTO+zihzRvyu0P1K+w2yRk7p2oHNgvLWl8cTyaWPAIzFhWfeSEkt
rsUVA2lFdXv1hDFLR/L6tz18fuvUoTrBSqrL2WSYjoTCyC8fyRJFRquqJ+38n3Kv
tNHvwrZQaNLziH8JqJxVrCnLm9LsGWjdb8tc2xMV8kmfbPIUu4WrbGEy6H92VvV5
0sE7HluHWCLeshl/OQIi1ECD5yTdcniH0hJXLO28yZydl8i4ft4lF9WF6nZD/xpy
ZsqgFS3e3rbGJnmO5NMWgng3uNv2pAH/N9xe7e9npVT5qI6NhQ6Wyf4Ujkqp9Bb7
gmHAPrtx8F5KU0opDnwPA+bJhZplGbDCE6bvGII469+aGYDi4ldFx2oPrYx2u8lm
W4X2lrHbBHrB6GHs+8d8/nyx11MAEQEAAcLBdgQYAQgAIBYhBE+tY+k2swWQamxI
lKUNW0tZmviiBQJhkW5eAhsMAAoJEKUNW0tZmviii8kP/12/xEoiPIGL2bhOS9RU
6eAESrl6nMfQlN6p65blVu0l5Zo5XLMRAqO6LhBt3OsdBl6zjHdHeAoTnmBqhyVl
wWMtyxs1KFEBzgzVEgq1Be3BFeSYu7jJA1XdJ4xOY70kJuYD5O8agCt5AsvF3Oj3
44bskb+A5SKi7UpYnnhOukNjrjF1rMWg8FEK2DBQiDjaIBtn8hLrpb8S4V7vhac/
cCmrUjDRQH4y5J3atlhKnpsQehpgfWI/5fq8m/fG0exoQfjtbfA/B1IvPpaJly0v
vNBDU+Y6jCX99CGxmU/IkGN/jeo+mqlVpE9Z4pBfI6PVjRJLztEQF7SLlqk1fM5N
2XEcijZpUWZLWF6VP6FGL6Vji94MBHqh1fZyAMjTcIf7rDC1SwYHwRn2F/g1kCHu
UEKZDgH8VcNmdJH98H4GdTru8DYV3ozF2ka7c12qpgmsUmMgkFJ2/nU4W9MTUr7Y
pjNvWLppgLdp7GEpg9E7JUdrMjCN+aZuKwVryUZohmTaRQEUjKkrWnTJ2iSt1oub
lqipwox5nmtZ2Ys1KBulkheaojLxMCCMlog/gJDjfkj+mbnoBGkLDbH0zaRmRp64
RkuPuqecrfZg7+UaZWabDGygu7rvO0T94AmDYPjAoYsrkjP19Rv/ozOV/1qvVipg
Rw0eY9UCvFf6RCIXT3ZOBR1V
=1eAh
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -1,100 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Warrant canary of ari.lt</title>
<meta name="description" content="The warrant canary of ari.lt" />
<meta
name="keywords"
content="warrant canary, communications service provider, secret government subpoena, transparency report, user data, government agency orders, warrants, subpoenas, government notices, confidential information, encryption keys, seizures, non-voluntary physical visits, law enforcement, gag orders, government surveillance tools, digital privacy, legal process, legitimation, unpublication, gpg signature, ari archer, ari-web, ari.lt"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<meta name="theme-color" content="black" />
<link rel="manifest" href="/manifest.json" />
</head>
<body>
<p>
A warrant canary is a method by which a communications service
provider reveals that it has been served with a secret government
subpoena, despite legal prohibitions against acknowledging the
existence of the subpoena. It publishes a regular transparency
report (the "canary") declaring that it has not received any such
subpoenas; if the report stops being published, users are left to
assume they have received such a subpoena.
</p>
<p>As of 2024-05-16, I declare the following:</p>
<ol>
<li>
Up until now, in the lifespan of ari.lt, we have not received
nor complied with any government agency orders to disclose user
data hosted on our servers.
</li>
<li>
No warrants, subpoenas, or other government notices have been
served to us that compels us to disclose any confidential
information connected with our services, inclusive of the
sharing of the encryption keys.
</li>
<li>
There have been no seizures or non-voluntary physical visits or
intrusions by law enforcement or government officials which
would affect the confidentiality of user data or interfere with
our services.
</li>
<li>
We have not been subject to any gag orders which would prevent
us from stating that we have received legal process seeking
access to user data, nor have we been forced to install any
government surveillance tools onto our systems.
</li>
<li>
If this message is not updated or removed it means that all the
above statements continue to be true.
</li>
</ol>
<p>
We are dedicated to safeguarding the digital privacy and rights of
our users. If any of the above points is no longer true, we will
take down this message. While we cannot legally comment on the
received orders as directed by a court, the removal of this warrant
canary would indicate to users that a form of legal process has been
served.
</p>
<p>
Note: This warrant canary carries legitimation only up until the
unpublication of the statement or if it hasn't been updated in more
than <b>3 months</b>. A removal of this statement would be indicative of
instant expiry. The statements made do not include any personal
qualities of predictability and do not carry any future
implications.
</p>
<p>Last-updated: 2024-05-16 (see GPG signature)</p>
<p>
Signed-off-by: Ari Archer &lt;<a href="mailto:ari@ari.lt"
>ari@ari.lt</a
>&gt; using the GPG key
<a href="/page/canary/4FAD63E936B305906A6C4894A50D5B4B599AF8A2.asc"
>4FAD63E936B305906A6C4894A50D5B4B599AF8A2</a
>
with the signature
<a href="/page/canary/index.html.asc">index.html.asc</a>.
</p>
</body>
</html>

View file

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEET61j6TazBZBqbEiUpQ1bS1ma+KIFAmZF+NMACgkQpQ1bS1ma
+KKZoQ/9GBp7qJu8Vq0xCK9duXWq73Rsy10nnAymSFd3a+h0qPxOz9Pgm7G3IXz5
q6o+gGi5U93RcW+N5HT4nW4Q31cb6hnqVWoue7E0sHe3OPE3yolWhoz22ZCIAr6k
g5+GFYvs4W+PyqTUd4cfy1FA9diIAU5IHPBcsFQZ64MYpxD5ewB6KUnE6Pcw+Slf
V+OutO6fV8Rjp2Stm0tyl3gxyQr+9blvzha3BKq6KARMyCDsQvaJbcvewqzryFd7
udSvFPZp5oCkAz0oYKG4+MUcPE3qrwWCmQc4fmbEc6Yu2BujHC1iKHmkt+aSN/8I
Sehiy5s+WVxJQ0Ybb9F3Yo7zlrNABM9OWZZQxlqgATpsA90fwElwcwvojFWRGvqn
9g8zWjj6/iKsL8hISRruvoEZBPHq3vlwUw7Cc+lyol6yDS4UukgfKVGI5xPZuory
gXBCbrjklwCF6xJbac6hCJ/t81cmqv02yo7i6YoEPVAW/PVs1ZFIOjY/bIfR1erk
P/RJCgdufKBx+h1RiGBUWkLgUX/03vWShrrYWTgxXSrF/O2KN2JA+9QZu46+1huA
GXfS9XeTUr35YaX1oGIPX6Gh4AxenwUX3CYpxu1syOKftRh+IEEDDwZh7vWMd2IA
KBgsqgDD8XTMXdSpQKd8WIuKYAvCHO/yPWE0R0Hw3uhIE1mLtpI=
=+TZ+
-----END PGP SIGNATURE-----

View file

@ -1,10 +0,0 @@
#!/usr/bin/env sh
set -eu
main() {
gpg --detach-sign --armor index.html
gpg --verify index.html.asc
}
main "$@"

View file

@ -1,120 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Casey</title>
<meta name="description" content="dear casey," />
<meta name="keywords" content="ari, ari archer, best friend, friendship, online mother, thanks, gratitude, love, ari-web" />
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<meta name="theme-color" content="#181818" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<link rel="stylesheet" href="/content/styles/thanks/index.css" />
<link rel="stylesheet" href="/content/styles/casey/index.css" />
</head>
<body>
<main>
<article>
<h1>dear casey,</h1>
<p>
i hope this open letter brings a smile to your face, as i
sit here, i am overwhelmed with the gratitude i feel towards
our friendship with have created over the past 5 years, you
have been there for me always, as if you were onlinne mother
and providing support for me that i cherish so deeply and am
very thankful for
</p>
<p>
our inside jokes and shared moments, experiences, etc have
truly been the highlight of my life, they are reminders of
the bond that we've created over the time we've been friends
for, they remind me of the tears and laughs we've had
together and reminds me of how much time we've spent
together,, i still remember the time we connected, purely by
chance seemingly xD, when i still used to use facebook and
my fb acc got hacked, at the time i was in some lgbt support
group and i wanted to add one person from that group, i
guess i must've mixed you up with someone from that group
and added you instead xDDD, well, little did i know that
this would blossom into a such a beautiful and meaningful
relationship xD
</p>
<p>
i remember one other thing related to facebook, when u
helped me to create a fake straight-looking facebook account
xD, because my mother kept on incisting on getting my social
media and stuff, i remember u helping me set up a password
on every app so if she tries to take my phone again and look
through it she couldn't do shit xD, you helped me to express
myself authentically without any fear of repercussions, you
have such an incredible character and a generous heart and i
dont think i will ever be able to repay for you for such
noble acts
</p>
<p>
as time passes, i realize how much you have impacted my life
and,, not only have you been an emotional pillar, but you've
also helped me understand and see the world of adulthood,
for example i remember the time when i was confused about
taxes and u explained it to me xDD, never have i thought i'd
be sitting and asking people about 'what are taxes like
actually xD', your wisdom has become invaluable to me, its
kinda sweet but bitter, bittersweet i think would b the best
word to describe it abt how i feel abt u getting older, its
nice that you're growing and developing an independent life
and going off studying in another country, but the thought
of never being able to meet you fills me with regret and
sadness, i hope i get to meet you before you move, i
remember the time when i felt bad abt meeting u on easter,
that honestly is one of my top regrets because
hjfewhewfihwiuehf xD, but i very much do cherish moments
we've spent together no matter the distance
</p>
<p>
ive recently noticed that i havent expressed my love for you
as i should have, recalling our conversations,, while i
think you understand how much i appriciate you and how much
i cherish you and all that, i think i should be more
explicit with my platonic towards you, this is why i begun
saying words 'i love you' more, as i can't show it much by
actions, i wish we lived closer to one another to see one
another more frequently, so i could express my love in other
ways, but for now i'm basically left with words, and that's
what i'm trying to do, your presence in my life is a gift
and i am eternally grateful to be a part of yours <3
</p>
<p>
thank you for being an amazing friend that you are, your
support, understanding and guidance have made a profound
impact on me,, whether we're laughing or having
heart-to-heart conversations, every moment with you is a
treasure, i am honored to call you my best friend
</p>
<p>with all my love and gratitude and everything there is,</p>
<p>ari</p>
<p>2023/12/02</p>
</article>
</main>
</body>
</html>

View file

@ -1,75 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Export</title>
<meta name="description" content="Export or import your ari-web data" />
<meta
name="keywords"
content="export, import, ari-web, ari, Ari Archer, dark, data, javascript"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<!-- <link rel="stylesheet" href="/content/styles/toggle/index.css" /> -->
<link rel="stylesheet" href="/content/styles/export/index.css" />
<link rel="stylesheet" href="/content/styles/noscript/index.css" />
<script src="/content/js/export/index.js" defer></script>
</head>
<body>
<div class="content">
<!-- <label id="x" class="switch">
<input type="checkbox" id="page-selector" />
<span class="slider"></span>
</label> -->
<h1>
Import/export
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="display: inline; height: 1em; vertical-align: top"
alt="visitor count"
/>'s data
<noscript>
<span ns
>(No JS enabled, will not work, although
<a href="/git">you can take a peet at the source code</a
>)</span
>
</noscript>
</h1>
<hr />
</div>
<div id="pages">
<div>
<h2>Export ari-web data</h2>
<textarea readonly aria-readonly="true" id="export"></textarea>
<button id="export-button">Export my data</button>
</div>
<div>
<h2>Import ari-web data</h2>
<textarea id="import"></textarea>
<button id="import-button">Import my data</button>
</div>
</div>
</body>
</html>

View file

@ -1,267 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Info</title>
<meta name="description" content="Important ari-web info" />
<meta
name="keywords"
content="website, ari, dark, blog, minimal, minimalism, opensource, free, info, important"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<meta name="theme-color" content="black" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="/content/styles/info/index.css" />
<base target="_blank" />
</head>
<body>
<header>
<h1>Important ari-web info</h1>
<blockquote>
<a href="#!" target="_parent">This is a link</a>
<p>And this is text</p>
<p>
you are visitor
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="
display: inline;
height: 1em;
vertical-align: top;
"
alt="visitor count"
/>
</p>
</blockquote>
</header>
<hr />
<main>
<ul>
<!-- <li> : <a href=""></a></li> -->
<li>
Ari-web canary :
<a href="https://ari.lt/page/canary"
>https://ari.lt/page/canary</a
>
</li>
<li>
ari-web is moving to self-hosted services :
<a
href="https://blog.ari.lt/b/ariweb-moving-selfhosted-services/"
>https://blog.ari.lt/b/ariweb-moving-selfhosted-services/</a
>
</li>
<li>
Matrix wiki (ari-web is / was involved) :
<a href="https://matrix.imwiki.org/wiki/Main_Page"
>https://matrix.imwiki.org/wiki/Main_Page</a
>
</li>
<li>
ari-web billing situation :
<a href="https://blog.ari.lt/b/ariweb-billing-situation/"
>https://blog.ari.lt/b/ariweb-billing-situation/</a
>
</li>
<li>
ari-web matrix homeserver :
<a href="https://blog.ari.lt/b/ariweb-matrix-homeserver/"
>https://blog.ari.lt/b/ariweb-matrix-homeserver/</a
>
</li>
<li>
domain and donations updates :
<a href="https://blog.ari.lt/b/domain-donations-updates/"
>https://blog.ari.lt/b/domain-donations-updates/</a
>
<ul>
<li>
<del><a href="#/paypal">paypal</a> ( ari.web.xyz@gmail.com )<del>
</li>
<li><a href="/btc">bitcoin</a></li>
<li><a href="/xmr">monero</a></li>
<li><a href="/thanks">thanks</a></li>
</ul>
</li>
<li>
ari.lt -- new ari-web domain :
<a href="https://blog.ari.lt/b/arilt-new-ariweb-domain/"
>https://blog.ari.lt/b/arilt-new-ariweb-domain/</a
>
</li>
<li>
support ari-web :
<a href="https://blog.ari.lt/b/support-ariweb/"
>https://blog.ari.lt/b/support-ariweb/</a
>
</li>
<li>
notice : temporary shutdown of server.ari.lt :
<a
href="https://blog.ari.lt/b/notice-temporary-shutdown-serverariwebxyz/"
>https://blog.ari.lt/b/notice-temporary-shutdown-serverariwebxyz/</a
>
<ul>
<li>
update for this :
<a
href="https://blog.ari.lt/b/comparing-hosting-providers-serverariwebxyz/"
>https://blog.ari.lt/b/comparing-hosting-providers-serverariwebxyz/</a
>
</li>
<li>
update 2 :
<a
href="https://blog.ari.lt/b/ariweb-server-update-2/"
>https://blog.ari.lt/b/ariweb-server-update-2/</a
>
</li>
</ul>
</li>
<li>
user.ari.lt situation ( 2023/04/10, harassment ) :
<a href="https://blog.ari.lt/b/userari-webxyz-situation/"
>https://blog.ari.lt/b/userari-webxyz-situation/</a
>
</li>
<li>
user.ari.lt attack by a nazi asshole :
<a
href="https://blog.ari.lt/b/serverari-webxyz-going-be-changed/"
>https://blog.ari.lt/b/serverari-webxyz-going-be-changed/</a
>
</li>
<li>
ari-web blog API change and new additions :
<a href="https://blog.ari.lt/b/ari-web-blog-api-change/"
>https://blog.ari.lt/b/ari-web-blog-api-change/</a
>
</li>
<li>
start of the DOML series :
<a href="https://blog.ari.lt/b/doml-1-2023-01-29"
>https://blog.ari.lt/b/doml-1-2023-01-29</a
>
</li>
<li>
contact me :
<a href="https://blog.ari.lt/b/contact-me/"
>https://blog.ari.lt/b/contact-me/</a
>
</li>
<li>
ari-web blog hyperlink redesign :
<a
href="https://blog.ari.lt/b/ari-web-blog-hyperlink-redesign/"
>https://blog.ari.lt/b/ari-web-blog-hyperlink-redesign/</a
>
</li>
<li>
happy 2nd birthday, ari-web :
<a href="https://blog.ari.lt/b/happy-2nd-birthday--ari-web/"
>https://blog.ari.lt/b/happy-2nd-birthday--ari-web/</a
>
</li>
<li>
old blog new design :
<a
href="https://legacy.blog.ari.lt/blogs/New-blog-design!_-9192801266"
>https://legacy.blog.ari.lt/blogs/New-blog-design!_-9192801266</a
>
</li>
<li>
legacy blog shutdown :
<a
href="https://legacy.blog.ari.lt/blogs/This-subdomain-is-no-longer-in-use_-7309129151"
>https://legacy.blog.ari.lt/blogs/This-subdomain-is-no-longer-in-use_-7309129151</a
>
</li>
<li>
new blog management system ! :
<a href="https://blog.ari.lt/b/new-blog-management-system-/"
>https://blog.ari.lt/b/new-blog-management-system-/</a
>
</li>
<li>
introducing the ari-web API :
<a
href="https://blog.ari.lt/b/introducing-the-ari-web-api-/"
>https://blog.ari.lt/b/introducing-the-ari-web-api-/</a
>
</li>
<li>
accesibility issues of ari-web :
<a
href="https://blog.ari.lt/b/accesibility-issues-of-ari-web/"
>https://blog.ari.lt/b/accesibility-issues-of-ari-web/</a
>
</li>
<li>
ari-web browser compatibility :
<a
href="https://blog.ari.lt/b/ari-web-browser-compatibility/"
>https://blog.ari.lt/b/ari-web-browser-compatibility/</a
>
</li>
<li>
ari-web APIs are going public :
<a
href="https://blog.ari.lt/b/ari-web-apis-are-going-public/"
>https://blog.ari.lt/b/ari-web-apis-are-going-public/</a
>
</li>
<li>
ari-web APIs: How to use them :
<a
href="https://blog.ari.lt/b/ari-web-apis--how-to-use-them/"
>https://blog.ari.lt/b/ari-web-apis--how-to-use-them/</a
>
</li>
<li>
ari-web now delivers minified content :
<a
href="https://blog.ari.lt/b/ari-web-now-delivers-minified-content/"
>https://blog.ari.lt/b/ari-web-now-delivers-minified-content/</a
>
</li>
<li>
the 'www' subdomain is no longer the default for ari.lt :
<a
href="https://blog.ari.lt/b/the--www--subdomain-is-no-longer-the-default-for-ari-web-xyz/"
>https://blog.ari.lt/b/the--www--subdomain-is-no-longer-the-default-for-ari-web-xyz/</a
>
</li>
<li>
ari-web restricted contributions :
<a
href="https://blog.ari.lt/b/restricting-contributions-on-ari-web/"
>https://blog.ari.lt/b/restricting-contributions-on-ari-web/</a
>
</li>
<li>
impersonation of me on the internet :
<a
href="https://blog.ari.lt/b/important--impersonation-of-me-on-the-internet/"
>https://blog.ari.lt/b/important--impersonation-of-me-on-the-internet/</a
>
</li>
</ul>
</main>
</body>
</html>

View file

@ -1,876 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Matrix</title>
<meta
name="description"
content="Ari-web Matrix homeserver Sign-up requirements, Guidelines, Privacy policy, and Termination policy."
/>
<meta
name="keywords"
content="matrix, homeserver, matrix homeserver, ari-web, ari archer, open source, free speech, democracy, document, cc0, ee2e, legal, gdpr, dmca, rules, toc, email, contact, sign-up"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="article" />
<meta name="color-scheme" content="dark" />
<meta name="theme-color" content="black" />
<meta name="license" content="CC0" />
<link rel="manifest" href="/manifest.json" />
<link rel="canonical" href="https://ari.lt/page/matrix" />
<style>
* {
background-color: #000;
color: whitesmoke;
font-family: sans-serif;
}
a {
color: #87afaf;
}
body {
max-width: 1100px;
margin: auto;
padding: 2em;
}
blockquote {
margin: 10px 0;
overflow: hidden;
padding: 0 0 0 20px;
font-weight: 100;
position: relative;
}
blockquote:before {
content: "";
border-left: #e6e0c8 solid 2px;
position: absolute;
bottom: 14px;
top: 13px;
left: 0;
}
.skip {
position: absolute;
top: -40px;
left: 0;
background: #000;
color: white;
padding: 8px;
z-index: 100;
}
.skip:focus {
top: 0;
}
footer,
h1 {
text-align: center;
}
</style>
</head>
<body>
<a class="skip" href="#main">Skip to main content</a>
<article>
<header>
<h1 id="ari-lt-matrix-homeserver">
<a href="https://ari.lt/">ari.lt</a> Matrix homeserver
</h1>
Visitor counter:
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="display: inline; height: 1rem; vertical-align: top"
alt="visitor count"
/>
</header>
<main id="main">
<div id="toc">
<p>Table Of Contents (<a href="#toc">ToC</a>):</p>
<ul>
<li>
Source code:
<a href="https://ari.lt/git">https://ari.lt/git</a>
</li>
<li>Introduction: <a href="#intro">#intro</a></li>
<li>
Registration:
<a href="#registration">#registration</a>
<ul>
<li>
Contacts: <a href="#contacts">#contacts</a>
<ul>
<li>
Administrators:
<a href="#administrators"
>#administrators</a
>
</li>
<li>
Staff: <a href="#staff">#staff</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
"Freeze peach" (free speech):
<a href="#peach">#peach</a>
</li>
<li>
Privacy: <a href="#privacy">#privacy</a> (TL;DR:
<a href="#p-tldr">#p-tldr</a>)
<ul>
<li>
GDPR compliance: <a href="#gdpr">#gdpr</a>
</li>
<li>
DMCA compliance: <a href="#dmca">#dmca</a>
</li>
</ul>
</li>
<li>
Termination:
<a href="#termination">#termination</a> (TL;DR:
<a href="#t-tldr">#t-tldr</a>)
</li>
<li>
Guidelines:
<a href="#guidelines">#guidelines</a> (TL;DR:
<a href="#g-tldr">#g-tldr</a>)
</li>
<li>
License: <a href="#license-cc0">#license-cc0</a>
</li>
</ul>
<i>Last updated: 2024-02-11</i>
</div>
<div id="intro">
<h2><a href="#intro">#</a> Introduction</h2>
<p>
Hello! This is the
<a href="https://ari.lt/">ari.lt</a> Matrix homeserver's
home page. For those who are unaware -
<a
href="https://en.wikipedia.org/wiki/Matrix_(protocol)"
>Matrix</a
>
(Website:
<a href="https://matrix.org/">https://matrix.org/</a>)
is an end-to-end encrypted, decentralized, federated
messaging protocol, and I've been maining it for a while
now - that's exactly why I have spun up a
<a href="https://github.com/matrix-org/dendrite"
>Dendrite</a
>
homeserver, of which you can find the source
<i>configuration</i> (source code is unchanged) at
<a href="https://matrix.ari.lt/git"
>https://matrix.ari.lt/git</a
>. This document defines this homeserver's limits, data
processing, compliance, and main focuses of it:
democracy, freedom (free speech: see
<a href="#peach">"Freeze peach"</a>), and privacy.
Please take the time to read it and get familiar with
all of the rules, conditions and processes.
</p>
</div>
<div id="registration">
<h2><a href="#registration">#</a> Registration</h2>
<p>
The server is not <i>open registration</i> in a way
where you can just sign up at your own will instantly -
as to prevent spam, "alt" (alternative account) spam,
ban evasion, and attacks. So to say -- to provide a
smooth experience for people using this homeserver. If
you want an account on this homeserver (as in you want a
Matrix account on
<a href="https://ari.lt/">ari.lt</a> and your MXID
(Matrix ID, username) will appear as
@your_username:ari.lt) you have to contact one of the
<i
><b
><a href="#administrators">administrators</a></b
></i
>
through one of the following
<a href="#contacts">contacts</a> listed in
<a href="https://ari.lt/.well-known/matrix/support"
>the MSC1929 endpoint</a
>
and make sure to read
<a href="#notice">the notice below</a>:
</p>
<ul id="contacts">
<li>
Administrators
<ul id="administrators">
<li>
Ari Archer: Owner and Administrator
<ul>
<li>
Matrix ID:
<a
href="https://matrix.to/#/@ari:ari.lt"
>@ari:ari.lt</a
>
</li>
<li>
E-Mail:
<a
href="mailto:ari.web.xyz@gmail.com"
>ari.web.xyz@gmail.com</a
>
</li>
<li>
Website:
<a href="https://ari.lt/"
>https://ari.lt/</a
>
</li>
</ul>
</li>
</ul>
</li>
<li id="staff">
Staff
<ul>
<li>
Zayd: Moderator
<ul>
<li>
Matrix ID:
<a
href="https://matrix.to/#/@zayd:envs.net"
>@zayd:envs.net</a
>
</li>
<li>
E-Mail:
<a href="mailto:wanderer@envs.net"
>wanderer@envs.net</a
>
(not preferred)
</li>
<li>
Website:
<a href="https://wanderer.envs.net/"
>https://wanderer.envs.net/</a
>
</li>
</ul>
</li>
<li>
LDA: Moderator
<ul>
<li>
Matrix ID:
<a
href="https://matrix.to/#/@lda:a.freetards.xyz"
>@lda:a.freetards.xyz</a
>
</li>
<li>
Website:
<a href="https://freetards.xyz/"
>https://freetards.xyz/</a
>
</li>
</ul>
</li>
<li>
LDA (Fourier): Moderator (alt)
<ul>
<li>
Matrix ID:
<a
href="https://matrix.to/#/@fourier:ari.lt"
>@fourier:ari.lt</a
>
</li>
<li>
Website:
<a href="https://freetards.xyz/"
>https://freetards.xyz/</a
>
</li>
</ul>
</li>
</ul>
</li>
<li>
Main <a href="https://ari.lt/">ari.lt</a> room:
<a href="https://matrix.to/#/#root:ari.lt"
>#root:ari.lt</a
>
</li>
<li>
Report/ACL
<a href="https://ari.lt/">ari.lt</a> room:
<a href="https://matrix.to/#/#abuse:ari.lt"
>#abuse:ari.lt</a
>
</li>
</ul>
<div id="notice">
<p>
Before contacting, please read
<a href="#privacy">Privacy</a>,
<a href="#guidelines">Guidelines</a>, and
<a href="#termination">Termination</a> sections, and
make sure, whenever you contact me for an account,
you add
<a href="#consent">this consent statement</a>
to your request:
</p>
<blockquote id="consent">
<p>
<b>
I have read the Privacy and Termination
policies, along with the Guidelines of the
<a href="https://ari.lt/">ari.lt</a>
homeserver located on the
<a href="https://ari.lt/page/matrix"
>https://ari.lt/page/matrix</a
>
page and I understand and consent to the
policies and statements written in that
document.
</b>
</p>
</blockquote>
<p>
In the request, send me the desired and not taken
username that you want. Also, optionally, specify
the reason of
<i>why</i> you want to join this homeserver, though
it is just novelty and not required. If the username
is taken - I will notify you. If not - I will create
your account and respond with your temporary
password, which I <b>highlighy</b> suggest changing
on login.
</p>
<p>
All of this is done to prevent future confusion and
accusations that may or may not happen, speed up the
account creation process, and to note that I (the
owner of this homeserver)
<b>do not (don't)</b> take any accountability,
responsibility, or repercussions for the users of
this homeserver (<a href="https://ari.lt/">ari.lt</a
>), their actions, and the resulting consequences.
</p>
<p>
Also note that you'll be <i>auto-joined</i>
in the
<a href="https://matrix.to/#/#ari:ari.lt"
>#ari:ari.lt</a
>
space and the
<a href="https://matrix.to/#/#room:ari.lt"
>#root:ari.lt</a
>
room in that space.
</p>
</div>
</div>
<div id="peach">
<h2><a href="#peach">#</a> "Freeze peach" (free speech)</h2>
<p>
Just because this homeserver is focused on freedom and
democracy, this does not mean total anarchy and zero
control. Many people nowadays misinterpret "free speech"
as total anarchy: allowing hate speech, spam, no banning
or termination, no warnings, etc. This is not this type
of homeserver. I have seen way too many of those and I
am tired of such homeservers. For this homeserver human
decency is a must and there's no way around that,
<a href="#guidelines">Guidelines</a>
go more in-depth on this.
</p>
<p>Please be a decent human.</p>
</div>
<div id="privacy">
<h2><a href="#privacy">#</a> Privacy</h2>
<p>
<a href="https://ari.lt/">ari.lt</a> does not collect
any identifiable information (not even
<a href="https://nginx.org/">nginx</a> logs!) about the
users of its services, except:
</p>
<ul id="collection">
<li>
The default logging
<a href="https://github.com/matrix-org/dendrite"
>Dendrite</a
>
does by default (used for issue diagnostics and does
not include any identifiable information).
</li>
<li>
<a href="https://spec.matrix.org/latest/"
>Matrix data</a
>: messages, media (avatars, attachments), ... -
whatever you upload on the homeserver. (encryption
depends on whether or not encryption for the
specific resource is available and if so - was it
enabled? (for example private messages have
encryption, but public rooms do not)).
</li>
</ul>
<p>
That's about it. This homeserver tries to keep logging
to a minimum to provide a private experience to its
users. You may also be interested in the following
statements:
</p>
<div id="gdpr">
<h3><a href="#gdpr">#</a> GDPR compliance</h3>
<p>
This homeserver is fully
<a href="https://gdpr.eu/what-is-gdpr/">GDPR</a>
compliant. I.e.:
</p>
<ul>
<li>
Data is collected by your own explicit consent,
as you have to contact the owner ("me") to
create an account, having read all terms,
conditions, and statements.
</li>
<li>
Data is only collected for legitimate interest
as mentioned above (error diagnostics and data
storage).
</li>
<li>
No extra data is collected (no third-part
cookies, advertisements, analytics, etc.).
</li>
<li>
Data is only processed to provide wanted
services (in this case - Matrix messaging,
attachments and avatars, etc. as defined and
implemented by
<a href="https://spec.matrix.org/latest/"
>the Matrix specification</a
>
and
<a href="https://github.com/matrix-org/dendrite"
>Dendrite Matrix homeserver
implementation</a
>). The data provider is
<a href="https://contabo.com/">Contabo GmbH</a>
and the server is hosted in Germany (Frankfurt),
see their privacy policy
<a href="https://contabo.com/en/legal/privacy/"
>here</a
>.
</li>
<li>
Disclosure to law enforcement - available data
will be disclosed to law enforcement agencies if
required to do so.
</li>
<li>
You can request copies of your personal data and
request changes to the data.
</li>
</ul>
</div>
<div id="dmca">
<h3><a href="#dmca">#</a> DMCA compliance</h3>
<p>
This homeserver is not a breeding ground for DMCA
violations, all intellectual property rights of
others is respected. If you face any violations
please use
<a href="#contacts">the listed contacts</a> to
report it. In the report the following data will be
required:
</p>
<ul>
<li>
Description of copyrighted data or intellectual
property
</li>
<li>
Description of where the material is infringing
on your copyright
</li>
<li>Contact information</li>
<li>
Proof of infringement and belief that the
infringer is not authorized to use the
intellectual property at hand
</li>
<li>Proof of your copyright</li>
<li>Your electronic or physical signature</li>
</ul>
</div>
<i id="p-tldr"
><a href="#p-tldr">TL;DR</a>? Privacy is a focus here,
though that does not absolve the users of repercussions
of their acts.</i
>
</div>
<div id="termination">
<h2><a href="#termination">#</a> Termination</h2>
<p>
Termination (deactivation - you won't be able to log in
or access any of your data after the act of
<i>deactivation</i>) of an account is depends a lot on
what you've been doing, the severity of what you've been
doing, how far you've went, and the warnings you've
gotten beforehand (if applicable):
</p>
<ul>
<li id="law-violation">
Violation of
<a
href="https://europam.eu/?module=legislation&country=Lithuania"
>Lithuanian</a
>
and/or
<a
href="https://europam.eu/?module=legislation&country=Germany"
>German</a
>
law
<ul>
<li>
If seen as minor: 12-hour notice before
termination
</li>
<li>
If seen as anything else besides minor:
instant termination
</li>
</ul>
</li>
<li id="guideline-violation">
Violation of guidelines
<ul>
<li>
Single minor violations of guidelines will
only get you a warning, with enough warnings
(say like 2 or 3), you will get a 1-day
notice to move away from this homeserver,
and your account will be terminated
</li>
<li>
If your violation of guidelines was medium
severity, you will get a 12-hour to 1-day
notice to move away from this homeserver,
then your account will be terminated
</li>
<li>
And finally, if your violation of guidelines
is seen as severe: you will get an instant
account termination with zero notice
</li>
</ul>
</li>
<li id="user-reports">
Reports from users
<ul>
<li>
If a lot of users report you (by any forms
of
<a href="#contacts">contacts listed above</a
>), showing unhappiness in your stay on the
homeserver, after a discussion along with
proof, and a talk with you: you may or may
not get terminated (of course, you will be
involved in the process, so you'll have
plenty of time to move on). At least a
warning is unavoidable.
</li>
<li>
If the proof is severe enough and it
violates any
<a href="#guidelines">Guidelines</a>, the
termination policy for guideline violation
</li>
</ul>
</li>
<li id="ban">
The administrators of the homeserver keep the right
to request a full homeserver or per-user ban off a
homeserver, room, space or any Matrix messaging unit
if they think it is in best interest of the users,
with or without notice.
</li>
</ul>
<i id="t-tldr"
><a href="#t-tldr">TL;DR</a>? Follow the law and be
human. Termination is dependent on your actions and
(optionally) given prior notice(s).</i
>
</div>
<div id="guidelines">
<h2><a href="#guidelines">#</a> Guidelines</h2>
<p>
The activity of rooms and accounts on the
<a href="https://ari.lt/">ari.lt</a> homeserver, any
events sent over, etc. must follow and adhere to the
following guidelines. If any of the following guidelines
(rules) are broken
<a id="#termination">Termination policy</a> applies.
</p>
<ul>
<li>
You must follow all
<a
href="https://europam.eu/?module=legislation&country=Lithuania"
>Lithuanian</a
>
and
<a
href="https://europam.eu/?module=legislation&country=Germany"
>German</a
>
law
</li>
<li>
Creating an unhealthy environment for
<a href="https://ari.lt/">ari.lt</a> homeserver or
not users (hate speech, harassment, ...) is not
allowed.
</li>
<li>
Human decency is a must, such as:
<ul>
<li>Tolerance</li>
<li>
Non-discrimination (For example (keep in
mind their derivatives too):
<a
href="https://en.wikipedia.org/wiki/Racism"
>Racism</a
>,
<a
href="https://en.wikipedia.org/wiki/Homophobia"
>Homophobia</a
>,
<a
href="https://en.wikipedia.org/wiki/Transphobia"
>Transphobia</a
>,
<a
href="https://en.wikipedia.org/wiki/Sexism"
>Sexism</a
>,
<a
href="https://en.wikipedia.org/wiki/Xenophobia"
>Xenophobia</a
>,
<a
href="https://en.wikipedia.org/wiki/Social_stigma_of_obesity"
>Fatphobia</a
>, etc.)
</li>
<li>
Not spreading misinformation and/or
disinformation
</li>
<li>
Taking responsibility and accountability for
your own actions
</li>
<li>
Not spreading
<a
href="https://www.rainn.org/news/what-child-sexual-abuse-material-csam"
>CSAM (Child Sexual Abuse Material)</a
>
<ul>
<li>
<a
href="https://en.wikipedia.org/wiki/Lolicon"
>Lolicon/Shoticon</a
>
also falls under this category. No
exceptions.
</li>
</ul>
</li>
<li>Respect for other Matrix users</li>
<li>
Respect for server's resources: they are not
unlimited!
</li>
<li>
Other basic human decency rules, which are
common knowledge ...
</li>
</ul>
</li>
<li>
Spreading personal information without the person's
(or self) consent, sometimes also known as
<a href="https://en.wikipedia.org/wiki/Doxing"
>Doxing</a
>
and its "minor" forms.
</li>
<li>
Content that violations the intellectual property
rights of others is disallowed, this also ties in
with law.
</li>
<li>
Sending bulk unsolicited messages to others (spam)
is disallowed.
</li>
<li>Harassing and stalking others is disallowed.</li>
<li>
Causing any other form of harm to other individuals,
jurisdictions, systems, etc. is also disallowed
(such as
<a
href="https://en.wikipedia.org/wiki/Denial-of-service_attack"
>(D)DoS attacks</a
>)
</li>
<li>
Other acts which are seen as abusive by the
administrators of this homeserver is also seen as a
violation of the guidelines
</li>
</ul>
<i id="g-tldr"
><a href="#g-tldr">TL;DR</a>? Be decent, follow the law,
and don't abuse what you are given.</i
>
</div>
</main>
<footer id="license-cc0">
<p
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dct="http://purl.org/dc/terms/"
id="license"
>
<a
property="dct:title"
rel="cc:attributionURL"
href="https://ari.lt/page/matrix"
>Ari-web Matrix homeserver (ari.lt/matrix.ari.lt)
statement document</a
>
by
<a
rel="cc:attributionURL dct:creator"
property="cc:attributionName"
href="https://ari.lt/"
>Ari Archer</a
>
is marked with
<a
href="http://creativecommons.org/publicdomain/zero/1.0?ref=chooser-v1"
target="_blank"
rel="license noopener noreferrer"
style="display: inline-block"
>
CC0 1.0 Universal
<img
style="
height: 22px !important;
margin-left: 3px;
vertical-align: text-bottom;
"
src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"
/>
<img
style="
height: 22px !important;
margin-left: 3px;
vertical-align: text-bottom;
"
src="https://mirrors.creativecommons.org/presskit/icons/zero.svg?ref=chooser-v1"
/>
</a>
</p>
<a href="https://ari.lt/"
><img
src="https://ari.lt/badge.png"
loading="lazy"
alt="ari-web badge"
height="31px"
width="88px"
/></a>
</footer>
</article>
</body>
</html>

View file

@ -1,92 +0,0 @@
[*] WELCOME TO THE I N T E R N E T...
+=================== WHY DOES THIS PAGE EVEN EXIST? =====================+
|| For short: to fill up my website. ||
|| ||
|| This page is completely accesible to anyone, any system can handle text. ||
|| Sometimes I wanna get a break from all of those <tags/> and CSS and stuff. ||
|| I also want more content on this website so I decided to make this. ||
|| People using a browser like links can also easily view this page. ||
|| ||
|| This page isn't meant to look pretty, it's just meant to.. do almost nothing, ||
|| that's the point of this page. ||
|| I will try to keep updating this page when I'm out of ideas heh. ||
+=================================================================================+
-********************************************- [BLOGS] -***********************************************-
2021.08.07, 17:35 EEST [YYYY/MM/DD]
Hey, sorry for not updating y'all, today was a very calm day. It's cold here.
I like days like this, I've been laying in bed all day hah..
To be honest it's so weird talking about myself, I don't really know what to say lol,
I'm really boring haha. to be honest I'm thinking of remaking this site with a backend,
or maybe I'll just add a space for comments using disqus, but I'm worries about y'all's privacy
and in general bloat. If you'd like me to add it make a new issue in https://github.com/TruncatedDinosour/website/issues
and I'll add it :).
I have been not wanting to code lately, I just have been watching some youtuve videos hah,
though for the past two days I wanted to do these two things in C++:
* "Play with memory" game
* Playing around with classes w/ fake crypto currency
it sounds kinda fun hah.
I restyled the minimal page and I think it looks pretty good now hah, it's nice.
well have a nice day and listen to what the little cow says:
______________________________________
/ Stay healthy, wear a mask and have a \
\ nice day :) /
--------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
- Ari
--------------------------------------------------------------------------------------------------------
2021.08.10, 17:00 EEST [YYYY/MM/DD]
Hey, my site is now on wiby! wiby is a search engine for minimal sites and one of them
is mine :) you can find my pages by looking up "ari-web" on wiby: https://wiby.me/?q=ari%2Dweb .
It's quite a cool thing and you can discover nice and intresting things there hah.
The web was supposed to be minimal and now as we have more resources developers
don't care as much to make it minimal, wiby tries to accomplish this and it's doing a good job at it.
I also have discoved few minimal protocols: gopher and gemini.
Gopher is a text-only minimal protocol and is faily old, even older than http and https,
it's really light, but it really lacks some stuff like pictures for example, but
that's where gemini comes in, it has more support for "fancy" stuff when still staying pretty light
and it's also faily new, it came out in 2019 and it's still being developed, I'd suggest you to try it.
A good browser I found for gopher, http, https and gemini is kristall, it's pretty cool.
anyway, Try to keep the web minimal and use as little as you can until you make it look the way you want,
have a nice day.
- Ari
--------------------------------------------------------------------------------------------------------
2021.10.04, 22:55 EEST [YYYY/MM/DD]
Lol, today is a crazy day... python 3.10 has been released, android 12A has
been released and facebook + all its services have gone down. I'm kinda happy
that facebook and all of its services gone down lol - less spyware on the
internet heh.
Though it also has affected me negatively, all spyware consuming normies
started signing up for telegram lol and it got pretty slow so it's annoying
me. It takes like 8 seconds to send one message heh, so yeah, annoying. I
might even switch to another messenger if this doesn't stop or gets worse.
Also one exciting thing - python 3.10 released! it seems pretty cool. The
`match` statement seems nice and I can see it reducing my code size, might do
some refactoring when it gets put on gentoo repos, but eh, idrk.
Anyway, thanks for listening to my rant :) See you in the next blog post in
like 2 months xD
- Ari
-********************************************-_________-***********************************************-

View file

@ -1,298 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="keywords"
content="linux, website, vpn, privacy, novpn, security, money, trust, programming, ari, terminal, dark, opensource"
/>
<meta name="description" content="NoVPN - Why you shouldn't use VPNs" />
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<title>Ari::web -&gt; NoVPN</title>
<link rel="stylesheet" href="/content/styles/clean/index.min.css" />
<link rel="stylesheet" href="/content/styles/novpn/index.min.css" />
<link rel="stylesheet" href="/content/styles/noscript/index.css" />
<script type="text/javascript">
<!--//--><![CDATA[//><!--
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* Copyright (C) 2022 Ari Archer
*
* The JavaScript code in this page is free software: you can redistribute
* it and/or modify it under the terms of the GNU General Public License
* (GNU GPL) as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version. The code is
* distributed WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL
* for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided
* you include this license notice and a URL through which recipients can
* access the Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
//--><!]]>
</script>
<script src="/content/js/novpn/matrix.js" defer></script>
<script src="/content/js/novpn/index.js" defer></script>
</head>
<body>
<canvas id="matrix"></canvas>
<div class="content">
<div class="page-intro">
<h1>
NoVPN - fast, private, secure and free
<noscript>
<span ns
>(No JS version (go to <a href="/git">/git</a> for
the source code if you want))</span
>
</noscript>
</h1>
<br />
<p>
Tired of companies spying on you? NoVPN might be the "VPN"
for you, visitor
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="
display: inline;
height: 1em;
vertical-align: top;
"
alt="visitor count"
/>.
<a href="#!" onclick="scrollDown();">Read more.</a>
</p>
</div>
</div>
<br />
<div class="content">
<div class="page-intro">
<h1>What is NoVPN?</h1>
<br />
<p>
NoVPN is a
<a href="/" target="_blank">page on my website</a> to
encourage people to not use VPNs if they don't have a use
for them.
<a href="#!" onclick="scrollDown();">Read more.</a>
</p>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>I use ExpressVPN, NordVPN, etc. are these good options?</h1>
<br />
<p>
No. These VPNs collect enourmous ammount of your data and
sell it. ExpressVPN
<a
href="//english.almayadeen.net/articles/analysis/exclusive:-expressvpn-insider-tells-all-on-companys-israelua"
target="_blank"
>hires literal spies</a
>
and NordVPN had
<a
href="//blog.malwarebytes.com/cybercrime/privacy/2021/03/21-million-free-vpn-users-data-exposed"
target="_blank"
>a huge data breach</a
>. These are just two examples, most proprietary VPNs are or
have faced this sort of issue.
<a href="#!" onclick="scrollDown();">Read more.</a>
</p>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>
But people, my friends and my favourite creators are telling
me that my data will be exposed otherwise
</h1>
<br />
<p>
That can technically happen, BUT, most sites use
<a href="//en.wikipedia.org/wiki/HTTPS" target="_blank"
>the HTTPS protocol</a
>
which is very secure and it's very unlikely your data will
be exposed while visiting HTTPS sites. But if you use
<a
href="//en.wikipedia.org/wiki/Hypertext_Transfer_Protocol"
target="_blank"
>only HTTP</a
>
which is not secure and someone is targeting you, yes they
will get your data, but most HTTP sites are very simple and
don't even give you the option to put in any details. And
please remember that your favourite creators are paid to lie
to you and they probably themselves don't know what they're
saying so before you believe someone think to yourself "was
there money involved" and "is there a chance that they
actually know what they're talking about". Don't trust
anyone.
<a href="#!" onclick="scrollDown();">Read more.</a>
</p>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>
Hm okay, but what about open source VPNs like riseup or
proton VPN
</h1>
<br />
<p>
VPNs without a use... well are just useless... Don't use a
VPN if you don't have a use. Because:
<br />
</p>
<ul>
<li>It slows down your connection</li>
<li>You're trusting someone else with your data</li>
<li>
If you're using only a free trial - you're also wasting
money
</li>
<li>
It gives you a
<a
href="//www.merriam-webster.com/dictionary/false%20sense%20of%20security"
target="_blank"
>false sense of security</a
>
</li>
<li>
It
<a href="//tech.co/vpn/are-vpns-legal" target="_blank"
>could be illegal in your country</a
>
</li>
</ul>
<br />
Please think about if you <b>REALLY</b> need a VPN or are you
just getting it just to waste money, bandwidth and your
privacy...
<a href="#!" onclick="scrollDown();">Read more.</a>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>What are good use cases of VPNs</h1>
<br />
<p></p>
<ul>
<li>Bypassing your countie's restrictions</li>
<li>Pirating content off the internet</li>
<li>
A site that is connected through a VPN to access
restricted content (e.g
<a href="//www.hackthebox.com/" target="_blank"
>Hack The Box</a
>)
</li>
<li>Bypassing IP range bans</li>
<li>
Bypassing sites restricting certain features if you're
in a certain region
</li>
</ul>
<a href="#!" onclick="scrollDown();">Read more.</a>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>
You're telling us "not to trust anyone", does that include
you?
</h1>
<br />
<p>
Yes. You should not trust me or anyone, you should do your
own research on unbias sources.
<a href="#!" onclick="scrollDown();">Read more.</a>
</p>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>
Why do people use VPNs so much without knowing what it is,
does or is running
</h1>
<br />
<p>
They are being influenced by their favourite content
creators on social media and then they influence their
friend and they their friends and so on. But one friend
eventually realised it's bullshit and doesn't spread it,
which is when it stops, be the person who stops the
spreading of this bs and stop giving companies data to sell.
<a href="#!" onclick="scrollDown();">Read more.</a>
</p>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>Why did you even call it a "VPN" in the beginning</h1>
<br />
<p>
To get your or anyone who acrosses this attention.
<a href="#!" onclick="scrollDown();">Read more.</a>
</p>
</div>
</div>
<div class="content">
<div class="page-intro">
<h1>Finalizing</h1>
<br />
<p></p>
<ul>
<li>Don't use proprietary VPNs</li>
<li>Don't use VPNs without a proper use</li>
<li>Don't fall for bias people's sugartalk</li>
<li>Don't trust anyone</li>
<li><a href="https://www.privacyguides.org/en/vpn/">Check this article out by privacyguides.org</a></li>
</ul>
<a href="#!" onclick="scrollUp();">Back to top.</a>
</div>
</div>
</body>
</html>

View file

@ -1,111 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Reset</title>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<meta name="description" content="My personal website" />
<meta
name="keywords"
content="website, webdev, linux, programming, ari, terminal, dark, account"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<link rel="stylesheet" href="/content/styles/generic/main.min.css" />
<link rel="stylesheet" href="/content/styles/noscript/index.css" />
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<style>
*,
*::before,
*::after {
scroll-behavior: smooth !important;
}
.title {
text-align: center;
margin: 1em;
}
.buttons * {
color: white;
padding: 1em;
font-size: 1.4em;
}
.buttons {
text-align: center;
}
</style>
<script type="text/javascript">
<!--//--><![CDATA[//><!--
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* Copyright (C) 2022 Ari Archer
*
* The JavaScript code in this page is free software: you can redistribute
* it and/or modify it under the terms of the GNU General Public License
* (GNU GPL) as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version. The code is
* distributed WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL
* for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided
* you include this license notice and a URL through which recipients can
* access the Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
//--><!]]>
</script>
<script>
function reset() {
if (
confirm("Are you sure that you want to reset your account?")
) {
window.localStorage.clear();
alert("Your accout has been reset");
window.location = "/";
}
}
</script>
</head>
<body>
<h1 class="title">
Do you want to reset your account,
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="display: inline; height: 1em; vertical-align: top"
alt="visitor count"
/>?
<noscript>
<span ns
>(No JS enabled, will not work, although if this is just a
trust thing, <a href="/git">see the source code</a>)</span
>
</noscript>
</h1>
<div class="buttons">
<button onclick="reset();">Yes</button>
<button onclick="window.location = '/';">No</button>
</div>
</body>
</html>

View file

@ -1,167 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; Thanks</title>
<meta name="description" content="Thank you, my supporters" />
<meta
name="keywords"
content="thanks, donations, ari-web, bitcoin, paypal, thank you for donating, gratitude, open source, foss, free, website, ari archer, personal website"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="article" />
<meta name="color-scheme" content="dark" />
<meta name="theme-color" content="#121212" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<link rel="stylesheet" href="/content/styles/index/index.css" />
<link rel="stylesheet" href="/content/styles/thanks/index.css" />
</head>
<body>
<header>
<h1>thank you for supporting,</h1>
</header>
<br />
<article>
<ul id="thanks">
<li>
<b>2023/11/24</b> : <b>Casey, my best friend</b> for buying
me
<b
><a href="https://ari.lt/">ari.lt</a> for
<span>11.99 euro</span></b
>
</li>
<li>
<b>2023/12/26</b> : <b>Marco G.</b> for a <span>5 euro</span> donation with message
<b>"Some moneyz💜"</b> on <b>paypal</b>
</li>
<li>
<b>2023/11/30</b> : <b>Mario G.</b> for an
<span>80 euro cent, 42 cent excluding fees</span> ( the
answer to life !! ) donation on
<b>paypal</b>
</li>
<li>
<b>2024/05/05</b> : <b>???</b> for a
<span>0.0019 XMR</span> ( 23 euro cent ) donation on
<b>monero</b>
</li>
</ul>
<h2>where is this money being used ?</h2>
<ul id="usage">
<li>
pay for <a href="https://ari.lt/">ari.lt</a>,
<span>11.99 euro yearly</span>
since 2023, hostinger
</li>
<li>
pay for
<a href="http://62.171.174.136/">62.171.174.136</a> contabo
VPS, <span><del>5.45</del> 11.9 euro monthly</span> since <del>2023/10/14</del> 2024/01/14
</li>
<li>
other misc charges, around <span>12 euro yearly</span> since
2020 or so ( tools, taxes, irl requirements to run this
website for me )
</li>
<li>
<span>13.37 USD ( 12.77 EUR ) donation</span> for
<a
href="https://psfmember.org/civicrm/contribute/transact/?reset=1&id=49"
>python software foundation ( psf )</a
>
on 2023/12/24 to give back to the open source community and
support tools ari-web uses, 1337 for the funny number
</li>
<li>
<span>2 USD cents</span> sent to a
<a href="https://us.ari.lt/@nsa">@nsa's on ari-web</a>
friend, as a joke, but i did get something in return -- meme
information about icann on 2023/12/09 [note : coming from
<a href="https://matrix.to/#/#lounge:envs.net"
>#lounge:envs.net</a
>, a community im a part of]
</li>
<li>
<span
>4 EUR cents ( converted to 2 USD cents with taxes
)</span
>
sent to support
<a href="https://pain.agency/">pain.agency</a>, bc i thought
it may b funny lmao on 2023/12/09 [note : coming from
<a href="https://matrix.to/#/#lounge:envs.net"
>#lounge:envs.net</a
>, a community im a part of]
</li>
<li><span>32.67 EUR</span> for <a href="https://ari.lt/">ari.lt</a> domain til 2027/11/25, paid on 2024/01/09</li>
</ul>
<br />
<p>
in general, ari-web takes around
<span>100 euro to maintain yearly</span>, a lot of it coming
from my own pocket as a barely-working 16 year old student, i've
only started documenting where i spend the money since
2023/11/24 or so, here are some undisclosed expenses from when i
wasnnt documenting it :
</p>
<br />
<ul>
<li>
domain expenses for ari-web.xyz ( no longer in use, should
expire in 2025 )
</li>
<li>linode VPS costs</li>
<li>
still those misc charges that come up ( tools, taxes, irl
requirements to run this website for me )
</li>
<li>probs other stuff i cant remember lol</li>
</ul>
</article>
<br />
<footer>
<p>
i appriciate and value these donations a lot, thank you for
supporting me and this project &lt;3
<a href="https://ari.lt/">
<img
src="https://ari.lt/badge.png"
loading="lazy"
alt="ari-web badge"
height="31px"
width="88px"
/>
</a>
</p>
<br />
<i>
feel free to support me on <del>paypal ( ari.web.xyz@gmail.com ) ( not here anymore )</del>, <a href="/btc">bitcoin</a>, <a href="/xmr">monero</a> or <a href="/git">code :)</a>,
when donating feel free to specify a note to possibly link to your own website, or social media or anything :) ( or email it to me when not possible )
</i>
</footer>
</body>
</html>

View file

@ -1,110 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; TTY</title>
<meta name="description" content="TTY theme generator by ari-web" />
<meta
name="keywords"
content="tty, theme, linux, cli, terminal, generator, theme-generator, foss, unlicense"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<script type="text/javascript">
<!--//--><![CDATA[//><!--
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* Copyright (C) 2022 Ari Archer
*
* The JavaScript code in this page is free software: you can redistribute
* it and/or modify it under the terms of the GNU General Public License
* (GNU GPL) as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version. The code is
* distributed WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL
* for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided
* you include this license notice and a URL through which recipients can
* access the Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
//--><!]]>
</script>
<script
type="module"
src="/content/js/ttytheme/events.js"
defer
></script>
<script type="module" src="/content/js/ttytheme/menu.js" defer></script>
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<link rel="stylesheet" href="/content/styles/ttytheme/styles.css" />
</head>
<body>
<h1>
Linux TTY theme generator by Ari::web for over
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="display: inline; height: 1em; vertical-align: top"
alt="visitor count"
/>
people to see
</h1>
<h2>
For faster theming see
<a href="/page/ttytheme/settings">settings</a>
</h2>
<h2>
All themes generated here are under
<a href="https://unlicense.org/" target="_blank">unlicense</a>, but
credit is appriciated :), source code:
<a href="/git" target="_blank">git</a>
</h2>
<noscript>
<div class="nojs">
<h1>This generator won't work without JavaScript enabled :(</h1>
<h1>
If you don't trust me, check the JavaScript yourself
<a
href="https://github.com/TruncatedDinosour/website/tree/terminal/content/js/ttytheme"
target="_blank"
>on GitHub</a
>
</h1>
</div>
</noscript>
<div class="buttons">
<button id="clear-states">Clear saved slider states</button>
<button id="generate-theme">Generate (refresh) theme</button>
<button id="export-file">Export theme as file</button>
<button id="copy">Copy to clipboard</button>
</div>
<div class="split">
<div id="menu"></div>
<pre id="theme-output" class="output"></pre>
</div>
</body>
</html>

View file

@ -1,96 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ari::web -&gt; TTYSettings</title>
<meta
name="description"
content="TTY theme generator's by ari-web settings"
/>
<meta
name="keywords"
content="tty, theme, linux, cli, terminal, generator, theme-generator, foss, unlicense, settings"
/>
<meta
name="robots"
content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"
/>
<meta property="og:type" content="website" />
<meta name="color-scheme" content="dark" />
<script type="text/javascript">
<!--//--><![CDATA[//><!--
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* Copyright (C) 2022 Ari Archer
*
* The JavaScript code in this page is free software: you can redistribute
* it and/or modify it under the terms of the GNU General Public License
* (GNU GPL) as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version. The code is
* distributed WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL
* for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided
* you include this license notice and a URL through which recipients can
* access the Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
//--><!]]>
</script>
<script
type="module"
src="/content/js/ttytheme/settings.js"
defer
></script>
<link rel="stylesheet" href="/content/styles/clean/index.css" />
<link rel="stylesheet" href="/content/styles/ttytheme/styles.css" />
<link rel="stylesheet" href="/content/styles/ttytheme/settings.css" />
</head>
<body>
<h1>
Linux TTY theme generator by Ari::web settings for visitor
<img
id="visitors"
src="http://us.ari.lt/counter/@ari/kpnuBU0qISQlfR7cSNwwg9oW8654-RguVrXh9JOBGo3EP1-bm7aF9ROuQO6Jqesk.svg"
style="display: inline; height: 1em; vertical-align: top"
alt="visitor count"
/>
</h1>
<h3><a href="/page/ttytheme">TTYTheme home</a></h3>
<br />
<noscript>
<div class="nojs">
<h1>This generator won't work without JavaScript enabled :(</h1>
<h1>
If you don't trust me, check the JavaScript yourself
<a
href="https://github.com/TruncatedDinosour/website/tree/terminal/content/js/ttytheme"
target="_blank"
>on GitHub</a
>
</h1>
</div>
</noscript>
<ul id="clr-fields"></ul>
<button id="commit">Commit</button>
</body>
</html>

21
pyproject.toml Normal file
View file

@ -0,0 +1,21 @@
[tool.pyright]
pythonVersion = "3.10"
exclude = [
"venv",
"**/node_modules",
"**/__pycache__",
".git"
]
include = ["src", "scripts"]
venv = "venv"
stubPath = "src/stubs"
typeCheckingMode = "strict"
useLibraryCodeForTypes = true
reportMissingTypeStubs = true
[tool.mypy]
exclude = [
"^venv/.*",
"^node_modules/.*",
"^__pycache__/.*",
]

View file

@ -1,20 +0,0 @@
# Block AI
User-agent: ChatGPT-User
User-agent: CCBot
User-agent: ClaudeBot
User-agent: Claude-Web
User-agent: cohere-ai
User-agent: anthropic-ai
User-agent: Amazonbot
User-agent: Diffbot
User-agent: Google-Extended
User-agent: GPTBot
User-agent: magpie-crawler
User-agent: PerplexityBot
Disallow: /
# Allow everything else :)
User-agent: *
Allow: /
Sitemap: https://ari.lt/sitemap.xml

View file

@ -1,46 +0,0 @@
#!/usr/bin/env bash
set -e
mkdata() {
while read -r line; do
printf '"%s",' "$line"
done
}
main() {
printf ' * %s... ' 'Generating pages api'
{
printf '%s' '['
for page in page/*; do
echo "/$page"
done | mkdata | sed 's/,$//'
echo ']'
} >api/pages.json
printf ' * %s... ' 'Generating api list'
# shellcheck disable=SC2094
{
printf '%s' '['
find api -type f -exec basename {} \; | mkdata | sed 's/,$//'
echo ']'
} >api/apis.json
echo 'done'
printf ' * %s... ' 'Generating api hashes'
mkdir -p -- api_hash
rm -rf -- api_hash/*
for api in api/*; do
api_base="${api##*/}"
sha256sum "$api" | awk '{ print $1 }' | tr -d '\n' >"api_hash/${api_base//./_}_hash.txt"
done
echo 'done'
}
main "$@"

View file

@ -1,19 +0,0 @@
#!/usr/bin/env bash
set -e
S='./scripts'
SCRIPTS=(sass minjs minhtml apis)
main() {
for script in "${SCRIPTS[@]}"; do
_s="$S/$script.sh"
chmod +x -- "$_s"
"$_s" &
done
wait
}
main "$@"

View file

@ -1,10 +0,0 @@
#!/usr/bin/env sh
set -e
main() {
echo '>> Removing all .min.css files'
find content/ -not -ipath "./node_modules/*" -name '*.min.css' -type f -exec rm -rfv {} \;
}
main "$@"

View file

@ -1,16 +0,0 @@
#!/usr/bin/env sh
set -e
main() {
printf '%s' 'Make sure you added an entry to api/usage.json'
read -r _
git diff >/tmp/ari-web.diff
git add -A
git commit -sa
git push -u origin "$(git rev-parse --abbrev-ref HEAD)"
}
main "$@"

View file

@ -1,19 +0,0 @@
#!/usr/bin/env sh
set -e
main() {
if [ "$CI" ]; then
echo 'Minifying all HTML'
find . -not -ipath "./node_modules/*" -type d -exec sh -c 'find {} -maxdepth 0 -name ".minexclude"' \; -prune -o -type f -name "*.html" \
-exec html-minifier --collapse-whitespace -o {}.min {} \; \
-exec rm {} \; \
-exec mv {}.min {} \; \
-exec sh -c "printf '\n\n%s\n' '<!-- source code @ /git -->' >>\"\$1\"" -- {} \;
else
echo 'Not minifying HTML in non-CI mode'
fi
}
main "$@"

View file

@ -1,19 +0,0 @@
#!/usr/bin/env sh
set -e
main() {
if [ "$CI" ]; then
echo 'Minifying all JavaScript'
find content/js/ -not -ipath "./node_modules/*" -type f \
-name "*.js" ! -name "*.min.*" ! -name "vfs_fonts*" \
-exec uglifyjs --compress sequences=true,conditionals=true,booleans=true -o {}.min {} \; \
-exec rm {} \; \
-exec mv {}.min {} \;
else
echo 'Not in CI mode, skipping JS minification'
fi
}
main "$@"

View file

@ -1,18 +0,0 @@
#!/usr/bin/env sh
set -e
main() {
if [ "$CI" ]; then
echo 'Minifying APIs'
for api in api/*; do
api_cont="$(sed 's/^\s*//g; s/: /:/g' "$api" | tr -d '\n')"
printf '%s' "$api_cont" >"$api"
done
else
echo 'Not minifying APIs as not in CI mode'
fi
}
main "$@"

Some files were not shown because too many files have changed in this diff Show more