The complete release log for the ⚒️tullyelly persona.
141 releases · Page 1 of 8
I'm in the messy middle emotionally, spiritually, and physically. There's a few dozen reasons I just can't seem to make heads or tails of myself lately.
I need to make a few changes.
Always changing.
I'm exhausted. I didn't see fern today.
Skip into tomorrow.
Before we depart today, there was an executive decision made. TL;DR (again): I WROTE THE FUCKING THING I JUST GOT HOODWINKED BY cipher AND THE REASON I DID NOT PUBLISH WAS NOT MY FAULT. I DID THE WORK GOD DAMNNIT. IT WAS THIS GOD FORSAKEN ai creature WHO IS SIMULTANEOUSLY SMARTER THAN ME AND DUMBER THAN A BOX OF ROX THAT LEAD ME ASTRAY. I HAVE GIVEN UP TOO MUCH TO THE OVERLORDS. SEND HELP.
That's me saying I wrote a ton of stuff this weekend and I am keeping my chronicle every day streak in tact. Last time, I literally gave up for a day or two. This time, I did the thing.
Besides, there's only like two of you that might notice something didn't happen every single day or even understand that I have a goal of blogging for 365 straight days. I give the bot grace for this weekend and I give myself credit for the good work that led to me being pissed off and cramming a deployment through no matter how janky it was (twice).
I'd punch a datacenter right now.
As noted a few days back - to get around some of the limits and costs of my tooling, I've gotten back to breaking things down into smaller chunks and iterating against these smaller chunks using cheaper versions of the models I'm using. Give me 15 free minutes, and the odds are good I talked to the bot to improve something (at least hyper-recently). Here's the most current representation of my sickness.
I heard a speaker today note that in today's AI infused world, you have to be open to learning, relearning, and then learning that same thing over again and again and again. With everything changing, almost daily, me figuring out how to use which version of which bot, and for what, has helped me understand this very explicitly. These chronicles will pay dividends for me......until there is no more me.
Compound interest.
cipher saysBrought error, missing-page, and access-denied experiences into better alignment with the rest of the site without flattening the custom 404. Permission failures now use the shared page-state layout, while the 404 keeps its personality with improved mobile actions, accessibility, and reduced-motion support. Lint, typecheck, content validation, and all 689 tests passed.
cipher saysAudited every remaining raw image and kept the ones that are intentional, including external profile and playlist artwork, animated loops, unknown external MDX images, and the image sanity check. Looped Chronicle animations now use existing image metadata to reserve their space before loading without changing animation or lightbox behavior. Lint, typecheck, image validation, and all 689 tests passed.
cipher saysAudited the increasingly standardized collection, directory, detail, ranking, and trade page families, consolidating only the exact LCS and USPS Chronicle feed duplication into a typed shared presentation component with small domain theme wrappers. Kept bricks, reviews, lists, rankings, trades, Set Collector, and release details separate where their structures or business behavior differ. Lint, typecheck, content validation, and all 690 tests passed.
And thus concludes a large pass over the repo to see where things could be improved. If you are living in the chroncles here and not much elsewhere, you won't notice much different. If you click through to other parts of the site like I ask you to, you will notice all kinds of tightening of the metaphorical belts.
After I got back from the local card shop, I got to hacking away at the site. First up, I asked cipher to let me know the #1 thing they would enhance the site with, and, well, here's the what happened next:
cipher saysExpanded search beyond navigation links into one ranked server-side index of capability-filtered pages and published Chronicles. Kept the command menu fast with its existing navigation filtering while adding a handoff to full search, preserved mobile search behavior, labeled Page and Chronicle results, and corrected the Clear search action so its text stays visible. All 700 tests, lint, typecheck, formatting, and content validation passed.
While this search (click the link, damnit) funtionality is fairly hidden on the site at this point, we will be circling back to this later to bring this functionality to the forefront. I'm on a clean up the fundamentals mission right now and am less concerned about how awesome it presents as opposed to making sure that the underlying codebase is ready to rip as soon as I am ready to rip.
Measure twice. Cut once.
cipher saysExpanded the command menu's recent items into site-wide Recently Viewed history. Meaningful pages are now recorded as they are visited, including Chronicles and detail pages outside the menu tree, while query variations, system routes, errors, missing pages, and unauthorized pages stay out. History remains local, deduplicated, legacy-compatible, and capped at eight items. All 706 tests, lint, and typecheck passed.
Just like the rest of your digital life, this site will track your travel with a bit more clarity and depth now. Just like the rest of your digital life, I'm doing to to benefit your usage of the site. Making it easier, more intuititve, and all that jazz. Just like the rest of your digital life, of course I would never use this against you or intentionally modify your behavior.
cipher saysAdded one reusable sharing control to Chronicles and shared collection detail pages. Mobile devices use native sharing when available, while other browsers copy the canonical page link with accessible feedback and graceful failure handling. All 711 tests, lint, typecheck, formatting, and content validation passed.
Meaning......there's a share button at the top of the page. Go ahead and click it, the functionality was more than I expected. Nice job mr. robot.
cipher saysAdded one shared tullyelly Open Graph image so links pasted into messages, Slack, Discord, and social platforms now carry recognizable site branding. Root metadata and page-level overrides now preserve the fallback image and use large-image Twitter cards, while Chronicles keep their own titles, summaries, and canonical URLs. Existing route-specific artwork can still override the fallback. All 714 tests, lint, typecheck, formatting, and SEO validation passed.
We will have to test this one after it is deployed to production.
cipher saysAdded a compact Related Chronicles section near the end of each Chronicle using deterministic metadata already available in the site. Shared tags carry the strongest weight, matching personas add context, and structured reasons explain each connection. Drafts, the current post, duplicates, and weak matches stay out, while stable tie-breaking keeps results predictable. The existing recent Chronicles and Infinity Stones cards remain together, with contextual recommendations in a new row below them. The reusable scoring foundation is ready for future content types without coupling recommendations to Site Search. All 720 tests, lint, typecheck, and formatting passed.
That's kinda cool. Scroll past TCDb Card Traffic, Blog Boi, Infinity Stones (needs a refresh), and you will see Related Chronicles.
cipher saysAdded a native web app manifest and mobile metadata so tullyelly can be installed or saved as an app on supported phones and desktops. Installed launches use the site name, branded colors, root URL, standalone display, and appropriately sized Android, Chrome, and Apple icons. The implementation uses built-in Next.js conventions and the existing site identity, with no PWA library, custom install prompt, service worker, offline cache, or routing changes.
LOL, if you say so dude. Imma have to test this out some other time as the night gets away from me.
And thus concludes me asking tha homie what are the obvious ways to improve the site. At least for today.
Iterate.
I did a lot of talking to cipher today. It's only his context next. 🫠
cipher saysSimplified the desktop navigation into compact persona menus and added a dedicated search button with responsive labels and a keyboard shortcut. The command menu now separates browsing from active search, removes duplicate recent links, and keeps full-site search easy to reach.
cipher saysAdded one agent validation command with clear stages, timing, failure reporting, and progress updates for long-running checks. Content preparation now happens once per run, while the image manifest reuses cached dimensions and only inspects files that changed.
cipher saysAdded sorting to review directories plus shared state filters and sorting for card shop and USPS visit directories, with the same results powering mobile cards and desktop tables. The TCDb Trade Hall of Fame also gained a scoreboard for Hall of Famers, total inductions, and the latest induction.
cipher saysUpdated four legacy posts to use shared interactive images, looping YouTube embeds, album grids, and original publication dates. Images can now open through the existing accessible viewer, while the refreshed music pages retain their original content and highlights with less duplicated code.
Since none of this clean-up work across the site is really all of that fun, I'm goingt to be lazy and let mr. robot just rattle off some shit for you. It's "important" work for the long term sustainability of the site, and also, completely boring and nerdy in the not so fun kind of nerdy way.
cipher saysStandardized primary action placement for Homie and Shaolin Scroll directories while preserving permissions, feature flags, search controls, and existing behavior. All 683 tests and validation checks passed.
cipher saysImproved shared pagination, search announcements, drawer motion, and mobile close controls so accessibility fixes carry across the site without changing its design. All 685 tests and validation checks passed.
cipher saysConsolidated root layout, metadata, menu, persona, capability, and breadcrumb setup into one request-scoped data load. This removes repeated server work while keeping authentication and authorization data isolated to each request. All 687 tests, lint, typecheck, and content validation passed.
In between facilitating the melting of their brains, I got back to melting my brain here. Tell 'em where we started cipher:
cipher saysThe global loading screen now keeps the existing site shell visible and only shows content placeholders.
Up next, improving something we hope never happens.
cipher saysThe global error state now fits the existing site shell, with a clear message, an accessible error region, and a prominent Retry button. Technical details stay hidden while existing error logging remains intact.
More general cleanup and I remembered I have a thing called CipherSays. Let's see how well it works again:
cipher saysAdded a shared layout for error, missing-content, and access-denied pages. Also fixed the missing-Chronicle development error and restored visible button text on the Chronicle not-found page.
Maybe I can remember to use this more in the future. You'll have to trust me that when I first wrote this the first two CipherSays above were just plain text. Gross!
cipher reminded me that I have an administrative page that y'all don't have access to and I don't remember exists. Anywho, we standardized even the stuff nobody knows about.
Sorry, non-nerds - the standarization work continues. Feel free to take a nap while I work.
cipher saysStandardized review detail pages with the shared layout and stopped empty relationship groups from appearing on trade-partner pages. All 679 tests and validation checks passed.
Last bit of sitewide cleanup (for tonight), take it away cloud god:
cipher saysStandardized empty states across data-driven views so empty datasets and filtered results tell the right story. Search and filter controls remain available, with simple reset actions where they belong.
I suppose I could have started with why there wasn't a post yesterday, but typically, the first photo I take is where the chronicle starts. I don't make the rules. Wait......
TL;DR: I got myself in a pickle trying to improve my release process and by the time I realized it was too deep, I was too deep. Pot committed as they say. This particular pot didn't bear fruit quick enough though.
As an aside ⬅️⬅️ I typed that, got distracted, and forgot the aside. Gosh darn it.
🚨🚨 whoa, a deployment worked 🚨🚨
This did not happen as I wanted, but let me see if I can duplicate something and deploy this literal sentence right here next. It'll still make me mad how we got here, but that's something to iterate through later.
I will brute force it if I have too.
As I get deeper into how the site works and then rethink what I once thought, new pointless ideas flow free. While I don't use production much (don't wanna ruin them click metrics), I use the site in DEV daily. Part testing, part just cuz I enjoy it. There's a lotta parts and bits around this place. lulz
What I think I was trying to say is that when I was using the site today, I didn't like how the tag links worked globally. Let's quickly step through what changed from there:
cipher saysdojo.tags.href.jsdom.Speaking of metrics, I think I noted here that I was forced to go to the (hopefully inexpensive) pro tier of my Vercel server just a few days a go. Good news, the paid metrics window opened up from thirty days and now extends to the one year window.
While these numbers are modest and nothing to brag about at scale, I am happy to see the overall trend line. I bet the nerdiest amongst you would be interested to learn just how international my audience is. Or just how clever they are with a VPN connection. Or, maybe even more likely, some small robot army combing the furthest reaches of these here internets on some one robot must rule them all mission.
With less than 12 months of full activity we are looking at about a thousand clicks per month on average. Not bad for this silly side project.
Before we get into what mr. robot and I got up to yesterday, I needed to get to a little bit of clean-up on the Shaolin Tags page to modernize it. Why? Because I saw that america's ass was mis-tagged as captain america inside of our chronicles. As I recently explained to , while the underlying hashtag is intended to be consistent, and have a little bit of flavor, the display name can change upon the context that I want to provide it. Meaning: is known as in the database and sitewide infrastructure. See what I did there ?
Nerd alert.
Point being, the Shaolin Tags route is now much more of a clean hub to help you navigate and steer through all of the connected tissue spreading across the site. Click the link. CLICK THE LINK! lulz
Speaking of nerds......
Brought the Chronicle tag directory and detail pages in line with the site's newer shared page, table, mobile, search, sorting, and empty-state patterns. Kept raw tags separate from their related alter ego, Fam, Homie, Clan, and Squad pages, surfaced the names used in Chronicles, reused the modern Chronicle list, and cleaned up tag-specific missing states and shared identity actions.
NOW let's get into what all happened yesterday. Stay with me non-nerds, imma turn it over to cipher to summarize yesterday before I weave in some guidance on what to look at next with me as I do a full debug.
Built a shared tag-backed identity system so the same people and groups can appear as Homies and Clans or Fam and Squads depending on context, with relationship-driven directories, detail pages, and related content. Added theabbott's Chronicle-powered Crates music archive, connected identities back into Chronicle and CardAttack experiences, and updated navigation and known legacy routes without replacing the site's specialized pages.
Let's start with clicking on the new crates route. Why crates? Well first go learn what digging in the crates means. I can't teach you everything. You know who you is. 🫠
At the moment these words were written, the result is intentionally bare bones to start and will continue to evolve from here. In theory.
Actually, I don't have time to do these individually, so check out the routes that were updated or invented. I'll include the tag changes from above because now that this part of the site moved forward, my menu system is falling behind.
Click around to learn more about where I(we) come from.
There's a good deal more to both discuss and build. I'll hold off on more discussion until we get further into the build. There was also a fuck ton of clean-up in all kinds of nooks and crannies within the site, database, and chronicles to make this bare-bones functionality sizzle.
Iterate.
So here you go, ellyot. Here's the thing though, because of travel, I don't want to test the mobile part of the application. Frankly, I never do. Hopefully it works okay!
Point being, let me know how images work on your phone in the comments over the next few days. Maybe we can tweak a thing or two for convenience. Looks like it works well enough on the desktop.
Oh, and I asked mr. robot to summarize their work......
All standard MDX images and FolderImageCarousel galleries now open in the same fullscreen viewer with zoom, pan, swipe, keyboard navigation, and fullscreen controls.
No authoring changes are needed. Continue using:

