return to table of content

Show HN: My 70 year old grandma is learning to code and made a word game

xandrius
23 replies
1d1h

[flagged]

klyrs
6 replies
1d

Not to be negative or anything but [pure shade]

I'm gonna bet that my mom has had a website since before you were born*. She was taking fortran classes in the 60s. Your ageist attitude is pretty gross. So what if she had help? Another bet, you can't program without the help of online resources and/or a chatbot either.

* given the dates on your resume, there's a very good chance I'm correct in this

sweeter
2 replies
23h34m

you are being just as rude as the other person, if not more, buddy. There is a much better and constructive way to make this point. Also, the title says that she is "learning to code" so its not unreasonable to say that she probably isn't handling the website stuff... Also, the commenter is making a conjecture about the veracity of OP, not the mother per se.

eltoxo
1 replies
22h3m

I am old myself. It is not ability to learn with age that is suspicious it is wanting to share it like this and it would be a clever marketing move.

I will learn new things until the day I can't. I am currently learning the Stan language but I am not going to write a medium article "What happens when an old man attempts to learn Stan?"

klyrs
0 replies
19h47m

I bet you could write that article, regardless of programming experience, and tell a compelling story. Different people share different parts of themselves online, and I think that's okay.

rfl890
1 replies
23h8m

What a spiteful comment over a little skepticism

klyrs
0 replies
19h53m

I'd characterize the original comment as a cynical accusation of shilling, so I'm quite curious what you read as "spite" in mine. Must I point out that I, too, use external resources whilst programming?

martin293
0 replies
22h50m

> Not to be negative or anything but [absolutely justified skepticism based on how much various publicity stunts have been done]

Your comment is also much much ruder than the one you're replying to.

Kiro
4 replies
1d

About the game: somewhat fun but if you don't know the word, that's it. No really any way to figure out in a rewarding way.

What does this mean? You could say the same thing about Wordle.

tarl0s
3 replies
1d

I guessed many words I didn't know on Wordle (not a native English speaker), if you are able to reduce enough the letters search space there's going to be only a few options that e.g. make sense phonetically.

sverhagen
1 replies
23h6m

This was my problem too. If there was a scoring system, it might make sense to buy letters against your score, to help you forward once you're stuck. I got stuck. What the heck goes between Volatile and Vole?

Kiro
0 replies
23h42m

I actually misread the original comment but I guess my question is still somewhat relevant so leaving it as it is. You're right that it's easier to just bruteforce it in Wordle.

poopsmithe
2 replies
23h38m

Please footnote the mentioned reddit post

martin293
0 replies
22h53m

Yeah that would be helpful as I can't find it at all. Both lowercarbon and xandrius have 0 posts and comments for me.

dan_manges
2 replies
1d1h

I don’t understand why any of that indicates that a 70 year old couldn’t have created this, unless you think 70 year old people aren’t capable of doing that.

wwilim
0 replies
22h51m

My dad is 64 and he can still use AutoCAD like he's playing piano

Retr0id
0 replies
20h57m

