Check the code before it goes on your site.
Not a security badge someone sold us — a list of claims you can test yourself. The file you receive is plain, unminified JavaScript: hash it, read it, paste it into any AI you trust and ask what it does. Put it on your site only after that. If it is not what this page says it is, tell us — the refund policy is there for exactly that.
1. What you are about to check
One file of plain JavaScript. No build step, no minifier, no dependencies, no package
manager. The hash below is the hash of that file — the same bytes ship as
js/yearalert.js inside the zip, inside the WordPress plugin, and behind the
Copy full script button of the install guide once your purchase unlocks it.
- File
yearalert.js·yearalert/js/yearalert.jsin the zip- Size
- 13,372 bytes
- SHA-256
eca78f60c77a73b0c2eab560a2abc0ac0c2459e5598cab9bec9203af36986e61
Unzip what you downloaded and check that the file is the one we published:
macOS / Linux shasum -a 256 yearalert/js/yearalert.js Windows certutil -hashfile yearalert\js\yearalert.js SHA256
Two honest footnotes. The hash is of the script, not of the zip: zip archives record build timestamps, so their digest changes without a single byte of code changing — the script is what runs on your site, so the script is what we pin. And if you take the snippet by copying it off the install guide rather than by unzipping the file, you get the same code but not necessarily the same hash: a pasted block carries whatever trailing whitespace your editor decides to add. Hash the file, not the paste.
2. What it does — and what it cannot do
Every line below is in the source you receive; nothing here is a promise made outside the code.
It does
- Walk the text of your page and look at 4-digit numbers.
<script>and<style>are skipped. - Update such a number only if it is a year between 1990 and today and one of two gates is open: the text carries
©,Copyrightor(c), or the element sits in the bottom 15% of the page. - In a range like
2019–2024, change the end year only. - When the text carries a copyright mark, change only the year that belongs to it: in
© 2019 Acme · built 2021the 2021 stays. - Leave the current year alone, so running twice changes nothing.
- Re-run every 250 ms for about ten seconds after load, then stop for good. Tilda and similar builders inject the footer after first paint; without this the script would arrive before the footer does.
- Sit inside
try/catchfrom top to bottom, so a failure is silence, never a broken page. - Skip any element you mark
data-yearalert-ignore, and everything inside it.
It cannot
- Talk to us, or to anyone. There is no
fetch, noXMLHttpRequest, nosendBeacon, no tracking pixel — no network call of any kind, to our servers or to a third party. - Load anything external. It pulls in no library, no font, no CDN.
- Store anything: no cookies, no
localStorage, nosessionStorage. - See your visitors. It reads no form fields, no page URL, no addresses, no identity of any kind. It never learns a site is yours.
- Build new markup or run generated code: no
innerHTML, noeval, nonew Function, nocreateElement. It assigns text to text nodes, and that is the only write it performs. - Touch anything but that text: no attributes, links, images, styles, prices or layout.
- Phone home about a licence. There is no key, no activation, no expiry. Cut us off tomorrow and it keeps working.
Those absences are greppable. On the file you downloaded, this prints nothing:
grep -nE "fetch|XMLHttpRequest|sendBeacon|localStorage|sessionStorage|document\.cookie|innerHTML|eval\(|new Function|createElement" yearalert.js
3. The limits, stated by us first
- It runs in the visitor's browser. The year on screen is always current; the HTML stored on your server still contains the old one. Anyone who views source, or browses with JavaScript off, sees the old year. That is the trade for not needing your passwords.
-
A year followed immediately by another group of digits is left alone.
© 2019 100 Main Stwill not be updated. This is deliberate. A phone number like33 3613 2018looks exactly like a year to any rule simple enough to be safe, and rewriting a customer's phone number on their live site is far worse than leaving a year stale: a stale year is visible and fixable, a broken phone number is neither. So when the two readings are ambiguous, the script does nothing. -
It only sees its own page. A year drawn inside an image, a PDF, a
<canvas>or another site's embedded widget is out of reach. -
A year with no copyright marker in the middle of a page stays put —
a project called
CROC 2020is not a copyright line, and it would be wrong to touch it. -
A founding year is never touched, even in the footer and even beside a
©.Est. 1998,Founded in 2009,Family owned since 2012,desde 2011,seit 1995,depuis 2007,с 2015 годаare facts about your business, not a stale copyright. The flip side: a copyright written as© since 2015is left alone too.
4. Don't take our word for it — ask a machine that has no stake
Open yearalert.js from your download, paste it into ChatGPT, Claude, Gemini or
whatever you already use, and paste this after it:
This JavaScript is about to go into the footer of my website. Read it and tell me plainly: does it send any data anywhere, does it load anything from another server, does it store anything in my visitors' browsers, can it break my page, and is there anything in it that is not needed for the job it claims to do? Quote the lines that back each answer.
An AI reading this file has no reason to be kind to us, and the file is short enough to read in full — that is the point of shipping it unminified. If an answer contradicts anything on this page, we would genuinely like to hear about it: support@yearalert.com.
Prefer tools over opinions? Upload the file to VirusTotal for 70+ engines, or paste it into JSHint — it is ordinary, standards-compliant code with no syntax anyone has to be clever about.
5. Where the code is
In your download, and nowhere else: we do not publish the source on this site. It reaches you with the purchase, unminified and with its comments — they explain the awkward decisions, which is where a script like this would hide something if it wanted to. Read it before it touches your site.
Fair enough?
Get it — it takes two minutesAlready bought? The step-by-step is on the install guide.