<div class="paper-faq">
  <div class="paper-faq-hero">
    <div class="paper-faq-eyebrow">Help</div>
    <h1 class="paper-faq-title">Answers to the <em>questions</em> that come up most.</h1>
    <p class="paper-faq-lede">
      If something's missing, write to us &mdash;
      <a href="https://github.com/tdurieux/anonymous_github/issues">open an issue on GitHub</a>.
    </p>
  </div>
  <div class="paper-faq-body">
    <aside class="paper-faq-toc">
      <div class="paper-faq-toc-head">Contents</div>
      <nav>
        <a href="#faq-general">General</a>
        <a href="#faq-features">Features</a>
        <a href="#faq-limitations">Limitations</a>
        <a href="#faq-privacy">Privacy &amp; Security</a>
        <a href="#faq-hosting">Self-Hosting</a>
      </nav>
    </aside>
    <section class="faq-section" aria-label="FAQs">
      <div>

          <!-- General -->
          <h4 class="faq-cat">
            <i class="fas fa-info-circle mr-2"></i>General
          </h4>
          <div
            class="panel-group"
            id="faq-general"
            role="tablist"
            aria-multiselectable="true"
          >
            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingWhatIs">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-general"
                    href="#whatIs"
                    aria-expanded="false"
                    aria-controls="whatIs"
                  >
                    What is Anonymous GitHub?
                  </a>
                </h3>
              </div>
              <div
                id="whatIs"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingWhatIs"
              >
                <div class="panel-body p-3">
                  <p>
                    Anonymous GitHub is a free, open-source tool that anonymizes GitHub repositories and pull requests
                    for double-anonymous (double-blind) peer review. It replaces identifying information &mdash; such as
                    the repository owner, organization name, and custom terms &mdash; so that reviewers cannot determine
                    the identity of the authors through the code repository.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingHowWork">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-general"
                    href="#howWork"
                    aria-expanded="false"
                    aria-controls="howWork"
                  >
                    How does Anonymous GitHub work?
                  </a>
                </h3>
              </div>
              <div
                id="howWork"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingHowWork"
              >
                <div class="panel-body p-3">
                  <p>
                    Anonymous GitHub either downloads the complete repository and anonymizes the content, or proxies
                    requests to GitHub on the fly. In both cases, the original and anonymized versions of files are
                    cached on the server. The system automatically detects and replaces the repository owner,
                    organization name, and repository name. You can also specify additional custom terms to anonymize
                    using one-per-line regex patterns.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingScope">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-general"
                    href="#scope"
                    aria-expanded="false"
                    aria-controls="scope"
                  >
                    What is the scope of anonymization?
                  </a>
                </h3>
              </div>
              <div
                id="scope"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingScope"
              >
                <div class="panel-body p-3">
                  <p>
                    In double-anonymous peer review, the boundary of anonymization is the paper plus its online
                    appendix &mdash; not the entire internet. Searching for any part of the paper or the online appendix
                    can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the
                    repository owner, organization, repository name, file and directory names, and file contents
                    across all text-based file types.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingCost">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-general"
                    href="#cost"
                    aria-expanded="false"
                    aria-controls="cost"
                  >
                    How much does it cost?
                  </a>
                </h3>
              </div>
              <div
                id="cost"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingCost"
              >
                <div class="panel-body p-3">
                  <p>
                    Anonymous GitHub is completely free to use. However, the server costs hundreds of dollars per year
                    to maintain. If you find the service useful, a small donation would be greatly appreciated. You can
                    support the project by
                    <a href="https://github.com/sponsors/tdurieux/" target="_blank">sponsoring on GitHub</a>,
                    donating through <a href="https://ko-fi.com/tdurieux" target="_blank">Ko-fi</a>, or by clicking
                    the "Support me" button on the site.
                  </p>
                </div>
              </div>
            </div>
          </div>

          <!-- Features -->
          <h4 class="faq-cat">
            <i class="fas fa-cogs mr-2"></i>Features
          </h4>
          <div
            class="panel-group"
            id="faq-features"
            role="tablist"
            aria-multiselectable="true"
          >
            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingFormats">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-features"
                    href="#formats"
                    aria-expanded="false"
                    aria-controls="formats"
                  >
                    Which file formats are supported?
                  </a>
                </h3>
              </div>
              <div
                id="formats"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingFormats"
              >
                <div class="panel-body p-3">
                  <p>
                    Anonymous GitHub can display and render a wide variety of file types:
                  </p>
                  <ul>
                    <li><strong>Text and source code</strong> &mdash; displayed with syntax highlighting</li>
                    <li><strong>Markdown</strong> &mdash; rendered as formatted HTML</li>
                    <li><strong>Images</strong> (PNG, JPG, SVG, etc.) &mdash; displayed inline</li>
                    <li><strong>PDFs</strong> &mdash; rendered directly in the browser</li>
                    <li><strong>Jupyter Notebooks</strong> &mdash; rendered with code cells and outputs</li>
                  </ul>
                  <p>
                    Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to
                    determine whether it is textual or binary.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingPR">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-features"
                    href="#pullRequests"
                    aria-expanded="false"
                    aria-controls="pullRequests"
                  >
                    Can I anonymize pull requests?
                  </a>
                </h3>
              </div>
              <div
                id="pullRequests"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingPR"
              >
                <div class="panel-body p-3">
                  <p>
                    Yes. In addition to full repositories, Anonymous GitHub supports anonymizing individual pull
                    requests. Simply paste the URL of a GitHub pull request when creating a new anonymized repository,
                    and the system will automatically detect that it is a pull request and anonymize it accordingly.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingConference">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-features"
                    href="#conference"
                    aria-expanded="false"
                    aria-controls="conference"
                  >
                    What is the Conference ID feature?
                  </a>
                </h3>
              </div>
              <div
                id="conference"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingConference"
              >
                <div class="panel-body p-3">
                  <p>
                    When creating an anonymized repository, you can associate it with a Conference ID. This allows
                    conferences to define default anonymization settings (such as expiration dates) that are
                    automatically applied to repositories submitted under that conference. If your conference
                    provides a Conference ID, enter it during the anonymization setup.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingExpiration">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-features"
                    href="#expiration"
                    aria-expanded="false"
                    aria-controls="expiration"
                  >
                    What happens when an anonymized repository expires?
                  </a>
                </h3>
              </div>
              <div
                id="expiration"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingExpiration"
              >
                <div class="panel-body p-3">
                  <p>
                    You can configure one of three expiration strategies when creating your anonymized repository:
                  </p>
                  <ul>
                    <li><strong>Never expire</strong> &mdash; the anonymized repository remains accessible indefinitely.</li>
                    <li><strong>Redirect to GitHub</strong> &mdash; after expiration, visitors are redirected to the original GitHub repository.</li>
                    <li><strong>Remove content</strong> &mdash; after expiration, the anonymized content is deleted from the server.</li>
                  </ul>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingDownload">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-features"
                    href="#download"
                    aria-expanded="false"
                    aria-controls="download"
                  >
                    Can I download an anonymized repository?
                  </a>
                </h3>
              </div>
              <div
                id="download"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingDownload"
              >
                <div class="panel-body p-3">
                  <p>
                    Yes. Anonymized repositories can be downloaded as a ZIP file. This is useful if reviewers
                    want to build or test the code locally. The downloaded archive contains the fully anonymized
                    version of the repository.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingUpdates">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-features"
                    href="#updates"
                    aria-expanded="false"
                    aria-controls="updates"
                  >
                    Are updates to the original repository reflected in the anonymized version?
                  </a>
                </h3>
              </div>
              <div
                id="updates"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingUpdates"
              >
                <div class="panel-body p-3">
                  <p>
                    Yes. The anonymized repository tracks the source on GitHub: when you push new commits to the
                    original repository, the anonymized view picks up those changes (cached files are refreshed
                    against GitHub). This means you can keep iterating on the code while reviewers have the link,
                    and you do not need to recreate the anonymized repository every time you update the source.
                  </p>
                  <p>
                    A few practical implications worth keeping in mind:
                  </p>
                  <ul>
                    <li>
                      You can safely create the anonymized repository early in the writing process &mdash; later
                      commits will be visible to reviewers without any additional action.
                    </li>
                    <li>
                      If you rename files, add new identifiers, or introduce new contributor names after creation,
                      revisit the anonymization options (custom terms, file filters) to make sure the new content
                      is still properly anonymized.
                    </li>
                    <li>
                      If the original repository is made private or deleted, the anonymized repository will no
                      longer be able to fetch updated content.
                    </li>
                  </ul>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingCLI">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-features"
                    href="#cli"
                    aria-expanded="false"
                    aria-controls="cli"
                  >
                    Is there a command-line tool?
                  </a>
                </h3>
              </div>
              <div
                id="cli"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingCLI"
              >
                <div class="panel-body p-3">
                  <p>
                    Yes. Anonymous GitHub provides a CLI tool that lets you anonymize repositories locally,
                    generating an anonymized ZIP file on your machine. Install it via npm:
                  </p>
                  <pre style="background-color: var(--hover-bg-color); padding: 12px; border-radius: 4px; margin-top: 8px; color: var(--color);"><code>npm install -g @tdurieux/anonymous_github