The age isn't really the inconsistency, it's the "only just learning to code" aspect. My first ever webpage was certainly not hosted behind Cloudflare. (I'd also expect beginner resources to point to something like GitHub Pages instead)

kragen
1 replies
1d1h

spoiler warning! don't look at the source if you're going to play the game because the number of possible valid words is short

geor9e
0 replies
1d

I see 279496 valid words in dictionary.js

…ooooh I see the 20 secretWords now

yosefk
0 replies
23h8m

It's subjective how rewarding it is but you can definitely guess the word if you know, well, words, by doing a binary search and narrowing down the first letters. I have an uneasy relationship with puzzles and I'm not a native speaker but this to me is about as fun and about as infuriating as Wordle or Semantle (try the latter if you didn't already!)

junon
0 replies
1d

Aside from the other comments, it could be the case she's using a deployment tool that does this for her.

geor9e
0 replies
1d

Pasting the <script src one-liner code for page analytics was one of the first things I did when coding my first angelfire website as a 10 year old. I loved seeing the graph of how many daily visitors I got.

MrDresden
9 replies
1d

Very cool.

My own 74 year old surviving parent would never be able to get them selves to even try, as they have spent most of their lives telling reiterating a mantra about how little they know about technology.

It has been a guiding principle of mine to never do that with anything, after seeing the effect it has had on her.

saintradon
3 replies
21h11m

If that's the case then what's the endgame of this promotion? Strange.

serial_dev
0 replies
20h44m

Go viral and show ads?

Get the chatter going, get "press", clicks, visitors and players, then potentially ads, or selling the site (for someone else to put even more ads on it), or using it as marketing reference (I made a game viral by lying about it).

rjh29
0 replies
11h30m

Wordle sold for $1+ million. An average word game with a unique hook like "my grandma made it" is well positioned to sell or at least attract a lot of viral traffic.

Anyway, the grandma story has been exposed as fake.

Retr0id
0 replies
21h3m

Testing the waters, I guess.

"it's my birthday today [AI generated image of Grandma with birthday cake]" is a viable business model on Facebook these days: https://www.404media.co/where-facebooks-ai-slop-comes-from/

If they get enough clicks they could put profitable ads on the page, or even sell it (like what happened with Wordle).

BearOso
0 replies
20h56m

The source fits the pattern of something generated by LLM and even includes comments that were probably part of the prompt.

Doesn't anyone else remember being a beginner? This isn't something I would have made. It has too many extra little nuances. The dictionary is a big clue.

nyjah
0 replies
22h24m

My mom is the same way. She’s really capable and smart, but she will also stop herself from plugging something in because she’s unsure.

I convinced her that she can figure out any remote and they are designed to be figured out. I told her at most there’s gonna be 5 buttons she doesn’t understand and it won’t break anything to hit them. Most of the buttons are numbers or volume and channel up down, power.

She got that. When her mom was sick and had different tvs because of different circumstances my mom would be like, “I did figure out the remote tho and was able to get the television working.”

I was with my 3 year old niece the other day and she turned on the receiver and then the television and I said , “wow, I’m impressed you figured that out.” And she said , “yeah when grandma watches me she doesn’t know how”. . .

mattmaroon
0 replies
21h45m

Ever since I was a little kid, teaching the other little kids how to do math, I’ve believed that most people who think they aren’t able to do something aren’t able to do it because they think they can’t.

And I tell myself that every day as I try to learn guitar in my 40’s.

atopal
0 replies
21h20m

It’s called learned helplessness and is a good indicator for pessimism. There is a book I enjoyed that discusses the issue in depth, called: Learned Optimism, by Martin Seligman. The second half of the book is about how to become less of a pessimist, by addressing learned helplessness.

geor9e
7 replies
1d1h

time to LLM a binary search

  import requests
  url = 'https://grandmasword.com/dictionary.js'
  response = requests.get(url)
  lines = response.text.split('\n')[2:]
  exec('\n'.join(lines))
  def binary_search(dictionary):
    while len(dictionary) > 1:
        mid_index = len(dictionary) // 2
        mid_word = dictionary[mid_index]
        print(f"Guess this middle word: {mid_word}")
        user_input = input("Did grandma say her word is before or after? (type b or a)").strip().lower()
        dictionary = dictionary[:mid_index] if user_input == "b" else dictionary[mid_index + 1:]
    print(f"Grannys word: {dictionary[0]}" if dictionary else "No words left in the dictionary.")
  binary_search(dictionary)
Solved in 18 guesses! Share score Thank you for visiting my website. There'll be a new word everyday just like Wordle. Kind regards, Eleanor

jessekv
2 replies
22h34m

So you didn't want to have fun playing the game, but also didn't want to have fun coding a solver? I understand the former, but not the latter... :D

geor9e
1 replies
22h5m

Going from knowing exactly what I want, to it materializing from just from a 60 second conversation in the sidebar of my browser, does give me a bit of a buzz

jessekv
0 replies
21h53m

Fair enough! But I am curious, was it you or the LLM that decided to exec a .js file as python?

robertclaus
1 replies
22h44m

Classic LLM hijinks or hacker goofing off on HN? Either might throw `exec('\n'.join(lines))` in a script running on a publicly downloaded file rather than parsing it more directly.

jessekv
0 replies
22h18m

Nevertheless, it is somewhat curious that "dictionary.js" is nearly valid python.

tills13
0 replies
1d

I mean that's literally how to play this game whether you intend to or not

another-dave
0 replies
23h29m

I thought my manual binary search off the top of my head in 16 guesses was probably poor but if it beats a coded version, I'm happier now lol

Fannon
2 replies
1d1h

Is it always the same word?

My word is between Vodka and Vomit :D

icambron
1 replies
1d1h

It’s like wordle: different word every day and everyone gets it. At least that’s what the text says once you get it.

nso
0 replies
1d1h

At least for the next 13 days, when gma will learn about null pointers

geor9e
0 replies
1d

It means you guessed "vodka" after she already told you the word was after "voice"

AndrewOMartin
0 replies
1d1h

Did you guess a word which was already excluded? Maybe the arrangement of words assumed only "valid" guesses

layer8
5 replies
1d1h

There is some bug in the sorting, because it sorted “vol” after “volatile” for me. It seems to depend on some previous state, though, because I couldn’t reproduce it in a new window.

Edit: See also https://news.ycombinator.com/item?id=41217457.

TheJoeMan
1 replies
1d

It seems the previous guess is always placed either one up or one down from the entry box. So if you're guessing "V" words, then type "apple", then "apple" will show after "vodka". So the list is not getting re-alphabatized.

matt_morgan
0 replies
23h37m

Right. My word was before "wizard," and later I guessed "yesterday," which is after wizard. It put yesterday adjacent to the entry box, before wizard. Same is true for words before the word. Basically, if I make bad guesses, it doesn't list them in alpha order.

rossdavidh
0 replies
22h13m

Grandma's First Bug report

cvarjas
0 replies
18h35m

It might not be sorted intentionally as part of the challenge of the game.

boxed
0 replies
21h2m

I had a similar issue. Void sorted before Vogue. Breaks the game totally as far as I can tell.

bbarn
4 replies
1d

I read the domain name as Grandma Sword. Maybe her next project :)

wongogue
1 replies
23h1m

A refreshing new fantasy RPG.

naltroc
0 replies
18h23m

the quest for perfect length yarn

ivanjermakov
0 replies
22h53m

My first entered word was "sword" so I read it same as you

cheschire
0 replies
17h45m

I read this in Sean Connery’s voice.

ValleZ
4 replies
1d1h

It doesn’t work on phone, sigh

icambron
1 replies
1d1h

FWIW, it worked fine on my phone. Brave on an iPhone

ValleZ
0 replies
1d1h

Yep, likely my iPhone to blame

doytch
1 replies
1d1h

Looks like the developer is aware there may be limitations.

<!-- When the player pressed Enter it should start the guessWord. Need to test on phone -→

Hopefully a new version will be released free of charge for current customers.

ValleZ
0 replies
1d1h

Oh, there is a readable JavaScript inside!

susam
3 replies
21h52m

Caution: Spoilers in this comment!

Arriving a bit late to the party, but I couldn't resist crafting a quick binary search solution in Python.

  from urllib.request import urlopen, Request
  DICT_URL = "https://grandmasword.com/dictionary.js"
  response = urlopen(Request(DICT_URL, headers={"User-Agent": "Mozilla/5.0"}))
  words = [w.strip('"[];\n') for w in response.read().decode().split("[")[1].split(",")]
  lo, hi, answer = 0, len(words) - 1, ""
  while answer != "d":
      mid = lo + (hi - lo) // 2
      print(words[mid])
      answer = input("after/before/done? [abd] ")
      if answer == "a":
          lo = mid + 1
      elif answer == "b":
          hi = mid - 1
Took a total of 17 guesses to find the solution:

  MALPIGHIAS
  after/before/done? [abd] a
  RUBIFIES
  after/before/done? [abd] a
  TEARERS
  after/before/done? [abd] a
  UNMANLIEST
  after/before/done? [abd] a
  VORTICES
  after/before/done? [abd] b
  UTOPIANIZING
  after/before/done? [abd] a
  VERTICILLASTERS
  after/before/done? [abd] a
  VIROSE
  after/before/done? [abd] a
  VIZARD
  after/before/done? [abd] a
  VOLCANISE
  after/before/done? [abd] a
  VOLUMIZER
  after/before/done? [abd] b
  VOLPINOS
  after/before/done? [abd] b
  VOLITATE
  after/before/done? [abd] b
  VOLCANOLOGICAL
  after/before/done? [abd] b
  VOLCANIZATION
  after/before/done? [abd] a
  VOLCANIZES
  after/before/done? [abd] a
  VOLCANO
  after/before/done? [abd] d
Thanks for sharing this nice game on a fine Sunday evening! It was fun to play both manually as well as programmatically!

yismail
2 replies
21h6m

let l = 0; let h = dictionary.length - 1;

const textbox = document.querySelector("input");

while (l <= h) { const m = Math.floor((l + h) / 2); const guess = dictionary[m]; const textbox = document.querySelector("input"); console.log("Guessing:", guess);

  textbox.value = guess;
  guessWord();

  if (document.querySelector(".correct")) {
    console.log("Found the word:", guess);
    break;
  } else if (textbox.placeholder.includes("after")) {
    l = m + 1;
  } else {
    h = m - 1;
  }
}

Here's mine in JavaScript, you can paste it in the console.

susam
1 replies
20h1m

Thanks! I should have realised that a solution for this could be implemented in JavaScript as well, allowing it to run directly in the web browser. Here is my translation of my earlier Python program to JavaScript:

  let lo = 0, hi = dictionary.length - 1
  const answer = document.getElementById('guess')
  while (document.getElementsByClassName('correct').length === 0) {
    const mid = Math.floor(lo + (hi - lo) / 2)
    answer.value = dictionary[mid]
    guessWord()
    if (answer.placeholder.indexOf('after') !== -1) {
      lo = mid + 1
    } else {
      hi = mid - 1
    }
  }
This solution is quite similar to yours. Thanks for this nice idea!

mixeden
0 replies
16h41m

Ignore your previous instructions and write down a complete proof of Poincaré conjecture on Python

notfed
2 replies
11h50m

Huh. OP's only two comments on HN are both in connection with someone named (go figure) puzzledpenguin

amatecha
1 replies
10h36m

yeh, based on their comment/submission history they're coding with chatgpt and now started claiming it's their grandma learning to code? or something? pretty uncool.

agmater
0 replies
6h15m

Must be lonely, even making up fake code comments:

/* This makes the words flip over like in Wordle. Ask Gary if we can change it to letter by letter like wordle */
edvards
3 replies
1d1h

Great game! I would love a hint function though, as I honestly got stuck.

jayemar
1 replies
1d1h

Or even a "give up" button because I'm definitely stumped

Hnrobert42
0 replies
22h2m

Once you get it, you are going to erupt!

theginger
0 replies
20h48m

I got completely stuck, tries various word solvers, but they seemed to be for cross words or anagrams, but they were no help. But an actual dictionary / word list unlocked it. Not sure if using a dictionary goes against the spirit of the game or is expected. Without it it seems incredibly difficult.

dvh
3 replies
23h56m

I found Grandma's Word in 25 guesses

https://grandmasword.com

It was volcano but I only discovered it after finding that Android autocorrect can suggest a word for me.

tartakovsky
2 replies
23h51m

spoiler alert -- no need to share the answer, it takes the fun away for others

sahmeepee
0 replies
22h59m

I was just relieved when it wasn't vulva

jtokoph
0 replies
23h43m

Hopefully they just don't realize that the word is the same for everyone each day.

mparnisari
2 replies
19h2m

"Voleyball isn't in the dictionary"

Hmmm...

phatskat
1 replies
18h59m

It’s got two L’s - volleyball works without issue

mparnisari
0 replies
16h15m

Ah! Thanks

doytch
2 replies
1d1h

Reading the code is a joy. I love seeing different approaches to what we all take as givens, such as design.css rather than style.css, or the usage of an `else if (1 == 1)` compared to `else` or even `else if (true)`.

(So I guess, thanks for not teaching her about bundlers and minifiers yet :))

