diff --git a/.envrc b/.envrc
deleted file mode 100644
index 987d5ea..0000000
--- a/.envrc
+++ /dev/null
@@ -1 +0,0 @@
-export TODO_FILE=$PWD/TODO
diff --git a/.gitignore b/.gitignore
index 1fa18c4..80abc54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,2 @@
-TODO.bak
-*.mp4
-channels/index.html
-node_modules
.DS_Store
+tags
diff --git a/Makefile b/Makefile
index d81310b..7614d7b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,17 @@
-dist: fake
- rsync -avzP --exclude .git/ ./ charon:/www/damus.io/
+
+all: fake
+ @echo "you don't need to build anything."
+
+tags: fake
+ find js -name '*.js' | grep -v noble-secp256k1 | xargs ctags > "$@"
+
+emojiregex: fake
+ @curl -sL 'https://raw.githubusercontent.com/mathiasbynens/emoji-test-regex-pattern/main/dist/latest/javascript.txt'
+
+dist:
+ rsync -avzP --delete ./ charon:/www/damus.io/web/
+
+dist-staging:
+ rsync -avzP ./ charon:/www/damus.io/web-staging/
.PHONY: fake
diff --git a/README.md b/README.md
index e39c86c..f425002 100644
--- a/README.md
+++ b/README.md
@@ -1,23 +1,62 @@
+# Damus Web
-# damus.io
+Here lies the code for the Damus web app, a client for the Nostr protocol. The
+goal of this client is to be a better version of Twitter, but not to reproduce
+all of it's functionality.
-The damus.io website
+[Issue Tracker](https://todo.sr.ht/~tomtom/damus-web-issues)
-## Damus Web
+## Roadmap
-You can find the damus web app in the `web` directory
+Here is what is confirmed for development.
-## Contributing
+ - [ ] Share event
+ - [ ] Profile view (with ability to follow user)
+ - [ ] Edit metadata (from profile view)
+ - [ ] Global timeline view
+ - [ ] Notifications view
+ - [ ] Settings view (with ability to configure relays)
+ - [ ] Multiple reaction picker
+ - [ ] Direct Messages (subject to discussion)
-You can send me patches over nostr or [email][email] at jb55@jb55.com
+## Contribution Guide
-You can also just hit me up with a git-request-pull and ask me to pull one of
-your branches. eg, from github:
+There are rules to contributing to this client. Please ensure you read them
+before making changes and supplying patch notes.
- git request-pull origin/master https://github.com/bob/my-damus-io-fork
+ - No transpilers. All source code should work out of the box.
+ - Keep source code organised. Refer to the folder structure. If you have a
+ question, ask it.
+ - Do not include your personal tools in the source code. Use your own scripts
+ outside of the project. This does not include build tools such as Make.
+ - Use tabs & write JS with snake_case. End of discussion.
+ - Do not include binary files.
+ - No NPM (and kin) environments. If you need a file from an external resource
+ mark the location in the "sources" file and add it to the repo.
+ - No frameworks. Learn the browser tools and write good code.
+ - No experimental browser APIs.
+ - Do not write animations in JavaScript, CSS only. Keep them short and snappy.
+ Animations should not be a forefront, but an enjoyable addition.
+ - All new & modified code should be properly documented.
+ - Source code should be readable in the browser.
-If you email or nostr me the output of this command I will be able to review &
-merge your changes!
+These rules are subject to discussion.
+
+## Style Guide
+
+TODO Write about the style guide.
+
+## Terminology
+
+ * Sign Out - Not "log out", "logout", "log off", etc.
+ * Sign In - Not "login", "log in", "signin", "sign-in", etc.
+ * Share - Not "boosted", "retweeted", "repost", etc.
+ * Send - Not "tweet", "toot", "post", etc.
+ * Link - Not "share".
+
+## Known Issues
+
+ * You cannot send events when running from an IP address that is not secure.
+ Work arounds are not known at this time.
-[email]: https://git-send-email.io/
diff --git a/TODO b/TODO
deleted file mode 100644
index bac2b86..0000000
--- a/TODO
+++ /dev/null
@@ -1 +0,0 @@
-video player needs to be outside the timeline, since re-rendering destroys it
diff --git a/android/index.html b/android/index.html
deleted file mode 100644
index ea4f69b..0000000
--- a/android/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
diff --git a/channels/package-lock.json b/channels/package-lock.json
deleted file mode 100644
index 711e766..0000000
--- a/channels/package-lock.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "name": "stats",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
- },
- "ejs": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz",
- "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==",
- "requires": {
- "jake": "^10.8.5"
- }
- },
- "filelist": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
- "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
- "requires": {
- "minimatch": "^5.0.1"
- },
- "dependencies": {
- "minimatch": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
- "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "jake": {
- "version": "10.8.5",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz",
- "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==",
- "requires": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
- "filelist": "^1.0.1",
- "minimatch": "^3.0.4"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "requires": {
- "brace-expansion": "^1.1.7"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- }
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
-}
diff --git a/channels/package.json b/channels/package.json
deleted file mode 100644
index eafcbc6..0000000
--- a/channels/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "stats",
- "version": "1.0.0",
- "description": "damus stats",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "jb55",
- "license": "ISC",
- "dependencies": {
- "ejs": "^3.1.8"
- }
-}
diff --git a/css/custom.css b/css/custom.css
deleted file mode 100644
index e3dd6e1..0000000
--- a/css/custom.css
+++ /dev/null
@@ -1,191 +0,0 @@
-@import url('https://rsms.me/inter/inter.css');
-html { font-family: 'Inter', sans-serif; }
-@supports (font-variation-settings: normal) {
- html { font-family: 'Inter var', sans-serif; }
-}
-
-.container {
- max-width: 800px;
-}
-
-.blog-container {
- font-family: serif;
-}
-
-a {
- text-decoration: underline;
- font-family: -system-ui, sans-serif;
- color: white;
-}
-
-a:visited {
- color: #eee;
-}
-
-label {
- white-space: nowrap;
-}
-
-blockquote {
- font-style: italic;
-}
-
-blockquote:before {
- color: #ccc;
- content: open-quote;
- display: block;
- position: relative;
- left: -0.6em;
- top: 0.3em;
- font-size: 4em;
- line-height: 0.1em;
- vertical-align: -0.4em;
-}
-
-blockquote:after {
- color: #ccc;
- content: close-quote;
- font-size: 4em;
- position:relative;
- top: 0.2em;
- left: -0.1em;
- line-height: 0.1em;
- vertical-align: -0.4em;
-}
-
-.author {
- font-weight: bold;
-}
-
-label input {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-ul.socials {
- margin: 0;
- padding: 0;
- list-style-type: none;
- overflow: hidden;
-}
-
-.profile {
- display: flex;
- align-content: center;
- align-items: center;
-}
-
-.socials-container {
- display: flex;
- margin: auto;
- justify-content: space-evenly;
- width: 110px;
-}
-
-ul.socials > li {
- float: left;
- display: block;
- text-align: center;
-}
-
-.socials-container img {
- color: #ff0000;
- width: 20px;
-}
-
-.row {
- margin-bottom: 8rem;
-}
-
-.hero {
- margin-top: 5rem;
- text-align: center;
- clear: left;
-}
-
-.header {
- display: flex;
- margin-left: 50px;
- align-items: center;
-}
-
-.portrait {
- border-radius: 50%;
- width: 100%;
- text-align: center;
- box-shadow: 0px 0px 10px #aaa;
- border: 2px solid white;
-}
-
-.centered {
- text-align: center;
-}
-
-.value-img {
- margin: 2.5rem auto 2.5rem auto;
- width: 100px;
- display: block;
- text-align: center;
-}
-
-.credits {
- margin-top: 10rem;
- text-align: center;
- color: #252D3A;
-}
-
-.code-example {
- width: 80%;
-}
-
-.value-prop {
- margin-top: 3rem;
-}
-
-.value-props {
- margin-bottom: 7rem;
-}
-
-.damus {
- font-size: 4rem;
- letter-spacing: -0.08em;
- font-weight: 100;
- margin-bottom: 20px;
-}
-
-.title {
- font-size: 8rem;
- font-weight: 500;
- letter-spacing: -0.055em;
-}
-
-
-.logo {
- margin-bottom: 0;
- letter-spacing: -0.05em;
-}
-
-.logo img {
- padding-right: 18px;
- width: 60px;
-}
-
-.wizards {
- font-size: 1.5rem;
- top: -2em;
- left: 0.2em;
- position: relative;
- color: #999;
-}
-
-body {
- letter-spacing: -0.044em;
- margin: 3rem 0 10em 0;
- color: white;
- background: linear-gradient(45deg, rgba(28,85,255,1) 0%, rgba(127,53,171,1) 59%, rgba(255,11,214,1) 100%);
-}
-
-input {
- color: #252D3A;
-}
-
diff --git a/css/normalize.css b/css/normalize.css
deleted file mode 100644
index 0edd7c7..0000000
--- a/css/normalize.css
+++ /dev/null
@@ -1,429 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- * user zoom.
- */
-
-html {
- -ms-text-size-adjust: 100%; /* 2 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
- margin: 0;
-}
-
-/* HTML5 display definitions
- ========================================================================== */
-
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block; /* 1 */
- vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
- display: none;
-}
-
-/* Links
- ========================================================================== */
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
- background-color: transparent;
-}
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
- outline: 0;
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-
-b,
-strong {
- font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
- font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-@media only screen and (max-width: 988px)
-{
- h1 {
- font-size: calc(100vw / 12.2);
- }
-}
-
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-
-img {
- border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-
-figure {
- margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
- overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- * Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit; /* 1 */
- font: inherit; /* 2 */
- margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-
-button {
- overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
- text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- * and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- * `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button; /* 2 */
- cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
- line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
- * (include `-moz` to future-proof).
- */
-
-input[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box; /* 2 */
- box-sizing: content-box;
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
- border: 0; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
- font-weight: bold;
-}
-
-/* Tables
- ========================================================================== */
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
diff --git a/web/css/responsive.css b/css/responsive.css
similarity index 100%
rename from web/css/responsive.css
rename to css/responsive.css
diff --git a/css/skeleton.css b/css/skeleton.css
deleted file mode 100644
index 2152460..0000000
--- a/css/skeleton.css
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-* Skeleton V2.0.4
-* Copyright 2014, Dave Gamache
-* www.getskeleton.com
-* Free to use under the MIT license.
-* http://www.opensource.org/licenses/mit-license.php
-* 12/29/2014
-*/
-
-
-/* Table of contents
-––––––––––––––––––––––––––––––––––––––––––––––––––
-- Grid
-- Base Styles
-- Typography
-- Links
-- Buttons
-- Forms
-- Lists
-- Code
-- Tables
-- Spacing
-- Utilities
-- Clearing
-- Media Queries
-*/
-
-
-/* Grid
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.container {
- position: relative;
- width: 100%;
- max-width: 960px;
- margin: 0 auto;
- padding: 0 20px;
- box-sizing: border-box; }
-.column,
-.columns {
- width: 100%;
- float: left;
- box-sizing: border-box; }
-
-/* For devices larger than 400px */
-@media (min-width: 400px) {
- .container {
- width: 85%;
- padding: 0; }
-}
-
-/* For devices larger than 550px */
-@media (min-width: 550px) {
- .container {
- width: 80%; }
- .column,
- .columns {
- margin-left: 4%; }
- .column:first-child,
- .columns:first-child {
- margin-left: 0; }
-
- .one.column,
- .one.columns { width: 4.66666666667%; }
- .two.columns { width: 13.3333333333%; }
- .three.columns { width: 22%; }
- .four.columns { width: 30.6666666667%; }
- .five.columns { width: 39.3333333333%; }
- .six.columns { width: 48%; }
- .seven.columns { width: 56.6666666667%; }
- .eight.columns { width: 65.3333333333%; }
- .nine.columns { width: 74.0%; }
- .ten.columns { width: 82.6666666667%; }
- .eleven.columns { width: 91.3333333333%; }
- .twelve.columns { width: 100%; margin-left: 0; }
-
- .one-third.column { width: 30.6666666667%; }
- .two-thirds.column { width: 65.3333333333%; }
-
- .one-half.column { width: 48%; }
-
- /* Offsets */
- .offset-by-one.column,
- .offset-by-one.columns { margin-left: 8.66666666667%; }
- .offset-by-two.column,
- .offset-by-two.columns { margin-left: 17.3333333333%; }
- .offset-by-three.column,
- .offset-by-three.columns { margin-left: 26%; }
- .offset-by-four.column,
- .offset-by-four.columns { margin-left: 34.6666666667%; }
- .offset-by-five.column,
- .offset-by-five.columns { margin-left: 43.3333333333%; }
- .offset-by-six.column,
- .offset-by-six.columns { margin-left: 52%; }
- .offset-by-seven.column,
- .offset-by-seven.columns { margin-left: 60.6666666667%; }
- .offset-by-eight.column,
- .offset-by-eight.columns { margin-left: 69.3333333333%; }
- .offset-by-nine.column,
- .offset-by-nine.columns { margin-left: 78.0%; }
- .offset-by-ten.column,
- .offset-by-ten.columns { margin-left: 86.6666666667%; }
- .offset-by-eleven.column,
- .offset-by-eleven.columns { margin-left: 95.3333333333%; }
-
- .offset-by-one-third.column,
- .offset-by-one-third.columns { margin-left: 34.6666666667%; }
- .offset-by-two-thirds.column,
- .offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
-
- .offset-by-one-half.column,
- .offset-by-one-half.columns { margin-left: 52%; }
-
-}
-
-
-/* Base Styles
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/* NOTE
-html is set to 62.5% so that all the REM measurements throughout Skeleton
-are based on 10px sizing. So basically 1.5rem = 15px :) */
-html {
- font-size: 62.5%; }
-body {
- min-height: 800px;
- font-size: 1.6em; /* currently ems cause chrome bug misinterpreting rems on body element */
- line-height: 1.6;
- font-weight: 400;
- color: #222; }
-
-
-/* Typography
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-h1, h2, h3, h4, h5, h6 {
- margin-top: 0;
- margin-bottom: 2rem;
- font-weight: 300; }
-h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}
-h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
-h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }
-h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
-h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.08rem; }
-h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }
-
-/* Larger than phablet */
-@media (min-width: 550px) {
- h1 { font-size: 5.0rem; }
- h2 { font-size: 4.2rem; }
- h3 { font-size: 3.6rem; }
- h4 { font-size: 3.0rem; }
- h5 { font-size: 2.4rem; }
- h6 { font-size: 1.5rem; }
-}
-
-p {
- margin-top: 0; }
-
-
-/* Links
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-a {
- color: #0595ad;
- text-decoration: none;
-}
-a:hover {
- color: #9BBDF2;
-}
-
-
-/* Buttons
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.button,
-button,
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
- display: inline-block;
- height: 38px;
- padding: 0 30px;
- color: white;
- text-align: center;
- font-size: 11px;
- font-weight: 600;
- line-height: 38px;
- letter-spacing: .1rem;
- text-transform: uppercase;
- text-decoration: none;
- white-space: nowrap;
- background-color: transparent;
- border-radius: 4px;
- border: 1px solid #bbb;
- cursor: pointer;
- box-sizing: border-box; }
-.button:hover,
-button:hover,
-input[type="submit"]:hover,
-input[type="reset"]:hover,
-input[type="button"]:hover,
-.button:focus,
-button:focus,
-input[type="submit"]:focus,
-input[type="reset"]:focus,
-input[type="button"]:focus {
- color: #999;
- border-color: #999;
- outline: 0; }
-.button.button-primary,
-button.button-primary,
-input[type="submit"].button-primary,
-input[type="reset"].button-primary,
-input[type="button"].button-primary {
- color: #FFF;
- background-color: #33C3F0;
- border-color: #33C3F0; }
-.button.button-primary:hover,
-button.button-primary:hover,
-input[type="submit"].button-primary:hover,
-input[type="reset"].button-primary:hover,
-input[type="button"].button-primary:hover,
-.button.button-primary:focus,
-button.button-primary:focus,
-input[type="submit"].button-primary:focus,
-input[type="reset"].button-primary:focus,
-input[type="button"].button-primary:focus {
- color: #FFF;
- background-color: #1EAEDB;
- border-color: #1EAEDB; }
-
-
-/* Forms
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea,
-select {
- height: 38px;
- padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
- background-color: #fff;
- border: 1px solid #D1D1D1;
- border-radius: 4px;
- box-shadow: none;
- box-sizing: border-box; }
-/* Removes awkward default styles on some inputs for iOS */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
-textarea {
- min-height: 65px;
- padding-top: 6px;
- padding-bottom: 6px; }
-input[type="email"]:focus,
-input[type="number"]:focus,
-input[type="search"]:focus,
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="url"]:focus,
-input[type="password"]:focus,
-textarea:focus,
-select:focus {
- border: 1px solid #33C3F0;
- outline: 0; }
-label,
-legend {
- /* display: block; */
- margin-bottom: .5rem;
- /* font-weight: 600; */ }
-fieldset {
- padding: 0;
- border-width: 0; }
-input[type="checkbox"],
-input[type="radio"] {
- display: inline; }
-label > .label-body {
- display: inline-block;
- margin-left: .5rem;
- font-weight: normal; }
-
-
-/* Lists
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-ul {
- list-style: circle inside; }
-ol {
- list-style: decimal inside; }
-ol, ul {
- padding-left: 0;
- margin-top: 0; }
-ul ul,
-ul ol,
-ol ol,
-ol ul {
- margin: 1.5rem 0 1.5rem 3rem;
- font-size: 90%; }
-li {
- margin-bottom: 0.2rem; }
-
-
-/* Code
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-code {
- padding: .2rem .5rem;
- margin: 0 .2rem;
- font-size: 90%;
- white-space: nowrap;
- background: #F1F1F1;
- border: 1px solid #E1E1E1;
- border-radius: 4px; }
-pre > code {
- display: block;
- padding: 1rem 1.5rem;
- white-space: pre; }
-
-
-/* Tables
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-th,
-td {
- padding: 12px 15px;
- text-align: left;
- border-bottom: 1px solid #E1E1E1; }
-th:first-child,
-td:first-child {
- padding-left: 0; }
-th:last-child,
-td:last-child {
- padding-right: 0; }
-
-
-/* Spacing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-button,
-.button {
- margin-bottom: 1rem; }
-input,
-textarea,
-select,
-fieldset {
- margin-bottom: 1.5rem; }
-pre,
-blockquote,
-dl,
-figure,
-table,
-p,
-ul,
-ol,
-form {
- margin-bottom: 2.5rem; }
-
-
-/* Utilities
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.u-full-width {
- width: 100%;
- box-sizing: border-box; }
-.u-max-full-width {
- max-width: 100%;
- box-sizing: border-box; }
-.u-pull-right {
- float: right; }
-.u-pull-left {
- float: left; }
-
-
-/* Misc
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-hr {
- margin-top: 3rem;
- margin-bottom: 3.5rem;
- border-width: 0;
- border-top: 1px solid #E1E1E1; }
-
-
-/* Clearing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-
-/* Self Clearing Goodness */
-.container:after,
-.row:after,
-.u-cf {
- content: "";
- display: table;
- clear: both; }
-
-
-/* Media Queries
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/*
-Note: The best way to structure the use of media queries is to create the queries
-near the relevant code. For example, if you wanted to change the styles for buttons
-on small devices, paste the mobile query code up in the buttons section and style it
-there.
-*/
-
-
-/* Larger than mobile */
-@media (min-width: 400px) {}
-
-/* Larger than phablet (also point when grid becomes active) */
-@media (min-width: 550px) {}
-
-/* Larger than tablet */
-@media (min-width: 750px) {}
-
-/* Larger than desktop */
-@media (min-width: 1000px) {}
-
-/* Larger than Desktop HD */
-@media (min-width: 1200px) {}
diff --git a/web/css/styles.css b/css/styles.css
similarity index 100%
rename from web/css/styles.css
rename to css/styles.css
diff --git a/web/css/utils.css b/css/utils.css
similarity index 100%
rename from web/css/utils.css
rename to css/utils.css
diff --git a/web/css/vars.css b/css/vars.css
similarity index 100%
rename from web/css/vars.css
rename to css/vars.css
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644
index 13c1506..0000000
Binary files a/favicon.ico and /dev/null differ
diff --git a/web/icon/close-modal.svg b/icon/close-modal.svg
similarity index 100%
rename from web/icon/close-modal.svg
rename to icon/close-modal.svg
diff --git a/web/icon/content-warning.svg b/icon/content-warning.svg
similarity index 100%
rename from web/icon/content-warning.svg
rename to icon/content-warning.svg
diff --git a/web/icon/event-delete.svg b/icon/event-delete.svg
similarity index 100%
rename from web/icon/event-delete.svg
rename to icon/event-delete.svg
diff --git a/web/icon/event-like.svg b/icon/event-like.svg
similarity index 100%
rename from web/icon/event-like.svg
rename to icon/event-like.svg
diff --git a/web/icon/event-liked.svg b/icon/event-liked.svg
similarity index 100%
rename from web/icon/event-liked.svg
rename to icon/event-liked.svg
diff --git a/web/icon/event-reply.svg b/icon/event-reply.svg
similarity index 100%
rename from web/icon/event-reply.svg
rename to icon/event-reply.svg
diff --git a/web/icon/explore-active.svg b/icon/explore-active.svg
similarity index 100%
rename from web/icon/explore-active.svg
rename to icon/explore-active.svg
diff --git a/web/icon/explore.svg b/icon/explore.svg
similarity index 100%
rename from web/icon/explore.svg
rename to icon/explore.svg
diff --git a/web/icon/home-active.svg b/icon/home-active.svg
similarity index 100%
rename from web/icon/home-active.svg
rename to icon/home-active.svg
diff --git a/web/icon/home.svg b/icon/home.svg
similarity index 100%
rename from web/icon/home.svg
rename to icon/home.svg
diff --git a/web/icon/key.svg b/icon/key.svg
similarity index 100%
rename from web/icon/key.svg
rename to icon/key.svg
diff --git a/web/icon/loader-fragment.svg b/icon/loader-fragment.svg
similarity index 100%
rename from web/icon/loader-fragment.svg
rename to icon/loader-fragment.svg
diff --git a/web/icon/logo-inverted.svg b/icon/logo-inverted.svg
similarity index 100%
rename from web/icon/logo-inverted.svg
rename to icon/logo-inverted.svg
diff --git a/web/icon/logo.svg b/icon/logo.svg
similarity index 100%
rename from web/icon/logo.svg
rename to icon/logo.svg
diff --git a/web/icon/message-user.svg b/icon/message-user.svg
similarity index 100%
rename from web/icon/message-user.svg
rename to icon/message-user.svg
diff --git a/web/icon/no-user.svg b/icon/no-user.svg
similarity index 100%
rename from web/icon/no-user.svg
rename to icon/no-user.svg
diff --git a/web/icon/notifications-active.svg b/icon/notifications-active.svg
similarity index 100%
rename from web/icon/notifications-active.svg
rename to icon/notifications-active.svg
diff --git a/web/icon/notifications.svg b/icon/notifications.svg
similarity index 100%
rename from web/icon/notifications.svg
rename to icon/notifications.svg
diff --git a/web/icon/open-thread.svg b/icon/open-thread.svg
similarity index 100%
rename from web/icon/open-thread.svg
rename to icon/open-thread.svg
diff --git a/web/icon/pubkey.svg b/icon/pubkey.svg
similarity index 100%
rename from web/icon/pubkey.svg
rename to icon/pubkey.svg
diff --git a/web/icon/read-more.svg b/icon/read-more.svg
similarity index 100%
rename from web/icon/read-more.svg
rename to icon/read-more.svg
diff --git a/web/icon/sign-out.svg b/icon/sign-out.svg
similarity index 100%
rename from web/icon/sign-out.svg
rename to icon/sign-out.svg
diff --git a/img/activation.svg b/img/activation.svg
deleted file mode 100644
index 3338066..0000000
--- a/img/activation.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/app-store-coming-soon.svg b/img/app-store-coming-soon.svg
deleted file mode 100644
index 0ae7f5c..0000000
--- a/img/app-store-coming-soon.svg
+++ /dev/null
@@ -1,148 +0,0 @@
-
-
-
-
diff --git a/img/appstore.svg b/img/appstore.svg
deleted file mode 100644
index 6d65444..0000000
--- a/img/appstore.svg
+++ /dev/null
@@ -1,45 +0,0 @@
-
diff --git a/img/bitcoin-p2p.png b/img/bitcoin-p2p.png
deleted file mode 100644
index b989e78..0000000
Binary files a/img/bitcoin-p2p.png and /dev/null differ
diff --git a/img/bitcoin-p2p.svg b/img/bitcoin-p2p.svg
deleted file mode 100644
index 1a6184b..0000000
--- a/img/bitcoin-p2p.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/bitcoin-phone.svg b/img/bitcoin-phone.svg
deleted file mode 100644
index 50b0e8c..0000000
--- a/img/bitcoin-phone.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/bot.svg b/img/bot.svg
deleted file mode 100644
index 25d41d6..0000000
--- a/img/bot.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/communication.svg b/img/communication.svg
deleted file mode 100644
index 869b786..0000000
--- a/img/communication.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/damus-nobg.svg b/img/damus-nobg.svg
deleted file mode 100644
index 5f14838..0000000
--- a/img/damus-nobg.svg
+++ /dev/null
@@ -1,186 +0,0 @@
-
-
-
-
diff --git a/img/damus.svg b/img/damus.svg
deleted file mode 100644
index 44b3849..0000000
--- a/img/damus.svg
+++ /dev/null
@@ -1,184 +0,0 @@
-
-
-
-
diff --git a/img/damus_notif.svg b/img/damus_notif.svg
deleted file mode 100644
index d1f29be..0000000
--- a/img/damus_notif.svg
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
-
-
diff --git a/img/digital-nomad.png b/img/digital-nomad.png
deleted file mode 100644
index e2e2f21..0000000
Binary files a/img/digital-nomad.png and /dev/null differ
diff --git a/img/digital-nomad.svg b/img/digital-nomad.svg
deleted file mode 100644
index ea6abba..0000000
--- a/img/digital-nomad.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/encrypted-message.png b/img/encrypted-message.png
deleted file mode 100644
index 756d585..0000000
Binary files a/img/encrypted-message.png and /dev/null differ
diff --git a/img/freelance.svg b/img/freelance.svg
deleted file mode 100644
index 6836862..0000000
--- a/img/freelance.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/logo.png b/img/logo.png
deleted file mode 100644
index 404f7ca..0000000
Binary files a/img/logo.png and /dev/null differ
diff --git a/img/message.svg b/img/message.svg
deleted file mode 100644
index 3566de2..0000000
--- a/img/message.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/protection.svg b/img/protection.svg
deleted file mode 100644
index e9d22f6..0000000
--- a/img/protection.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/social-media.svg b/img/social-media.svg
deleted file mode 100644
index 0164095..0000000
--- a/img/social-media.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/img/ss.png b/img/ss.png
deleted file mode 100644
index 8ea7d47..0000000
Binary files a/img/ss.png and /dev/null differ
diff --git a/img/testflight.svg b/img/testflight.svg
deleted file mode 100644
index be9feb0..0000000
--- a/img/testflight.svg
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
\ No newline at end of file
diff --git a/img/undercover.png b/img/undercover.png
deleted file mode 100644
index eafa17c..0000000
Binary files a/img/undercover.png and /dev/null differ
diff --git a/img/undercover.svg b/img/undercover.svg
deleted file mode 100644
index 97b5216..0000000
--- a/img/undercover.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/index.html b/index.html
index d3eaf04..2f31054 100644
--- a/index.html
+++ b/index.html
@@ -1,83 +1,272 @@
-
-
-
- damus
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- damus
-
-
-
-
The social network you control
-
Your very own Twitter for your friends or business.
-
-
-
-
-
-
- You are in control. Built on open internet protocols, there is no platform that can ban or censor you. You are in control of your data & speech.
-
-
-
- Encrypted. End-to-End encrypted private messaging. Keep big tech out of your DMs.
-
-
-
- No registration required. Creating an account doesn't require a phone number, email or name. Get started right away with zero friction.
-
-
-
-
-
- No servers required. Messages are distributed via decentralized relays. No need to run any infrastructure and there are no single points of failure. Simple!
-
-
-
- Programmable. Easily integrate bots that automate your life or business. Get notified when your servers go down, retweet to your team and collaborate in realtime.
-
-
-
- Earn money. Tip your friend's posts and stack sats with Bitcoin & ⚡️, the native currency of the internet.
- The Damus Log
+ Nostr is a protocol, not a platform or an app. This means that
+ users can pick and choose which clients (apps) to use and which
+ relays (servers) they wish to connect to.
+
+
Nostr uses encryption to validate content authors. This means
+ that there is no centralized account system. We use
+ public & private keys to sign our
+ content when we post. Do not confuse this with blockchain
+ technology.
+ You are using one right now! You just haven't signed in yet to see
+ the actual application. Scroll to the top to do that.
+
+
+ A rich app ecosystem for Nostr. Anyone can build an app for the
+ protocol that fits their needs. This is the best option for users
+ as everyone has their own style. Another benifit is that you can
+ use multiple apps with the same account.
+
+
+ Since there are many apps for Nostr it allows developers to focus
+ on building certain experiences. Some apps may offer features that
+ others don't, such as direct messages, content viewing methods,
+ etc. You are allowed to choose how you want to interact with
+ Nostr.
+
+
Pick One
+
+ Here are a list of (trusted) apps that work with Nostr. Pick one
+ that fits you.
+
+ Relays are points of connection, a server. They allow you to read
+ events (content) and write to it depending on it's configuration.
+ Some may be read only, others may require some sort of payment to
+ use. Some may simply clone other relays.
+
+
+ Relays allow for specific needs and niches. You can host your
+ own relay for your club or community (such as gaming, art, sciences,
+ etc.) Or you can build your own relay with your own logic that
+ dictates who can access what and how. This is great for all kinds
+ of use cases for a range of users from individuals to businesses.
+
-
-
-
-
-
diff --git a/key/key.js b/key/key.js
deleted file mode 100644
index 9dff6c1..0000000
--- a/key/key.js
+++ /dev/null
@@ -1,44 +0,0 @@
-
-function hex_char(val)
-{
- if (val < 10)
- return String.fromCharCode(48 + val)
- if (val < 16)
- return String.fromCharCode(97 + val - 10)
-}
-
-function hex_encode(buf)
-{
- str = ""
- for (let i = 0; i < buf.length; i++) {
- const c = buf[i]
- str += hex_char(c >> 4)
- str += hex_char(c & 0xF)
- }
- return str
-}
-
-function go() {
- const el = document.querySelector("#damus-key")
- const hex_el = document.querySelector("#hex-key")
- const note_link_el = document.querySelector("#note-link")
- const profile_link_el = document.querySelector("#profile-link")
-
- el.addEventListener("input", () => {
- const decoded = bech32.decode(el.value)
- const bytes = fromWords(decoded.words)
- hex_el.value = hex_encode(bytes)
- update_note_link(hex_el.value)
- });
-
- hex_el.addEventListener("input", () => {
- update_note_link(hex_el.value)
- })
-
- function update_note_link(id) {
- note_link_el.href = `nostr:e:${id}`
- profile_link_el.href = `nostr:p:${id}`
- }
-}
-
-go()
diff --git a/log/.envrc b/log/.envrc
deleted file mode 100644
index 42644cd..0000000
--- a/log/.envrc
+++ /dev/null
@@ -1 +0,0 @@
-export PATH=$PWD:$PATH
diff --git a/log/2022-08-02-introducing-damus-log.gmi b/log/2022-08-02-introducing-damus-log.gmi
deleted file mode 100644
index 0f08dc7..0000000
--- a/log/2022-08-02-introducing-damus-log.gmi
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# The Damus Log - Powered by #nostr
-
-Hey there, Welcome to the damus log! A blog powered by... nostr! What does this mean!? What is nostr? Let's find out!
-
-nostr is what powers damus, an iOS nostr client we're working on. It's a fancy pants new internet protocol designed to be the email of social networks. Imagine if email was controlled by a single company. Everyone would have to use the same email client (probably something like gmail), and a single company would have complete control over all your data... everyone's data!
-
-This isn't good, this is why the internet today was originally built on these decentralized protocols. Things like websites and email are all available on different platforms, clients and servers. This freedom to pick and choose prevents any single company to have complete control over our data.
-
-nostr is an attempt to do the same for social networks themselves. It provides a censorship resistant, real-time database. Anyone can run a nostr relay and no single relay is in control of the data. It's quite ingenious if we say so ourselves.
-
-We like it so much we've made our blog nostr-powered! The comments below are from the nostr network. You can comment on it from the damus client itself! If you're interested in trying it out, try out the testflight at the bottom of our homepage:
-
-=> https://damus.io damus.io
-
-Looking forward to seeing you on nostr!
diff --git a/log/2022-08-02-introducing-damus-log.html b/log/2022-08-02-introducing-damus-log.html
deleted file mode 100644
index 391664a..0000000
--- a/log/2022-08-02-introducing-damus-log.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
- The Damus Log
-
-
-
-
-
-
-
-
-
-
Hey there, Welcome to the damus log! A blog powered by… nostr! What
-does this mean!? What is nostr? Let’s find out!
-
nostr is what powers damus, an iOS nostr client we’re working on.
-It’s a fancy pants new internet protocol designed to be the email of
-social networks. Imagine if email was controlled by a single company.
-Everyone would have to use the same email client (probably something
-like gmail), and a single company would have complete control over all
-your data… everyone’s data!
-
This isn’t good, this is why the internet today was originally built
-on these decentralized protocols. Things like websites and email are all
-available on different platforms, clients and servers. This freedom to
-pick and choose prevents any single company to have complete control
-over our data.
-
nostr is an attempt to do the same for social networks themselves. It
-provides a censorship resistant, real-time database. Anyone can run a
-nostr relay and no single relay is in control of the data. It’s quite
-ingenious if we say so ourselves.
-
We like it so much we’ve made our blog nostr-powered! The comments
-below are from the nostr network. You can comment on it from the damus
-client itself! If you’re interested in trying it out, try out the
-testflight at the bottom of our homepage:
-
-
diff --git a/log/2022-08-19-the-stuff-loads-better-release.gmi b/log/2022-08-19-the-stuff-loads-better-release.gmi
deleted file mode 100644
index d154cf0..0000000
--- a/log/2022-08-19-the-stuff-loads-better-release.gmi
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-# v0.1.3 - The "Stuff Loads Better" Release
-
-It's that time again! A new damus release. This one fixes a bunch of annoying issues such as profiles not loading properly in some situations. We also do a much better job at caching profile pictures, so no more weird poppyness and wasting your cell data.
-
-If you're not on the testflight already, you can get it here:
-
-=> https://testflight.apple.com/join/CLwjLxWl Damus TestFlight
-
-This was the last release before lightning support, so next version will be exciting!!
-
-Anyways, here's the full changlog!
-
-```
-# Added
-
- - Support kind 42 chat messages (ArcadeCity).
- - Friend icons next to names on some views. Check is friend. Arrows are friend-of-friends
- - Load chat view first if content contains #chat
- - Cancel button on search box
- - Added profile picture cache
- - Multiline DM messages
-
-# Changed
-
- - #hashtags now use the `t` tag instead of `hashtag`
- - Clicking a chatroom quote reply will now expand it instead of jumping to it
- - Clicking on a note will now always scroll it to the bottom
- - Check note ids and signatures on every note
- - use bech32 ids everywhere
- - Don't animate scroll in chat view
- - Post button is not shown if the content is only whitespace
-
-# Fixed
-
- - Fixed thread loading issue when clicking on boosts
- - Fixed various issues with chatroom view
- - Fix bug where sometimes nested navigation views weren't dismissed when tapping the tab bar
- - Fixed minor carousel spacing issue on homescreen
- - You can now reference users, notes hashtags in DMs
- - Profile pics are now loaded in the background
- - Limit post sizes to max 32,000 as an upper bound sanity limit.
- - Missing profiles are now loaded everywhere
- - No longer parse hashtags in urls
- - Logging out now resets your keypair and actually logs out
- - Copying text in DMs will now copy the decrypted text
-```
-
-=> https://damus.io Damus TestFlight
-
diff --git a/log/2022-08-19-the-stuff-loads-better-release.html b/log/2022-08-19-the-stuff-loads-better-release.html
deleted file mode 100644
index 2accc00..0000000
--- a/log/2022-08-19-the-stuff-loads-better-release.html
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
- The Damus Log
-
-
-
-
-
-
-
-
-
-
It’s that time again! A new damus release. This one fixes a bunch of
-annoying issues such as profiles not loading properly in some
-situations. We also do a much better job at caching profile pictures, so
-no more weird poppyness and wasting your cell data.
-
If you’re not on the testflight already, you can get it here:
This was the last release before lightning support, so next version
-will be exciting!!
-
Anyways, here’s the full changlog!
-
# Added
-
- - Support kind 42 chat messages (ArcadeCity).
- - Friend icons next to names on some views. Check is friend. Arrows are friend-of-friends
- - Load chat view first if content contains #chat
- - Cancel button on search box
- - Added profile picture cache
- - Multiline DM messages
-
-# Changed
-
- - #hashtags now use the `t` tag instead of `hashtag`
- - Clicking a chatroom quote reply will now expand it instead of jumping to it
- - Clicking on a note will now always scroll it to the bottom
- - Check note ids and signatures on every note
- - use bech32 ids everywhere
- - Don't animate scroll in chat view
- - Post button is not shown if the content is only whitespace
-
-# Fixed
-
- - Fixed thread loading issue when clicking on boosts
- - Fixed various issues with chatroom view
- - Fix bug where sometimes nested navigation views weren't dismissed when tapping the tab bar
- - Fixed minor carousel spacing issue on homescreen
- - You can now reference users, notes hashtags in DMs
- - Profile pics are now loaded in the background
- - Limit post sizes to max 32,000 as an upper bound sanity limit.
- - Missing profiles are now loaded everywhere
- - No longer parse hashtags in urls
- - Logging out now resets your keypair and actually logs out
- - Copying text in DMs will now copy the decrypted text
-
-
diff --git a/log/2022-09-16-ok-can-you-guys-stop-developing-release.gmi b/log/2022-09-16-ok-can-you-guys-stop-developing-release.gmi
deleted file mode 100644
index 3a5aee8..0000000
--- a/log/2022-09-16-ok-can-you-guys-stop-developing-release.gmi
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# v0.1.4 - Ok can you guys stop developing
-
-So someone had the smart idea[1] to create nostr chatrooms, so naturally damus should support these. I know I said the previous release would be the last release before lightning support, but chatrooms are pretty cool and I wanted to squeeze in an initial chatroom release. So here we are.
-
-I haven't added full chatroom support yet, like searching for and joining channels. The way that this release currently works is that if you see one of your friends chatting in a chatroom, you'll be able to reply to that chat from your home feed, or pop into the chatroom by clicking on the post.
-
-In the future I plan on having full chatroom support, probably something like how telegram displays their chatrooms.
-
-It's up on testflight now so check it out!
-
-Enjoy!
-
-=> https://anigma.io [1] Anigma
-
-=> https://testflight.apple.com/join/CLwjLxWl Damus TestFlight
-
diff --git a/log/2022-09-16-ok-can-you-guys-stop-developing-release.html b/log/2022-09-16-ok-can-you-guys-stop-developing-release.html
deleted file mode 100644
index f63fc6f..0000000
--- a/log/2022-09-16-ok-can-you-guys-stop-developing-release.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
- The Damus Log
-
-
-
-
-
-
-
-
-
-
So someone had the smart idea[1] to create nostr chatrooms, so
-naturally damus should support these. I know I said the previous release
-would be the last release before lightning support, but chatrooms are
-pretty cool and I wanted to squeeze in an initial chatroom release. So
-here we are.
-
I haven’t added full chatroom support yet, like searching for and
-joining channels. The way that this release currently works is that if
-you see one of your friends chatting in a chatroom, you’ll be able to
-reply to that chat from your home feed, or pop into the chatroom by
-clicking on the post.
-
In the future I plan on having full chatroom support, probably
-something like how telegram displays their chatrooms.
-
-
diff --git a/log/template-head.html b/log/template-head.html
deleted file mode 100644
index c4a2bd0..0000000
--- a/log/template-head.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
- The Damus Log
-
-
diff --git a/log/template-tail.html b/log/template-tail.html
deleted file mode 100644
index 5179ade..0000000
--- a/log/template-tail.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/privacy-policy.txt b/privacy-policy.txt
deleted file mode 100644
index dec17fa..0000000
--- a/privacy-policy.txt
+++ /dev/null
@@ -1 +0,0 @@
-Damus doesn't store any information about you other than the posts which you make, which are published to the damus relay as well other relays if configured.
diff --git a/web/.gitignore b/web/.gitignore
deleted file mode 100644
index 6e92f57..0000000
--- a/web/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tags
diff --git a/web/COPYING b/web/COPYING
deleted file mode 100644
index 50bdff2..0000000
--- a/web/COPYING
+++ /dev/null
@@ -1,15 +0,0 @@
-damus.io: damus web client and other things
-Copyright (C) 2022 William Casarin
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
diff --git a/web/Makefile b/web/Makefile
deleted file mode 100644
index 7614d7b..0000000
--- a/web/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-
-all: fake
- @echo "you don't need to build anything."
-
-tags: fake
- find js -name '*.js' | grep -v noble-secp256k1 | xargs ctags > "$@"
-
-emojiregex: fake
- @curl -sL 'https://raw.githubusercontent.com/mathiasbynens/emoji-test-regex-pattern/main/dist/latest/javascript.txt'
-
-dist:
- rsync -avzP --delete ./ charon:/www/damus.io/web/
-
-dist-staging:
- rsync -avzP ./ charon:/www/damus.io/web-staging/
-
-.PHONY: fake
diff --git a/web/README.md b/web/README.md
deleted file mode 100644
index f425002..0000000
--- a/web/README.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Damus Web
-
-Here lies the code for the Damus web app, a client for the Nostr protocol. The
-goal of this client is to be a better version of Twitter, but not to reproduce
-all of it's functionality.
-
-[Issue Tracker](https://todo.sr.ht/~tomtom/damus-web-issues)
-
-## Roadmap
-
-Here is what is confirmed for development.
-
- - [ ] Share event
- - [ ] Profile view (with ability to follow user)
- - [ ] Edit metadata (from profile view)
- - [ ] Global timeline view
- - [ ] Notifications view
- - [ ] Settings view (with ability to configure relays)
- - [ ] Multiple reaction picker
- - [ ] Direct Messages (subject to discussion)
-
-## Contribution Guide
-
-There are rules to contributing to this client. Please ensure you read them
-before making changes and supplying patch notes.
-
- - No transpilers. All source code should work out of the box.
- - Keep source code organised. Refer to the folder structure. If you have a
- question, ask it.
- - Do not include your personal tools in the source code. Use your own scripts
- outside of the project. This does not include build tools such as Make.
- - Use tabs & write JS with snake_case. End of discussion.
- - Do not include binary files.
- - No NPM (and kin) environments. If you need a file from an external resource
- mark the location in the "sources" file and add it to the repo.
- - No frameworks. Learn the browser tools and write good code.
- - No experimental browser APIs.
- - Do not write animations in JavaScript, CSS only. Keep them short and snappy.
- Animations should not be a forefront, but an enjoyable addition.
- - All new & modified code should be properly documented.
- - Source code should be readable in the browser.
-
-These rules are subject to discussion.
-
-## Style Guide
-
-TODO Write about the style guide.
-
-## Terminology
-
- * Sign Out - Not "log out", "logout", "log off", etc.
- * Sign In - Not "login", "log in", "signin", "sign-in", etc.
- * Share - Not "boosted", "retweeted", "repost", etc.
- * Send - Not "tweet", "toot", "post", etc.
- * Link - Not "share".
-
-## Known Issues
-
- * You cannot send events when running from an IP address that is not secure.
- Work arounds are not known at this time.
-
-
diff --git a/web/index.html b/web/index.html
deleted file mode 100644
index 2f31054..0000000
--- a/web/index.html
+++ /dev/null
@@ -1,272 +0,0 @@
-
-
-
-
-
-
-
- Damus
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Yo, Sup?
-
-
-
The blue bird experience for Nostr.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welcome to Nostr
-
The open social network for "literally" everyone.
-
-
What is Nostr?
-
- Nostr is a protocol, not a platform or an app. This means that
- users can pick and choose which clients (apps) to use and which
- relays (servers) they wish to connect to.
-
-
Nostr uses encryption to validate content authors. This means
- that there is no centralized account system. We use
- public & private keys to sign our
- content when we post. Do not confuse this with blockchain
- technology.
-
-
- Nostr stands for "Notes and Other Stuff Transmitted by Relays".
-
- You are using one right now! You just haven't signed in yet to see
- the actual application. Scroll to the top to do that.
-
-
- A rich app ecosystem for Nostr. Anyone can build an app for the
- protocol that fits their needs. This is the best option for users
- as everyone has their own style. Another benifit is that you can
- use multiple apps with the same account.
-
-
- Since there are many apps for Nostr it allows developers to focus
- on building certain experiences. Some apps may offer features that
- others don't, such as direct messages, content viewing methods,
- etc. You are allowed to choose how you want to interact with
- Nostr.
-
-
Pick One
-
- Here are a list of (trusted) apps that work with Nostr. Pick one
- that fits you.
-
- Relays are points of connection, a server. They allow you to read
- events (content) and write to it depending on it's configuration.
- Some may be read only, others may require some sort of payment to
- use. Some may simply clone other relays.
-
-
- Relays allow for specific needs and niches. You can host your
- own relay for your club or community (such as gaming, art, sciences,
- etc.) Or you can build your own relay with your own logic that
- dictates who can access what and how. This is great for all kinds
- of use cases for a range of users from individuals to businesses.
-
- ${format_content(ev.content)} -
-