Giter VIP home page Giter VIP logo

webring's Introduction

Webring Starter Kit

A boilerplate to host your own community of sites, also known as a webring.
Inspired by posts from Tatiana Mac and Charlie Owen.

Uses Eleventy and Netlify to build a central directory for member sites. People can link to /prev, /random and /next and be redirected to members of the ring.

✏️ Explanatory Blog Post

Features

  • Admins manage the ring on Github
  • Members are defined in src/data/members.json
  • Let people add their site through pull request or submit via email form
  • Publish a code of conduct
  • Provide an embed code that renders a banner (as a web component)
  • Publish an index of all member RSS feeds
  • show a SVG map of the ring and its members

Example

See the Demo Site generated by this code.

How to host a ring

  1. Fork this repo
  2. Edit src/data/meta.json and fill in your community info
  3. Add an avatar image for your ring to src/assets/images
  4. Remove the demo members in src/data/members.json
  5. Deploy your site to Netlify
  6. After you've set a domain, enter that in meta.json as well.

Deploy to Netlify

Banner Embed

Members can copy a code snippet and embed it into their sites. It renders a web component (with the bare links as a fallback).

The index site will produce an embed code with your ring URL and title:

<webring-banner>
    <p>Member of <a href="{{ your-url }}">{{ your-title }}</a></p>
    <a href="{{ your-url }}/prev">Previous</a>
    <a href="{{ your-url }}/random">Random</a>
    <a href="{{ your-url }}/next">Next</a>
</webring-banner>
<script async src="{{ your-url }}/embed.js" charset="utf-8"></script>

The design is up to the ring admins. It could look something like this:

the banner widget

Local Development

To build the site locally, run these commands:

# clone this repository
git clone [email protected]:maxboeck/webring.git

# go to the working directory
cd webring

# install dependencies
yarn

# start a local build server and the gulp pipeline
yarn start

webring's People

Contributors

cogdog avatar harleykin avatar maxboeck avatar mhitza avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

webring's Issues

Node Sass fails to compile. Should migrate to Dart Sass

Problem

Doing a yarn or npm install on the current codebase frequently doesn't work because libSass (which is a dependency of node-sass) does not compile.

LibSass compile error