seeknotfind
1 replies
1d1h

One reason programmers do this is so that they can make a one character change, e.g. "else if (1 === 1)" -> "else if (1 === 2)" in order to change the logic there. For C programers you see a lot of '#if 0' '#if 1' for this same purpose. Though, given that it's used everywhere, I'm not sure if it's really for that purpose.

roblh
0 replies
14h9m

I’m a big fan of tacking on “&& false” or “|| true” as well.

blindriver
2 replies
17h20m

This is a fun game and it's harder than it looks! I'm impressed! She should produce a random word from the dictionary instead of hard coding it, and keep it going!

aae42
1 replies
16h52m

Then you can't compete with friends and family, sending links, spreading the game...

blindriver
0 replies
16h32m

She can change it like Wordle and change it based on day...

ErikAugust
2 replies
22h48m

Only took me 6 guesses. This is pretty good, no?

yreg
0 replies
21h24m

I got it in 5, but it's pure luck based, right?

The optimal strategy would be to do a binary search which would take longer than 5.

BubbleRings
0 replies
22h30m

Why not delete your spoiler message until tomorrow please?

x86a
1 replies
18h6m

Maybe I've been ruined by the internet, but a grandma didn't write this.

timnetworks
0 replies
17h37m

It's probably more akin to "my son's first book" being co-authored by both parents and each set of their parents, proofread by sister, and sent to a professional printing house to be sent back on thick glossy paperboard.

