Skip to content

Move the blog into site/docs/blog for MkDocs Material's blog plugin - #1

Merged
markbac merged 1 commit into
mainfrom
claude/section-blog-5e7a3b
Oct 16, 2026
Merged

markbac merged 1 commit into
mainfrom
claude/section-blog-5e7a3b

Conversation

@markbac

@markbac markbac commented Oct 16, 2026

Copy link
Copy Markdown
Owner

Moves the blog from markbac/blog-tech into site/docs/blog/ for MkDocs Material's blog plugin. This PR changes only site/docs/blog/.

What's here

  • 97 posts in site/docs/blog/posts/: 79 from blog/ and the 18-part Docs as Code series from DaC/. Each post has date, authors: [markbac], categories and a short slug, plus a <!-- more --> marker after its first paragraph so the index shows excerpts.
  • .authors.yml for Mark (name, description, GitHub avatar and link). It sits at the plugin's default authors_file ({blog}/.authors.yml), so no setting is needed.
  • index.md: the blog's landing text.
  • 24 images in posts/images/, with descriptive names. 23 were GitHub attachments; the 24th is the public-domain Markdown mark, used by the Markdown guide.

Checks

  • py-doc lint site/docs/blog --strict exits 0 with Vale 3 and en-GB spelling: 0 warnings or errors. 1,954 info notes remain, mostly HeadingCase (Mark writes headings in title case), PassiveVoice, Acronyms and WeaselWords. Clearing them would mean rewriting most posts, which is more than a light edit. --strict doesn't fail on info.
  • py-doc site build builds both sites with no MkDocs warnings. On each site, site/build and site/build-tarf both have 97 posts, the 2025 archive, 12 category pages, 9 index pages and all 24 images. I also checked that every local <img> in the built blog points at a file that exists, and looked at the index, a post with images, a category page and the archive in a browser.

Dates, categories and order

  • Dates come from git log --follow --diff-filter=A for blog/, because the posts have no dates of their own. Posts added on the same day get one minute per file number (09:00, 09:01, …), so the archive keeps the source's numbering order.
  • Docs as Code dates also come from Git. The front-matter dates (13 and 15 May) would put parts 5 to 7 after part 18. The Git dates (12 to 15 May) follow the part order, and each part gets one minute per part number.
  • Categories: the series markers become Architecture, Team and Architecture as Code (AAC). Unmarked posts are grouped by topic: Book reviews, Engineering practice, Documentation, Git, Computing history, Networking, Standards and Embedded. A few posts have two categories. Slack is a review of DeMarco's book, not a series, so it's under Book reviews.