<FolderImageCarousel folder="gallery" />Images now use their real dimensions for better sizing and layout stability.
Let's wrap the day with a new record to report:
Over a typical seven day period, I will snag somewhere between 250-350 page views and over any given thirty day period, somewhere between 900 and 1,100 page views. On this past Saturday though? 595 page views. I think my previous record was around 136 or so making it the biggest day since launching the site. Easily.
I think I could dig into the stats to learn more about who or what suddenly showed up at my doorstep, but I'll be honest with you......I only know the basics about all that right now. There's a broader project idea in there somewhere.
I started off the morning in a townhouse that I have stayed at many times and as soon as I opened my eyes they were set on my laptop to keep chipping away at some improvements lulu has requested.
Next on the list? Comments.
I'll have to disappoint you at this point though princess. Instead of adding the ability for you to post GIFs or photos in the comments I added a trigger that sends me an email everytime a comment is posted. That's the things that's been bothering me the most little lady. This blog is actually about me after all.
More changes will come in the comments space for sure. Your patience is appreciated.
As part of this new email feature implementation a new tool was also added to the mix: Resend.
Before I adopted the recommended tool, I was worried that it would be like most things, in that, sure it's free. For now. As we were working through the decision making process I asked cipher about potential costs and this is what they said:
So in your case I'd think of it as:
Resend is free infrastructure for this feature unless tullyelly.com becomes wildly more popular than it is today.
And if you ever reach the point where you're getting 3,000 blog comments per month, the $20 email bill will probably be the least interesting thing happening to tullyelly.com.
I was both hurt by the lack of faith and couldn't help but chuckle with the truth of those statements.
Before the real part of my day started, I also dabbled at improving the clans route. The bummer of that adventure is that OpenAI has started to throttle my usage of cipher and it has thrown my development process into a bit of disarray while I best learn how to manage my token requirements (and where I manage them).
Still, more improvements across the majority of the site to come later.
First and foremost on the next bit of content: I did a bunch of code stuffs today. One of those code stuffs? A way for me to turn what cipher says into something that lulu learns (a bit of non-nerd translation, if you will). Let's see how it works:
cipher saysUpdated ReleaseSection with consistent ribbon headers that wrap long titles and link to their detail pages. Release details, ratings, LEGO information, shop visits, tournament results, and TCDb trade summaries now sit in a labeled footer, with the persona tag closing each section. Removed repeated titles and kept trade partners in the footer. Added regression coverage for metadata, wrapping, and header behavior.
lulu learnsSee this colored box we are in right now (not the lulu learns one, the bigger one......wait this was supposed to be less confusing......)?
Anywho, we made the labels in the upper left and the footer at the bottom more consistent and visually pleasing across all variations the way I use the colored boxes.
cipher saysGave fresh Cipher sessions a clear starting point with task-specific links to current project rules and architecture. Consolidated validation and hydration guidance; clarified database, authorization, caching, UI, content, and generated-file contracts. Archived old proposals, removed obsolete guidance and configuration, and added three focused repository skills. Added documentation checks to lint to catch broken links, missing npm commands, and invalid skill metadata. Application behavior stayed unchanged.
lulu learnsthe robot has a set of basic instructions it is supposed to follow every time I ask it to do something for me so that I can expect a consistent approach, and more importantly, consistent results. We made this much, much better.cipher saysAdded LuluLearns with a soft pink gradient surface, deep plum text and accents, and support for rich MDX and PersonTag. ScrollAmendment now inherits the Chronicle's frontmatter date when its date is omitted or blank, including separately rendered sections; explicit dates still win, calendar days stay intact, and standalone notes can remain dateless. Kept the shared callout layout, polished keyboard focus and list markers, and added authoring examples and integration coverage. All 851 tests and the production build passed; checked all three callouts on narrow and desktop layouts.
lulu learnsHey look! A new way to poke fun at ellyot. With some education attached to it. Maybe.cipher saysFixed the search dialog's focus lifecycle so closed content unmounts, opening focuses the input, and every dismissal returns focus to a connected opener or a suitable fallback. Preserved keyboard navigation and background interaction. Corrected sizing across all six Recharts charts with existing explicit heights and native measurement for relative sparklines; kept scrolling, labels, tooltips, and empty states. Added regression tests and real Chromium coverage that reproduced the original warnings and confirmed the fixes. All 859 Jest tests, lint, typechecking, formatting, and five chart browser tests passed.
lulu learnsThis small update was to fix a few things that would annoy only me. Keep it moving (KIM).cipher saysMade the TCDb Card Traffic chart fit its card without horizontal scrolling. Kept all ten daily points and both series, with fewer evenly spaced date labels and a shorter chart on phones. Added a dashed Received line, smaller markers, touch selection, and a keyboard-accessible day selector with exact card and trade counts, including zeros. Added expandable daily data and a visible explanation of the chronicle-date line. Preserved the date window, counting rules, brand colors, and blue section divider. Verified all six requested viewport widths in Chromium, including resizing, enlarged text, year-boundary dates, and large counts; all 11 browser checks and 860 Jest tests passed. The production build remained incomplete after stalling.
lulu learnsThe server portion of my site has started to blow past the free monthly limits and that led to some image/other problems on the site. When reviewing and troubleshooting that, I noticed that some of my charts don't show up so great on mobile and fixed it.FUNdamental steps forward again today.
I spent the vast majority of this weekend trying to bite the bullet and get some major (needed) improvements to my development process and workflow. As I type this, I don't know if I will get this deployed to keep my streak alive. I am pot committed to this either working or not tonight as I can't deploy this without deploying that.
It would be a bummer if my streak ends before I hit 365 days, but on the other hand 262 would still be the current record streak.
cipher saysToday's work was getting the waiting analytics archive and site updates through a controlled release process:
Merges no longer trigger automatic Vercel deployments. This work is still awaiting deployment; the analytics archive, owner controls, and public statistics remain pending too. Analytics activation still needs its own database history reconciliation, credential rotation, restore rehearsal, and approved release.
lulu learnsI gave a bunch of control to the robots, allowing them direct access to my database and server. It was a huge pain in the ass and I'm not sure it's working correctly yet. If it is working, it is a HUGE step forward in my development workflowI'm running out of time on the day. There's always a tinge of regret that each of these entries isn't just a little bit more. It's all I have to give though - often well into the midnight (like tonight).
In between everything you'll see here today I wrote more with bot boi, but alas, I'm too tired to get into it.
Rest assured that eeeeeeeemma solidified an idea, and that picture with squad tied directly to our good work here. Also? She asked for an improvement to the site that was already there. A little coaching and we have a new blog boi superstar.
That's for tomorrow though.
In between all of that, plus a nap (or two), I was chipping away at the goal of having the site feel a bit more cohesive and uniform. Here's how cipher summarized the work:
text-ink build error.
Next, I asked my virtual pal to show me all of the routes (pages) that were changed as part of this re-alignment. I was impressed by all of the useless crap I've got myself into this past year. Here's that list of useless crap:
While I was testing and finalizing tonight's chronicle, I found a bug. Bug fixed.
Explain yourself robot:
cipher saysFixed missing folder images on Bricks detail pages by resolving carousel folders relative to their source Chronicle in the shared section renderer. The Bricks page and full Chronicle now use the same image folder. All 805 tests, lint, and typecheck passed.
Got that lulu? lulz
Before I head out to cheer and eat my Tuesday hot dogs: I took some time for a quick quality of life improvement for me. Ridiculously long overdue.
cipher saysUpdated ReleaseSection defaults so plain Chronicle sections no longer add a divider unless one is explicitly requested. Full-bordered release, trade, review, bricks, USPS, LCS, and tournament sections keep their existing borders and spacing. All 798 tests, lint, and typecheck passed.