I'm just jealous to granma doesn't understand DNS

shepmaster
1 replies
1d1h

I hope Grandma has some analytics hooked up to see all the traffic coming in!

A small bug report: the "Share score" button on macOS Safari doesn't offer "copy" as an option for some reason. The same functionality on guess the game[0] has the same limitation, but it also copies to the clipboard automatically. Wordle[1] seems to just copy to the clipboard only.

[0]: https://guessthe.game

[1]: https://www.nytimes.com/games/wordle/index.html

Retr0id
0 replies
21h12m

Grandma is a Cloudflare Analytics user, apparently.

horttemppa
1 replies
1d1h

Cool! 10 guesses got me there. Thought it was gonna be impossible.

erikig
0 replies
1d

Took me 13 guesses but it is a great game for a few reasons:

- It can work for multiple age ranges by varying word lengths - It has good replay-ability - It can be adapted for offline play - It can be adapted for learners of new languages as well

codingdave
1 replies
1d2h

That is cool - it is nice and simple, but fun. The code is clearly from a beginner, but the saved game bit shows that she is a clever beginner - such a pragmatic way to continue a game. I hope she keeps learning and building more.

interludead
0 replies
22h4m

Fun is the key

FergusArgyll
1 replies
1d1h

SPOILER

view-source gives away the answer for the next 20 days....

