Changelog
Registro de cambios visibles del sitio.
Back to top button
A small pixel arrow appears at the bottom right when you scroll up a long page and takes you back to the top. It never covers the footer controls and stays still with reduced motion. It hides itself a few seconds after scrolling stops.
Faster CI: more parallel shards
CI now runs Lighthouse in two shards and the browser tests in four. Every URL still runs three times and no threshold or assertion changed; locally, --shard 1/2 reproduces a CI shard.
Clearer message for a used confirmation link
The confirm page now says a link was already used, replaced by a newer one or expired, and that nothing else is needed if the reader already confirmed.
Email subscription to new notes
Readers can subscribe by email to new notes and project announcements, with double opt-in and an unsubscribe link in every email. The form lives in a pixel-style band in the footer and loads its script on first focus. Both emails are designed HTML with a plain-text fallback. A daily cap keeps part of the provider's pool for notes. The owner can email a published note from a command, dry run first, to subscribers of its language only. The confirmation tells readers to check Promotions.
More on/off switches for forks
Four interface switches (backToTop, languageHint, themeToggle, backgroundPicker) join features, all on by default and rendering nothing when off. Turning contact or changelog off now removes their routes, links and sitemap entries, and the legal pages and subscription errors stop pointing to a Contact page.
A page to share for subscribing
/subscribe/ and /en/subscribe/ explain what the notes are, hold the same form as the footer and show the latest note. It is indexed and in the sitemap; confirm and unsubscribe stay hidden.
Subscription link pages in the 8-bit look
The confirm and unsubscribe pages now use the footer band's look: a dashed card with a pixel envelope, check or exclamation icon.
Subscription form no longer waits forever
The footer form now says when to tick the Turnstile box, times out after 25 s with a clear retry message, shows the error code, tells the per-minute limit from the daily one, and accepts a form filled after 1.5 s. If it still fails, the message points to the Contact page.
A note can no longer be emailed twice to the same subscriber
The list now records every note sent to each subscriber, so sending notes out of order or re-running a send never duplicates one. Forks that already ran the subscription migration must apply 0003.
Email subscription guide
A consolidated guide, in Spanish and English, for the email subscription: how it works, stored data and privacy, limits, the manual owner flow to send a note, setup for forks and troubleshooting.
pnpm verify no longer skips checks after a toolchain change
A change to the toolchain, dependencies or the verification scripts now selects every check, in both the uncommitted-work plan and --stale; before, the registry's freshness could hide all of them except lint.
The animated background survives the Back button
Going to another page and pressing Back no longer leaves a blank banner with a broken-image icon: the background pauses instead of being destroyed and starts again when the page comes back.
Turning the blog off now removes it
With `features.blog` off, the notes pages, the RSS feed and the notes entries in the sitemap are no longer built, so a fork can keep only the portfolio. This site keeps the blog on and its output is unchanged.
The contact form keeps keyboard focus after a failed send
When sending a message fails, focus returns to the send button instead of being lost, so keyboard and screen reader users can retry right away without tabbing from the top of the page.
LinkedIn next to the contact form, and a spoken "sending" state
The contact page now offers LinkedIn right under the form as an alternative, and screen readers hear a status message while a message is being sent. A failed send keeps what you typed.
/favicon.ico no longer answers 404
Browsers, crawlers and link previews ask for /favicon.ico by default. The site now serves a small real icon there (5 KB) next to the SVG one, so those requests succeed. Forks should replace both files.
Keyboard focus no longer hides under the fixed header
Moving focus up the page with Shift+Tab, or following an in-page link, no longer leaves the focused link or field covered by the sticky header.
Footprint heart beats on hover, focus and first view
The pixel heart beats twice in two steps on hover or keyboard focus and once when the button first scrolls into view; it never loops and stays still under reduced motion.
Leave a footprint on a note
Every note now has an anonymous "I was here" button, under the title and again at the end, with a small animation. One tap leaves a footprint, no account and no comment needed. Nothing that identifies you is stored: only a counter per note. Forks get a features.marks flag and a marks block (animation and limits), and need one Cloudflare D1 database for the counters: see the configuration guide, recipe 6.13.
Footprint card on the home page
The home page has its own anonymous footprint button and counter in the sidebar, switchable with the `home.marks` flag; the privacy page now says footprints cover each note and the home page.
The language switch says when it goes to the home page
On a note that has no translation, the language switch and the language hint now say they lead to the home page in the other language instead of implying a translated page.
The performance gate measures the page production serves
The test build used by the Lighthouse gate was inlining the site stylesheet twice, so it measured a page about 43 KB heavier than the real one. It now matches the real build, and the gate's slowest simulated paint on the note page improved from about 2.4 s to 2.3 s with a wider margin to the budget.
Privacy tooltip closes on its own
The footprint privacy tooltip now hides when the mouse leaves, after a few seconds on touch screens, and with Escape.
The /me portrait loads about 20 times lighter
The portrait on /me was a 231 KB image shown in a slot a few hundred pixels wide. It is now resized to what the slot needs (about 12 KB on a phone) and loaded with high priority, which in a simulated slow-phone test brought the largest paint of the page from about 2.5 s to about 1.4 s.
New Lab Note 003: vibe coding or specify first
Why I define intent, scope and decisions in writing before asking an AI for code, what it gives me, what it costs to keep up to date and where I still experiment. Written from a rollback at work and from this site's own documents.
Framed images in notes and shorter link-preview titles
Images inside a note get the same rounded corners and hairline as the site cards. A note's link preview (LinkedIn, X, WhatsApp, Facebook) now uses the note title alone, so it is cut off later; the browser tab keeps the site name.
Share a note on X and WhatsApp
The share panel of each note now has X and WhatsApp buttons next to LinkedIn. Both open a new message with the note title and its link, and they are plain links: no third-party script is loaded.
Hero text clear of the expand button, shorter footprint copy
On phones the last hero line no longer sits under the expand button, and the footprint cap message and privacy tooltip are shorter.
8-bit look for the brand, footprint and favicon
The favicon is now a pixel terminal window in softer colors and also sits next to the wordmark; the footprint button gets a pink pixel heart whose animations advance in steps.
pnpm verify plans only the checks a change touches
A new command lists, runs and records just the checks affected by the uncommitted work, with a registry of what last passed.
Preact 11 and routine tooling updates
The interactive parts of the site now run on Preact 11 (the contact form field was rewritten to satisfy its stricter input types, with no visible change), and the build tools (sharp, vitest, wrangler, Biome, dependency-cruiser) and the CI mise action were updated. Forks should expect the same.
A small privacy note where it matters
Next to the comments, a one-line reminder that your GitHub login and data are not used for anything else on this site; on the footprint button, a discreet hover or focus note that nothing identifying is stored. Both link to the matching section of the privacy page.
Faster verification, locally and in CI
The local check runner audits Lighthouse once per page, narrows layout-only changes, and runs all browser specs in one pass; CI caches its downloads and splits the browser tests in three. No threshold or assertion changed.
The background picker is hidden where it does nothing
On touch screens and with reduced motion the animated background never runs, so its picker button is no longer shown there.
Smaller text sizes and cleaner line breaks
Headings and card titles are a little smaller, so titles no longer take four or five lines on a phone, and paragraphs avoid a last line with a single word. The figures strip and the availability line on the profile also wrap more tidily.
CV in Spanish and English
The CV button opens the PDF in the language of the page you are reading.
"All notes" in English no longer leads to a missing page
On the English home and profile the link pointed to a page that does not exist. It now opens the notes index.
Links to other sites open in a new tab
Links that leave the site open in a new tab so you do not lose your place in the blog; links inside the site stay in the same tab.
Browser tests run about 30% faster
The full suite takes about 73 seconds instead of 107 on a 12-core machine, and a one-viewport script exists for day-to-day work.
Back to the fuller home look
The home shows the hero chips and the pillars strip again, with the larger type of the original look.
Hiring card: a clearer status
Where I work now is a headline and "open to chat" is its own tag, so the status no longer wraps onto two lines or shows a red dot.
Hiring card reads more openly
The card now says I am working at Buo and open to chat, instead of simply not being available. The profile share card carries the same wording.
Languages on the profile are named in the page language
The quick facts on the profile now read Spanish and English in the language of the page instead of the same mixed text on both.
Pages are about 4 KB lighter
The self-hosted fonts now ship only the Latin alphabets that Spanish and English use, which keeps the notes pages within their loading budget.
A portrait on the profile page
The profile page now shows a photo of me, and so does the preview card you see when sharing that page. The home keeps the illustrated avatar.
A Now card on the home
The Lab log box is replaced by a dated card with what I am focused on and what I am learning. It is edited from the site config.
The shared profile card no longer shows a red dot
The preview card of the profile page showed a red dot next to "open to chat". It now uses the brand colour, like the hiring card on the home.
Profile updated from my CV
The experience is now in English on the English profile, the stack lists my professional tools, and the courses name their real platforms.
Whole note cards are clickable
In the notes list and in the latest note on the home you can click or tap anywhere on the card, not only on the title.
Architecture Decision Records (ADR) 0006-0009
Documented the DNS, CI structure, launch feature-flag and contact-security decisions.
Visual background picker
Pick the animated banner effect (galaxy, waves, or off) from the navbar; your choice is remembered in the browser.
Background broke in Firefox after switching effects a few times
Firefox was losing the graphics context after a couple of switches, leaving the background blank. Fixed by reusing the same context instead of opening a new one on every switch.
Changelog page
This very log: a place to see visible site changes as they ship.
CI/CD simplified: nothing runs while working on develop
Pushing to develop no longer triggers anything. The only automated check now happens on the direct push to main, which also deploys if everything passes.
Contact form working in production
The cause was that Cloudflare Workers doesn't support redirect: 'error' in fetch; fixed by using redirect: 'manual'.
First two Lab Notes
How this site was built, and the multi-agent development setup behind it, both written in Spanish.
Hiring card no longer shows a green dot when I am not available
The status dot now follows whether I am open to work: green when I am, red when I am not (currently working at Buo).
Calmer home: softer hero, photo and lighter cards
The animated banner now fades into the page, the blinking brand text is gone, the author photo is shown, and the hiring card is less crowded.
Shared links now show a proper card
Each note gets its own preview image with its title, and /me shows my photo, role and availability. The previews also carry correct language, alt text and article details.
Pages load with fewer delays
The main fonts are preloaded, the profile photo is optimized, the animated banner pauses when it is off screen, and links are prefetched when you hover them.
/me page with real data
Real work experience, certificates and education replace the placeholder content; the page is now public.
A calmer, more minimal look with smaller type
The home now has a minimal preset that hides the hero pills, the lab log and the pillars strip. Text sizes follow a smaller theme-driven scale, note pages are calmer and the banner edge is consistent.
Easier to use on a phone
Controls have at least a 44 px tap area, the home banner is shorter on phones, the code copy button has its own strip on touch screens, and hiding the navbar closes the open menu.
Comments and reactions on notes
Every note now has a discussion area powered by giscus: comments and reactions live in GitHub Discussions, you sign in with GitHub to take part, and nothing loads until you scroll down to it.
Notes can link to their translation
A note can point to its translation in the other language, with a language switch on the page and hreflang tags for search engines.
Open licence: MIT for the code, CC BY-NC-SA for the notes
The code can be reused under the MIT licence; the notes keep a non-commercial share-alike licence.
Pixel font on the home hero and section titles
The home headline and section titles now use Pixelify Sans, self-hosted like the other fonts.
Privacy page now lists every preference saved in your browser
It only mentioned the theme and the language hint; it now also covers the background effect you pick and whether the banner is expanded.
A quieter language suggestion and roomier note navigation
The language suggestion is now a small line of text shown only on Spanish pages, the English menu says plainly Notes, the under-construction banner is gone, and the previous/next links have room below the article.
Reading mode for notes
A button on every note switches to a calm single column: no banner effects or sidebar, larger text and wider margins on phones. It is remembered in your browser and you can leave it any time.
README and configuration guides in Spanish and English
The repository explains how to run, configure and white-label the site in both languages, and the configuration tables are generated from the code so they cannot drift.
RSS feed for the notes
You can follow the Lab Notes at /rss.xml. Every page advertises the feed, so feed readers find it on their own.
Social image, security headers and a sitemap with real dates
A default image for shared links, security headers (nosniff, Referrer-Policy, Permissions-Policy), and real last-modified dates in the sitemap.
Easier reading and a language hint that stays out of the way
The language suggestion no longer covers content, privacy text follows a comfortable reading width, decorative blinking is calmer, and English note pages now open instead of showing a 404.
Staging environment removed
The staging Worker and its GitHub environment were decommissioned; the site now runs on a single production environment.
Terms of use and a clearer privacy page
New terms page linked from every footer. The privacy page now cites what Cloudflare documents, lists every preference stored in your browser and says the site itself sets no cookies.
Cloudflare Web Analytics enabled
Basic visit metrics, no cookies, no extra JavaScript weight for visitors.
Domain migrated to Cloudflare
DNS zone moved from Porkbun to Cloudflare, with custom domains for the apex and www; www redirects to the apex.