on master help sign in
rebase
6274b9bckipp01
README.md+18−3
@@ -9,11 +9,26 @@ This [webring](https://wiki.xxiivv.com/webring) is an attempt to inspire artists
9```
9```
10
10
111) Add the webring icon to your website html.
111) Add the webring icon to your website html.
12−2) Add your website information to the [sites.js](https://github.com/XXIIVV/webring/edit/master/scripts/sites.js) file. The `url` and `contact` keys are required, but you can also include `title`, `type`, `author`, `rss`, and `feed`. The title must be alphanumeric.
12+2) Add your website information to the [sites.js](https://github.com/XXIIVV/webring/edit/master/scripts/sites.js) file. See all options below, and be mindful of what's required for each part of the webring.
133) Submit a Pull Request with **the location of the webring icon** on your site. Pull requests with blank descriptions will be rejected.
133) Submit a Pull Request with **the location of the webring icon** on your site. Pull requests with blank descriptions will be rejected.
14
14
15Alternatively, if you your website has a dark background, use `icon.white.svg`. If your website is complaining about *https*, go ahead and host the icon yourself.
15Alternatively, if you your website has a dark background, use `icon.white.svg`. If your website is complaining about *https*, go ahead and host the icon yourself.
16
16
17+Only the `url`, `contact`, and `langs` keys are required to join the webring. Below you can find a list of all the available keys for the various areas of the webring.
18+```javascript
19+ {
20+ author: <string used in the Hallway REQUIRED FOR HALLWAY>',
21+ contact: <string used to contact if necessary REQUIRED FOR ALL>,
22+ feed: <string url used Hallway REQUIRED FOR HALLWAY>,
23+ langs: <array of iso language codes represented languages in your site ex. ['en'] REQUIRED FOR ALL>,
24+ rss: <string url for rss feed>,
25+ title: <string (must be alphanumeric) used for the Portal>,
26+ type: <string used for the Portal>,
27+ url: <string url used for Portal REQUIRED FOR ALL>,
28+ wiki: <string url used for the Wiki REQUIRED FOR WIKI>
29+ }
30+```
31+
17### Webring criteria
32### Webring criteria
18
33
19**Single page websites, websites acting only as portals to other social platforms, or websites with violent, racist, sexist or speciesist content will be rejected**.
34**Single page websites, websites acting only as portals to other social platforms, or websites with violent, racist, sexist or speciesist content will be rejected**.
@@ -34,7 +49,7 @@ Instead of linking to the directory, you can also link to the next link in the r
34
49
35[The Hallway](https://webring.xxiivv.com/hallway.html) is a decentralized forum using [twtxt](https://twtxt.readthedocs.io/en/stable/user/twtxtfile.html) feeds.
50[The Hallway](https://webring.xxiivv.com/hallway.html) is a decentralized forum using [twtxt](https://twtxt.readthedocs.io/en/stable/user/twtxtfile.html) feeds.
36
51
37−To join, create a `.txt` file on your site, add its URL to [your webring entry](https://github.com/XXIIVV/Webring/blob/master/scripts/sites.js) as `feed:`, and fill in your desired name for `author:`. The content of the file should be a dateISO string, a tab(or 3 spaces) and a message:
52+To join, create a `.txt` file on your site, add its URL to [your webring entry](https://github.com/XXIIVV/Webring/blob/master/scripts/sites.js) as `feed`, and fill in your desired name in the `author` key. The content of the file should be a dateISO string, a tab(or 3 spaces) and a message:
38
53
39```
54```
402016-02-04T13:30:00+01:00 You can really go crazy here! ┐(゚∀゚)┌
552016-02-04T13:30:00+01:00 You can really go crazy here! ┐(゚∀゚)┌
@@ -49,7 +64,7 @@ You don't need to allow all origins nor allow any other methods rather than GET,
49
64
50[The Wiki](https://webring.xxiivv.com/wiki.html) is a decentralized encyclopedia using [ndtl](https://wiki.xxiivv.com/Indental) feeds.
65[The Wiki](https://webring.xxiivv.com/wiki.html) is a decentralized encyclopedia using [ndtl](https://wiki.xxiivv.com/Indental) feeds.
51
66
52−To join, create a `.ndtl` file on your site, and add its URL to [your webring entry](https://github.com/XXIIVV/Webring/blob/master/scripts/sites.js) as `wiki:`.
67+To join, create a `.ndtl` file on your site, and add its URL to [your webring entry](https://github.com/XXIIVV/Webring/blob/master/scripts/sites.js) using the `wiki` key.
53
68
54## Webring CLI
69## Webring CLI
55
70
links/main.css+3−2
@@ -16,7 +16,7 @@ body #portal #icon { display: block; width: 30px; height: 30px; background-image
16body #portal ul { columns:1; }
16body #portal ul { columns:1; }
17body #portal ul li { display:block; padding-left:5px; text-overflow: ellipsis; text-transform: lowercase;}
17body #portal ul li { display:block; padding-left:5px; text-overflow: ellipsis; text-transform: lowercase;}
18body #portal ul li:before { content: attr(id) ")"; }
18body #portal ul li:before { content: attr(id) ")"; }
19−body #portal ul li[data-type]::after { content:"<" attr(data-type) ">"; color:#555; }
19+body #portal ul li::after { content:"<" attr(data-type) attr(data-lang) ">"; color:#555; }
20body #portal ul li a { line-height: 20px; padding:0px 5px; text-decoration: none;}
20body #portal ul li a { line-height: 20px; padding:0px 5px; text-decoration: none;}
21body #portal ul li a:visited { color:#ccc; text-decoration: none;}
21body #portal ul li a:visited { color:#ccc; text-decoration: none;}
22body #portal a:active,
22body #portal a:active,
@@ -25,7 +25,8 @@ body #portal a:hover { text-decoration: underline; }
25
25
26body #portal nav { display: flex; flex-direction: row; margin-bottom: 15px }
26body #portal nav { display: flex; flex-direction: row; margin-bottom: 15px }
27body #portal nav a { margin: 0 5px; color: gray }
27body #portal nav a { margin: 0 5px; color: gray }
28−body #portal nav a.current { color: white }
28+body #portal nav a.currentType,
29+body #portal nav a.currentLang { color: white }
29
30
30body aside { min-width: 200px; padding: 0 15px; line-height: 16px; display: none; }
31body aside { min-width: 200px; padding: 0 15px; line-height: 16px; display: none; }
31body aside ul { margin-bottom: 15px; }
32body aside ul { margin-bottom: 15px; }
scripts/portal.js+58−30
@@ -7,22 +7,27 @@ function Portal (sites) {
7
7
8 // Templates
8 // Templates
9
9
10− function _readme () {
11− return '<p class="readme">This webring is an attempt to inspire artists & developers to build their own website and share traffic among each other. The ring welcomes personalized websites such as <b>diaries, wikis & portfolios</b>.</p><p>To add yourself to the ring, submit a <a href="https://github.com/XXIIVV/webring/edit/master/scripts/sites.js" target="_blank">Pull Request</a>.<br />If you found a broken link, please <a href="https://github.com/XXIIVV/webring/issues/new" target="_blank">report it</a>.</p>'
10+ const _readme = '<p class="readme">This webring is an attempt to inspire artists & developers to build their own website and share traffic among each other. The ring welcomes personalized websites such as <b>diaries, wikis & portfolios</b>.</p><p>To add yourself to the ring, submit a <a href="https://github.com/XXIIVV/webring/edit/master/scripts/sites.js" target="_blank">Pull Request</a>.<br />If you found a broken link, please <a href="https://github.com/XXIIVV/webring/issues/new" target="_blank">report it</a>.</p>'
12− }
13−
14− function _buttons () {
15− return '<p class="buttons"><a href="#random" onClick="portal.reload()">Random</a> | <a href="https://github.com/XXIIVV/webring">Information</a> <a id="icon" href="#random" onClick="portal.reload()"></a> | <a href="hallway.html">The Hallway</a> | <a href="wiki.html">The Wiki</a> | <a id="opml">OPML</a></p>'
11+ const _buttons = '<p class="buttons"><a href="#random" onClick="portal.reload()">Random</a> | <a href="https://github.com/XXIIVV/webring">Information</a> <a id="icon" href="#random" onClick="portal.reload()"></a> | <a href="hallway.html">The Hallway</a> | <a href="wiki.html">The Wiki</a> | <a id="opml">OPML</a></p>'
16− }
17
12
18 function _directory (sites) {
13 function _directory (sites) {
19 const siteTypesArray = [...new Set(sites.map(site => site.type).filter(Boolean))]
14 const siteTypesArray = [...new Set(sites.map(site => site.type).filter(Boolean))]
15+ const siteLangsArray = [...new Set(sites
16+ .map(site => site.langs)
17+ .reduce((flattened, langs) => flattened.concat(langs), [])
18+ .sort())]
19+
20 const siteTypes = siteTypesArray.reduce((output, siteType) =>
20 const siteTypes = siteTypesArray.reduce((output, siteType) =>
21− `${output}<a data-type="${siteType}" href="#" onclick="toggleType(event)">&lt;${siteType}&gt;</a>`,
21+ `${output}<a data-type="${siteType}" href="#" onclick="filterSites(event)">&lt;${siteType}&gt;</a>`,
22+ '<a class="currentType" data-type="all" href="#" onclick="filterSites(event)">&lt;all&gt;</a>')
23+
24+ const siteLangs = siteLangsArray.reduce((output, siteLang) =>
25+ `${output}<a data-lang="${siteLang}" href="#" onclick="filterSites(event)">&lt;${siteLang}&gt;</a>`,
22− '<a class="current" href="#" onclick="toggleType(event)">&lt;all&gt;</a>')
26+ '<a class="currentLang" data-lang="all" href="#" onclick="filterSites(event)">&lt;all&gt;</a>')
27+
23 const listItems = sites.reduce((acc, site, id) =>
28 const listItems = sites.reduce((acc, site, id) =>
24− `${acc}<li ${_type(site)} id='${id}'><a href='${site.url}'>${_name(site)}</a></li>`, '')
29+ `${acc}<li ${_type(site)} ${_lang(site)} id='${id}'><a href='${site.url}'>${_name(site)}</a></li>`, '')
25− return `<nav>${siteTypes}</nav><main><ul>${listItems}</ul></main><footer>${_readme()}${_buttons()}</footer>`
30+ return `<nav>${siteTypes}</nav><nav>${siteLangs}</nav><main><ul>${listItems}</ul></main><footer>${_readme}${_buttons}</footer>`
26 }
31 }
27
32
28 function _name (site) {
33 function _name (site) {
@@ -30,10 +35,15 @@ function Portal (sites) {
30 }
35 }
31
36
32 function _type (site) {
37 function _type (site) {
33− return site.type ? `data-type="${site.type}"` : ''
38+ return site.type ? `data-type="${site.type} "` : ''
39+ }
40+
41+ function _lang (site) {
42+ const langs = site.langs.reduce((langs, lang) => `${langs} ${lang}`, '')
43+ return `data-lang="${langs.trim()}"`
34 }
44 }
35
45
36− function _redirect (site) {
46+ function _redirectView (site) {
37 return `<main><p>Redirecting to <a href="${site.url}">${site.url}</a></p></main>
47 return `<main><p>Redirecting to <a href="${site.url}">${site.url}</a></p></main>
38 <footer><p class='buttons'><a href='#' onClick="portal.reload('')">Directory</a> | <a href='#${site.url}' onClick="portal.reload()">Skip</a> | <a href='#random' onClick="portal.reload()">Random</a> | <a href='https://github.com/XXIIVV/webring'>Information</a> <a id='icon' href='#random' onClick="portal.reload()"></a></p>`
48 <footer><p class='buttons'><a href='#' onClick="portal.reload('')">Directory</a> | <a href='#${site.url}' onClick="portal.reload()">Skip</a> | <a href='#random' onClick="portal.reload()">Random</a> | <a href='https://github.com/XXIIVV/webring'>Information</a> <a id='icon' href='#random' onClick="portal.reload()"></a></p>`
39 }
49 }
@@ -47,7 +57,7 @@ function Portal (sites) {
47 this.start = function () {
57 this.start = function () {
48 if (window.location.hash && window.location.hash.length > 4) {
58 if (window.location.hash && window.location.hash.length > 4) {
49 const site = this.next()
59 const site = this.next()
50− this.el.innerHTML = _redirect(site)
60+ this.el.innerHTML = _redirectView(site)
51 setTimeout(() => { window.location = site.url }, 3000)
61 setTimeout(() => { window.location = site.url }, 3000)
52 } else {
62 } else {
53 this.el.innerHTML = _directory(this.sites)
63 this.el.innerHTML = _directory(this.sites)
@@ -62,30 +72,48 @@ function Portal (sites) {
62 setTimeout(() => { window.location.href = target }, 3000)
72 setTimeout(() => { window.location.href = target }, 3000)
63 }
73 }
64
74
75+ this.sitesMatchingLangs = this.sites
76+ .filter(site => site.langs)
77+ .filter(site => site.langs.some(lang => navigator.languages.includes(lang)))
78+
65− this.locate = function () {
79+ this.next = function () {
66 const hash = window.location.hash.replace('#', '').trim()
80 const hash = window.location.hash.replace('#', '').trim()
67
81
68 if (hash === 'random') {
82 if (hash === 'random') {
69− return Math.floor(Math.random() * this.sites.length)
83+ return this.sitesMatchingLangs[Math.floor(Math.random() * this.sitesMatchingLangs.length)]
70 } else {
84 } else {
71− const id = sites.findIndex(site => site.url.indexOf(hash) > -1)
85+ return sites.find(site => site.url.includes(hash))
72− return id > -1 ? parseInt(id) : -1
86+ ? sites.find(site => site.url.includes(hash))
87+ : this.sitesMatchingLangs[Math.floor(Math.random() * this.sitesMatchingLangs.length)]
73 }
88 }
74 }
89 }
75−
76− this.next = function (loc = this.locate()) {
77− return loc === this.sites.length - 1 ? this.sites[0] : this.sites[loc + 1]
78− }
79}
90}
80
91
81−function toggleType (e) {
92+function filterSites (e) {
82 e.preventDefault()
93 e.preventDefault()
83 const navLink = e.target
94 const navLink = e.target
84− const selectedType = navLink.dataset.type
95+ const currentFilter = navLink.dataset.lang ? 'Lang' : 'Type'
96+
85− document.querySelector('nav a.current').classList.remove('current')
97+ document.querySelector(`nav a.current${currentFilter}`).classList.remove(`current${currentFilter}`)
86− navLink.classList.add('current')
98+ navLink.classList.add(`current${currentFilter}`)
99+
100+ const typeFilter = document.querySelector('nav a.currentType').dataset.type
101+ const langFilter = document.querySelector('nav a.currentLang').dataset.lang
102+
87− document.querySelectorAll('main li').forEach(el => { el.style.display = 'block' })
103+ const sites = document.querySelectorAll('main li')
88− if (selectedType) {
104+ sites.forEach(el => { el.style.display = 'block' })
89− document.querySelectorAll(`main li:not([data-type='${selectedType}'])`).forEach(el => { el.style.display = 'none' })
105+
106+ sites.forEach(el => {
107+ if (typeFilter !== 'all') {
108+ if (el.dataset.type) {
109+ if (el.dataset.type.trim() !== typeFilter) el.style.display = 'none'
110+ } else {
111+ el.style.display = 'none'
112+ }
113+ }
114+
115+ if (langFilter !== 'all') {
116+ if (!el.dataset.lang.includes(langFilter)) el.style.display = 'none'
117+ }
90− }
118+ })
91}
119}
scripts/sites.js+276−173
@@ -5,646 +5,749 @@
5
5
6const sites = [
6const sites = [
7 {
7 {
8− url: 'https://wiki.xxiivv.com',
9− title: 'xxiivv',
10− type: 'wiki',
11 author: 'neauoire',
8 author: 'neauoire',
12 contact: 'aliceffekt@gmail.com',
9 contact: 'aliceffekt@gmail.com',
13− rss: 'https://wiki.xxiivv.com/links/rss.xml',
14 feed: 'https://wiki.xxiivv.com/twtxt.txt',
10 feed: 'https://wiki.xxiivv.com/twtxt.txt',
11+ langs: ['en'],
12+ rss: 'https://wiki.xxiivv.com/links/rss.xml',
13+ title: 'xxiivv',
14+ type: 'wiki',
15+ url: 'https://wiki.xxiivv.com',
15 wiki: 'https://wiki.xxiivv.com/scripts/database/glossary.ndtl'
16 wiki: 'https://wiki.xxiivv.com/scripts/database/glossary.ndtl'
16 },
17 },
17
18
18 {
19 {
20+ langs: ['en'],
19 url: 'http://estevancarlos.com'
21 url: 'http://estevancarlos.com'
20 },
22 },
21
23
22 {
24 {
25+ author: 'rho',
23− url: 'https://electro.pizza',
26+ feed: 'https://electro.pizza/twtxt.txt',
27+ langs: ['en'],
24 title: 'electro pizza',
28 title: 'electro pizza',
25 type: 'blog',
29 type: 'blog',
26− author: 'rho',
27 rss: 'https://electro.pizza/feed.xml',
30 rss: 'https://electro.pizza/feed.xml',
28− feed: 'https://electro.pizza/twtxt.txt'
31+ url: 'https://electro.pizza'
29 },
32 },
30
33
31 {
34 {
32− url: 'https://avanier.now.sh',
33− title: 'Arachne',
34− type: 'wiki',
35 author: 'joshavanier',
35 author: 'joshavanier',
36 contact: 'joshavanier@protonmail.com',
36 contact: 'joshavanier@protonmail.com',
37− feed: 'https://avanier.now.sh/tw.txt'
37+ feed: 'https://avanier.now.sh/tw.txt',
38+ langs: ['en'],
39+ title: 'Arachne',
40+ type: 'wiki',
41+ url: 'https://avanier.now.sh'
38 },
42 },
39
43
40 {
44 {
41− url: 'http://kaemura.com',
42− title: 'kaemura.com',
43− type: 'blog',
44 author: 'kaemura',
45 author: 'kaemura',
45 contact: 'chimera1190@gmail.com',
46 contact: 'chimera1190@gmail.com',
46− feed: 'https://kaemura.com/twttxt.txt'
47+ feed: 'https://kaemura.com/twttxt.txt',
48+ langs: ['en'],
49+ title: 'kaemura.com',
50+ type: 'blog',
51+ url: 'http://kaemura.com'
47 },
52 },
48
53
49 {
54 {
50− url: 'https://liamcooke.com',
51− title: 'liamcooke.com',
52 author: 'slisne',
55 author: 'slisne',
53 contact: '@slisne@merveilles.town',
56 contact: '@slisne@merveilles.town',
57+ feed: 'https://liamcooke.com/merveilles/tw.txt',
58+ langs: ['en'],
59+ title: 'liamcooke.com',
54 rss: 'https://liamcooke.com/feed.xml',
60 rss: 'https://liamcooke.com/feed.xml',
55− wiki: 'https://liamcooke.com/merveilles/wiki.ndtl',
61+ url: 'https://liamcooke.com',
56− feed: 'https://liamcooke.com/merveilles/tw.txt'
62+ wiki: 'https://liamcooke.com/merveilles/wiki.ndtl'
57 },
63 },
58
64
59 {
65 {
60− url: 'https://electricgecko.de',
61− title: 'electricgecko',
62− type: 'blog',
63 author: 'electricgecko',
66 author: 'electricgecko',
64 contact: 'desk@electricgecko.de',
67 contact: 'desk@electricgecko.de',
68+ langs: ['de', 'en'],
69+ title: 'electricgecko',
65− rss: 'https://electricgecko.de/feed'
70+ rss: 'https://electricgecko.de/feed',
71+ type: 'blog',
72+ url: 'https://electricgecko.de'
66 },
73 },
67
74
68 {
75 {
76+ langs: ['en'],
69 url: 'https://wichniow.ski'
77 url: 'https://wichniow.ski'
70 },
78 },
71
79
72 {
80 {
81+ langs: ['en'],
73 url: 'https://hraew.autophagy.io'
82 url: 'https://hraew.autophagy.io'
74 },
83 },
75
84
76 {
85 {
86+ langs: ['en'],
77 url: 'http://evenunto.net'
87 url: 'http://evenunto.net'
78 },
88 },
79
89
80 {
90 {
91+ langs: ['en'],
81 url: 'https://anxl.faith'
92 url: 'https://anxl.faith'
82 },
93 },
83
94
84 {
95 {
85− url: 'https://xvw.github.io',
86− title: 'xvw.github.io',
87− type: 'blog',
88 author: 'xvw',
96 author: 'xvw',
89 contact: 'xaviervdw@gmail.com',
97 contact: 'xaviervdw@gmail.com',
98+ langs: ['fr'],
90− rss: 'https://xvw.github.io/atom.xml'
99+ rss: 'https://xvw.github.io/atom.xml',
100+ title: 'xvw.github.io',
101+ type: 'blog',
102+ url: 'https://xvw.github.io'
91 },
103 },
92
104
93 {
105 {
106+ langs: ['en', 'el'],
94 url: 'https://heracl.es'
107 url: 'https://heracl.es'
95 },
108 },
96
109
97 {
110 {
111+ langs: ['en'],
98 url: 'http://luminghao.com'
112 url: 'http://luminghao.com'
99 },
113 },
100
114
101 {
115 {
116+ langs: ['en'],
102 url: 'https://turelio.github.io'
117 url: 'https://turelio.github.io'
103 },
118 },
104
119
105 {
120 {
106− url: 'https://shards.lectronice.com',
107− title: 'shards',
108− type: 'blog',
109 author: 'lectronice',
121 author: 'lectronice',
110 contact: 'i.love.spam@lectronice.com',
122 contact: 'i.love.spam@lectronice.com',
111− feed: 'https://lectronice.com/hallway/twtxt.txt'
123+ feed: 'https://lectronice.com/hallway/twtxt.txt',
124+ langs: ['en'],
125+ title: 'shards',
126+ type: 'blog',
127+ url: 'https://shards.lectronice.com'
112 },
128 },
113
129
114 {
130 {
131+ langs: ['en'],
115 url: 'https://craze.co.uk'
132 url: 'https://craze.co.uk'
116 },
133 },
117
134
118 {
135 {
136+ langs: ['en'],
119 url: 'https://shaneckel.com'
137 url: 'https://shaneckel.com'
120 },
138 },
121
139
122 {
140 {
123− url: 'https://cblgh.org',
124− title: 'cblgh.org',
125 author: 'cblgh',
141 author: 'cblgh',
126 contact: 'cabal://cblgh.org',
142 contact: 'cabal://cblgh.org',
127− feed: 'https://cblgh.org/twtxt.txt'
143+ feed: 'https://cblgh.org/twtxt.txt',
144+ langs: ['en'],
145+ title: 'cblgh.org',
146+ url: 'https://cblgh.org'
128 },
147 },
129
148
130 {
149 {
131− url: 'https://ellugar.co',
132− title: 'ellugar',
133− type: 'wiki',
134 author: 'afk',
150 author: 'afk',
135 contact: 'afk@ellugar.co',
151 contact: 'afk@ellugar.co',
152+ langs: ['en'],
136− rss: 'http://feeds.ellugar.co/ellugar-logs'
153+ rss: 'http://feeds.ellugar.co/ellugar-logs',
154+ title: 'ellugar',
155+ type: 'wiki',
156+ url: 'https://ellugar.co'
137 },
157 },
138
158
139 {
159 {
160+ author: 'Cameron Higby-Naquin',
140− url: 'http://chigby.org',
161+ contact: 'me@chigby.org',
162+ langs: ['en'],
141 title: 'chigby.org',
163 title: 'chigby.org',
142 type: 'portfolio',
164 type: 'portfolio',
143− contact: 'me@chigby.org',
165+ url: 'http://chigby.org'
144− author: 'Cameron Higby-Naquin'
145 },
166 },
146
167
147 {
168 {
169+ langs: ['en'],
148 url: 'https://longest.voyage'
170 url: 'https://longest.voyage'
149 },
171 },
150
172
151 {
173 {
174+ langs: ['en'],
152 url: 'https://palomakop.tv'
175 url: 'https://palomakop.tv'
153 },
176 },
154
177
155 {
178 {
179+ langs: ['en'],
156 url: 'https://v-os.ca'
180 url: 'https://v-os.ca'
157 },
181 },
158
182
159 {
183 {
184+ langs: ['en'],
160 url: 'https://jmandel.xyz'
185 url: 'https://jmandel.xyz'
161 },
186 },
162
187
163 {
188 {
189+ langs: ['en'],
164 url: 'https://systems.ws'
190 url: 'https://systems.ws'
165 },
191 },
166
192
167 {
193 {
168− url: 'https://2d4.dev',
169− title: '2d4.dev',
170 author: 'jda0',
194 author: 'jda0',
171 contact: 'hi@2d4.dev',
195 contact: 'hi@2d4.dev',
172 feed: 'https://2d4.dev/tw.txt',
196 feed: 'https://2d4.dev/tw.txt',
197+ langs: ['en'],
198+ title: '2d4.dev',
199+ url: 'https://2d4.dev',
173 wiki: 'https://2d4.dev/wiki.ndtl'
200 wiki: 'https://2d4.dev/wiki.ndtl'
174 },
201 },
175
202
176 {
203 {
204+ langs: ['en'],
177 url: 'https://nathanwentworth.co'
205 url: 'https://nathanwentworth.co'
178 },
206 },
179
207
180 {
208 {
209+ langs: ['en'],
181 url: 'https://uonai.space'
210 url: 'https://uonai.space'
182 },
211 },
183
212
184 {
213 {
214+ langs: ['en'],
185 url: 'http://controls.ee'
215 url: 'http://controls.ee'
186 },
216 },
187
217
188 {
218 {
219+ langs: ['en'],
189 url: 'https://wasin.io'
220 url: 'https://wasin.io'
190 },
221 },
191
222
192 {
223 {
224+ langs: ['en'],
193 url: 'https://inns.studio'
225 url: 'https://inns.studio'
194 },
226 },
195
227
196 {
228 {
229+ langs: ['en'],
197 url: 'http://kokorobot.ca'
230 url: 'http://kokorobot.ca'
198 },
231 },
199
232
200 {
233 {
201− url: 'https://ameyama.com',
202− title: 'ameyama',
203− type: 'blog',
204 author: 'jrc03c',
234 author: 'jrc03c',
205 contact: 'josh@ameyama.com',
235 contact: 'josh@ameyama.com',
236+ langs: ['en'],
237+ title: 'ameyama',
238+ type: 'blog',
206 rss: 'https://ameyama.com/blog/rss.xml',
239 rss: 'https://ameyama.com/blog/rss.xml',
240+ url: 'https://ameyama.com',
207 wiki: 'https://ameyama.com/data/wiki.ndtl'
241 wiki: 'https://ameyama.com/data/wiki.ndtl'
208 },
242 },
209
243
210 {
244 {
211− url: 'https://wake.st',
212− title: 'wake.st',
213 author: 'wakest',
245 author: 'wakest',
214 contact: '@liaizon@wake.st',
246 contact: '@liaizon@wake.st',
215− feed: 'https://wake.st/twtxt.txt'
247+ feed: 'https://wake.st/twtxt.txt',
248+ langs: ['en'],
249+ title: 'wake.st',
250+ url: 'https://wake.st'
216 },
251 },
217
252
218 {
253 {
254+ langs: ['en'],
219 url: 'https://xarene.la'
255 url: 'https://xarene.la'
220 },
256 },
221
257
222 {
258 {
259+ langs: ['en'],
223 url: 'https://alex.zyzhang.me'
260 url: 'https://alex.zyzhang.me'
224 },
261 },
225
262
226 {
263 {
264+ langs: ['en'],
227 url: 'http://bildwissenschaft.vortok.info'
265 url: 'http://bildwissenschaft.vortok.info'
228 },
266 },
229
267
230 {
268 {
269+ langs: ['en'],
231 url: 'https://jakofranko.github.com'
270 url: 'https://jakofranko.github.com'
232 },
271 },
233
272
234 {
273 {
274+ langs: ['en'],
235 url: 'https://aeriform.io'
275 url: 'https://aeriform.io'
236 },
276 },
237
277
238 {
278 {
279+ langs: ['en', 'de'],
239 url: 'http://blog.lucasdidthis.com'
280 url: 'http://blog.lucasdidthis.com'
240 },
281 },
241
282
242 {
283 {
243− url: 'http://npisanti.com',
244− title: 'npisanti.com',
245 author: 'npisanti',
284 author: 'npisanti',
246 contact: 'nicola@npisanti.com',
285 contact: 'nicola@npisanti.com',
286+ langs: ['en'],
247− rss: 'http://npisanti.com/journal/rss.xml'
287+ rss: 'http://npisanti.com/journal/rss.xml',
288+ title: 'npisanti.com',
289+ url: 'http://npisanti.com'
248 },
290 },
249
291
250 {
292 {
293+ langs: ['en'],
251 url: 'https://underscorediscovery.ca'
294 url: 'https://underscorediscovery.ca'
252 },
295 },
253
296
254 {
297 {
255− url: 'https://drisc.io',
256− title: 'drisc.io',
257− type: 'wiki',
258 author: 'drisc',
298 author: 'drisc',
259 contact: 'cory@drisc.io',
299 contact: 'cory@drisc.io',
260− feed: 'https://drisc.io/hallway/twtxt.txt'
300+ feed: 'https://drisc.io/hallway/twtxt.txt',
301+ langs: ['en'],
302+ title: 'drisc.io',
303+ type: 'wiki',
304+ url: 'https://drisc.io'
261 },
305 },
262
306
263 {
307 {
308+ author: 'neufv',
309+ langs: ['en'],
264− url: 'https://neufv.systems',
310+ url: 'https://neufv.systems'
265− author: 'neufv'
266 },
311 },
267
312
268 {
313 {
314+ langs: ['en'],
269 url: 'https://ricky.codes'
315 url: 'https://ricky.codes'
270 },
316 },
271
317
272 {
318 {
273− url: 'https://maxdeviant.com',
319+ author: 'Marshall Bowers',
320+ contact: 'elliott.codes@gmail.com',
321+ langs: ['en'],
274 title: 'maxdeviant.com',
322 title: 'maxdeviant.com',
275 type: 'hybrid',
323 type: 'hybrid',
276− author: 'Marshall Bowers',
324+ url: 'https://maxdeviant.com'
277− contact: 'elliott.codes@gmail.com'
278 },
325 },
279
326
280 {
327 {
328+ langs: ['en'],
281 url: 'https://tynandebold.com'
329 url: 'https://tynandebold.com'
282 },
330 },
283
331
284 {
332 {
333+ langs: ['en'],
285 url: 'http://gytis.co'
334 url: 'http://gytis.co'
286 },
335 },
287
336
288 {
337 {
338+ langs: ['en'],
289 url: 'https://nomand.co'
339 url: 'https://nomand.co'
290 },
340 },
291
341
292 {
342 {
343+ langs: ['en'],
293 url: 'http://memoriata.com'
344 url: 'http://memoriata.com'
294 },
345 },
295
346
296 {
347 {
348+ langs: ['en'],
297 url: 'https://mmm.s-ol.nu'
349 url: 'https://mmm.s-ol.nu'
298 },
350 },
299
351
300 {
352 {
353+ langs: ['en'],
301 url: 'https://chad.is'
354 url: 'https://chad.is'
302 },
355 },
303
356
304 {
357 {
358+ langs: ['en'],
305 url: 'https://smidgeo.com/bots'
359 url: 'https://smidgeo.com/bots'
306 },
360 },
307
361
308 {
362 {
363+ langs: ['en', 'ru'],
309 url: 'https://iko.soy'
364 url: 'https://iko.soy'
310 },
365 },
311
366
312 {
367 {
368+ langs: ['en'],
313 url: 'http://atelieroilandsugar.com'
369 url: 'http://atelieroilandsugar.com'
314 },
370 },
315
371
316 {
372 {
373+ langs: ['en'],
317 url: 'https://magoz.is'
374 url: 'https://magoz.is'
318 },
375 },
319
376
320 {
377 {
321− url: 'https://szymonkaliski.com',
322 author: 'Szymon Kaliski',
378 author: 'Szymon Kaliski',
379+ langs: ['en'],
380+ rss: 'https://szymonkaliski.com/feed.xml',
323 type: 'hybrid',
381 type: 'hybrid',
324− rss: 'https://szymonkaliski.com/feed.xml'
382+ url: 'https://szymonkaliski.com'
325 },
383 },
326
384
327 {
385 {
328− url: 'https://phse.net',
329− title: 'phse.net',
330− type: 'blog',
331 author: 'setphen',
386 author: 'setphen',
387+ feed: 'https://phse.net/twtxt/merv.txt',
388+ langs: ['en'],
332 rss: 'https://phse.net/post/index.xml',
389 rss: 'https://phse.net/post/index.xml',
390+ title: 'phse.net',
391+ type: 'blog',
333− feed: 'https://phse.net/twtxt/merv.txt'
392+ url: 'https://phse.net'
334 },
393 },
335
394
336 {
395 {
396+ langs: ['en'],
337 url: 'https://rosano.ca'
397 url: 'https://rosano.ca'
338 },
398 },
339
399
340 {
400 {
401+ langs: ['en'],
341 url: 'https://soyboysky.github.io'
402 url: 'https://soyboysky.github.io'
342 },
403 },
343
404
344 {
405 {
406+ langs: ['en'],
345 url: 'https://gndclouds.cc'
407 url: 'https://gndclouds.cc'
346 },
408 },
347
409
348 {
410 {
411+ langs: ['en', 'fr'],
349 url: 'https://xuv.be'
412 url: 'https://xuv.be'
350 },
413 },
351
414
352 {
415 {
416+ langs: ['en', 'zh'],
353 url: 'https://dsdshcym.github.io'
417 url: 'https://dsdshcym.github.io'
354 },
418 },
355
419
356 {
420 {
357− url: 'https://wiki.chronica.xyz',
358− title: 'chronica',
359− type: 'wiki',
360 author: 'ckipp',
421 author: 'ckipp',
361 contact: 'ckipp@pm.me',
422 contact: 'ckipp@pm.me',
362 feed: 'https://chronica.xyz/hallway.txt',
423 feed: 'https://chronica.xyz/hallway.txt',
424+ langs: ['en'],
425+ title: 'chronica',
426+ type: 'wiki',
427+ url: 'https://wiki.chronica.xyz',
363 wiki: 'https://chronica.xyz/glossary.ndtl'
428 wiki: 'https://chronica.xyz/glossary.ndtl'
364 },
429 },
365
430
366 {
431 {
432+ langs: ['en'],
367 url: 'https://boffosocko.com'
433 url: 'https://boffosocko.com'
368 },
434 },
369
435
370 {
436 {
371− url: 'https://hex22.org',
372− title: 'hex22',
373 author: 'kodedninja',
437 author: 'kodedninja',
374 contact: 'karamanhunor@pm.me',
438 contact: 'karamanhunor@pm.me',
375− feed: 'https://t.seed.hex22.org/twtxt.txt'
439+ feed: 'https://t.seed.hex22.org/twtxt.txt',
440+ langs: ['en'],
441+ title: 'hex22',
442+ url: 'https://hex22.org'
376 },
443 },
377
444
378 {
445 {
446+ langs: ['en'],
379 url: 'https://patrikarvidsson.com'
447 url: 'https://patrikarvidsson.com'
380 },
448 },
381
449
382 {
450 {
451+ langs: ['en'],
383 url: 'https://sophieleetmaa.com'
452 url: 'https://sophieleetmaa.com'
384 },
453 },
385
454
386 {
455 {
456+ langs: ['en'],
387 url: 'https://xinniw.github.io'
457 url: 'https://xinniw.github.io'
388 },
458 },
389
459
390 {
460 {
391− url: 'https://mboxed.github.io/sodatsu',
392− title: 'sodatsu',
393− type: 'wiki',
394 author: 'm',
461 author: 'm',
395 contact: 'mboxxed@gmail.com',
462 contact: 'mboxxed@gmail.com',
396− feed: 'https://mboxed.github.io/sodatsu/tw.txt'
463+ feed: 'https://mboxed.github.io/sodatsu/tw.txt',
464+ langs: ['en'],
465+ title: 'sodatsu',
466+ type: 'wiki',
467+ url: 'https://mboxed.github.io/sodatsu'
397 },
468 },
398
469
399 {
470 {
471+ langs: ['en'],
400 url: 'https://letters.vexingworkshop.com'
472 url: 'https://letters.vexingworkshop.com'
401 },
473 },
402
474
403 {
475 {
404− url: 'https://tom.org.nz',
405− title: 'Tom Hackshaw',
406− type: 'portfolio',
407 author: 'tomupom',
476 author: 'tomupom',
408 contact: 'tom@tomhackshaw.com',
477 contact: 'tom@tomhackshaw.com',
478+ langs: ['en'],
479+ title: 'Tom Hackshaw',
480+ type: 'portfolio',
481+ url: 'https://tom.org.nz',
409 wiki: 'https://a.tom.org.nz/glossary.ndtl'
482 wiki: 'https://a.tom.org.nz/glossary.ndtl'
410 },
483 },
411
484
412 {
485 {
486+ langs: ['en'],
413 url: 'https://teknari.com'
487 url: 'https://teknari.com'
414 },
488 },
415
489
416 {
490 {
417− url: 'https://colectivo-de-livecoders.gitlab.io',
491+ author: 'clic',
492+ contact: 'https://t.me/clic_laplata',
493+ langs: ['es'],
418 title: 'Colectivo de Livecoders',
494 title: 'Colectivo de Livecoders',
419 type: 'blog',
495 type: 'blog',
420− author: 'clic',
496+ url: 'https://colectivo-de-livecoders.gitlab.io'
421− contact: 'https://t.me/clic_laplata'
422 },
497 },
423
498
424 {
499 {
425− url: 'https://www.madewithtea.com',
500+ langs: ['es'],
426 title: 'madewithtea.com',
501 title: 'madewithtea.com',
427− type: 'blog'
502+ type: 'blog',
503+ url: 'https://www.madewithtea.com'
428 },
504 },
429
505
430 {
506 {
431− url: 'https://amorris.ca',
432− title: 'amorris',
433 author: 'amorris',
507 author: 'amorris',
434− type: 'blog',
435 feed: 'https://feed.amorris.ca/hallway.txt',
508 feed: 'https://feed.amorris.ca/hallway.txt',
509+ langs: ['en'],
510+ title: 'amorris',
511+ type: 'blog',
512+ url: 'https://amorris.ca',
436 wiki: 'https://wiki.amorris.ca/glossary.ndtl'
513 wiki: 'https://wiki.amorris.ca/glossary.ndtl'
437 },
514 },
438
515
439 {
516 {
440− url: 'http://www.miha-co.ca',
517+ langs: ['en'],
441 title: 'miha-co',
518 title: 'miha-co',
442− type: 'portfolio'
519+ type: 'portfolio',
520+ url: 'http://www.miha-co.ca'
443 },
521 },
444
522
445 {
523 {
446− url: 'https://buzzert.net',
447− title: 'buzzert.net',
448 author: 'buzzert',
524 author: 'buzzert',
525+ langs: ['en'],
526+ title: 'buzzert.net',
449− type: 'blog'
527+ type: 'blog',
528+ url: 'https://buzzert.net'
450 },
529 },
451
530
452 {
531 {
453− url: 'https://notes.stuartpb.com/',
454− title: 'notes.stuartpb.com',
455− type: 'wiki',
456 author: 'stuartpb',
532 author: 'stuartpb',
457 contact: 's@stuartpb.com',
533 contact: 's@stuartpb.com',
458− feed: 'https://twtxt.stuartpb.com/xxiivv.txt'
534+ feed: 'https://twtxt.stuartpb.com/xxiivv.txt',
535+ langs: ['en'],
536+ title: 'notes.stuartpb.com',
537+ type: 'wiki',
538+ url: 'https://notes.stuartpb.com/'
459 },
539 },
460
540
461 {
541 {
462− url: 'https://xxiii.co',
463− title: 'xxiii',
464− type: 'portfolio',
465 author: 'serocell',
542 author: 'serocell',
466 contact: 'psignal@s900.net',
543 contact: 'psignal@s900.net',
544+ feed: 'https://xxiii.co/twtxt.txt',
545+ langs: ['en'],
467 rss: 'https://serocell.com/feeds/serocell.xml',
546 rss: 'https://serocell.com/feeds/serocell.xml',
547+ title: 'xxiii',
548+ type: 'portfolio',
468− feed: 'https://xxiii.co/twtxt.txt'
549+ url: 'https://xxiii.co'
469 },
550 },
470
551
471 {
552 {
472− url: 'https://kor.nz',
473− title: 'kor',
474− type: 'wiki',
475 author: 'kormyen',
553 author: 'kormyen',
476 contact: 'h@kor.nz',
554 contact: 'h@kor.nz',
477 feed: 'https://kor.nz/twtxt.txt',
555 feed: 'https://kor.nz/twtxt.txt',
556+ langs: ['en'],
557+ title: 'kor',
558+ type: 'wiki',
559+ url: 'https://kor.nz',
478 wiki: 'https://kor.nz/db/glossary.ndtl'
560 wiki: 'https://kor.nz/db/glossary.ndtl'
479 },
561 },
480
562
481 {
563 {
482− url: 'https://lublin.se',
483 author: 'quite',
564 author: 'quite',
484 contact: 'quite@hack.org',
565 contact: 'quite@hack.org',
485− feed: 'https://lublin.se/twtxt.txt'
566+ feed: 'https://lublin.se/twtxt.txt',
567+ langs: ['en'],
568+ url: 'https://lublin.se'
486 },
569 },
487
570
488 {
571 {
489− url: 'https://zanneth.com',
490− title: 'zanneth.com',
491 author: 'zanneth',
572 author: 'zanneth',
573+ contact: 'root@zanneth.com',
574+ langs: ['en'],
575+ title: 'zanneth.com',
492 type: 'blog',
576 type: 'blog',
493− contact: 'root@zanneth.com'
577+ url: 'https://zanneth.com'
494 },
578 },
495
579
496 {
580 {
497− url: 'https://eli.li',
498− title: 'eli.li',
499 author: 'eli_oat',
581 author: 'eli_oat',
500− type: 'blog',
501 contact: 'hi@eli.li',
582 contact: 'hi@eli.li',
583+ feed: 'https://txt.eli.li/twtxt/twtxt.txt',
584+ langs: ['en'],
502 rss: 'https://eli.li/feed.rss',
585 rss: 'https://eli.li/feed.rss',
586+ title: 'eli.li',
587+ type: 'blog',
503− feed: 'https://txt.eli.li/twtxt/twtxt.txt'
588+ url: 'https://eli.li'
504 },
589 },
505
590
506 {
591 {
507− url: 'https://gueorgui.net',
508− title: 'Gueorgui Tcherednitchenko',
509 author: 'gueorgui',
592 author: 'gueorgui',
593+ contact: 'hello@gueorgui.net',
594+ langs: ['en'],
595+ title: 'Gueorgui Tcherednitchenko',
510 type: 'portfolio',
596 type: 'portfolio',
511− contact: 'hello@gueorgui.net'
597+ url: 'https://gueorgui.net'
512 },
598 },
513
599
514 {
600 {
515− url: 'https://www.gkbrk.com',
516− title: 'Leo',
517 author: 'Leo',
601 author: 'Leo',
518− type: 'blog',
519 contact: 'webring@gkbrk.com',
602 contact: 'webring@gkbrk.com',
603+ feed: 'https://www.gkbrk.com/twtxt.txt',
604+ langs: ['en'],
520 rss: 'https://www.gkbrk.com/feed.xml',
605 rss: 'https://www.gkbrk.com/feed.xml',
606+ title: 'Leo',
607+ type: 'blog',
521− feed: 'https://www.gkbrk.com/twtxt.txt'
608+ url: 'https://www.gkbrk.com'
522 },
609 },
523
610
524 {
611 {
612+ author: 'Tate Carson',
525− url: 'https://www.tatecarson.com',
613+ contact: 'tatecarson@gmail.com',
614+ langs: ['en'],
526 title: 'Tate Carson',
615 title: 'Tate Carson',
527 type: 'portfolio',
616 type: 'portfolio',
528− author: 'Tate Carson',
529− contact: 'tatecarson@gmail.com'
617+ url: 'https://www.tatecarson.com'
530 },
618 },
531
619
532 {
620 {
533− url: 'https://azlen.me',
534− title: 'azlen.me',
535 author: 'azlen',
621 author: 'azlen',
536− type: 'wiki',
537 contact: 'webring@azlen.me',
622 contact: 'webring@azlen.me',
538 feed: 'https://azlen.me/twtxt.txt',
623 feed: 'https://azlen.me/twtxt.txt',
624+ langs: ['en'],
625+ title: 'azlen.me',
626+ type: 'wiki',
627+ url: 'https://azlen.me',
539 wiki: 'https://azlen.me/glossary.ndtl'
628 wiki: 'https://azlen.me/glossary.ndtl'
540 },
629 },
541
630
542 {
631 {
543− url: 'https://opinionatedguide.github.io/',
544− title: 'OpGuides',
545 author: 'vega',
632 author: 'vega',
546 contact: 'vegac@protonmail.com',
633 contact: 'vegac@protonmail.com',
547− feed: 'https://opinionatedguide.github.io/twtxt.txt'
634+ feed: 'https://opinionatedguide.github.io/twtxt.txt',
635+ langs: ['en'],
636+ title: 'OpGuides',
637+ url: 'https://opinionatedguide.github.io/'
548 },
638 },
549
639
550 {
640 {
551− url: 'https://chrismaughan.com/',
552− title: 'CMaughan',
553 author: 'cmaughan',
641 author: 'cmaughan',
554 contact: 'mornymorny@gmail.com',
642 contact: 'mornymorny@gmail.com',
555− feed: 'https://chrismaughan.com/twtxt.txt'
643+ feed: 'https://chrismaughan.com/twtxt.txt',
644+ langs: ['en'],
645+ title: 'CMaughan',
646+ url: 'https://chrismaughan.com/'
556 },
647 },
557
648
558 {
649 {
559− url: 'https://oddworlds.org/',
650+ author: 'RaelZero',
651+ contact: 'gaz.gong@gmail.com',
560 title: 'oddworlds soliloquy',
652 title: 'oddworlds soliloquy',
653+ langs: ['en', 'es'],
561 type: 'blog',
654 type: 'blog',
562− author: 'RaelZero',
655+ url: 'https://oddworlds.org/'
563− contact: 'gaz.gong@gmail.com'
564 },
656 },
565
657
566 {
658 {
567− url: 'https://fundor333.com/',
568− title: 'Fundor333',
569− type: 'blog',
570 author: 'Fundor 333',
659 author: 'Fundor 333',
571 contact: 'blog@fundor333.com',
660 contact: 'blog@fundor333.com',
572− feed: 'https://fundor333.com/twtxt.txt'
661+ feed: 'https://fundor333.com/twtxt.txt',
662+ langs: ['en'],
663+ title: 'Fundor333',
664+ type: 'blog',
665+ url: 'https://fundor333.com/'
573 },
666 },
574
667
575 {
668 {
669+ contact: 'm@cass.si',
670+ langs: ['en'],
576− url: 'https://cass.si/',
671+ url: 'https://cass.si/'
577− contact: 'm@cass.si'
578 },
672 },
579
673
580 {
674 {
581− url: 'https://dotcomboom.somnolescent.net/',
582− title: 'dotcomboom.somnolescent.net',
583 author: 'dcb',
675 author: 'dcb',
584 contact: 'dotcomboom@somnolescent.net',
676 contact: 'dotcomboom@somnolescent.net',
585− feed: 'https://dotcomboom.somnolescent.net/twtxt.txt'
677+ feed: 'https://dotcomboom.somnolescent.net/twtxt.txt',
678+ langs: ['en'],
679+ title: 'dotcomboom.somnolescent.net',
680+ url: 'https://dotcomboom.somnolescent.net/'
586 },
681 },
587
682
588 {
683 {
589− url: 'https://cadmican.neocities.org/',
684+ author: 'Nihiltarier',
590− title: 'cadmican',
591 contact: 'arachi@airmail.cc',
685 contact: 'arachi@airmail.cc',
592− author: 'Nihiltarier'
686+ langs: ['en'],
687+ title: 'cadmican',
688+ url: 'https://cadmican.neocities.org/'
593 },
689 },
594
690
595 {
691 {
596− url: 'https://jskjott.com',
692+ author: 'Jonathan Skjøtt',
597− title: 'jskjott',
598 contact: 'jonathan@jskjott.com',
693 contact: 'jonathan@jskjott.com',
599− author: 'Jonathan Skjøtt'
694+ langs: ['en'],
695+ title: 'jskjott',
696+ url: 'https://jskjott.com'
600 },
697 },
601
698
602 {
699 {
603− url: 'https://sixey.es/',
604− title: 'sixey.es',
605− contact: 'elmusho@gmail.com',
606 author: 'sixeyes',
700 author: 'sixeyes',
701+ contact: 'elmusho@gmail.com',
702+ langs: ['en'],
703+ title: 'sixey.es',
607− type: 'portfolio'
704+ type: 'portfolio',
705+ url: 'https://sixey.es/'
608 },
706 },
609
707
610 {
708 {
611− url: 'https://tilde.town/~dustin/',
612− title: '0xdstn',
613− contact: '0xdstn@protonmail.com',
614 author: '0xdstn',
709 author: '0xdstn',
710+ contact: '0xdstn@protonmail.com',
711+ langs: ['en'],
712+ title: '0xdstn',
615− type: 'wiki'
713+ type: 'wiki',
714+ url: 'https://tilde.town/~dustin/'
616 },
715 },
617−
716+
618− {
717+ {
619− url: 'https://jameschip.io/',
620− title: 'James Chip',
621− contact: 'henderson.j@protonmail.com',
622 author: 'James',
718 author: 'James',
719+ contact: 'henderson.j@protonmail.com',
720+ langs: ['en'],
623− rss: 'https://jameschip.io/index.xml'
721+ rss: 'https://jameschip.io/index.xml',
722+ title: 'James Chip',
723+ url: 'https://jameschip.io/'
624 },
724 },
625
725
626− {
726+ {
627− url: 'https://dym.sh',
628− type: 'hybrid',
629 author: 'DYM',
727 author: 'DYM',
630 contact: 're@dym.sh',
728 contact: 're@dym.sh',
729+ langs: ['en', 'ru'],
631− rss: 'https://dym.sh/rss.xml'
730+ rss: 'https://dym.sh/rss.xml',
731+ type: 'hybrid',
732+ url: 'https://dym.sh'
632 },
733 },
633
734
634 {
735 {
635− url: 'https://patrick-is.cool/',
636 author: 'Patrick Monaghan',
736 author: 'Patrick Monaghan',
637 contact: '0x5f.manpat@gmail.com',
737 contact: '0x5f.manpat@gmail.com',
738+ langs: ['en'],
638− type: 'portfolio'
739+ type: 'portfolio',
740+ url: 'https://patrick-is.cool/'
639 },
741 },
640
742
641 {
743 {
642− url: 'https://icyphox.sh',
643− type: 'hybrid',
644 author: 'icyphox',
744 author: 'icyphox',
645 contact: 'x@icyphox.sh',
745 contact: 'x@icyphox.sh',
746+ feed: 'https://icyphox.sh/twtxt.txt',
747+ langs: ['en'],
646 rss: 'https://icyphox.sh/blog/feed.xml',
748 rss: 'https://icyphox.sh/blog/feed.xml',
749+ type: 'hybrid',
647− feed: 'https://icyphox.sh/twtxt.txt'
750+ url: 'https://icyphox.sh'
648 }
751 }
649
752
650]
753]