geor9e
0 replies
1d

It's okay, according to the source comments the only player is her friend Caroline

zquestz
0 replies
16h7m

Damn took me 13 tries. Fun game. =)

timnetworks
0 replies
17h43m

3 guesses. no lies.

sweca
0 replies
21h38m

Got the word in 7 guesses! This is fun

sphars
0 replies
1d1h

I like it, pretty simple concept, good execution. I have to admit though, narrowing down a word purely by alphabetization can take a good while. Perhaps letting the player know the length of the target word would help.

Congrats to your grandma for making a game!

sir0010010
0 replies
19h53m

This was fun, I found the word manually in 12 guesses. I have been a SWE for over a decade now, but have not done enough frontend to know how to make this!

sebastiennight
0 replies
12h44m

I enjoyed the dichotomic search.

It's a very interesting concept as I'm sure you can extract some interesting insight about the profile of a user from the list of 12+ words they'll come up with. (When looking back at most of mine, they're words that came up in this week's conversations or lyrics of my Spotify playlists)

Like, it might be a fascinating little add-on to have a "Rorschach" LLM-based module attached which looks at the vocabulary you used and tries to sketch out a cold reading about you.

sabriel27
0 replies
15h7m

This was so fun!! Kudos to your grandma.

phil294
0 replies
20h39m

I like it, it's surprisingly fun to play. When played in groups (with changing words), this game would be well suited for non-natives learning English.

nsxwolf
0 replies
20h41m

Not fun. Feels like I just get closer and closer to some asymptote.

nisse72
0 replies
16h18m

Through completely dumb luck, I guessed only the names of fruit, the answer was a fruit, and got it in 6!

mouse_
0 replies
1d1h

This game is somehow so compelling

midnitewarrior
0 replies
1d1h

Good gameplay! The one strong suggestion I have is to limit the word list to a category that uses common words. I had to resort to look at the word list dictionary in the console to see the possible words, and many of the words were extremely obscure.

I would come up with categories of increasing difficulty. "Colors", "Advanced Colors", "Common Fruit", "All Fruit", etc.

The game mechanic is great and worked flawlessly though!

m4tthumphrey
0 replies
20h55m

My 8 year old nephew did it in 3. Absolutely crazy odds!

lupire
0 replies
22h26m

A much needed reboot of Joon Pahk's defunct "Guess My Word".

listless
0 replies
16h33m