Edits to Mark's text (light)

  • Spelling changed to British English (organisation, behaviour, favour, optimise, artefact, catalogue, modelling and so on). Proper nouns are left as written: US Department of Defense, International Organization for Standardization, the journal Organizational Behavior…. So are "program" (software) and "gas meter", which are correct in British English. Those paragraphs are wrapped in <!-- vale PyDoc.Spelling = NO/YES --> comments.
  • Headings: **bold**, emoji and a closing : or ! removed. The words are unchanged.
  • 170 emoji pseudo-lists, held together with trailing-backslash line breaks, are now real Markdown lists. The emoji are kept.
  • About 70 sentences over 30 words split, mostly at an existing dash, semicolon or comma.
  • Broken code fences repaired in mkdocs-plugins, markdown-guide and beyond-markdown. Markdown examples that contain fences now use four backticks. Before this, the example links in beyond-markdown were rendered as real, broken links.
  • The Markdown guide's "rendered output" for an image was escaped text. It's now the image.
  • A broken link fixed: [OpenADR Alliance(https://…) in the OpenADR post.
  • The Docs as Code footers ("📘 Next up: …") often named posts that were never written, such as "Lessons Learned…". Each part now links to the real next part. Part 18 says it's the last part and links to part 1.
  • TODO: document later, which is an example of a docs smell, is now code, so it isn't flagged as a placeholder.

Other people's content

  • Quotations: the only long quotation was the Rumsfeld "unknown unknowns" passage (three lines) in The Cone of Uncertainty. It's cut to one line and attributed (news briefing, 12 February 2002). The book reviews are Mark's own summaries, with no long quotes.
  • Images with credits added:
    • C4 diagrams (4): c4model.com, Simon Brown, CC BY 4.0
    • arc42 icons (12): arc42.org, CC BY-SA 4.0
    • Diátaxis diagram: diataxis.fr, Daniele Procida, CC BY-SA 4.0
    • Zalando Tech Radar image: credited and linked
  • Construx's Cone of Uncertainty diagram was hotlinked from construx.com. It's now a credited link, not an embedded image.
  • Images I couldn't source: see the open questions below.

Left out (not published)

Source Why
blog/000--Welcome.md One heading, no text. index.md replaces it
blog/wip/ (0-blogs-list.md, Architecture_Flashcards.md, Embedded Architecture Process Mindmap.md) Drafts
DaC/SDS-wip.md Draft. Part 18 is the published SDS post
DaC/docs_as_code.md The series plan, with writing tips
wip/ (31 networking and home-lab drafts) Drafts
tech_blog/ (4 home-lab posts: Nginx reverse proxy, self-hosted smart home, Raspberry Pi monitoring, expanding the NAS) Held back. They give Mark's home network detail: a domain, internal IP addresses and device roles. See the open questions
Guide.md, Notes.md, blog_ideas.md Writing notes and ideas, not posts
README.md, LICENSE, mkdocs.yml, .gitgnore, assets/cover.png, assets/favicon.png The old site's setup. The new site has its own

Needed outside site/docs/blog/ (not done here)

  1. Mermaid diagrams: 11 posts have Mermaid blocks, for example the TCP and IP deep dives, Git under the hood and the Docs as Code posts. They show as code until site/mkdocs.yml adds the custom fence:
    markdown_extensions:
      - pymdownx.superfences:
          custom_fences:
            - name: mermaid
              class: mermaid
              format: !!python/name:pymdownx.superfences.fence_code_format
    This replaces the plain pymdownx.superfences entry. Material renders Mermaid itself, so no extra script is needed. The PlantUML blocks are all examples inside code, so they need nothing.
  2. Date format: posts show "February 18, 2025", because post_date_format: long follows the theme language (en). For British dates, try theme.language: en-GB if Material supports it, or a custom format.
  3. Optional: categories_allowed in the blog plugin settings would catch a mistyped category in future posts. The 12 used here are: Architecture, Architecture as Code, Book reviews, Computing history, Docs as Code, Documentation, Embedded, Engineering practice, Git, Networking, Standards, Team.
  4. Redirects: none added. As far as I can tell, blog-tech wasn't published anywhere (its site/ was ignored), so there are no old addresses to redirect. Add redirect_maps if it was published.

Open questions for Mark

  1. tech_blog/: publish the four home-lab posts? They show your local domain, internal IP addresses and the network layout. If you want them, they could go in a "Homelab" category with the details generalised.
  2. Dates: the Git dates put everything in February to May 2025, but the old mkdocs.yml says © 2021. Were any posts first published earlier, for example on LinkedIn? If so, real dates would be better.
  3. Image sources: where did the TCP header, IPv4 header, SemVer and OpenADR diagrams come from? The Sommerville cover is used in a review, which is usually fine, but please confirm. I'll add credits or replace any that can't be credited.
  4. Categories: is the grouping right? In particular "Team" for the leadership series, and the topic categories for posts without a series marker.
  5. Series order: the Architecture and AAC posts carry series numbers (Architecture-1 to 7, AAC-1 to 4) that differ from their file and publication order. Dates follow publication order. Do you want them redated to follow the series order?
  6. Guide.md says public posts shouldn't name past employers. I didn't check for this, because I don't know which employers to look for. Please skim with that in mind.
  7. Heading case: Vale prefers sentence case (1,100+ info notes). Keep title case, or convert?

Provenance

Source in markbac/blog-tech Post in site/docs/blog/posts/ Date Categories Images
blog/001--Architecture-5-The_Evolution_of_Software_Architecture.md 2025-02-17-evolution-of-software-architecture.md 2025-02-17 Architecture
blog/002--Why_Companies_Keep_Failing_at_Software.md 2025-02-17-why-companies-keep-failing-at-software.md 2025-02-17 Engineering practice
blog/003--Team-1-The_Role_of_a_Technical_Leader.md 2025-02-18-role-of-a-technical-leader.md 2025-02-18 Team
blog/004--AAC-2-The_C4_Model_Visualising_Software_Architecture_for_Clarity_and_Simplicity.md 2025-02-18-c4-model.md 2025-02-18 Architecture as Code 4
blog/005--Team-4-Scaling_Leadership.md 2025-02-18-scaling-leadership.md 2025-02-18 Team
blog/006--Architecture-7-What_is_an_Architecture_Vision_and_Why_Does_It_Matter.md 2025-02-18-architecture-vision.md 2025-02-18 Architecture
blog/007--Team-2-Building_a_High-Performing_Engineering_Team.md 2025-02-18-high-performing-engineering-team.md 2025-02-18 Team
blog/008--AAC-1-Building_Better_Systems_Through_Code-Driven_Architecture.md 2025-02-18-architecture-as-code.md 2025-02-18 Architecture as Code
blog/009--Slack-Why_Overworked_Teams_Are_Less_Productive.md 2025-02-18-slack.md 2025-02-18 Book reviews
blog/010--Architecture-6-A_Pragmatic_Architecture_Process.md 2025-02-18-pragmatic-architecture-process.md 2025-02-18 Architecture
blog/011--Why_Start_with_Why_is_Just_Common_Sense.md 2025-02-18-start-with-why.md 2025-02-18 Book reviews
blog/012--AAC-3-Structurizr-Bringing_the_C4_Model_to_Life_in_Code.md 2025-02-18-structurizr.md 2025-02-18 Architecture as Code
blog/013--Team-3-Navigating_Organizational_Complexity.md 2025-02-18-navigating-organisational-complexity.md 2025-02-18 Team
blog/014--Why_Does_Software_Cost_So_Much_And_Why_Its_Not_Just_About_Code.md 2025-03-04-why-does-software-cost-so-much.md 2025-03-04 Book reviews
blog/015--Architecture-2-Clever_Architecture_is_Not_Good_Architecture.md 2025-02-17-clever-architecture.md 2025-02-17 Architecture
blog/016a--AAC-1a-Bridging_the_Gap_Between_Design_and_Development.md 2025-02-18-bridging-design-and-development.md 2025-02-18 Architecture as Code
blog/016b--Why_Your_Software_Documentation_Shouldnt_Live_in_Work_Tracking_Tools.md 2025-03-04-docs-out-of-work-tracking-tools.md 2025-03-04 Documentation
blog/017--Managing_Humans-The_No-Nonsense_Guide_to_Engineering_Leadership.md 2025-02-18-managing-humans.md 2025-02-18 Book reviews
blog/018--The_Mythical_Man-Month-Why_Throwing_More_People_at_a_Late_Project_Makes_It_Later.md 2025-02-18-mythical-man-month.md 2025-02-18 Book reviews
blog/019--Architecture-4-The_Importance_of_Architectural_Principles.md 2025-02-17-architectural-principles.md 2025-02-17 Architecture
blog/020--Fixing_MISRA_C_Errors.md 2025-03-04-fixing-misra-c-errors.md 2025-03-04 Embedded, Engineering practice
blog/021--Happy_to_Work-Here_Creating_a_Workplace_People_Actually_Enjoy.md 2025-02-18-happy-to-work-here.md 2025-02-18 Book reviews
blog/022--AAC-4-Architecture_Anti-PatternsCommon_Pitfalls_in_C4_and_Structurizr.md 2025-02-18-c4-structurizr-anti-patterns.md 2025-02-18 Architecture as Code
blog/023--Why_Some_Companies_Struggle_with_Software_Development.md 2025-02-18-why-some-companies-struggle.md 2025-02-18 Engineering practice
blog/024--The_Infinite_Game-Why_Playing_to_Win_is_a_Losing_Strategy.md 2025-02-18-infinite-game.md 2025-02-18 Book reviews
blog/025--Good_Code_Documents_Itself_No_it_Really_Doesnt.md 2025-03-04-good-code-documents-itself.md 2025-03-04 Documentation, Engineering practice
blog/026--How_to_Write_Maintainable_Embedded_Code.md 2025-03-04-maintainable-embedded-code.md 2025-03-04 Embedded, Engineering practice
blog/027--Architecture-1-Architectural_Governance.md 2025-02-17-architectural-governance.md 2025-02-17 Architecture
blog/028--Why_Companies_Will_Never_Learn.md 2025-02-17-why-companies-will-never-learn.md 2025-02-17 Engineering practice
blog/029--Waltzing_with_Bears-Embracing_Risk_Instead_of_Ignoring_It.md 2025-02-18-waltzing-with-bears.md 2025-02-18 Book reviews
blog/030--What_You_Should_Document_and_Why.md 2025-03-04-what-to-document.md 2025-03-04 Documentation
blog/031--The_Practical_Wisdom_of_Leaders_Eat_Last.md 2025-02-18-leaders-eat-last.md 2025-02-18 Book reviews
blog/033--Architecture-3-Communicating_as_an_Architect.md 2025-02-17-communicating-as-an-architect.md 2025-02-17 Architecture
blog/034--Peopleware-Why_Tech_Success_is_More_About_People_Than_Code.md 2025-02-18-peopleware.md 2025-02-18 Book reviews
blog/035--Dan_Pinks_Drive-Why_Motivation_is_About_More_Than_Just_Money.md 2025-02-18-drive.md 2025-02-18 Book reviews
blog/036--Start_with_Why_Leaders_Eat_Last_and_The_Infinite_Game-A_Practical_Perspective.md 2025-02-18-why-leaders-infinite-game.md 2025-02-18 Book reviews
blog/037-Team_Geek-How_to_Build_a_High-Performing_Engineering_Team.md 2025-02-18-team-geek.md 2025-02-18 Book reviews
blog/038--Adrenaline_Junkies_and_Template_Zombies.md 2025-02-18-adrenaline-junkies-template-zombies.md 2025-02-18 Book reviews
blog/039--The_First_90_Days-A_Practical_Guide_to_Hitting_the_Ground_Running.md 2025-02-18-first-90-days.md 2025-02-18 Book reviews
blog/040--Autonomy_Mastery_and_Purpose_in_Software_Engineering_and_Architecture.md 2025-03-04-autonomy-mastery-purpose.md 2025-03-04 Team
blog/041--Maximizing_Software_ROI-Lessons_from_Return_on_Software.md 2025-03-04-return-on-software.md 2025-03-04 Book reviews
blog/042--Writing_Better_Software-Lessons_from_Code_Complete.md 2025-03-04-code-complete.md 2025-03-04 Book reviews
blog/043--The_Cone_of_Uncertainty-Why_Your_Estimates_Are_Always_Wrong.md 2025-03-04-cone-of-uncertainty.md 2025-03-04 Engineering practice
blog/044--Reviewing_Software_Engineering_(8th_Edition).md 2025-03-04-sommerville-software-engineering.md 2025-03-04 Book reviews 1
blog/045--Making_Sense_of_Documentation-A_Pragmatic_Look_at_the_Diátaxis_Framework.md 2025-03-05-diataxis.md 2025-03-05 Documentation 1
blog/046--AsyncAPI-Bringing_Order_to_Event-Driven_Chaos.md 2025-03-05-asyncapi.md 2025-03-05 Standards, Architecture
blog/047--OpenADR-Enabling_Scalable_Automated_Demand_Response.md 2025-03-05-openadr.md 2025-03-05 Standards 1
blog/048--Using_RFCs_to_Improve_Software_Design_and_Architecture.md 2025-03-05-rfcs-for-design.md 2025-03-05 Architecture
blog/049--arc42-A_Pragmatic_Approach_to_Software_Architecture_Documentation.md 2025-03-05-arc42.md 2025-03-05 Documentation, Architecture 12
blog/050--Building_an_Effective_Architecture_Guild.md 2025-03-05-architecture-guild.md 2025-03-05 Architecture
blog/051--Leveraging_a_Technology_Radar_for_Strategic_Decision-Making_in_Business.md 2025-03-05-technology-radar.md 2025-03-05 Architecture 1
blog/052--Supercharging_Documentation_with_MkDocs.md 2025-03-05-mkdocs-plugins.md 2025-03-05 Documentation
blog/053--The_Origins_of_Unix.md 2025-03-07-origins-of-unix.md 2025-03-07 Computing history
blog/054--C_The_Language_That_Built_the_Modern_World.md 2025-03-07-c-language.md 2025-03-07 Computing history
blog/055--Beyond_Unix_and_C.md 2025-03-07-kernighan-ritchie-thompson.md 2025-03-07 Computing history
blog/056--The_Unsung_Heros_of_Bell_Labs.md 2025-03-07-bell-labs.md 2025-03-07 Computing history
blog/057--The_Origins_of_TCP-IP.md 2025-03-07-origins-of-tcp-ip.md 2025-03-07 Computing history, Networking
blog/058--A_Deep_Dive_into_TCP.md 2025-03-07-tcp-deep-dive.md 2025-03-07 Networking 1
blog/059--A_Deep_Dive_into_IP.md 2025-03-05-ip-deep-dive.md 2025-03-05 Networking 1
blog/060--Git-A_Deep_Dive.md 2025-03-07-git-under-the-hood.md 2025-03-07 Git
blog/061--A_Pragmantic_Approach_to_Semantic_Versioning.md 2025-03-07-semantic-versioning.md 2025-03-07 Engineering practice 1
blog/062--Feature_Flags.md 2025-03-07-feature-flags.md 2025-03-07 Engineering practice
blog/063--Mastering_Git.md 2025-03-07-mastering-git.md 2025-03-07 Git
blog/064--Git_Fundamentals.md 2025-03-07-git-fundamentals.md 2025-03-07 Git
blog/065--Git_Understanding_Branching_and_Merging.md 2025-03-07-git-branching-and-merging.md 2025-03-07 Git
blog/066--Git_Rebasing_vs_Merging.md 2025-03-07-git-rebasing-vs-merging.md 2025-03-07 Git
blog/067--Git_Fixing_Mistakes.md 2025-03-07-git-fixing-mistakes.md 2025-03-07 Git
blog/068--Git_Remote_Repositories.md 2025-03-07-git-remote-repositories.md 2025-03-07 Git
blog/069--Git_Best_Practices.md 2025-03-07-git-best-practices.md 2025-03-07 Git
blog/070--Git_Hooks_and_Automation.md 2025-03-07-git-hooks.md 2025-03-07 Git
blog/071--Git_Advanced_Git.md 2025-03-07-advanced-git.md 2025-03-07 Git
blog/072--Git_Debugging_Resolving_Issues.md 2025-03-07-git-debugging.md 2025-03-07 Git
blog/073--Git_CICD.md 2025-03-07-git-ci-cd.md 2025-03-07 Git
blog/074--Building_a_High_Impact_Software_guild.md 2025-03-07-software-guild.md 2025-03-07 Team
blog/075--Markdown.md 2025-03-07-markdown-guide.md 2025-03-07 Documentation
blog/076--Why_Standardising_Tools_and_Processes_Across_Software_Teams_is_a_Bad_Idea.md 2025-03-07-standardising-tools.md 2025-03-07 Engineering practice
blog/077-Git_10_Git_Trick_you_Wish_you_Knew_Earlier.md 2025-03-10-git-tricks.md 2025-03-10 Git
blog/078--How_Long_ShouldI_It_Take_for_a_Developer_to_Be_Productive.md 2025-03-11-developer-onboarding-time.md 2025-03-11 Engineering practice, Embedded
blog/079--The_Impact_of_Interruptions.md 2025-03-11-impact-of-interruptions.md 2025-03-11 Engineering practice
DaC/01-docs-as-code-what-it-is.md 2025-05-12-docs-as-code.md 2025-05-12 Docs as Code
DaC/02-scoping-docs-systems-products-projects.md 2025-05-13-scoping-docs.md 2025-05-13 Docs as Code
DaC/03-structuring-docs-complex-systems.md 2025-05-13-structuring-docs.md 2025-05-13 Docs as Code
DaC/04-key-artefacts-across-the-stack.md 2025-05-15-key-artefacts.md 2025-05-15 Docs as Code
DaC/05-frameworks-that-bring-order-to-documentation.md 2025-05-15-documentation-frameworks.md 2025-05-15 Docs as Code
DaC/06-canvas-tools-for-strategy-communication-clarity.md 2025-05-15-canvas-tools.md 2025-05-15 Docs as Code
DaC/07-architecture-evaluation-and-tradeoffs.md 2025-05-15-architecture-evaluation.md 2025-05-15 Docs as Code
DaC/08-tools-of-the-trade-docs-as-code.md 2025-05-15-docs-as-code-tools.md 2025-05-15 Docs as Code
DaC/09-making-docs-part-of-your-agile-workflow.md 2025-05-15-docs-in-agile.md 2025-05-15 Docs as Code
DaC/10-living-architecture-documentation.md 2025-05-15-living-architecture.md 2025-05-15 Docs as Code
DaC/11-beyond-markdown-rich-interactive-docs.md 2025-05-15-beyond-markdown.md 2025-05-15 Docs as Code
DaC/12-docs-as-code-smells-and-antipatterns.md 2025-05-15-docs-as-code-smells.md 2025-05-15 Docs as Code
DaC/13-case-study-multi-layer-docs-as-code.md 2025-05-15-docs-as-code-case-study.md 2025-05-15 Docs as Code
DaC/14-building-a-documentation-culture.md 2025-05-15-documentation-culture.md 2025-05-15 Docs as Code
DaC/15-templates-starter-kits-playbooks.md 2025-05-15-templates-and-playbooks.md 2025-05-15 Docs as Code
DaC/16-deep-dive-into-adrs.md 2025-05-15-adr-deep-dive.md 2025-05-15 Docs as Code
DaC/17-deep-dive-into-rfcs.md 2025-05-15-rfc-deep-dive.md 2025-05-15 Docs as Code
DaC/18-software-design-specification-dac.md 2025-05-15-sds-docs-as-code.md 2025-05-15 Docs as Code

🤖 Generated with Claude Code

97 posts from markbac/blog-tech: 79 from blog/ and the 18-part Docs as Code
series from DaC/. Each post has date, authors, categories and slug front
matter and an excerpt marker. Images are copied into posts/images with
credits where the source is known. .authors.yml describes Mark, and
index.md is the blog's landing text.

Edits are light: British spelling, headings without bold, emoji or a
closing colon, emoji pseudo-lists made into Markdown lists, long sentences
split, broken code fences repaired, and the Docs as Code "next" pointers
linked to the real next part. Drafts are left out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@markbac
markbac merged commit 6905349 into main Oct 16, 2026
3 checks passed
@markbac
markbac deleted the claude/section-blog-5e7a3b branch October 19, 2026 08:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant