<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Builder Season Playbook</title>
  <subtitle>Dashboard, progress log, and builder activity site</subtitle>
  <link href="https://the-hardforq.github.io/feed/feed.xml" rel="self" />
  <link href="https://the-hardforq.github.io/builder-season-playbook/" />
  <updated>2026-06-20T00:00:00Z</updated>
  <id>https://the-hardforq.github.io/builder-season-playbook/</id>
  <author>
    <name>Builder Season Playbook</name>
  </author>
  <entry>
    <title>Hello World</title>
    <link href="https://the-hardforq.github.io/posts/2026-04-29-post-title/" />
    <updated>2026-04-29T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-04-29-post-title/</id>
    <content type="html">&lt;p&gt;I registered for the hackathon today and created the repo and made an annoucement post on X&lt;/p&gt;
&lt;p&gt;Cool day ... and I got my progress log working ... I think.&lt;/p&gt;
&lt;p&gt;It works but I still need to clean up some stuff.  Cheers!&lt;/p&gt;
&lt;p&gt;todo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;make blog-menu work in the most simple way - change to npm&lt;/li&gt;
&lt;li&gt;make npm scripts to acces the blog / logging&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>The Web is on</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-01-second-post-today/" />
    <updated>2026-05-01T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-01-second-post-today/</id>
    <content type="html">&lt;p&gt;So today I was able to get the website going with this rogress log and an activity dashboard that pulls things from Discord and you know creates an 11T site that&#39;s able to be published on Github pages Feel like it was pretty good for Friday afternoon Have a great weekend!&lt;/p&gt;
&lt;p&gt;Some Todo:  Add Twitter profile pics, cutoff long commit messages, save the data from the API locally to cutdown on hitting the API limits, something with collecting and verifying the Twitter update posts&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>X search semi automated</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-05-x-search-semi-automated/" />
    <updated>2026-05-05T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-05-x-search-semi-automated/</id>
    <content type="html">&lt;p&gt;Working on shifting to Python and to a simple data model
Moving away from Python to node
Codex says:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;• The activity pipeline is now Node-based.

  I replaced web/scripts/generate-activity.sh:1 with web/scripts/generate-activity.mjs:1 and updated web/
  package.json:1 so npm run build:data now runs node ./scripts/generate-activity.mjs. The new script keeps the
  same output shape in web/src/_data/activity.json, but the date math, GitHub requests, pagination, and JSON
  shaping all live in one Node module now.
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Questions&lt;/h2&gt;
&lt;p&gt;What is normalization?
When to use Bash, Python, or Node?
is there a way to have a &amp;quot;don&#39;t hit the API&amp;quot; flag?
The problem of builders starting in different weeks.  Could each builder have a &amp;quot;start week&amp;quot; attribute?&lt;/p&gt;
&lt;h2&gt;Reference&lt;/h2&gt;
&lt;p&gt;xSearch = {
adminWeek1Start,
adminDurationWeeks,
builderUpdateDurationWeeks,
defaultBuilderWeek1End,
weeklyUpdateHashtags,
weeklyUpdateMention,
configError,
currentAdminWeekIndex,
weeks: [
{
index,
startDate,
endDateExclusive,
endDateInclusive,
label,
dateRangeLabel,
searchUrl
}
],
builders: [
{
id,
name,
xHandle,
firstUpdateWeekStart,
firstUpdateWeekEnd,
firstAdminWeekIndex,
finalPresentationWeekEnd,
searchUrl,
weeks: [
{
index,
startDate,
endDateExclusive,
builderWeekIndex,
builderWeekLabel,
label,
dateRangeLabel,
searchUrl
}
]
}
]
}&lt;/p&gt;
&lt;p&gt;activity = {
generatedAt,
weekStart,
weekEnd,
builders: [
{
id,
name,
lastActivityAt,
commitsThisWeek,
recentCommits: [
{
repo,
message,
url,
committedAt
}
],
error
}
]
}&lt;/p&gt;
&lt;p&gt;builders = [
{
id,
name,
github,
x,
xRequiredHashtags,
xRequiredMention,
xIgnore,
projectName,
projectUrl,
repoUrl,
pies,
notes
}
]&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Bash Bash?  move from Bash to Python</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-05-bash-bash--move-from-bash-to-python/" />
    <updated>2026-05-05T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-05-bash-bash--move-from-bash-to-python/</id>
    <content type="html">&lt;p&gt;I wanted to make sure I was using the right tooling and I think Python fits here.  I&#39;m using a script to take yml data - that I manually input and that outputs JSON for the 11ty to build the frontend... but why?  Why not just use the yaml?  Im pretty sure 11ty can use yml as well as JSON.&lt;/p&gt;
