Unapologetic

By Alex Guyot ("Ghee(As in "geesegoose")-yo")

Double-click for controls.

Double-click to expand.

Double-tap for controls.

Double-tap to expand.

Fallback logo image for when CSS 3D transforms fail or are unavailable.

Colophon


Unapologetic was built on the phenomenal Astro web framework. It is written in valid HTML and CSS, and vanilla JavaScript. All interactive elements on the site — from pop-up footnotes to the theme switcher to the ridiculous cavalcade of easter eggs — are powered by organic, free-range, hand-coded web components.1 The site is served static from the edge by Fly.io. Every line of code was written by a human.

This website was built with the Zed code editor (as well as some earlier work in Nova). SVG elements were created in Pixelmator Pro or Affinity Designer 2. Words are written in Markdown, and likely conceived in Obsidian.

This website is fast. It consistently notches near-perfect scores on PageSpeed Insights and WebPageTest. Most pages weigh in at around 200Kb, and the vast majority of those bytes are font files which get cached after your first visit. Actually, pretty much everything gets cached after your first visit. There are further optimizations to be made, but shipping with no JavaScript framework and zero post-build external dependencies does wonders for your baseline.

Speaking of fonts, Unapologetic’s title and headers are typeset in Magnet. Its text is all Mallory. Both are by the inimitable Tobias Frere-Jones. Code blocks, as I like them in my own editor, are Intel One Mono.

This website is accessible. I am working towards full conformance with the WCAG 2.2 level AA accessibility standard. As of launch this site should already be close to that bar, but I expect there are still misses on some guidelines. I’m working my way through Sara Soueiden’s excellent Practical Accessibility course, and am applying those learnings here as I build knowledge in this area.2

Unapologetic has no interest in your personal data, but it does take interest in coarse-grained page view counts and user-agent information. This data is anonymously collected using a custom-built, privacy-preserving API. It’s loosely based on this example by Bear Blog, but with a number of improvements. At a high level: IP addresses are concatenated with user-agent strings and obfuscated through a keyed hashing function for the sole purpose of sorting out daily unique hits from repeat visitors. Each night at midnight, all data from the prior day is compacted into aggregate hit counts for each page on the site. Post-compaction, the day’s hashing key is recycled for a new one, and all IP/user-agent hashes and their associated data are deleted. Thus, within at most 24 hours from your last visit here, even the minuscule amount of data that could vaguely identify you is permanently erased.

While I hope it’s clear that this website goes above and beyond to maintain your privacy, your page views are still your data, and thus should be yours to control. If you’d like to opt out of Unapologetic’s anonymous aggregate hit counting entirely, I believe it’s your right to do so. Click this link to stop sending anonymous view counts to this website.

You have opted out of anonymous view tracking. 👍

Building this website has been a labor of love. I’ve been thinking about this project for the better part of a decade, and I’m beyond excited to have finally completed it. If you like what I’ve done here, or just want to yell at me about how much of a waste of time it is to build elaborate easter eggs that no one will ever notice, I would truly love to hear from you.

Footnotes

  1. Web Components! Web Components! Web Components! Web Components! Web Components! Web Components! Web Components!

  2. For the moment I am not paying particular attention to the accessibility of intricate hidden easter eggs, but I’m considering ways to make improvements to those in the future.

Restore hunt?

If you're switching from another device, you can restore your progress here.

If you found this randomly, I recommend doing the hunt yourself, but you do you.


(Just basic tasks?)

(Hard cube tasks too?)

(Here on accident?)


legend!

May your name be forever emblazoned on the Bonk leaderboard.

Truly, thank you for exploring this website.

Now go forth and make Easter eggs!


(Again?)


To do (as well) :

  • Solve the cube in 4 moves or less
  • Scramble the cube by at least 50 turns, flip it, and reset it (for more fun: solve before resetting)

You probably need a touch device for the rest of these. If you switch devices, long-press the Easter egg to restore your progress.

  • Make it to level 9 in Bonk
  • ?????????????
  • Make it to level 10 in Bonk
  • ?????????????
  • Make it to level 11 in Bonk

(Sick of this?)

(Miss victory?)


Congrats!

You found all the Easter eggs.

If you enjoyed this, let me know and then go play Goose Game (not an ad, Goose Game just rocks).


(Finished?)

(Thirsty for pain?)

(Again?)


To do :

  • Flip the cube
    Hint?(Double-click the cube)
  • Learn pronunciation
    Hint?(Of the author's last name)
  • Send an important message
    Hint?(The message is "yo")
  • Locate the troublesome goose
    Hint?(Ghee I wonder where it coule be?)
  • Anger the goose
    Hint?(Honk til it's red in the bill)
  • Shoot a rainbow
    Hint?(Look reeeeal low)
  • Shoot some stars
    Hint?(Above the rainbow)
  • Find out what is happening
    Hint?(First shoot lots of stars)
  • Make a full commitment
    Hint?(Get help understanding)
  • Have fun
    Hint?(You have to really want it)
    (Or, find a page that doesn't exist)
  • Play with a slinky
    Hint?(Ask questions after game over)
    (Or, poke around the colophon)
  • Get insulted (at least three times)
    Hint?(Ask the right question, wait for enough answers)

(Stuck?)

(Got it now?)

(Hate cursive?)

(Miss the cursive?)

(Over it?)