Anti-Racist Radar - https://antiracistradar.co.uk/

  • Want to keep track of this thread?
    Accounts can bookmark posts, watch threads for updates, and jump back to where you stopped reading.
    Create account
I sincerely hope someone actually sifts through these reports to find real incidents of racism.
AntiRacistRadar.webp
 
How can we be sure these screenshots you guys are sharing aren't from actual Jeets?
 
Are you guys sure it's actually processing the reports? I hate to ruin the fun, but with a quick look in dev tools I don't see any network calls being made after clicking "Submit Report". They also have a random websocket that looks like it's supposed to populate their newsfeed in real time, but it's also broken. That would also explain why it was "accepting" huge amounts of text without any error messages.

So either this is a vibe-coded piece of garbage site, or they realized they were getting brigaded and disabled the submit button.
 
Are you guys sure it's actually processing the reports?
It's not making a single request when submitting the form. Tried checking to see if it's doing anything with a socket, but that just led me onto the discovery that this guy has no clue what he's doing as he's left the sourcemaps on in production, meaning you can use the React DevTools to have a look at how he's naming some of his variables:

1756974188771.webp

HE BUILT THIS WEBSITE WITH AI​


:story:

Go and click on 'Contact' in the footer and it pops up with a toast alert:
1756974313004.webp

You can request it in your next prompt!

He might just be using the website to fish for donations and pretend like he's doing something, or it's doing some super weird request and actually sending it somewhere. I highly doubt this though, if you think about the fact it accepts the entirety of the Bee Movie script, I doubt this is a functioning form.

Easy way to make a grand:

1756974555846.webp

Has this guy built a scam site?
 
Has this guy built a scam site?
Almost certainly this site only exists to grab IPs, even a retard like this knows what people are going to do with it.

Still, just in case it is legit...
Anti Racist Radar Do Your Part.webp
 

HE BUILT THIS WEBSITE WITH AI​


:story:

Go and click on 'Contact' in the footer and it pops up with a toast alert:
View attachment 7869532

Has this guy built a scam site?

By God, are you saying my half-assed suggestion from earlier was accurate? I really was just throwing that out there, based on the fact that it had other orgs tied to it but still looked like the dude just barfed it into a prompt.:O

Damn, so another Indian scammer has "built" a shitty means to extract money from unwitting supporters with a product that isn't even functional yet? :lossmanjack:
 
Damn, so another Indian scammer has "built" a shitty means to extract money from unwitting supporters with a product that isn't even functional yet? :lossmanjack:
I'm not even going to warn any of the followers about this, let's let them lose more of their benefits money donating to this literal scammer.

1756987619261.webp

Posted today. "I need a developer to actually build this website that doesn't function". How does this guy have 61k followers?
 
I'm not even going to warn any of the followers about this, let's let them lose more of their benefits money donating to this literal scammer.

View attachment 7869898

Posted today. "I need a developer to actually build this website that doesn't function". How does this guy have 61k followers?
Well, thanks for actually digging deeper than the surface on this.

It sucks that this means we most likely have been pissing away our time on this, but it was still funny.

We could still keep tabs on the GoFundMe and his X to see how far he tries to take it, I suppose.
 
Well, thanks for actually digging deeper than the surface on this.
Have found concrete proof this is grade-A, prime bullshit. Have just found the source JS file (archive) and it has this entire gobbledegook that I've made sense of:

