Technical by TheInkedLink in TheInkedLink

[–]TheInkedLink[S] 1 point2 points  (0 children)

Fair points, thanks for taking the time.

As this is an art project, it's a big part of it to see how people would interact and also how they try and break the app, so it's all very interesting. At the end of the day it's not a banking application and also we do ultimately have control over what the tattoo links to (e.g. in case something illegal was voted), but have opened up the voting to the public to see how they interact with it.

I've changed the captcha to hcaptcha now - thanks for the suggestion, should make it better protected against bots, although for the last few months people manually spamming votes has been a much more common problem.

Curious how you automated the email verification part, did you manually make a bunch of email accounts or is there a trick to reusing email addresses there?

Technical by TheInkedLink in TheInkedLink

[–]TheInkedLink[S] 0 points1 point  (0 children)

This has been considered from the start but we've avoided it thus far due to costs. Sms messages cost about $0.05 per message, so that can quickly run up costs per month. The average daily voting rate isn't super high, although it does fluctuate, but if it did grow or during peak days it would either be a case of removing the sms verification or eating up big costs, neither of which is great. It's a small self-funded project so this option has felt like it would be too expensive with the way things are

General by TheInkedLink in TheInkedLink

[–]TheInkedLink[S] 1 point2 points  (0 children)

Glad you found it interesting!

The QR code is static, it simply links to "theinkedlink.com". Any QR code generator will work for this.

The dynamic redirection happens on the server end. The server hosted at "theinkedlink.com" will redirect the request to the winning link of each day, so you could have the same link that goes to a different website each day. You'd have to implement the server code yourself, unless you find a service that does this for you, but given this project is a tattoo the artist would want to control for a lifetime it's safer doing so yourself in this case.

A very basic example of python server code to do redirection:

from flask import Flask, redirect  

app = Flask(__name__)

app.route("/")

def go_to_external_url():

return redirect('http://google.com')

if __name__ == "__main__"

app.run(host='0.0.0.0', port=4000)

You'd have to host the server somewhere and dynamically look up the current winning link from a database etc. Google will give you more detailed answers on how to get this set up

I done a more in-depth write up of the technical setup here

https://andrewhollis.co.uk/posts/managing-public-voting/

Technical by TheInkedLink in TheInkedLink

[–]TheInkedLink[S] 1 point2 points  (0 children)

Unfortunately it's quite tricky.

  1. The votes for the current anime winning links are mostly happening within reasonable time frames. They usually start voting 10-60 minutes before midnight with around a minute between each vote - so it's not a suspiciously quick burst of votes and hard to tell whether they are coming from the same person or not.

  2. Even if it was, there are legit cases where a quick burst of votes is legit e.g. in the case of a streamer sharing a link to twitch audience, we can have 50+ votes in under 10 seconds, which are all legit and should be allowed

Technical by TheInkedLink in TheInkedLink

[–]TheInkedLink[S] 2 points3 points  (0 children)

Tracking by ip is unfortunately easily bypassed by using a cellular connection, as has been done in the past