yarn install v1.22.19
info No lockfile found.
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
[1/4] πŸ”  Resolving packages...
warning @11ty/eleventy > pug > pug-code-gen > constantinople > babel-types > babel-runtime > [email protected]: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
warning [email protected]: netlify-lambda is deprecated. Checkout https://github.com/netlify/netlify-lambda for more details.
warning netlify-lambda > webpack > watchpack > watchpack-chokidar2 > [email protected]: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
warning netlify-lambda > webpack > watchpack > watchpack-chokidar2 > chokidar > [email protected]: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2
warning netlify-lambda > webpack > micromatch > snapdragon > [email protected]: See https://github.com/lydell/source-map-resolve#deprecated
warning netlify-lambda > webpack > micromatch > snapdragon > source-map-resolve > [email protected]: https://github.com/lydell/resolve-url#deprecated
warning netlify-lambda > webpack > micromatch > snapdragon > source-map-resolve > [email protected]: See https://github.com/lydell/source-map-url#deprecated
warning netlify-lambda > webpack > micromatch > snapdragon > source-map-resolve > [email protected]: Please see https://github.com/lydell/urix#deprecated
warning node-sass > [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
warning node-sass > node-gyp > [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
warning node-sass > node-gyp > [email protected]: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.
warning node-sass > request > [email protected]: this library is no longer supported
warning node-sass > request > [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
[2/4] 🚚  Fetching packages...
[3/4] πŸ”—  Linking dependencies...
[4/4] πŸ”¨  Building fresh packages...
[-/4] β’€ waiting...
[-/4] β’€ waiting...
[3/4] β’€ fsevents
error /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass: Command failed.
Exit code: 1
Command: node scripts/build.js
Arguments:
Directory: /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass
Output:
Building: /usr/local/bin/node /Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
gyp info it worked if it ends with ok
gyp verb cli [
gyp verb cli   '/usr/local/bin/node',
gyp verb cli   '/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/bin/node-gyp.js',
gyp verb cli   'rebuild',
gyp verb cli   '--verbose',
gyp verb cli   '--libsass_ext=',
gyp verb cli   '--libsass_cflags=',
gyp verb cli   '--libsass_ldflags=',
gyp verb cli   '--libsass_library='
gyp verb cli ]
gyp info using [email protected]
gyp info using [email protected] | darwin | arm64
gyp verb command rebuild []
gyp verb command clean []
gyp verb clean removing "build" directory
gyp verb command configure []
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` succeeded python2 /Applications/MAMP/Library/bin/python2
gyp verb check python version `/Applications/MAMP/Library/bin/python2 -c "import sys; print "2.7.18
gyp verb check python version .%s.%s" % sys.version_info[:3];"` returned: %j
gyp verb get node dir no --target version specified, falling back to host node version: 18.16.0
gyp verb command install [ '18.16.0' ]
gyp verb install input version string "18.16.0"
gyp verb install installing version: 18.16.0
gyp verb install --ensure was passed, so won't reinstall if already installed
gyp verb install version is already installed, need to check "installVersion"
gyp verb got "installVersion" 9
gyp verb needs "installVersion" 9
gyp verb install version is good
gyp verb get node dir target node version installed: 18.16.0
gyp verb build dir attempting to create "build" dir: /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass/build
gyp verb build dir "build" dir needed to be created? /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass/build
gyp verb build/config.gypi creating config file
gyp verb build/config.gypi writing out config file: /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass/build/config.gypi
(node:8422) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp verb config.gypi checking for gypi file: /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass/config.gypi
gyp verb common.gypi checking for gypi file: /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass/common.gypi
gyp verb gyp gyp format was not specified; forcing "make"
gyp info spawn /Applications/MAMP/Library/bin/python2
gyp info spawn args [
gyp info spawn args   '/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/mikeherchel/.node-gyp/18.16.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/mikeherchel/.node-gyp/18.16.0',
gyp info spawn args   '-Dnode_gyp_dir=/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/mikeherchel/.node-gyp/18.16.0/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
Traceback (most recent call last):
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/gyp_main.py", line 16, in 
    sys.exit(gyp.script_main())
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 545, in script_main
    return main(sys.argv[1:])
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 538, in main
    return gyp_main(args)
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 514, in gyp_main
    options.duplicate_basename_check)
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 130, in Load
    params['parallel'], params['root_targets'])
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 2783, in Load
    variables, includes, depth, check, True)
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 399, in LoadTargetBuildFile
    includes, True, check)
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 271, in LoadOneBuildFile
    aux_data, includes, check)
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 308, in LoadBuildFileIncludesIntoDict
    LoadOneBuildFile(include, data, aux_data, None, False, check),
  File "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 251, in LoadOneBuildFile
    None)
  File "/Users/mikeherchel/.node-gyp/18.16.0/include/node/common.gypi", line 1
    e_data_file_flag%': 1
                        ^
SyntaxError: EOL while scanning string literal
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/lib/configure.js:345:16)
gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Darwin 22.4.0
gyp ERR! command "/usr/local/bin/node" "/Users/mikeherchel/Sites/drupal-webring/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/mikeherchel/Sites/drupal-webring/node_modules/node-sass
gyp ERR! node -v v18.16.0
gyp ERR! node-gyp -v v3.8.0

LibSass is deprecated (see https://sass-lang.com/blog/libsass-is-deprecated/).

Solution

Migrate to Dart Sass (PR Incoming)

Cannot deploy to netlify

Hi, first, sorry about my english. It seems that dependences needs to be update. I tried to deploy to Netlify without sucess.

This is a great proyect and there isn t others like that (easy deploy and admin).

Regards!

Chromium-based browsers treat all buttons as a random button

We've had a lot of fun setting up a webring for our little community, but it seems that chromium-based browsers don't use the next/previous buttons correctly. On Firefox, everything works as intended, but on Chrome, Brave, and Edge, every button acts like a random button.

I messed around with your example webring a little bit, and I found something even more strange. While using Brave, the webring links on this page all work as intended: https://mxb.dev/blog/the-return-of-the-90s-web/
But on this page on the same ring, they all act as random buttons: https://fanlistings.nickifaulk.com/webrings/
I don't think it's directly related to if people use the pre-made box or not, because one of our webring members does not use the box and their links still all act as random buttons.

Building on Netlify fails

Thanks for this project, I love it! Unfortunately, cloning it and trying to get it building on Netlify fails:

Release/obj.target/libsass/src/libsass/src/values.o
3:34:39 PM:   rm -rf "Release/sass.a" && cp -af "Release/obj.target/src/sass.a" "Release/sass.a"
3:34:39 PM:   g++ '-DNODE_GYP_MODULE_NAME=binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DBUILDING_NODE_EXTENSION' -I/opt/buildhome/.node-gyp/12.18.0/include/node -I/opt/buildhome/.node-gyp/12.18.0/src -I/opt/buildhome/.node-gyp/12.18.0/deps/openssl/config -I/opt/buildhome/.node-gyp/12.18.0/deps/openssl/openssl/include -I/opt/buildhome/.node-gyp/12.18.0/deps/uv/include -I/opt/buildhome/.node-gyp/12.18.0/deps/zlib -I/opt/buildhome/.node-gyp/12.18.0/deps/v8/include -I../../nan -I../src/libsass/include  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++1y -std=c++0x -MMD -MF ./Release/.deps/Release/obj.target/binding/src/binding.o.d.raw   -c -o Release/obj.target/binding/src/binding.o ../src/binding.cpp
3:34:39 PM:   g++ '-DNODE_GYP_MODULE_NAME=binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DBUILDING_NODE_EXTENSION' -I/opt/buildhome/.node-gyp/12.18.0/include/node -I/opt/buildhome/.node-gyp/12.18.0/src -I/opt/buildhome/.node-gyp/12.18.0/deps/openssl/config -I/opt/buildhome/.node-gyp/12.18.0/deps/openssl/openssl/include -I/opt/buildhome/.node-gyp/12.18.0/deps/uv/include -I/opt/buildhome/.node-gyp/12.18.0/deps/zlib -I/opt/buildhome/.node-gyp/12.18.0/deps/v8/include -I../../nan -I../src/libsass/include  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++1y -std=c++0x -MMD -MF ./Release/.deps/Release/obj.target/binding/src/create_string.o.d.raw   -c -o Release/obj.target/binding/src/create_string.o ../src/create_string.cpp
3:34:39 PM: ../src/create_string.cpp: In function β€˜char* create_string(Nan::MaybeLocal<v8::Value>)’:
3:34:39 PM: ../src/create_string.cpp:17:37: error: no matching function for call to β€˜v8::String::Utf8Value::Utf8Value(v8::Local<v8::Value>&)’
3:34:39 PM:    v8::String::Utf8Value string(value);
3:34:39 PM:                                      ^
3:34:39 PM: In file included from /opt/buildhome/.node-gyp/12.18.0/include/node/node.h:67:0,
3:34:39 PM:                  from ../../nan/nan.h:53,
3:34:39 PM:                  from ../src/create_string.cpp:1:
3:34:39 PM: /opt/buildhome/.node-gyp/12.18.0/include/node/v8.h:3135:5: note: candidate: v8::String::Utf8Value::Utf8Value(v8::Isolate*, v8::Local<v8::Value>)
3:34:39 PM:      Utf8Value(Isolate* isolate, Local<v8::Value> obj);
3:34:39 PM:      ^
3:34:39 PM: /opt/buildhome/.node-gyp/12.18.0/include/node/v8.h:3135:5: note:   candidate expects 2 arguments, 1 provided
3:34:39 PM: binding.target.mk:131: recipe for target 'Release/obj.target/binding/src/create_string.o' failed
3:34:39 PM: make: Leaving directory '/opt/build/repo/node_modules/node-sass/build'
3:34:39 PM: make: *** [Release/obj.target/binding/src/create_string.o] Error 1
3:34:39 PM: gyp ERR! build error
3:34:39 PM: gyp ERR! stack Error: `make` failed with exit code: 2
3:34:39 PM: gyp ERR! stack     at ChildProcess.onExit (/opt/build/repo/node_modules/node-gyp/lib/build.js:262:23)
3:34:39 PM: gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
3:34:39 PM: gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
3:34:39 PM: gyp ERR! System Linux 4.14.138+
3:34:39 PM: gyp ERR! command "/opt/buildhome/.nvm/versions/node/v12.18.0/bin/node" "/opt/build/repo/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
3:34:39 PM: gyp ERR! cwd /opt/build/repo/node_modules/node-sass
3:34:39 PM: gyp ERR! node -v v12.18.0
3:34:39 PM: gyp ERR! node-gyp -v v3.8.0
3:34:39 PM: gyp ERR! not ok
3:34:39 PM: Build failed with error code: 1
3:34:39 PM: Error during Yarn install
3:34:39 PM: Error running command: Build script returned non-zero exit code: 1
3:34:39 PM: Failing build: Failed to build site
3:34:40 PM: Finished processing build request in 3m11.572235723s

This was a completely stock deploy, I didn't change any of the code.

Hi, My Name is...

Since "Webring" seems to be a trademarked term, we need another name!

I think it would be nice to let the community come up with ideas.
Here are a few first ideas of mine to get the ball rolling (in no particular order):

  • Hudddle (with 3 d's)
  • Link Loop
  • Site Hoop

All ideas welcome!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.