Code:
v.useEffect(()=>{if(l.message){const b=setTimeout(()=>{u({message:"",type:""})},5e3);return()=>clearTimeout(b)}},[l]);const d=b=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(b),f=(b,y="success")=>{u({message:b,type:y})},p=b=>{const{name:y,value:m}=b.target;t(w=>({...w,[y]:m})),y==="email"&&(m&&!d(m)?a("Please enter a valid email address with @"):a(""))},x=b=>{s(y=>({...y,userAnswer:b.target.value}))},g=async b=>{if(b.preventDefault(),!e.name||!e.email||!e.phone||!e.incident){f("Please fill in all required fields to submit your report.","error");return}if(!d(e.email)){f("Please enter a valid email address.","error");return}if(i.userAnswer!==i.answer){f("Please solve the math problem correctly to verify you're human.","error"),c();return}r(!0);try{await new Promise(y=>setTimeout(y,2e3)),f("Report submitted successfully! Thank you for your report. We will review it and take appropriate action.","success"),t({name:"",email:"",phone:"",incident:""})

Tidying up this code shows the following logic:

JavaScript:
// All of the following code is tidied up, minified code. Original variable
// names unsalvageable but you can kind of figure out what's going on.

// useEffect is a React lifecycle hook which is run when a variable changes.
// It'll be run here on submitting the form.

v.useEffect(() => {
  // If no message, reset form. You can verify this behaviour by trying it yourself
  if (l.message) {
    const b = setTimeout(() => {
      u({ message: "", type: "" });
    }, 5e3);

    return () => clearTimeout(b);
  }
}, [l]);

// Regex check for email, I think
const d = (b) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(b);

// This maps to firing a message, default to 'success'
const f = (b, y = "success") => {
  u({ message: b, type: y });
};

// This method is a dynamic method so it'll update the value of whatever 'y' (field)
// is passed in. Pure AI slop here as you can just use the React hook state. Awful code.
const p = (b) => {
  const { name: y, value: m } = b.target;

  t((w) => ({ ...w, [y]: m }));

  // Not even using a validation library like Zod. Retarded.
  if (y === "email") {
    m && !d(m) ? a("Please enter a valid email address with @") : a("");
  }
};

// Think this is a method which just updates the full field of funny shit.
// For anyone submitting huge chunks of text, this is why your computer took 7
// minutes to load it.
const x = (b) => {
  s((y) => ({ ...y, userAnswer: b.target.value }));
};

// 'b' being passed here is an event, so this will be the form submission method.
const g = async (b) => {
  // b.preventDefault() = do not submit the form. Usually used when calling an external
  // API but looks to be here just to stop the form from posting.

  // Shitty error checking, almost no typing checks here. Completely wide open form.
  if ((b.preventDefault(), !e.name || !e.email || !e.phone || !e.incident)) {
    f("Please fill in all required fields to submit your report.", "error");
    return;
  }

  if (!d(e.email)) {
    f("Please enter a valid email address.", "error");
    return;
  }


  // Lol. Baby's first validation check.
  if (i.userAnswer !== i.answer) {
    f(
      "Please solve the math problem correctly to verify you're human.",
      "error"
    );
    c();
    return;
  }

  r(true);

  try {
    // Now it just runs a promise on a timeout which resolves after a set amount of
    // time each time. Then it just fires the success message and resets the form.
    await new Promise((y) => setTimeout(y, 2e3));
    f(
      "Report submitted successfully! Thank you for your report. We will review it and take appropriate action.",
      "success"
    );
    t({ name: "", email: "", phone: "", incident: "" });
  }

There are two possibilities here:​


- The form is worthless and isn't submitting a thing. He doesn't even have analytics on the website so he has no clue how many people are looking at or using it.

- The guy has a Supabase connection and is storing an immense amount of data each time someone sends off a huge report (a hosted database NoSQL solution, I was correct! No pure SQL DBMS would cope with so much data being submitted, nor would a web server). When you do a hard refresh of the page, it makes a request to Supabase:

Code:
curl 'wss://iycyxfztbvapzwmomqlf.supabase.co/realtime/v1/websocket?apikey=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Iml5Y3l4Znp0YnZhcHp3bW9tcWxmIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTY2NjcwNjYsImV4cCI6MjA3MjI0MzA2Nn0.KudL3mA4942rRGtzN-S-CRhzOEAI3JCgugNFcVwDGOU&vsn=1.0.0' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:143.0) Gecko/20100101 Firefox/143.0' \
  -H 'Accept: */*' \
  -H 'Accept-Language: en-US,en;q=0.5' \
  -H 'Accept-Encoding: gzip, deflate, br, zstd' \
  -H 'Sec-WebSocket-Version: 13' \
  -H 'Origin: https://www.antiracistradar.co.uk' \
  -H 'Sec-WebSocket-Extensions: permessage-deflate' \
  -H 'Sec-WebSocket-Key: bluoku38ftzynkuGlnaVkQ==' \
  -H 'Connection: keep-alive, Upgrade' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: websocket' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'Pragma: no-cache' \
  -H 'Cache-Control: no-cache' \
  -H 'Upgrade: websocket'

If he had any kind of validation on the submission at all, this wouldn't be an issue. Very hard to tell with the minified code but I think it's more likely the form isn't submitting at all and is just running the `setTimeout` loop for a few seconds before it tells you it's submitted.




TL;DR: I'm 99% sure the form is completely worthless and is just doing nothing. He has a Supabase connection which I think is feeding his Privacy Policy page.
 
Last edited:
This is the type of project that gets public funding and grants. It's never intended to be anything functional and it'll be abandoned in a few months if it works at all.

I hope the Sharty has fun messing with it while it lasts.
 
Shouldn't it be called Racist Radar? It's not trying to detect anti-racists is it?
Or, take an address or coordinate point so that incidents can be mapped?

They could have literally copied a complaint form from any police website (that has one) and it would have been simpler and more robust than the slop they used.
Not even using a validation library like Zod. Retarded.
The only way to validate an email address is by sending a validation email. Is that what Zod does? If not, then the email address isn't being validated.

Or, is Zod a POS library that doesn't accept half the valid email addresses that I use because overly-dumb constraints?

If the latter, please stop using it.
 
The only way to validate an email address is by sending a validation email. Is that what Zod does? If not, then the email address isn't being validated.

Or, is Zod a POS library that doesn't accept half the valid email addresses that I use because overly-dumb constraints?

If the latter, please stop using it.
People forget validation happens in two places: the backend and frontend. There's basically no way of sending an email from the frontend as you can't securely store email login credentials in JS unless you have a backend API or a third party emailer service. Because I could just go into the asset file like I did above, strip out the credentials and hijack that email.

Zod mostly handles validation rules for the frontend and can use Typescript. So you define a type of your data structure and Zod reads it and produces a nice set of rules that integrates with a form and gracefully handles the error messages. The validation rules too, so you don't have to go and specify bullshit RegEx in the submission or endless `if (!a.field || a.fieldTwo)` checks. Zod just handles it all for you with better internal RegEx than you could ever write, so it's much better for people who aren't just using @gmail.com, @outlook.com emails.

 
>Be jeet
>Really want to scam bleeding-heart boomers to do donuts with a leased BMW today
>Lazily prompt an AI to produce a generic-looking React front-end for a form
>Don't bother with a basic DB system because you unironically find it too complicated to set up and manage


Really defeating stereotypes there.
 
Every brownoid that gets told to fuck off out of the way or to stop being rude takes out their phone and starts recording in the hopes that their diaspora facebook group will help cancel the evil White person, claiming you called them whatever slur comes into their head first.
The numbers go way up anywhere jeets invade because of this. Actual blowback against them hasn't even started.
 
>Be jeet
>Really want to scam bleeding-heart boomers to do donuts with a leased BMW today
>Lazily prompt an AI to produce a generic-looking React front-end for a form
>Don't bother with a basic DB system because you unironically find it too complicated to set up and manage


Really defeating stereotypes there.
Shitting in the street and scamming are the two things hard baked into the DNA of a Jeet. It’s just their programming.
 
Back
Top Bottom