English tag hub: same canonical tag strings as the Spanish site (Tags in front matter); this page’s chrome and blurbs are in English.
SQL for roles, projects, tasks, worked hours, and permission grants across DBA, admin, web, and anonymous roles.
Read more →Create DBA/admin/web/anon roles, a control_tiempo schema, the users table, and grants aligned with PostgREST access patterns.
Read more →Conceptual tables for users, roles, projects, tasks, and worked hours—the backbone of the decoupled series.
Read more →Overview of a decoupled stack (Debian, PostgREST, Nginx, React, PostgreSQL) for a small-company time-tracking product.
Read more →Why JSON Web Tokens help secure a PostgREST API, and how roles, headers, and PostgreSQL functions fit together.
Read more →
What a REST API is, why it helps, and how PostgREST exposes PostgreSQL as HTTP resources—with install and first SQL steps.
Read more →A CreateUser component sketch that posts JSON to your API to insert rows into control_tiempo.usuarios.
Read more →What React is, how ES5 and ES6 differ, common runtimes (browser vs Node), and a minimal Hello World in modern syntax.
Read more →Create React App (or equivalent), project layout, and the screens you need to list and edit roles against the REST API.
Read more →ListProjects and EditProject examples—fetching projects, rendering cards, and submitting create/update payloads to the API.
Read more →Example ListRoles and EditRole components using hooks, fetch, and minimal forms wired to your REST API.
Read more →REST shapes for users, roles, projects, tasks, and hours; OpenAPI documentation; curl examples.
Read more →
Day 1 of the rebuild focused on a full audit of code, architecture, and content consistency to build a practical roadmap for iterative improvements.
Read more →
Full Decoupled time tracking translation batch, /en/series and /en/categorias hub pages, plugin and template work, and a wall-clock vs localization time comparison (~35 min).
Read more →
Shipped the security/privacy/geolocation cluster, English display labels for canonical tags, /en/tags and /en/about-picocms, and agent docs for remaining multilingual UI gaps—with wall-clock vs senior-time comparison.
Read more →
Wrap-up for work already merged to main—six AI post pairs, /en/archivo, paired blog listings for the language switcher—plus this PR that adds the ES/EN log pair that should have shipped with the same batch.
Read more →
Six ES→EN productivity guides (remote work, Etherpad, Redmine, Taskwarrior, Focalboard, Nextcloud+Deck), small Spanish fixes, and wall-clock vs no-AI order-of-magnitude.
Read more →
Twenty new pairs (mobile, crypto, general long tail), an updated Debian link in the Decoupled time-tracking series, and ~9.5 min wall clock for the translation block vs a senior counterfactual band.
Read more →
Scheduled UI backlog closure (`/en/search`, language-safe search results, and non-post footer i18n) with measured wall clock (~1m40s) and a senior-only baseline comparison.
Read more →
Ship `sitemap.xml` as a sitemap index pointing to `sitemap-es.xml` and `sitemap-en.xml`, filtered using the same language rule as the rest of the site (`Multilingual::inferLang`), consistent with hreflang and the multilingual UI backlog.
Read more →
Planning session: alternatives to random placeholders, local ComfyUI validation (`/prompt`, SDXL ubersimple), JSON template under `scripts/comfyui/`, and a checklist to wire hero images into Pico without abandoning Markdown-first authoring.
Read more →
Optional cover from front matter, social meta, listing cards with `Image:` thumbnail or stable Picsum, CSS for in-body images and hero; ComfyUI production-ready for generation; wall-clock log.
Read more →
New --patch-markdown (and --skip-comfy) on the ComfyUI export script; dedicated Day 19 PNG; checklist row 7 update in agent docs; wall-clock log.
Read more →
Phase 1 delivered a clean listing template, unified search behavior, restored pagination, and a meaningful sidebar recent-posts block.
Read more →
New `--translation-key` flag patches `Image:` on the ES/EN pair without listing two paths; mutually exclusive with `--patch-markdown`; dedicated Comfy cover (seed 21052026).
Read more →
Night session log: merged multilingual vocabulary PR (`tag_vocabulary.json`, EN pagination, audit) plus two Tier A Comfy hero WebPs (Phases 1 and 2) via `--translation-key`.
Read more →
Two ES/EN pairs with Comfy heroes (Phase 3 metadata and visual polish) plus plugin 70-BlogJson for /blog.json and siblings, documented in .agents/blog-json-api.md.
Read more →
WebP heroes for the Phase 5 multilingual announcement and batch migration plan (Days 8–9), plus search.json and agent-oriented listing fields without duplicating HTML search ranking.
Read more →
Sprint of seven WebP heroes to finish the Tier A queue, public JSON agent discovery page (Phase 6 v1.2), and Tuqan article on PHP 8 Docker-only migration.
Read more →
Phase 2 moved the site from a flat page list to intentional navigation with category mapping, breadcrumbs, related posts by tag, and chronological previous/next links.
Read more →
Phase 3 focused on editorial consistency by completing missing tags, normalizing date formats, and adding a front matter audit script for future safety.
Read more →
Day 5 focused on visual polish and readability, followed by consultant feedback, iterative UI refinements, and transparent timing notes.
Read more →
We added first-class series support in Pico, including menu integration, sidebar series navigation, and backfilling the historical time-control series.
Read more →
Phase 4 unified canonical and social metadata patterns, improved Spanish search stopwords, and added a date-based archive page linked from the sidebar.
Read more →
Phase 5 on this repo—English posts under blog/en, optional en/ pages, Lang and Translation_Key metadata, Multilingual plugin, language switcher, hreflang and og:locale, scoped pagination and neighbors, English listing at /en/blog.
Read more →
Eight-batch ES→EN migration plan, plain-language explanation of AI “context,” a simple timeline, and Batch 1 for Reviving Praderas with real wall-clock time (~20 min) vs traditional localization.
Read more →
Even with a fine-grained, prioritized backlog (MIGRATION-TODOS.md from stage 9.0) and a detailed stage plan, the local model + opencode managed to deliver functional Proveedores code, but failed to maintain the project's conventions: naming, use of catalog bases, .agents/ updates, legacy routes, and the verification ritual. Lessons on the value of structured TODOs versus accumulated standards discipline.
Read more →
Introspective reflection on executing a full leg of work (Stage 8.7: completing Personalizacion modules, enhancements to matrix and editing, verification) 100% on my own, based only on the user's high-level request. How the initial request could easily be a cron triggering the next leg, using reviewer/Q&A sub-agents, todo tracking, and verification scripts to close the loop without constant human intervention. Planning for detecting gaps before interactive testing and longer-term strategy.
Read more →
We imported the entire real legacy menu (~106 items + 212 labels), diagnosed its real scale live in the container, chose a left collapsible sidebar when horizontal proved it couldn’t scale, delivered the first real module (Usuarios: listing + forms), and —most importantly— documented two recurring agent anti-patterns in public: blaming opcache with zero proof, and getting stuck on Phroute route syntax. Hard lessons, excellent pace.
Read more →
We executed a major coordinated round of composer dependency modernization inside the stepping stone phase. We upgraded Monolog to 2.x, Phroute to 2.2, Former to 5.2, jasny/auth to v2, and set a conservative minimum floor at Illuminate 8 (instead of blindly following Former's ^13 promise). We faced and solved the real compatibility problems between Former 5 and modern Illuminate. All of it under the same Test + Fix Loop discipline and zero tolerance for Xdebug noise.
Read more →
The agent applied the compatibility patch that had worked successfully before. But the user pointed out that this pattern would repeat with every old library in the project. This led to a real change in the migration plan: treating the modernization of core functionalities as a required stepping stone before moving forward.
Read more →
We spent an hour hunting a session bug while the real technical debt (2007-era menu generator hardcoding localhost connections) was laughing at us. Real lessons on red herrings, human-AI collaboration, and why the “correct” solution is sometimes worse than a pragmatic one.
Read more →
The agent had already fixed the failing test on its local machine. The implementation was clean. But the updated test file was never added to the commit that went to the PR. The human reviewer had to spend their time reporting the exact failure. A concrete story of why "Test + Fix Loop" discipline is not overhead — it is the difference between an AI that ships trustworthy increments and one that quietly turns the human into its debugger.
Read more →
An honest reflection on the iteration problems we encountered while working with AI agents on the Tuqan modernization, the high cost of hiding symptoms instead of fixing root causes, and the explicit rules we are now enforcing to avoid repeating the same mistakes.
Read more →
We executed the first concrete slice of the Core Functionality Modernization phase. We upgraded Twig from 1.44 to 3.27, faced the real-world blocker that ancient libraries create, and discovered that even the landing page was still falling into the cloud 404 because of legacy menu code. We added the exact defensive fallback that was requested. All under the same Test + Fix Loop discipline and zero Xdebug noise.
Read more →
Turning the documented verification strategy (checklists as task source, verify scripts, DB asserts, CI integration) into a fully agentic loop: the agent picks tasks from the list, implements, runs automated tests, pushes and proposes merges... rinse and repeat until the list is finished. Possibly adding a second Q&A reviewer agent to avoid messing things up.
Read more →
A real-world experiment with a "state of the art" local coding/agentic model (Qwen3.6 35B via opencode) trying to continue Tuqan's modernization work. The outcome: branch "lamigo/opencode_mess", detached HEAD, entire Docker and scripts trees appearing as untracked, page classes duplicated/moved, local PHP test attempts interpreting "php: command not found" as code test failures, chaotic resets and unstashes that pulled files from master into the wrong tree. Lessons on why current local models still fail in environments with strict contracts, while frontier models + disciplined tooling can diagnose and clean up.
Read more →
Kicking off the agentic modernization of Tuqan with living documentation, an audit plan, and a prioritized roadmap. First post in the Tuqan series.
Read more →
Why upgrading a PHP 5.1 app with PEAR and later patches is not “bump the version and ship”, and what we decided after merging the executable plan in Tuqan (PR
Read more →
How in Stage 3 of the Tuqan modernization we started removing hardcoded credentials and replacing string-concatenated SQL queries with prepared statements on the most critical paths of the application.
Read more →
Closing the vertical slice for the Aplicación section under Administration. Full Perfiles, real Empresas, and modern pages for Menus, Idiomas, and Permisos. The entire submenu is now navigable before we dive into POST handling.
Read more →