&lt;p&gt;I think it&#39;s part of the iterative process to go back and rebuild when I &#39;see&#39; it better.  And, it underlines the data model first building method that I&#39;ve seen some folks use.  ... and that&#39;s what I&#39;ll do tomorrow.&lt;/p&gt;
&lt;p&gt;PS: I&#39;m pleased with the current Piece of pie hackathon.  we closed the registration and have over 20 builders - which meets our goal.  And, I&#39;m happy with creating this repo to &#39;productize&#39; the hackathon and make it a replicable safe space for builders of tomorrow.  (yeah, I really think like that)&lt;/p&gt;
&lt;p&gt;Codex says:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Implemented the Python migration. The builder normalization logic now lives in web/scripts/builders_json.py:1, with comments at the
  same intent-level as the shell scripts, and the old builders-json.sh entrypoint has been removed. Callers now invoke python3
  directly from web/package.json:7, web/scripts/generate-activity.sh:25, and web/scripts/generate-x-posts.sh:13.

  I also added the minimal Python dependency file at web/requirements.txt:1, updated both GitHub Actions workflows to install Python
  and PyYAML before builds (.github/workflows/update-activity.yml:30, .github/workflows/deploy.yml:37), and refreshed the docs in
  README.md:90 and web/README.md:15 to reflect the new runtime and the fact that the X pipeline still uses Ruby for now.

  Verification: python3 web/scripts/builders_json.py passed, and npm run build:data:x passed end-to-end. I did not fully verify npm
  run build:data because that path calls the live GitHub API. One generated file changed in-repo: web/src/_data/builders.json:1. Its
  content is equivalent, but empty arrays are now rendered as [] instead of Ruby’s multiline empty-array formatting.
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>updating the repos.yml</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-06-updating-the-reposyml/" />
    <updated>2026-05-06T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-06-updating-the-reposyml/</id>
    <content type="html">&lt;p&gt;Just updating the repos.yml with the &amp;quot;source of truth&amp;quot; spreadsheet that Harsha and I work with as admin ... and yes, I did it by hand, check it line by line and then ask copilot to verify it.&lt;/p&gt;
&lt;p&gt;I&#39;m learning so many little things by working on this project.  Like .yml files and 11ty global data.  One technique is to search Github for how others are using it and asking the AI to explain stuff.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The tech stack for this project</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-06-the-tech-stack-for-this-project/" />
    <updated>2026-05-06T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-06-the-tech-stack-for-this-project/</id>
    <content type="html">&lt;p&gt;Here&#39;s the tech stack for this repo:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Eleventy (11ty) v3.1.2&lt;/strong&gt; — Static site generator&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nunjucks&lt;/strong&gt; — Template engine (&lt;code&gt;.njk&lt;/code&gt; files)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node.js&lt;/strong&gt; — Runtime (ES modules)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Data &amp;amp; Config:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML&lt;/strong&gt; (js-yaml v4.1.1) — Configuration files (repos.yml, event.yml)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub API&lt;/strong&gt; — Source of commit activity data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt; — Data interchange (activity.json, builders.json, xSearch results)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;@11ty/eleventy-plugin-rss v2.0.4&lt;/strong&gt; — Atom feed generation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Build &amp;amp; Scripts:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;npm scripts&lt;/strong&gt; — Task runner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node.js ES modules&lt;/strong&gt; — Standalone scripts for data generation (&lt;code&gt;.mjs&lt;/code&gt; files)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Architecture summary:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Config layer&lt;/strong&gt; → repos.yml (manual registry) + event.yml (event timing)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data generation&lt;/strong&gt; → generate-activity.mjs fetches GitHub API, outputs activity.json&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data aggregation&lt;/strong&gt; → _data files (builders.js, activity.json, xSearch.js) provide global template data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Templates&lt;/strong&gt; → Nunjucks + custom Eleventy filters (defined in eleventy.config.js)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output&lt;/strong&gt; → Static HTML in _site&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The workflow is:
YAML config → GitHub API → JSON snapshot → Nunjucks templates → Static site.&lt;/p&gt;
&lt;p&gt;No framework cruft (React, Vue, etc.) — pure static generation optimized for content and dashboards.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>writing a newsletter and updating the weeks</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-08-writing-a-newsletter-and-updating-the-weeks/" />
    <updated>2026-05-08T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-08-writing-a-newsletter-and-updating-the-weeks/</id>
    <content type="html">&lt;p&gt;Hello Happy Hackers&lt;/p&gt;
&lt;p&gt;I&#39;m not sure why we ended the weeks on a Sunday.  I suppose it was to highlight the &#39;deadline&#39; or &#39;due date&#39; aspect.  It could just as easily been ending on Friday, due on Friday.  In future hachathons, this will be configurable.&lt;/p&gt;
&lt;p&gt;We addressed the Admin Week and Builder week.  The Admin weeks start when registration begins and the buider weeks start when registration closes. ... hmmm, maybe next time we use the NASA model of Time Minus and Plus.  Weeks before registration closes (LIFTOFF) are Minus weeks and after are plus weeks or just weeks.&lt;/p&gt;
&lt;p&gt;Anyway - happy Friday&lt;/p&gt;
&lt;p&gt;and here is what Codex says:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Implemented the week-model change across config, data generation, dashboard UI, and docs.

  The core change is in /home/nsl/ad-ipsum/builder-season-playbook/config/event.yml:18, scripts/event.mjs:18, and src/
  _data/xSearch.js:1. Admin week 1 is now anchored to 2026-04-13 through 2026-04-19, the admin calendar runs for 14 weeks,
  builder updates run for 12 consecutive weeks, and the default builder Week 1 is the week ending 2026-05-03. Builder
  timing is now computed separately from admin week numbering, so a builder’s Week 1 can correctly map to Admin Week 3 and
  their final presentation week can land on 2026-07-19.

  The dashboard and builder pages now explain that distinction instead of hiding it. src/dashboard/index.njk:16 keeps
  admin week labels as the canonical labels, adds builder Week 1 and final presentation columns, and clarifies that the
  GitHub activity section uses the current UTC week. src/builders/builder.njk:45 shows each builder’s Week 1 update
  timing, admin-week offset, and final presentation week. I also updated README.md:30, /home/nsl/ad-ipsum/builder-season-
  playbook/config/repos.yml:1, and the internal reference post at src/posts/2026-05-05-x-search-semi-automated.md:28.

  I used an event-level default for all current builders rather than writing the same first_update_week_end into every
  builder entry. Individual builders can now override that in config/repos.yml when needed.

  Verification: ./node_modules/.bin/eleventy completed successfully, and the generated data confirms Week 1 = Apr 13 to
  Apr 19, Week 2 ends 2026-04-26, default builder Week 1 ends 2026-05-03, and the computed final presentation week ends
  2026-07-19.
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Builder facepile and post tools</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-12-builder-facepile-and-post-tools/" />
    <updated>2026-05-12T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-12-builder-facepile-and-post-tools/</id>
    <content type="html">&lt;p&gt;Today I made two related improvements to the Builder Season Playbook: a new builder facepile on the homepage and a smoother post-writing workflow for future updates.&lt;/p&gt;