anonymous_github</code></pre>
                </div>
              </div>
            </div>
          </div>

          <!-- Limitations -->
          <h4 class="faq-cat">
            <i class="fas fa-exclamation-triangle mr-2"></i>Limitations
          </h4>
          <div
            class="panel-group"
            id="faq-limitations"
            role="tablist"
            aria-multiselectable="true"
          >
            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingLimitation">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-limitations"
                    href="#limitation"
                    aria-expanded="false"
                    aria-controls="limitation"
                  >
                    What are the limitations of Anonymous GitHub?
                  </a>
                </h3>
              </div>
              <div
                id="limitation"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingLimitation"
              >
                <div class="panel-body p-3">
                  <ul>
                    <li>
                      Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables,
                      archives, etc.) are served as-is without anonymization.
                    </li>
                    <li>
                      Files larger than 8 MB are not supported.
                    </li>
                    <li>
                      Static site generators (such as Jekyll) used with GitHub Pages are not fully supported,
                      although Markdown files are converted to HTML.
                    </li>
                    <li>
                      The anonymization of terms within source code may change the behavior of the program
                      (e.g., if a replaced term appears in a string literal or identifier).
                    </li>
                  </ul>
                </div>
              </div>
            </div>
          </div>

          <!-- Privacy & Security -->
          <h4 class="faq-cat">
            <i class="fas fa-shield-alt mr-2"></i>Privacy &amp; Security
          </h4>
          <div
            class="panel-group"
            id="faq-privacy"
            role="tablist"
            aria-multiselectable="true"
          >
            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingData">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-privacy"
                    href="#data"
                    aria-expanded="false"
                    aria-controls="data"
                  >
                    How is my data handled?
                  </a>
                </h3>
              </div>
              <div
                id="data"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingData"
              >
                <div class="panel-body p-3">
                  <p>
                    Data stored on Anonymous GitHub is never shared or used for any purpose beyond providing the
                    anonymization service. When a repository is removed or expires, only its configuration is
                    retained &mdash; this makes it easy to restore the repository if needed and ensures that no
                    future repository reuses the same ID.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingPermissions">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-privacy"
                    href="#permissions"
                    aria-expanded="false"
                    aria-controls="permissions"
                  >
                    Why does GitHub say Anonymous GitHub asks for write access?
                  </a>
                </h3>
              </div>
              <div
                id="permissions"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingPermissions"
              >
                <div class="panel-body p-3">
                  <p>
                    Anonymous GitHub only reads your repositories &mdash; it
                    never pushes commits, opens issues, modifies settings, or
                    deletes anything. From your perspective as a user, the
                    service is read-only.
                  </p>
                  <p>
                    However, GitHub's OAuth scopes do not offer a read-only
                    option for private repositories: the only scope that grants
                    access to private repos is <code>repo</code>, which is
                    documented as full read/write access. To support users who
                    want to anonymize a private repository, Anonymous GitHub
                    must request that scope, and GitHub then displays the
                    broader permission text at sign-in. The application itself
                    only ever performs read operations against the GitHub API.
                  </p>
                  <p>
                    If you only anonymize public repositories, the source code
                    is open and can be audited on the
                    <a href="https://github.com/tdurieux/anonymous_github/" target="_blank">GitHub repository</a>,
                    or you can self-host your own instance.
                  </p>
                </div>
              </div>
            </div>

            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingViewer">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-privacy"
                    href="#viewer"
                    aria-expanded="false"
                    aria-controls="viewer"
                  >
                    Can repository owners see who viewed their anonymized repository?
                  </a>
                </h3>
              </div>
              <div
                id="viewer"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingViewer"
              >
                <div class="panel-body p-3">
                  <p>
                    No. Only the total number of views is tracked as an incremental counter. It is not possible
                    for the repository owner or for Anonymous GitHub to identify individual viewers.
                    Reviewer anonymity is fully preserved.
                  </p>
                </div>
              </div>
            </div>
          </div>

          <!-- Self-Hosting -->
          <h4 class="faq-cat">
            <i class="fas fa-server mr-2"></i>Self-Hosting
          </h4>
          <div
            class="panel-group"
            id="faq-hosting"
            role="tablist"
            aria-multiselectable="true"
          >
            <div class="panel panel-default mb-3">
              <div class="panel-heading p-3" role="tab" id="headingDeploy">
                <h3 class="panel-title">
                  <a
                    class="collapsed"
                    role="button"
                    data-toggle="collapse"
                    data-parent="#faq-hosting"
                    href="#deploy"
                    aria-expanded="false"
                    aria-controls="deploy"
                  >
                    Can I deploy my own instance?
                  </a>
                </h3>
              </div>
              <div
                id="deploy"
                class="panel-collapse collapse"
                role="tabpanel"
                aria-labelledby="headingDeploy"
              >
                <div class="panel-body p-3">
                  <p>
                    Yes. Anonymous GitHub is fully open source (GPL-3.0) and supports Docker-based deployment.
                    You will need to configure a GitHub OAuth app and provide a GitHub token. Detailed setup
                    instructions are available on the
                    <a href="https://github.com/tdurieux/anonymous_github/" target="_blank">GitHub repository</a>.
                  </p>
                  <p>
                    The basic steps are:
                  </p>
                  <ol>
                    <li>Clone the repository and install dependencies</li>
                    <li>Create a <code>.env</code> file with your GitHub token, OAuth client ID, and client secret</li>
                    <li>Run <code>docker-compose up -d</code></li>
                  </ol>
                </div>
              </div>
            </div>
          </div>

          <div class="text-center mt-5 mb-5 p-4" style="background-color: var(--hover-bg-color); border-radius: 8px;">
            <p class="mb-2" style="font-size: 1.1rem;">
              Still have questions?
            </p>
            <p class="text-muted mb-0">
              Open an issue on the
              <a href="https://github.com/tdurieux/anonymous_github/issues" target="_blank">GitHub repository</a>
              and we'll be happy to help.
            </p>
          </div>

        </div>
      </section>
    </div>
  </div>
</div>
