landerox.github.io

Projects that follow the best practices below can voluntarily self-certify and show that they've achieved an Open Source Security Foundation (OpenSSF) best practices badge.

There is no set of practices that can guarantee that software will never have defects or vulnerabilities; even formal methods can fail if the specifications or assumptions are wrong. Nor is there any set of practices that can guarantee that a project will sustain a healthy and well-functioning development community. However, following best practices can help improve the results of projects. For example, some practices enable multi-person review before release, which can both help find otherwise hard-to-find technical vulnerabilities and help build trust and a desire for repeated interaction among developers from different companies. To earn a badge, all MUST and MUST NOT criteria must be met, all SHOULD criteria must be met OR be unmet with justification, and all SUGGESTED criteria must be met OR unmet (we want them considered at least). If you want to enter justification text as a generic comment, instead of being a rationale that the situation is acceptable, start the text block with '//' followed by a space. Feedback is welcome via the GitHub site as issues or pull requests There is also a mailing list for general discussion.

We gladly provide the information in several locales, however, if there is any conflict or inconsistency between the translations, the English version is the authoritative version.
If this is your project, please show your baseline badge status on your project page! The baseline badge status looks like this: Baseline badge level for project 12835 is baseline-2 Here is how to embed the baseline badge:
You can show your baseline badge status by embedding this in your markdown file:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/12835/baseline)](https://www.bestpractices.dev/projects/12835)
or by embedding this in your HTML:
<a href="https://www.bestpractices.dev/projects/12835"><img src="https://www.bestpractices.dev/projects/12835/baseline"></a>


These are the Baseline Level 1 criteria. These are criteria version v2026.02.19.

Baseline Series: Baseline Level 1 Baseline Level 2 Baseline Level 3

        

 Basics

  • General

    Note that other projects may use the same name.

    Personal site focused on data platforms, cloud architecture, automation, and production ai solutions.

    Please use SPDX license expression format; examples include "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT", and "(BSD-2-Clause OR Ruby)". Do not include single quotes or double quotes.
    If there is more than one language, list them as comma-separated values (spaces optional) and sort them from most to least used. If there is a long list, please list at least the first three most common ones. If there is no language (e.g., this is a documentation-only or test-only project), use the single character "-". Please use a conventional capitalization for each language, e.g., "JavaScript".
    The Common Platform Enumeration (CPE) is a structured naming scheme for information technology systems, software, and packages. It is used in a number of systems and databases when reporting vulnerabilities.

 Controls 24/24

  • Controls


    When a user attempts to read or modify a sensitive resource in the project's authoritative repository, the system MUST require the user to complete a multi-factor authentication process. [OSPS-AC-01.01]
    Enforce multi-factor authentication for the project's version control system, requiring collaborators to provide a second form of authentication when accessing sensitive data or modifying repository settings. Passkeys are acceptable for this control.

    When a user attempts to read or modify a sensitive resource in the project's authoritative repository, the system MUST require the user to complete a multi-factor authentication process. [OSPS-AC-01.01] Multi-factor authentication required when accessing sensitive resources in the repository. The repository owner has GitHub 2FA enabled. Repository-sensitive operations (settings, secrets, deploy keys, rulesets, branch protection) require an authenticated session with the second factor. The project currently has no collaborators with sensitive-resource access beyond the owner.



    When a new collaborator is added, the version control system MUST require manual permission assignment, or restrict the collaborator permissions to the lowest available privileges by default. [OSPS-AC-02.01]
    Most public version control systems are configured in this manner. Ensure the project's version control system always assigns the lowest available permissions to collaborators by default when added, granting additional permissions only when necessary.

    When a new collaborator is added, the version control system MUST require manual permission assignment, or restrict the collaborator permissions to the lowest available privileges by default. [OSPS-AC-02.01] New collaborators receive minimum permissions by default. The repository has no collaborators beyond the owner, GitHub's default behaviour assigns the lowest applicable role to a newly added collaborator, and should a collaborator ever be added the repository ruleset "Main Branch Protection" (id 11709250) constrains writes to the default branch independently of the per-collaborator role.



    When a direct commit is attempted on the project's primary branch, an enforcement mechanism MUST prevent the change from being applied. [OSPS-AC-03.01]
    If the VCS is centralized, set branch protection on the primary branch in the project's VCS. Alternatively, use a decentralized approach, like the Linux kernel's, where changes are first proposed in another repository, and merging changes into the primary repository requires a specific separate act.

    When a direct commit is attempted on the project's primary branch, an enforcement mechanism MUST prevent the change from being applied. [OSPS-AC-03.01] Direct commits to the primary branch are prevented. The repository ruleset "Main Branch Protection" (id 11709250, URL https://github.com/landerox/landerox.github.io/rules/11709250) enforces a pull_request rule on the default branch main with required_approving_review_count = 1, required_status_checks (lint, build) that must pass before merge, non_fast_forward to prevent force pushes, and required_linear_history; the repository owner has admin bypass per the ruleset bypass_actors configuration as a deliberate single-maintainer flow documented in AGENTS.md hard rules.



    When an attempt is made to delete the project's primary branch, the version control system MUST treat this as a sensitive activity and require explicit confirmation of intent. [OSPS-AC-03.02]
    Set branch protection on the primary branch in the project's version control system to prevent deletion.

    When an attempt is made to delete the project's primary branch, the version control system MUST treat this as a sensitive activity and require explicit confirmation of intent. [OSPS-AC-03.02] Primary branch deletion requires explicit confirmation. The repository ruleset "Main Branch Protection" includes the deletion rule type, which blocks deletion of the default branch main entirely; GitHub enforces this for all users, including admins (the bypass_actors setting applies only to push operations, not deletion).



    When a CI/CD pipeline operates on untrusted metadata, those parameters MUST be sanitized and validated prior to use in the pipeline. [OSPS-BR-01.01]
    CI/CD pipelines should sanitize (quote, escape or exit on expected values) all metadata inputs which correspond to untrusted sources. This includes data such as branch names, commit messages, tags, pull request titles, and author information.

    When a CI/CD pipeline operates on untrusted metadata, those parameters MUST be sanitized and validated prior to use in the pipeline. [OSPS-BR-01.01] CI/CD pipeline parameters from untrusted sources must be sanitised. CI workflows accept no parameters from untrusted sources: workflow_dispatch inputs are limited (none defined), pull requests from forks run with the default GitHub fork-PR permission model (read-only token, no secret exposure), and workflow security is continuously audited by zizmor in pre-commit with a strict hash-pin policy and by lint.yml CI on every push plus a daily 08:00 UTC cron.



    When a CI/CD pipeline operates on untrusted code snapshots, it MUST prevent access to privileged CI/CD credentials and assets. [OSPS-BR-01.03]
    CI/CD pipelines should isolate untrusted code snapshots from privileged credentials and assets. In particular, projects should be careful to ensure that workflows which build or execute code prior to review by a collaborator do not have access to CI/CD credentials.

    (Future criterion) When a CI/CD pipeline operates on untrusted code snapshots, it MUST prevent access to privileged CI/CD credentials and assets. [OSPS-BR-01.03] CI/CD prevents untrusted code from accessing privileged credentials. Workflow tokens follow least privilege: top-level permissions: contents: read is declared in lint.yml, deploy.yml, links.yml, quality.yml and uv-upgrade.yml; elevated permissions (pages: write, id-token: write, contents: write, pull-requests: write, security-events: write) are declared per-job rather than workflow-level; the only workflow with contents: write (uv-upgrade.yml) runs only on schedule and workflow_dispatch (maintainer-triggered), never on external PRs; fork PRs receive a read-only GITHUB_TOKEN per GitHub default policy; and zizmor continuously audits these patterns so any regression fails CI.



    When the project lists a URI as an official project channel, that URI MUST be exclusively delivered using encrypted channels. [OSPS-BR-03.01]
    Configure the project's websites and version control systems to use encrypted channels such as SSH or HTTPS for data transmission. Ensure all tools and domains referenced in project documentation can only be accessed via encrypted channels.

    When the project lists a URI as an official project channel, that URI MUST be exclusively delivered using encrypted channels. [OSPS-BR-03.01] Official project channels use encrypted transmission only. All project channels are HTTPS-only: the repository at https://github.com/landerox/landerox.github.io (HTTPS-only), the published site at https://landerox.com (GitHub Pages with HTTPS enforced), devcontainer image pulls from mcr.microsoft.com and ghcr.io over HTTPS, Python package retrieval from PyPI over HTTPS via uv, and tag downloads from GitHub Releases over HTTPS; no HTTP, FTP, or other unencrypted channels are used.



    When the project lists a URI as an official distribution channel, that channel MUST be protected from adversary-in-the-middle attacks using cryptographically authenticated channels. [OSPS-BR-03.02]
    Artifacts distributed by the project should be distributed through channels which ensure integrity and authenticity. Use of HTTPS for downloads, signed releases, or distribution through trusted package managers are all acceptable methods to protect against adversary-in-the-middle attacks.

    When the project lists a URI as an official distribution channel, that channel MUST be protected from adversary-in-the-middle attacks using cryptographically authenticated channels. [OSPS-BR-03.02] Distribution channels protected against man-in-the-middle attacks. Multiple layers of MITM protection are in place: GitHub Action references are SHA-pinned (sha40 + version comment) via pinact and continuously verified by zizmor's hash-pin policy; uv.lock pins each Python dependency by SHA256 hash and uv sync --frozen verifies hashes on every install; container images in.devcontainer/Dockerfile are pinned by SHA256 digest (tag@sha256:…) for both mcr.microsoft.com/devcontainers/python and ghcr.io/astral-sh/uv; and all registry endpoints use TLS with certificate verification by default.



    The project MUST prevent the unintentional storage of unencrypted sensitive data, such as secrets and credentials, in the version control system. [OSPS-BR-07.01]
    Configure .gitignore or equivalent to exclude files that may contain sensitive information. Use pre-commit hooks and automated scanning tools to detect and prevent the inclusion of sensitive data in commits.

    The project MUST prevent the unintentional storage of unencrypted sensitive data, such as secrets and credentials, in the version control system. [OSPS-BR-07.01] Sensitive data prevented from storage in version control. detect-secrets runs in the pre-commit suite with a curated baseline at.config/.secrets.baseline; the pre-commit suite is blocking (bypass via --no-verify is forbidden by AGENTS.md hard rules); the repository contains no API keys, deploy keys, service tokens, or cloud credentials; CI workflows use ephemeral ${{ secrets.GITHUB_TOKEN }} provided by GitHub on each run.



    When the project has made a release, the project documentation MUST include user guides for all basic functionality. [OSPS-DO-01.01]
    Create user guides or documentation for all basic functionality of the project, explaining how to install, configure, and use the project's features. If there are any known dangerous or destructive actions available, include highly-visible warnings.

    When the project has made a release, the project documentation MUST include user guides for all basic functionality. [OSPS-DO-01.01] https://github.com/landerox/landerox.github.io/blob/main/README.md README.md documents installation (devcontainer or host with uv + just), startup (just serve / just serve-es), usage (just build), and security (SECURITY.md cross-link). Deeper internal docs live under docs/ (tooling, decisions, structure, style-guide, runbook). [documentation_basics]



    When the project has made a release, the project documentation MUST include a guide for reporting defects. [OSPS-DO-02.01]
    It is recommended that projects use their VCS default issue tracker. If an external source is used, ensure that the project documentation and contributing guide clearly and visibly explain how to use the reporting system. It is recommended that project documentation also sets expectations for how defects will be triaged and resolved.

    When the project has made a release, the project documentation MUST include a guide for reporting defects. [OSPS-DO-02.01] https://github.com/landerox/landerox.github.io/issues/new/choose Bug reports are submitted through GitHub Issues using the templates under.github/ISSUE_TEMPLATE/ (bug_report.yml and feature_request.yml). The "/issues/new/choose" page lets reporters pick the appropriate template. [report_process]



    While active, the project MUST have one or more mechanisms for public discussions about proposed changes and usage obstacles. [OSPS-GV-02.01]
    Establish one or more mechanisms for public discussions within the project, such as mailing lists, instant messaging, or issue trackers, to facilitate open communication and feedback.

    While active, the project MUST have one or more mechanisms for public discussions about proposed changes and usage obstacles. [OSPS-GV-02.01] GitHub supports public discussions on proposed changes (via pull requests) and usage obstacles (via issues).



    While active, the project documentation MUST include an explanation of the contribution process. [OSPS-GV-03.01]
    Create a CONTRIBUTING.md or CONTRIBUTING/ directory to outline the contribution process including the steps for submitting changes, and engaging with the project maintainers.

    While active, the project documentation MUST include an explanation of the contribution process. [OSPS-GV-03.01] https://github.com/landerox/landerox.github.io/blob/main/.github/CONTRIBUTING.md.github/CONTRIBUTING.md explains the contribution workflow: fork, branch, Conventional Commits (validated by commitizen), pre-commit hooks, and pull-request submission. [contribution]



    While active, the license for the source code MUST meet the OSI Open Source Definition or the FSF Free Software Definition. [OSPS-LE-02.01]
    Add a LICENSE file to the project's repo with a license that is an approved license by the Open Source Initiative (OSI), or a free license as approved by the Free Software Foundation (FSF). Examples of such licenses include the MIT, BSD 2-clause, BSD 3-clause revised, Apache 2.0, Lesser GNU General Public License (LGPL), and the GNU General Public License (GPL). Releasing to the public domain meets this control if there are no other encumbrances such as patents.

    While active, the license for the source code MUST meet the OSI Open Source Definition or the FSF Free Software Definition. [OSPS-LE-02.01] The MIT license for the repository contents is approved by the Open Source Initiative (OSI).



    While active, the license for the released software assets MUST meet the OSI Open Source Definition or the FSF Free Software Definition. [OSPS-LE-02.02]
    If a different license is included with released software assets, ensure it is an approved license by the Open Source Initiative (OSI), or a free license as approved by the Free Software Foundation (FSF). Examples of such licenses include the MIT, BSD 2-clause, BSD 3-clause revised, Apache 2.0, Lesser GNU General Public License (LGPL), and the GNU General Public License (GPL). Note that the license for the released software assets may be different than the source code.

    While active, the license for the released software assets MUST meet the OSI Open Source Definition or the FSF Free Software Definition. [OSPS-LE-02.02] The repository uses a dual-license model: source code (configs, workflows, scripts) is licensed under the MIT License via LICENSE at repo root; site content (Markdown under content/, prose, images) is licensed under Creative Commons Attribution 4.0 International via LICENSE-CONTENT. Both are FLOSS licenses for their respective scopes. Boundary documented in docs/decisions.md (Licensing Boundary). [floss_license]



    While active, the license for the source code MUST be maintained in the corresponding repository's LICENSE file, COPYING file, or LICENSE/ directory. [OSPS-LE-03.01]
    Include the project's source code license in the project's LICENSE file, COPYING file, or LICENSE/ directory to provide visibility and clarity on the licensing terms. The filename MAY have an extension. If the project has multiple repositories, ensure that each repository includes the license file.

    While active, the license for the source code MUST be maintained in the corresponding repository's LICENSE file, COPYING file, or LICENSE/ directory. [OSPS-LE-03.01] License file found in repository.



    While active, the license for the released software assets MUST be included in the released source code, or in a LICENSE file, COPYING file, or LICENSE/ directory alongside the corresponding release assets. [OSPS-LE-03.02]
    Include the project's released software assets license in the released source code, or in a LICENSE file, COPYING file, or LICENSE/ directory alongside the corresponding release assets to provide visibility and clarity on the licensing terms. The filename MAY have an extension. If the project has multiple repositories, ensure that each repository includes the license file.

    While active, the license for the released software assets MUST be included in the released source code, or in a LICENSE file, COPYING file, or LICENSE/ directory alongside the corresponding release assets. [OSPS-LE-03.02] https://github.com/landerox/landerox.github.io/blob/main/LICENSE LICENSE (MIT, source code) is at the repository root in the standard GitHub-recognized location. LICENSE-CONTENT (CC-BY-4.0, site content) is also at the repository root for visibility. [license_location]



    While active, the project's source code repository MUST be publicly readable at a static URL. [OSPS-QA-01.01]
    Use a common VCS such as GitHub, GitLab, or Bitbucket. Ensure the repository is publicly readable. Avoid duplication or mirroring of repositories unless highly visible documentation clarifies the primary source. Avoid frequent changes to the repository that would impact the repository URL. Ensure the repository is public.

    While active, the project's source code repository MUST be publicly readable at a static URL. [OSPS-QA-01.01] Public repository accessible at a static URL. https://github.com/landerox/landerox.github.io is owned by an active GitHub account, has public visibility, requires no authentication to clone or browse, and the URL has been stable since project inception.



    The version control system MUST contain a publicly readable record of all changes made, who made the changes, and when the changes were made. [OSPS-QA-01.02]
    Use a common VCS such as GitHub, GitLab, or Bitbucket to maintain a publicly readable commit history. Avoid squashing or rewriting commits in a way that would obscure the author of any commits.

    The version control system MUST contain a publicly readable record of all changes made, who made the changes, and when the changes were made. [OSPS-QA-01.02] VCS maintains public change history with authorship. Every commit records author name, email, timestamp and a unique SHA, visible at https://github.com/landerox/landerox.github.io/commits/main; Conventional Commits format (validated by commitizen in the commit-msg hook) adds semantic context; CHANGELOG.md provides hand-curated release notes per Keep a Changelog 1.1.0.



    When the package management system supports it, the source code repository MUST contain a dependency list that accounts for the direct language dependencies. [OSPS-QA-02.01]
    This may take the form of a package manager or language dependency file that enumerates all direct dependencies such as package.json, Gemfile, or go.mod.

    When the package management system supports it, the source code repository MUST contain a dependency list that accounts for the direct language dependencies. [OSPS-QA-02.01] Dependency list for direct language dependencies. Direct dependencies are declared explicitly: Python runtime in pyproject.toml under [project] dependencies and [dependency-groups] dev with resolved transitive deps and SHA256 hashes in uv.lock; GitHub Actions in.github/workflows/*.yml where each uses: line references the action by SHA40 + version comment via pinact; devcontainer tools in.devcontainer/Dockerfile as ARGs (UV_VERSION, LYCHEE_VERSION, PINACT_VERSION) with base images pinned by tag + SHA256 digest.



    Projects with multiple repositories MUST document a list of codebases that are part of the project. [OSPS-QA-04.01]
    Document any additional subproject code repositories produced by the project and compiled into a release. This documentation should include the status and intent of the respective codebase.

    Projects with multiple repositories MUST document a list of codebases that are part of the project. [OSPS-QA-04.01] Multi-repository projects document all codebases. N/A — this is a single-repository project, there are no sister or sub repositories, and all project code, configuration, content and documentation live in this single repository.



    While active, the version control system MUST NOT contain generated executable artifacts. [OSPS-QA-05.01]
    Remove generated executable artifacts in the project's version control system. It is recommended that any scenario where a generated executable artifact appears critical to a process such as testing, it should be instead be generated at build time or stored separately and fetched during a specific well-documented pipeline step.

    While active, the version control system MUST NOT contain generated executable artifacts. [OSPS-QA-05.01] Generated executables excluded from version control. The repository contains no compiled executables, no.so/.dll/.exe, no Python.pyc/.pyo, no build artefacts;.gitignore excludes build output (site/), Python caches (.venv/, pycache/, *.py[cod],.pre-commit-cache/), tooling caches (.cache/,.mypy_cache/,.pytest_cache/,.ruff_cache/), IDE/editor files (.idea/,.vscode/, *.swp), OS artefacts (.DS_Store, Thumbs.db), and the devcontainer per-host lockfile (.devcontainer/devcontainer-lock.json).



    While active, the version control system MUST NOT contain unreviewable binary artifacts. [OSPS-QA-05.02]
    Do not add any unreviewable binary artifacts to the project's version control system. This includes executable application binaries, library files, and similar artifacts. It does not include assets such as graphical images, sound or music files, and similar content typically stored in a binary format.

    While active, the version control system MUST NOT contain unreviewable binary artifacts. [OSPS-QA-05.02] Unreviewable binary artifacts excluded. The repository contains no unreviewable binary artefacts; the only binary files present are essential static site assets — all human-inspectable and necessary for site rendering: 4 WOFF2 font files (MesloLGM Nerd Font Propo, Regular and Bold for EN and ES, subsetted from upstream TTF under the SIL OFL license with documented bump procedure in docs/tooling.md), favicon.svg (vector, inspectable), logo.svg (vector), and one profile.webp per locale (human portrait photograph).



    While active, the project documentation MUST contain security contacts. [OSPS-VM-02.01]
    Create a security.md (or similarly-named) file that contains security contacts for the project.

    While active, the project documentation MUST contain security contacts. [OSPS-VM-02.01] https://github.com/landerox/landerox.github.io/blob/main/.github/SECURITY.md.github/SECURITY.md documents the vulnerability reporting workflow: use GitHub Private Vulnerability Reporting (Security tab > Advisories > Report a vulnerability). It also defines a disclosure policy: 48-hour acknowledgement, 7-day fix-ETA estimate, notification on resolution. [vulnerability_report_process]



This data is available under the Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). This means that a Data Recipient may share the Data, with or without modifications, so long as the Data Recipient makes available the text of this agreement with the shared Data. Please credit Fernando Landero and the OpenSSF Best Practices badge contributors.

Project badge entry owned by: Fernando Landero.
Entry created on 2026-05-14 12:43:46 UTC, last updated on 2026-05-27 22:45:22 UTC. Last achieved passing badge on 2026-05-14 14:35:01 UTC.