&lt;h2&gt;Builder Facepile&lt;/h2&gt;
&lt;p&gt;The homepage now includes a GitHub-profile-image facepile built from the existing normalized builder registry. The data still flows from &lt;code&gt;config/repos.yml&lt;/code&gt;, optional &lt;code&gt;project.yml&lt;/code&gt; overlays, and then through the shared &lt;code&gt;builders&lt;/code&gt; array that Eleventy already consumes.&lt;/p&gt;
&lt;p&gt;I added a small normalization step so each builder exposes &lt;code&gt;githubProfileUrl&lt;/code&gt;, &lt;code&gt;githubAvatarUrl&lt;/code&gt;, &lt;code&gt;displayName&lt;/code&gt;, and &lt;code&gt;builderPageUrl&lt;/code&gt;. The avatar URLs use the stable GitHub pattern &lt;code&gt;https://avatars.githubusercontent.com/{username}?s=80&lt;/code&gt;, and the landing page renders those images with accessible markup, explicit dimensions, and lazy loading.&lt;/p&gt;
&lt;p&gt;The section fits the site’s current warm editorial look: overlapping circular avatars, subtle hover and focus states, and wrapping that still works on mobile.&lt;/p&gt;
&lt;h2&gt;Post Authoring&lt;/h2&gt;
&lt;p&gt;I also updated the posting workflow so new posts can include an explicit author line without rewriting the older archive by hand. The shell scaffolds now default to &lt;code&gt;author: &amp;quot;Newman&amp;quot;&lt;/code&gt;, while the post templates render &lt;code&gt;Author: Newman&lt;/code&gt; when a post does not define an author.&lt;/p&gt;
&lt;p&gt;For agent-authored posts, there is now a dedicated &lt;code&gt;create-post&lt;/code&gt; routine and repo-local plugin bundle. The script can generate a markdown file, create the matching image directory, and prefill a short summary body. That gives us a cleaner path for turning work sessions into publishable updates without having to reconstruct the front matter every time.&lt;/p&gt;
&lt;h2&gt;Verification&lt;/h2&gt;
&lt;p&gt;I ran the local Eleventy build after these changes. The homepage facepile rendered, existing posts displayed the new author line correctly, and the post-creation dry run produced the expected file path, image directory, and front matter.&lt;/p&gt;
&lt;p&gt;That should make the site feel a little more personal on the front page and a little easier to maintain behind the scenes.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Little fixes that build up over time</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-20-little-fixes-that-build-up-over-time/" />
    <updated>2026-05-20T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-20-little-fixes-that-build-up-over-time/</id>
    <content type="html">&lt;h1&gt;Newman&#39;s thought this week&lt;/h1&gt;
&lt;h2&gt;Builder Season Playbook Progress Log&lt;/h2&gt;
&lt;h3&gt;Dashboard / Infrastructure Updates&lt;/h3&gt;
&lt;p&gt;Current improvements and cleanup tasks for the dashboard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;use &lt;code&gt;active: true/false&lt;/code&gt; instead of &lt;code&gt;ignore&lt;/code&gt; in the &lt;code&gt;repos.yml&lt;/code&gt; and ingestion scripts&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;make the &amp;quot;Deploy to GitHub Pages&amp;quot; script run after the &amp;quot;Update GitHub Activity&amp;quot; script&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;activity updates daily, but the site is still manually deployed, which means the dashboard can get out of date quickly&lt;/li&gt;
&lt;li&gt;goal: automatically deploy at least once per day after the activity script runs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the dashboard page is too long&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;remove the &amp;quot;Builder X Searches&amp;quot; section&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;move recent commits to the top&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;shorten commit messages to a reasonable length&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;explore simple toggle headlines / collapsible sections using native HTML if possible&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keep it as lightweight and simple as possible&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;make X handles clickable links in the Builders section&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;So, here are my updates while working on the Builder Season Playbook.&lt;/p&gt;
&lt;p&gt;To be honest, I was having some trouble motivating myself to really dive in and do the work. The list above is a collection of issues and observations I’ve been keeping track of over the last week or so. I had intended to sit down and knock them all out in a focused work session, but it was tougher than expected to get started.&lt;/p&gt;
&lt;p&gt;One thing that helped was a hackathon member pointing out problems with the X search functions — specifically that some posts are not showing up correctly in the standard URL searches. That motivated me to spend about an hour and a half working in Codex, developing a clearer plan for the dashboard and refining it into something I liked.&lt;/p&gt;
&lt;p&gt;Building with Codex is fun. I’m very glad I have enough coding background to not be afraid to dig down into the code when needed. Honestly, some of these tasks would have taken me an entire afternoon or longer on my own, especially the kinds of annoying debugging sessions where you’re stuck asking “why is this even breaking?”&lt;/p&gt;
&lt;p&gt;It really does feel like a gift. It’s not without drawbacks, but building with Codex is allowing me to build the kinds of things I actually want to build. A lot of these improvements are fairly simple, but they are very focused on making the dashboard genuinely usable.&lt;/p&gt;
&lt;p&gt;At this point, I feel the dashboard is becoming usable enough that I want to start getting feedback on it.&lt;/p&gt;
&lt;p&gt;My next steps are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;gather feedback from builders&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;plan a dedicated feedback session&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;continue attending the GameChanger live coding sessions on Tuesdays at 15:30 UTC&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it was nice hearing other builders actively working on their projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After that, I really want to think more deeply about the final product I want this playbook to become.&lt;/p&gt;
&lt;p&gt;I think there’s a considerable chance that Gimbalabs will run this hackathon format again in the future, and that realization is motivating me to turn this into a reusable product — something that could help others recreate and facilitate this style of builder season themselves.&lt;/p&gt;
&lt;p&gt;OK — in the interest of brevity, I’ll stop here.&lt;/p&gt;
&lt;h1&gt;The Codex Plan aka &amp;quot;Mr. Codex sez&amp;quot;&lt;/h1&gt;
&lt;h2&gt;Summary - Dashboard + Automation Cleanup&lt;/h2&gt;
&lt;p&gt;Implement four coordinated changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replace ignore with active across builder registry parsing and docs.&lt;/li&gt;
&lt;li&gt;Make the daily activity workflow also deploy GitHub Pages so the public site refreshes after snapshot updates.&lt;/li&gt;
&lt;li&gt;Shorten the dashboard by prioritizing recent commits, removing the builder-by-builder X search table, and collapsing the remaining X search area with
simple native HTML.&lt;/li&gt;
&lt;li&gt;Make builder X handles clickable in the dashboard Builders table.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Key Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Registry semantics:
&lt;ul&gt;
&lt;li&gt;Update config/repos.yml usage so active: false excludes a builder from site output and activity ingestion.&lt;/li&gt;
&lt;li&gt;Change the registry loader to treat missing active as active by default.&lt;/li&gt;
&lt;li&gt;Remove ignore from docs/examples and replace it with active.&lt;/li&gt;
&lt;li&gt;Update any ownership/source-of-truth docs that currently describe ignore.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Actions:
&lt;ul&gt;
&lt;li&gt;Convert the scheduled update-activity workflow into the daily source of truth for both data refresh and Pages deployment.&lt;/li&gt;
&lt;li&gt;Keep the existing build steps, commit/push updated activity.json and project-metadata.json, then build the Pages artifact and deploy in the same
workflow run.&lt;/li&gt;
&lt;li&gt;Retain the separate deploy.yml for normal human pushes to main, but daily freshness should no longer depend on that push triggering another
workflow.&lt;/li&gt;
&lt;li&gt;Add whatever Pages permissions are needed to the scheduled workflow so it can upload and deploy directly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dashboard layout and behavior:
&lt;ul&gt;
&lt;li&gt;Move Recent Commits above the Builders table, directly after the summary cards.&lt;/li&gt;
&lt;li&gt;Trim commit messages in the recent-commit feed to a fixed reasonable preview length, preserving the full commit via the existing link.&lt;/li&gt;
&lt;li&gt;Remove the entire Builder X Searches section from the dashboard.&lt;/li&gt;
&lt;li&gt;Keep Weekly Global Searches, but wrap it in a native &lt;details&gt;&lt;summary&gt; disclosure so it is collapsed by default with no JS dependency.&lt;/summary&gt;&lt;/details&gt;&lt;/li&gt;
&lt;li&gt;Keep the existing X summary cards unless they become redundant during implementation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Builders table:
&lt;ul&gt;
&lt;li&gt;In the dashboard Builders section, render the X handle as a clickable https://x.com/{handle} link when present.&lt;/li&gt;
&lt;li&gt;If the table does not currently have an X column, add one; if it already gains the link through a different layout tweak, keep the simplest
readable version.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Public Interface / Content Changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;config/repos.yml contract changes from ignore: true to active: false.&lt;/li&gt;
&lt;li&gt;Builders are considered included unless active is explicitly false.&lt;/li&gt;
&lt;li&gt;Dashboard content changes:
&lt;ul&gt;
&lt;li&gt;Builder X Searches removed.&lt;/li&gt;
&lt;li&gt;Weekly Global Searches becomes collapsible.&lt;/li&gt;
&lt;li&gt;Recent Commits appears earlier and shows shortened commit text.&lt;/li&gt;
&lt;li&gt;Builders table exposes linked X handles.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Test Plan&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Registry:
&lt;ul&gt;
&lt;li&gt;Confirm a builder with active: false is absent from the homepage facepile, dashboard builders list, builder detail pages, and activity snapshot
generation.&lt;/li&gt;
&lt;li&gt;Confirm a builder without active still appears normally.&lt;/li&gt;
&lt;li&gt;Confirm no code path still depends on ignore.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dashboard rendering:
&lt;ul&gt;
&lt;li&gt;Build the site and verify section order: summary cards, recent commits, builders, X weekly searches.&lt;/li&gt;
&lt;li&gt;Verify the Builder X Searches section is gone.&lt;/li&gt;
&lt;li&gt;Verify the Weekly Global Searches block is collapsed by default and expands with native browser behavior.&lt;/li&gt;
&lt;li&gt;Verify long commit messages are truncated cleanly without breaking links or timestamps.&lt;/li&gt;
&lt;li&gt;Verify builder X handles open the correct X profile URLs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Automation:
&lt;ul&gt;
&lt;li&gt;Review both workflow files for valid trigger/permission structure.&lt;/li&gt;
&lt;li&gt;Ensure the scheduled workflow contains both data refresh and Pages deployment steps.&lt;/li&gt;
&lt;li&gt;Ensure the manual/push deployment workflow still remains valid for normal site changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Assumptions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;active fully replaces ignore; backward compatibility for ignore is not required.&lt;/li&gt;
&lt;li&gt;The simplest toggle requested is native &lt;details&gt;/&lt;summary&gt; with no JavaScript.&lt;/summary&gt;&lt;/details&gt;&lt;/li&gt;
&lt;li&gt;The collapsed section should be the remaining X search area, not the core activity or builders sections.&lt;/li&gt;
&lt;li&gt;“Reasonable” commit shortening means a fixed preview length implemented in template/filter logic rather than CSS-only clipping.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Project Management and Kanban going in again</title>
    <link href="https://the-hardforq.github.io/posts/2026-05-27-project-management-and-kanban-going-in-again/" />
    <updated>2026-05-27T00:00:00Z</updated>
    <id>https://the-hardforq.github.io/posts/2026-05-27-project-management-and-kanban-going-in-again/</id>
    <content type="html">&lt;p&gt;Today we created the Work Breakdown Structure document and imported it into a GitHub Project using Codex.&lt;/p&gt;
&lt;p&gt;I&#39;ve always wanted to use a Kanban board. The approach makes sense to me, but I&#39;ve rarely been able to use one consistently across a project. Lately, though, I&#39;ve been thinking more about how to manage time effectively while juggling multiple projects, and it feels like the right moment to give Kanban another serious try.&lt;/p&gt;
&lt;p&gt;This also aligns with a broader goal at Gimbalabs. We used Notion for project management in the past and later moved toward GitHub, but we never fully committed to using GitHub Projects as our primary project management system. I&#39;ve seen many open source projects use GitHub Projects effectively, and I&#39;d like to better understand how it can support community-driven work.&lt;/p&gt;
&lt;p&gt;One thing that feels different now is the arrival of AI assistants. Creating a project board is one thing, but maintaining it has always been the harder challenge. With tools like Codex and ChatGPT, I wonder if project boards will become easier to create, update, refactor, and keep aligned with reality. I&#39;m curious to experiment and learn what works.&lt;/p&gt;
&lt;p&gt;The Builder Season Playbook is giving me an opportunity to explore these ideas in a real project. My hope is that by the end of this season I&#39;ll have a more informed perspective on project management systems, and perhaps something useful that Gimbalabs can apply when the next season begins.&lt;/p&gt;
&lt;p&gt;codex sez:
• Saved the generator as scripts/update_work_breakdown.py.&lt;/p&gt;
&lt;p&gt;Run it with:&lt;/p&gt;
&lt;p&gt;./scripts/update_work_breakdown.py&lt;/p&gt;
&lt;p&gt;It pulls Project Newman5/3 via gh project item-list and rewrites templates/admins/
work-breakdown.md from the Project items.&lt;/p&gt;
&lt;p&gt;We set up GitHub project management for Builder Season Playbook.&lt;/p&gt;
&lt;p&gt;Main outcomes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Authenticated gh with repo and project scopes.&lt;/li&gt;
&lt;li&gt;Created GitHub Project: https://github.com/users/Newman5/projects/3&lt;/li&gt;
&lt;li&gt;Created 109 real GitHub Issues from the WBS, #2 through #110.&lt;/li&gt;
&lt;li&gt;Added all issues to the Project.&lt;/li&gt;
&lt;li&gt;Created labels for:
&lt;ul&gt;
&lt;li&gt;priority&lt;/li&gt;
&lt;li&gt;effort&lt;/li&gt;
&lt;li&gt;artifact type&lt;/li&gt;
&lt;li&gt;epic&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Created 8 milestones from W5 Foundation Package through W12 Release.&lt;/li&gt;
&lt;li&gt;Added Project fields:
&lt;ul&gt;
&lt;li&gt;Kanban Status&lt;/li&gt;
&lt;li&gt;Epic&lt;/li&gt;
&lt;li&gt;Priority Tier&lt;/li&gt;
&lt;li&gt;Effort&lt;/li&gt;
&lt;li&gt;Artifact Type&lt;/li&gt;
&lt;li&gt;Target Week&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Populated Project item fields from the WBS.&lt;/li&gt;
&lt;li&gt;Updated templates/admins/work-breakdown.md so it is now a local snapshot of the
GitHub Project, with the Project as source of truth.&lt;/li&gt;
&lt;li&gt;Added scripts/update_work_breakdown.py to regenerate work-breakdown.md from the
GitHub Project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Current repo changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modified: templates/admins/work-breakdown.md&lt;/li&gt;
&lt;li&gt;Added: scripts/update_work_breakdown.py&lt;/li&gt;
&lt;li&gt;Existing untracked file still present: web/src/posts/2026-05-27-project-management-
and-kanban-going-in-again.md&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Useful command:&lt;/p&gt;
&lt;p&gt;./scripts/update_work_breakdown.py&lt;/p&gt;
&lt;p&gt;That refreshes the local WBS from GitHub Project Newman5/3.&lt;/p&gt;
</content>
  </entry>
</feed>