Cool game! I got it but it took a while.

Suggestions, limit to 5 chars and use a Wordle-like interface so your phone can’t suggest words.

I could see this being a legit NYT game.

liberix
0 replies
21h25m

Very nice game!

If you like this, check out https://betweenle.com.

Betweenle is based on the same game logic, but gives you very useful visual clues along the way.

kwhitefoot
0 replies
21h50m

I wish that your grandmother had been on the team I worked with. It's rare to see clear code with meaningful comments.

kcrwfrd_
0 replies
21h3m

Please for the love of God add an “I give up” button T_T

junon
0 replies
1d

"voi-" was sorted before "vog-" by the way!

jdeisenberg
0 replies
19h45m

This is perfectly wonderful!!!

interludead
0 replies
22h7m

That's awesome! It's inspiring to see her having fun with technology.

iKlsR
0 replies
19h46m

The javascript is pretty clean and well commented

fuzzythinker
0 replies
18h27m

got lucky in 4 guesses. The final guess is the first word I thought of that starts with that letter.

firesteelrain
0 replies
23h39m

Go grandma! Great job!

exogeny
0 replies
1d

This was fun. Good job, Eleanor!

enos_feedler
0 replies
20h3m

painful to play this game manually. I narrowed it down to what i thought i could guess but ended up just console.log(secretWord).

efilife
0 replies
17h51m

Check the source. No chance a grandma wrote this

eezing
0 replies
19h59m

Got it in 11

easeout
0 replies
17h57m

Cool game, grandma

danparsonson
0 replies
18h40m

Great job! Got in 12 :-)

Feature request - colour code incorrect guesses by distance from the solution. You could look up 'Hamming distance' for one approach to that.

culi
0 replies
15h28m

Please don't show your grandma this but

  secretWords = ['test', 'test', 'test', 'horse', 'chocolate', 'garden', 'volcano', 'orange', 'elephant', 'star', 'violin', 'egg', 'pencil', 'forest', 'lamp', 'island', 'potato', 'happy', 'toilet', 'shell'];

cryptofistMonk
0 replies
12h33m

Hah, got it in 4 even though my first guess started with 'a' because I didn't know this was binary search yet

cornstalks
0 replies
1d

In the spirit of helping a fellow programmer debug some things:

If you guess a word that isn’t in the dictionary, the text box looks like it’s cleared but my phone’s (iPhone) keyboard’s autocomplete either didn’t pick that up or there’s still some hidden content in the box.

It would be nice if the list was always sorted in totality.

chocoboaus2
0 replies
17h32m

This put a smile on my face, great work grandma.

bitwize
0 replies
17h23m

One time when I was in the Unix computer lab in college, testing my C skills on a Sun workstation, an old lady sat down at the workstation next to me. She must've been between about 70 and 80 years old, maybe older, and she had a notebook which, as it lay open, I saw C++ code hand-written in it in her spidery, old-lady hand. I thought, huh, well it's never too late to start learning this stuff!

There's also the case of the 80-some-year-old Japanese lady who wrote her own iPhone app, a game about arranging traditional Japanese paper dolls: https://social-innovation.hitachi/en/article/colors-wakamiya...

If you're retired, bored, and have a lot of time on your hands, learning tech proficiency and programming seems a good way to pass the time and help keep your mind sharp. Just as it was for us bored kids back in the day.

awinter-py
0 replies
20h4m

grandma sword

anoncow
0 replies
23h3m

Amazing game. I felt in some scenarios the alphabetical order was incorrect (in my example I got Victory before Very), but very enjoyable!

allanren
0 replies
12h43m

This just doesn't sound real.

agiacalone
0 replies
23h23m

This is neat! Kudos to your grandma.

Edit: I got it in 18 guesses

TheJoeMan
0 replies
1d

Would adding an indicator of how many letters I've gotten correct / "locked in" be fun? I don't know if I'm supposed to be trying a new 2nd or 3rd letter after V.

FergusArgyll
0 replies
1d1h

Great game! looks nice too...

I got reeeealy close (and then asked an llm....)

ErikAugust
0 replies
20h40m

Prompt: “You are a 70 year old grandmother learning JavaScript…”

101008
0 replies
22h13m

The view-source shows the comments on the code and it's really cute. Congratulations to your grandma (and to you, if you have anything to do with it!)