Excited to see my TMF REWIND stats for 2025 🫣🫣 heard the team worked really hard on it!
Co-written by queazy
$4.65 for an americano is crazy work 😭💀⚰️
rogue update I
Just messing around wasting time in javascript :c
Use WASD to move around (breaking bounds will break bounds). ib the legendary Rogue. Doing some dirty innerHTML swapping to "render" the world with ,. for grass. Planning on separating entities into "layers", for example having items and enemies and the player exist on the "entities" layer.
Not much else planned -- maybe basic enemies, fantasy items?
click to focus!
View Source Code
<pre id="canvas" tabIndex="0"></pre>
<style>
#canvas {
font-size: 14px;
background-color: #101010;
color: #f0f0f0;
width: fit-content;
max-width: 100%;
box-sizing: border-box;
padding: 1rem;
overflow-x: scroll
}
</style>
<script>
const el = (ident) => { return document.querySelector(ident); }
const canvas = el("#canvas");
const WORLD_WIDTH = 48;
const WORLD_HEIGHT = 18;
var world = [];
var entities = [];
const player = {
x: WORLD_WIDTH / 2,
y: WORLD_HEIGHT / 2,
ch: "@",
}
function buildWorld() {
for (let i = 0; i < WORLD_HEIGHT; i++) {
let row = [];
let empt = [];
for (let j = 0; j < WORLD_WIDTH; j++) {
row.push(Math.random() < 0.1 ? "," : ".");
empt.push("");
}
world.push(row);
entities.push(empt);
}
}
function initPlayer() {
entities[player.y][player.x] = player;
}
function renderPlayer(buffer) {
buffer[player.y][player.x] = player.ch;
}
function refreshWorld() {
// deep copy
let buffer = world.map(r => r.slice());
renderPlayer(buffer);
canvas.innerHTML = buffer.map(r => r.join("")).join("\n");
}
canvas.addEventListener("keydown", (e) => {
switch (e.key) {
case "w":
player.y -= 1;
break;
case "s":
player.y += 1;
break;
case "a":
player.x -= 1;
break;
case "d":
player.x += 1;
break;
}
refreshWorld();
});
buildWorld();
refreshWorld();
</script>
Guest written by queazy
first time writing for the blog
but i got no thoughts
i miss my cats
so much so that i yearn for a dog
ai slop code is buns :heartbreak: finally rewrote some unorganized code. Still need a lot of qol features but things are pretty steady now!
happy thanksgiving !!
New styling
Exploring some new styling and colors for a softer, clearer look. Looking very very similar to another blog site I know as a matter of fact T-T
shoutsouts
A test
This is a testing document highlight the various features of articles, all based on markdown. From standard things like
this, we'll explore.
Another Header
This header should be smaller. Generally we only want one H1 per article.
And another header
It'll keep going and going.
Code Blocks
With the power of highlight.js and marked, we get full syntax higlighting:
const highlight = "code";
const a = () => {
console.log("hey");
}
Bye Netlify
After hitting my Netlify monthly limit during testing (forgot to disable auto build on github push), I've successfully switched to Github Actions as the CI process for rebuilds. Like before, CRUD operations trigger a firebase function which checks auth and then triggers a Github Actions workflow, rebuilding and redeploying the site (only one process allowed at a time to prevent wasted concurrency in overlapped requests).
It has the same issue of being a little slow to show in live, but thats just one of the drawbacks of full static site generation. I'm pretty happy with this implementation now, and hopefully the limits are far more sane. Will look into self hosting this Actions runner as well.
Edit
We've now switched to a self-hosted runner. This edit's changes were propagated with theLotushome server!
yeah just hit 50% utilization of Netlify free credits for this month; it hasn’t even been 12 hours 😭💀⚰️
CR laugh
Implementation Lamentation
Now that the site is in its most basic working state, I’m not super satisfied with the implementation. I initially intended on keeping everything “within” firebase, from database to storage to hosting and functions. However it seems firebase has poor support for static rebuilds and updates to their hosting, something I need to investigate further.
Currently we use Netlify for hosting, allowing us to use a firebase function to request site rebuilds (requiring an authenticated user of course). While it works, I’m not fully satisfied with the disjointed operation, even if it does work fine for now.
Other pursuits would be figuring out a function or switching to github actions CI, which is the same as Netlify honest—-just with more manual work.
Guest written by queazy
Was craving some coffee today.
But I also wanted to hop in the stu.
Thats why I went to H-Mart, lets gets some Tous les Jours.
life is too short to not lock in more
Recap of Today
Major Revision
Blog rewrite switched from scratch SSG to astro. Ultimately the same end product for a much easier development experience without having to reinvent the wheel.
Making stuff from scratch is cool (at the cost of time and patience).
Introduction of new admin editor and dashboard with auth, with serverless CRUD on articles. This is lacking a site rebuild still -> changing posts doesn't reflect in "prod." Can be faked with javascript, but loses the main point: SSG!
Lost Features
No more highlight.js syntax highlighting -> will be added later
Still Need
- image (and eventually file) uploads
- guest/co-writers
- site rebuild/some solution on CRUD
cya !
Grind Report
Worked on blogs today, completing daily sprint. Circled back on leftover topics, whiteknuckled through getting our ducks in a row, but finished EOD. The story points (fibonacci edition) were well numbered.
shoutout thinkpad users
battery at EOD
| device | battery |
|---|---|
| t14 gen 2 | 18% |
| t14s gen 3 | 44% |
| iPhone 15 Pro | 22% |
| iPhone 13 | 44% |
| iPhone 16 Max | 31% |
| Garmin Forerunner 165 (silicone band) | 55% |
| Garmin Forerunner 165 (nylon band) | 87% |
| Test |
Items consumed
- chinese food (see Pork Chops (Poem, 2025))
- starbuck $3 matcha ( pretty buns , 2/10 )
Clash winrate
57.142857142% win rate in duos today
Starbucks bathroom password
02468
Emails Written
1
Linkedin connections made
at least 1
Vibe coded prompts sent
at least 1
calls received
2 (declined 1)
Steps taken
~800
Yaaahhhh. It's rewind time. Yeah, if I control rewind, I would want... Fortnite... and Mark Ass Brown Lee
✋😮💨... ☝️😉... 🫰💭
The wise words of popular actor and celebrity Will Smith during his surprise guest appearance in YouTube Rewind 2018: Everyone Controls Rewind. The video, as of November 2025, has amassed over 20 million dislikes, by far one of the most hated YouTube videos of all time.
Perhaps this intro by Smith has angered the masses, setting a silly tone for a once beloved yearly YouTube tradition. Smith's introduction of well known tech reviewer Marques Brownlee was especially hated given his mispronunciation of admired influencer's name.
Furthermore, the reference to Epic Games' hit title Fortnite stirred discontent in the wider audience, who questioned Smith's otherwise unc status for making note of such a hip, popular game.
The world will never know the directions and turns taken as a result of this video, and YouTube rewind has never been the same since.
First day of rising and grinding early complete
Nosferatu Review
4/5 cupcakes
Nosferatu was really scary guys 😱😱😱 !!! I had to lok away so many times. Very fun movie, not for kids 101/10.
Please do check out JAGM's review, he knows it much better than I!
Got a KeyLab mkii today :o
