diff options
| author | Paul Buetow <paul@buetow.org> | 2025-09-28 23:24:52 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-09-28 23:24:52 +0300 |
| commit | c65b7478ae3b4e300a312aaa3075a97361382aae (patch) | |
| tree | 31d5ac42bcc72d8d373e4f475e517e2c86c9e90b /about | |
| parent | beadaec74c3b546e283b5df45183f7dc0b81916d (diff) | |
Update
Diffstat (limited to 'about')
| -rw-r--r-- | about/showcase.gmi.tpl | 373 | ||||
| -rw-r--r-- | about/showcase/debroid/image-1.png | 95 |
2 files changed, 236 insertions, 232 deletions
diff --git a/about/showcase.gmi.tpl b/about/showcase.gmi.tpl index ab974883..d4eb3d51 100644 --- a/about/showcase.gmi.tpl +++ b/about/showcase.gmi.tpl @@ -1,6 +1,6 @@ # Project Showcase -Generated on: 2025-09-18 +Generated on: 2025-09-28 This page showcases my side projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing. The projects are ordered by recent activity, with the most actively maintained projects listed first. @@ -9,28 +9,28 @@ This page showcases my side projects, providing an overview of what each project ## Overall Statistics * π¦ Total Projects: 55 -* π Total Commits: 11,075 -* π Total Lines of Code: 294,461 -* π Total Lines of Documentation: 240,909 -* π» Languages: Go (28.5%), Java (18.6%), HTML (15.0%), C (6.4%), C++ (6.0%), Perl (5.6%), XML (4.8%), Shell (4.6%), C/C++ (4.2%), Config (1.2%), Ruby (1.0%), HCL (0.9%), YAML (0.6%), Python (0.6%), Make (0.5%), CSS (0.5%), Raku (0.3%), JSON (0.3%), Haskell (0.2%), TOML (0.1%) -* π Documentation: Text (92.8%), Markdown (5.8%), LaTeX (1.4%) +* π Total Commits: 11,126 +* π Total Lines of Code: 285,161 +* π Total Lines of Documentation: 26,755 +* π» Languages: Go (28.2%), Java (19.2%), C++ (13.0%), Shell (7.4%), C/C++ (7.2%), C (7.1%), Perl (6.2%), HTML (4.4%), Config (1.6%), Ruby (1.0%), HCL (1.0%), Make (0.7%), YAML (0.6%), Python (0.6%), CSS (0.5%), Raku (0.3%), JSON (0.3%), XML (0.2%), Haskell (0.2%), TOML (0.1%) +* π Documentation: Text (44.9%), Markdown (42.6%), LaTeX (12.5%) * π΅ Vibe-Coded Projects: 4 out of 55 (7.3%) -* π€ AI-Assisted Projects (including vibe-coded): 10 out of 55 (18.2% AI-assisted, 81.8% human-only) +* π€ AI-Assisted Projects (including vibe-coded): 9 out of 55 (16.4% AI-assisted, 83.6% human-only) * π Release Status: 35 released, 20 experimental (63.6% with releases, 36.4% experimental) ## Projects ### hexai -* π» Languages: Go (66.1%), HTML (33.9%) +* π» Languages: Go (68.1%), HTML (31.9%) * π Documentation: Markdown (100.0%) -* π Commits: 208 -* π Lines of Code: 22125 -* π Lines of Documentation: 546 -* π
Development Period: 2025-08-01 to 2025-09-17 -* π₯ Recent Activity: 7.8 days (avg. age of last 42 commits) +* π Commits: 229 +* π Lines of Code: 25355 +* π Lines of Documentation: 629 +* π
Development Period: 2025-08-01 to 2025-09-27 +* π₯ Recent Activity: 9.8 days (avg. age of last 42 commits) * βοΈ License: No license found -* π·οΈ Latest Release: v0.11.3 (2025-09-17) +* π·οΈ Latest Release: v0.12.1 (2025-09-26) * π€ AI-Assisted: This project was partially created with the help of generative AI @@ -47,13 +47,13 @@ The project is implemented primarily in Go and uses Mage as its build and task a ### conf -* π» Languages: Perl (31.3%), Shell (23.2%), YAML (23.0%), Config (5.6%), CSS (5.4%), TOML (4.8%), Ruby (4.2%), Lua (1.2%), Docker (0.6%), JSON (0.5%) -* π Documentation: Text (69.9%), Markdown (30.1%) -* π Commits: 995 -* π Lines of Code: 6017 -* π Lines of Documentation: 1188 -* π
Development Period: 2021-12-28 to 2025-09-17 -* π₯ Recent Activity: 12.9 days (avg. age of last 42 commits) +* π» Languages: Perl (31.6%), Shell (23.1%), YAML (22.9%), Config (5.6%), CSS (5.4%), TOML (4.8%), Ruby (4.2%), Lua (1.2%), Docker (0.6%), JSON (0.5%) +* π Documentation: Text (73.7%), Markdown (26.3%) +* π Commits: 998 +* π Lines of Code: 6043 +* π Lines of Documentation: 1356 +* π
Development Period: 2021-12-28 to 2025-09-27 +* π₯ Recent Activity: 20.3 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -66,26 +66,25 @@ conf --- -### foo.zone +### foostats -* π» Languages: HTML (70.5%), XML (28.8%), Shell (0.3%), CSS (0.2%), Go (0.1%) -* π Documentation: Text (75.5%), Markdown (24.5%) -* π Commits: 3072 -* π Lines of Code: 46613 -* π Lines of Documentation: 298 -* π
Development Period: 2021-04-29 to 2025-09-13 -* π₯ Recent Activity: 42.0 days (avg. age of last 42 commits) -* βοΈ License: No license found -* π§ͺ Status: Experimental (no releases yet) -* π€ AI-Assisted: This project was partially created with the help of generative AI +* π» Languages: Perl (100.0%) +* π Documentation: Markdown (54.4%), Text (45.6%) +* π Commits: 95 +* π Lines of Code: 1859 +* π Lines of Documentation: 421 +* π
Development Period: 2023-01-02 to 2025-09-26 +* π₯ Recent Activity: 48.6 days (avg. age of last 42 commits) +* βοΈ License: Custom License +* π·οΈ Latest Release: v0.1.0 (2025-07-12) -This project hosts the static files for the foo.zone website, which is accessible via both the Gemini protocol (gemini://foo.zone) and the web (https://foo.zone). The repository is organized with separate branches for each content formatβsuch as Gemtext, HTML, and Markdownβallowing the site to be served in multiple formats tailored to different protocols and user preferences. This structure makes it easy to maintain and update content across platforms, ensuring consistency and flexibility. +**foostats** is a privacy-focused web analytics tool designed specifically for OpenBSD environments, with support for both traditional web (HTTP/HTTPS) and Gemini protocol logs. Its primary function is to generate anonymous, comprehensive site statistics for the foo.zone ecosystem and similar sites, while strictly preserving visitor privacy. This is achieved by hashing all IP addresses with SHA3-512 before storage, ensuring no personally identifiable information is retained. The tool provides detailed daily, monthly, and summary reports in Gemtext format, tracks feed subscribers, and includes robust filtering to block and log suspicious requests based on configurable patterns. -The site is maintained using a suite of open-source tools, including Neovim for editing, GNU Bash for scripting, and ShellCheck for shell script linting. It is deployed on OpenBSD, utilizing the vger Gemini server (managed via relayd and inetd) for Gemini content and the native httpd server for the HTML site. Source code and hosting are managed through Codeberg. The static content is generated with the help of the gemtexter tool, which streamlines the process of converting and managing content in various formats. This architecture emphasizes simplicity, security, and portability, making it a robust solution for multi-protocol static site hosting. +Architecturally, foostats is modular, with components for log parsing, filtering, aggregation, replication, and reporting. It processes logs from OpenBSD httpd and Gemini servers (vger/relayd), aggregates statistics, and outputs compressed JSON files and human-readable reports. Its distributed design allows replication and merging of stats across multiple nodes, supporting comprehensive analytics for federated sites. Key features include multi-protocol and IPv4/IPv6 support, privacy-first data handling, and flexible configuration for filtering and reporting, making it a secure and privacy-respecting alternative to conventional analytics platforms. -=> https://codeberg.org/snonux/foo.zone View on Codeberg -=> https://github.com/snonux/foo.zone View on GitHub +=> https://codeberg.org/snonux/foostats View on Codeberg +=> https://github.com/snonux/foostats View on GitHub --- @@ -97,7 +96,7 @@ The site is maintained using a suite of open-source tools, including Neovim for * π Lines of Code: 10036 * π Lines of Documentation: 2433 * π
Development Period: 2025-06-23 to 2025-09-08 -* π₯ Recent Activity: 55.5 days (avg. age of last 42 commits) +* π₯ Recent Activity: 65.5 days (avg. age of last 42 commits) * βοΈ License: BSD-2-Clause * π·οΈ Latest Release: v0.9.2 (2025-09-08) * π΅ Vibe-Coded: This project has been vibe coded @@ -120,7 +119,7 @@ The tool is implemented as a modern CLI application in Go, with a modular, comma * π Lines of Code: 12003 * π Lines of Documentation: 361 * π
Development Period: 2025-07-14 to 2025-08-02 -* π₯ Recent Activity: 58.3 days (avg. age of last 42 commits) +* π₯ Recent Activity: 68.3 days (avg. age of last 42 commits) * βοΈ License: MIT * π·οΈ Latest Release: v0.7.5 (2025-08-02) * π΅ Vibe-Coded: This project has been vibe coded @@ -141,33 +140,6 @@ Architecturally, totalrecall is implemented in Go and integrates with OpenAI ser --- -### dtail - -* π» Languages: Go (91.0%), Shell (4.1%), JSON (2.1%), C (1.4%), Make (0.9%), C/C++ (0.2%), Config (0.1%) -* π Documentation: Text (98.3%), Markdown (1.7%) -* π Commits: 1046 -* π Lines of Code: 27726 -* π Lines of Documentation: 220214 -* π
Development Period: 2020-01-09 to 2025-07-04 -* π₯ Recent Activity: 78.1 days (avg. age of last 42 commits) -* βοΈ License: Apache-2.0 -* π·οΈ Latest Release: v4.3.3 (2024-08-23) -* π€ AI-Assisted: This project was partially created with the help of generative AI - - -=> showcase/dtail/image-1.png dtail screenshot - -DTail is an open-source distributed log management tool designed for DevOps engineers to efficiently tail, cat, and grep log files across thousands of servers simultaneously. Written in Go, it supports advanced features such as on-the-fly decompression (gzip, zstd) and distributed MapReduce-style aggregations, making it highly useful for large-scale log analysis and troubleshooting in complex environments. By leveraging SSH for secure communication and adhering to UNIX file permission models, DTail ensures both security and compatibility with existing infrastructure. - -=> showcase/dtail/image-2.gif dtail screenshot - -The architecture consists of a client-server model: DTail servers run on each target machine, while a DTail clientβtypically on an engineerβs workstationβconnects to all servers concurrently to aggregate and process logs in real time. This design enables scalable, parallel log operations and can be extended to a serverless mode for added flexibility. DTailβs implementation emphasizes performance, security, and ease of use, making it a valuable tool for organizations needing to monitor and analyze distributed logs efficiently. - -=> https://codeberg.org/snonux/dtail View on Codeberg -=> https://github.com/snonux/dtail View on GitHub - ---- - ### timr * π» Languages: Go (98.3%), YAML (1.7%) @@ -176,7 +148,7 @@ The architecture consists of a client-server model: DTail servers run on each ta * π Lines of Code: 873 * π Lines of Documentation: 137 * π
Development Period: 2025-06-25 to 2025-07-19 -* π₯ Recent Activity: 82.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 92.3 days (avg. age of last 42 commits) * βοΈ License: BSD-2-Clause * π·οΈ Latest Release: v0.0.0 (2025-06-29) * π΅ Vibe-Coded: This project has been vibe coded @@ -201,7 +173,7 @@ From an architectural standpoint, `timr` is implemented in Go, ensuring cross-pl * π Lines of Code: 6160 * π Lines of Documentation: 162 * π
Development Period: 2025-06-19 to 2025-07-12 -* π₯ Recent Activity: 84.0 days (avg. age of last 42 commits) +* π₯ Recent Activity: 94.0 days (avg. age of last 42 commits) * βοΈ License: BSD-2-Clause * π·οΈ Latest Release: v0.9.2 (2025-07-02) * π΅ Vibe-Coded: This project has been vibe coded @@ -223,12 +195,12 @@ The core architecture leverages the Bubble Tea framework for rendering the termi ### ior * π» Languages: Go (50.2%), C (43.4%), Raku (4.4%), Make (1.1%), C/C++ (0.9%) -* π Documentation: Text (63.6%), Markdown (36.4%) -* π Commits: 331 +* π Documentation: Text (69.0%), Markdown (31.0%) +* π Commits: 332 * π Lines of Code: 12762 -* π Lines of Documentation: 742 -* π
Development Period: 2024-01-18 to 2025-07-14 -* π₯ Recent Activity: 122.0 days (avg. age of last 42 commits) +* π Lines of Documentation: 684 +* π
Development Period: 2024-01-18 to 2025-09-21 +* π₯ Recent Activity: 128.1 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) * π€ AI-Assisted: This project was partially created with the help of generative AI @@ -247,25 +219,56 @@ The project is implemented using a combination of Go, C, and BPF, leveraging the --- -### foostats +### gos -* π» Languages: Perl (100.0%) -* π Documentation: Markdown (90.0%), Text (10.0%) -* π Commits: 80 -* π Lines of Code: 1887 -* π Lines of Documentation: 240 -* π
Development Period: 2023-01-02 to 2025-09-03 -* π₯ Recent Activity: 128.2 days (avg. age of last 42 commits) +* π» Languages: Go (99.8%), JSON (0.2%) +* π Documentation: Markdown (100.0%) +* π Commits: 394 +* π Lines of Code: 4102 +* π Lines of Documentation: 357 +* π
Development Period: 2024-05-04 to 2025-09-24 +* π₯ Recent Activity: 130.0 days (avg. age of last 42 commits) * βοΈ License: Custom License -* π·οΈ Latest Release: v0.1.0 (2025-07-12) +* π·οΈ Latest Release: v1.2.0 (2025-09-24) -**foostats** is a privacy-focused web analytics tool designed specifically for OpenBSD environments, with support for both traditional web (HTTP/HTTPS) and Gemini protocol logs. Its primary function is to generate anonymous, comprehensive site statistics for the foo.zone ecosystem and similar sites, while strictly preserving visitor privacy. This is achieved by hashing all IP addresses with SHA3-512 before storage, ensuring no personally identifiable information is retained. The tool provides detailed daily, monthly, and summary reports in Gemtext format, tracks feed subscribers, and includes robust filtering to block and log suspicious requests based on configurable patterns. +=> showcase/gos/image-1.png gos screenshot -Architecturally, foostats is modular, with components for log parsing, filtering, aggregation, replication, and reporting. It processes logs from OpenBSD httpd and Gemini servers (vger/relayd), aggregates statistics, and outputs compressed JSON files and human-readable reports. Its distributed design allows replication and merging of stats across multiple nodes, supporting comprehensive analytics for federated sites. Key features include multi-protocol and IPv4/IPv6 support, privacy-first data handling, and flexible configuration for filtering and reporting, making it a secure and privacy-respecting alternative to conventional analytics platforms. +**Gos (Go Social Media)** is a command-line tool written in Go that serves as a self-hosted, scriptable alternative to Buffer.com for scheduling and managing social media posts. Designed for users who prefer automation, privacy, and control, Gos enables posting to Mastodon and LinkedIn (with OAuth2 authentication for LinkedIn) directly from the terminal. It supports features like dry-run mode for safe testing, flexible configuration via flags and environment variables, image previews for LinkedIn, and a pseudo-platform ("Noop") for tracking posts without publishing. Gos is particularly useful for developers, power users, or anyone who wants to automate their social media workflow, avoid third-party service limitations, and integrate posting into their own scripts or shell startup routines. -=> https://codeberg.org/snonux/foostats View on Codeberg -=> https://github.com/snonux/foostats View on GitHub +=> showcase/gos/image-2.png gos screenshot + +**Architecturally**, Gos operates on a file-based queueing system: users compose posts as text files (optionally using the companion `gosc` composer tool) in a designated directory. Posts are tagged via filenames or inline tags to control target platforms, priorities, and behaviors (e.g., immediate posting, pausing, or requiring confirmation). When Gos runs, it processes these files, moves them through platform-specific queues, and posts them according to user-defined cadence, priorities, and pause intervals. The configuration is managed via a JSON file storing API credentials and scheduling preferences. Gos also supports generating Gemini Gemtext summaries of posted content for blogging or archival purposes. The system is highly scriptable, easy to integrate into automated workflows, and can be synced or backed up using tools like Syncthing, making it a robust, extensible solution for personal or small-team social media management. + +=> https://codeberg.org/snonux/gos View on Codeberg +=> https://github.com/snonux/gos View on GitHub + +--- + +### dtail + +* π» Languages: Go (93.9%), JSON (2.8%), C (2.0%), Make (0.5%), C/C++ (0.3%), Config (0.2%), Shell (0.2%), Docker (0.1%) +* π Documentation: Text (79.4%), Markdown (20.6%) +* π Commits: 1046 +* π Lines of Code: 20091 +* π Lines of Documentation: 5674 +* π
Development Period: 2020-01-09 to 2025-06-20 +* π₯ Recent Activity: 133.6 days (avg. age of last 42 commits) +* βοΈ License: Apache-2.0 +* π·οΈ Latest Release: v4.3.3 (2024-08-23) +* π€ AI-Assisted: This project was partially created with the help of generative AI + + +=> showcase/dtail/image-1.png dtail screenshot + +DTail is an open-source distributed log management tool designed for DevOps engineers to efficiently tail, cat, and grep log files across thousands of servers simultaneously. Written in Go, it supports advanced features such as on-the-fly decompression (gzip, zstd) and distributed MapReduce-style aggregations, making it highly useful for large-scale log analysis and troubleshooting in complex environments. By leveraging SSH for secure communication and adhering to UNIX file permission models, DTail ensures both security and compatibility with existing infrastructure. + +=> showcase/dtail/image-2.gif dtail screenshot + +The architecture consists of a client-server model: DTail servers run on each target machine, while a DTail clientβtypically on an engineerβs workstationβconnects to all servers concurrently to aggregate and process logs in real time. This design enables scalable, parallel log operations and can be extended to a serverless mode for added flexibility. DTailβs implementation emphasizes performance, security, and ease of use, making it a valuable tool for organizations needing to monitor and analyze distributed logs efficiently. + +=> https://codeberg.org/snonux/dtail View on Codeberg +=> https://github.com/snonux/dtail View on GitHub --- @@ -277,7 +280,7 @@ Architecturally, foostats is modular, with components for log parsing, filtering * π Lines of Code: 396 * π Lines of Documentation: 24 * π
Development Period: 2025-04-18 to 2025-05-11 -* π₯ Recent Activity: 142.9 days (avg. age of last 42 commits) +* π₯ Recent Activity: 152.9 days (avg. age of last 42 commits) * βοΈ License: Custom License * π·οΈ Latest Release: v1.0.0 (2025-05-11) @@ -291,32 +294,6 @@ The project is implemented using Ruby, with tasks managed via Rake, and configur --- -### gos - -* π» Languages: Go (98.6%), YAML (1.1%), JSON (0.3%) -* π Documentation: Markdown (100.0%) -* π Commits: 389 -* π Lines of Code: 3996 -* π Lines of Documentation: 352 -* π
Development Period: 2024-05-04 to 2025-09-16 -* π₯ Recent Activity: 146.8 days (avg. age of last 42 commits) -* βοΈ License: Custom License -* π·οΈ Latest Release: v1.1.0 (2025-09-16) - - -=> showcase/gos/image-1.png gos screenshot - -**Gos (Go Social Media)** is a command-line tool written in Go that serves as a self-hosted, scriptable alternative to Buffer.com for scheduling and managing social media posts. Designed for users who prefer automation, privacy, and control, Gos enables posting to Mastodon and LinkedIn (with OAuth2 authentication for LinkedIn) directly from the terminal. It supports features like dry-run mode for safe testing, flexible configuration via flags and environment variables, image previews for LinkedIn, and a pseudo-platform ("Noop") for tracking posts without publishing. Gos is particularly useful for developers, power users, or anyone who wants to automate their social media workflow, avoid third-party service limitations, and integrate posting into their own scripts or shell startup routines. - -=> showcase/gos/image-2.png gos screenshot - -**Architecturally**, Gos operates on a file-based queueing system: users compose posts as text files (optionally using the companion `gosc` composer tool) in a designated directory. Posts are tagged via filenames or inline tags to control target platforms, priorities, and behaviors (e.g., immediate posting, pausing, or requiring confirmation). When Gos runs, it processes these files, moves them through platform-specific queues, and posts them according to user-defined cadence, priorities, and pause intervals. The configuration is managed via a JSON file storing API credentials and scheduling preferences. Gos also supports generating Gemini Gemtext summaries of posted content for blogging or archival purposes. The system is highly scriptable, easy to integrate into automated workflows, and can be synced or backed up using tools like Syncthing, making it a robust, extensible solution for personal or small-team social media management. - -=> https://codeberg.org/snonux/gos View on Codeberg -=> https://github.com/snonux/gos View on GitHub - ---- - ### ds-sim * π» Languages: Java (98.9%), Shell (0.6%), CSS (0.5%) @@ -325,7 +302,7 @@ The project is implemented using Ruby, with tasks managed via Rake, and configur * π Lines of Code: 25762 * π Lines of Documentation: 3101 * π
Development Period: 2008-05-15 to 2025-06-27 -* π₯ Recent Activity: 156.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 166.2 days (avg. age of last 42 commits) * βοΈ License: Custom License * π§ͺ Status: Experimental (no releases yet) * π€ AI-Assisted: This project was partially created with the help of generative AI @@ -350,7 +327,7 @@ Architecturally, DS-Sim is organized into modular components: core process and m * π Lines of Code: 33 * π Lines of Documentation: 3 * π
Development Period: 2025-04-03 to 2025-04-03 -* π₯ Recent Activity: 168.8 days (avg. age of last 42 commits) +* π₯ Recent Activity: 178.8 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -372,7 +349,7 @@ Implementation-wise, the project likely consists of a small, easily portable pro * π Lines of Code: 1373 * π Lines of Documentation: 48 * π
Development Period: 2024-12-05 to 2025-02-28 -* π₯ Recent Activity: 209.5 days (avg. age of last 42 commits) +* π₯ Recent Activity: 219.5 days (avg. age of last 42 commits) * βοΈ License: Custom License * π§ͺ Status: Experimental (no releases yet) @@ -394,7 +371,7 @@ Key features include a test suite (run via `rake test`) to ensure reliability, a * π Lines of Code: 2285 * π Lines of Documentation: 1180 * π
Development Period: 2021-05-21 to 2025-08-31 -* π₯ Recent Activity: 254.9 days (avg. age of last 42 commits) +* π₯ Recent Activity: 264.9 days (avg. age of last 42 commits) * βοΈ License: GPL-3.0 * π·οΈ Latest Release: 3.0.0 (2024-10-01) @@ -418,7 +395,7 @@ The project is implemented as a large Bash script, leveraging standard GNU utili * π Lines of Code: 1133 * π Lines of Documentation: 78 * π
Development Period: 2024-01-20 to 2025-09-13 -* π₯ Recent Activity: 475.4 days (avg. age of last 42 commits) +* π₯ Recent Activity: 485.4 days (avg. age of last 42 commits) * βοΈ License: MIT * π·οΈ Latest Release: v0.0.4 (2025-09-13) @@ -444,7 +421,7 @@ The projectβs key features include its minimalistic design, cross-platform com * π Lines of Code: 40 * π Lines of Documentation: 3 * π
Development Period: 2023-12-31 to 2025-08-11 -* π₯ Recent Activity: 509.1 days (avg. age of last 42 commits) +* π₯ Recent Activity: 519.1 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -466,7 +443,7 @@ The Docker image is typically implemented using a `Dockerfile` that installs Rad * π Lines of Code: 2851 * π Lines of Documentation: 52 * π
Development Period: 2023-08-27 to 2025-08-08 -* π₯ Recent Activity: 545.3 days (avg. age of last 42 commits) +* π₯ Recent Activity: 555.3 days (avg. age of last 42 commits) * βοΈ License: MIT * π§ͺ Status: Experimental (no releases yet) @@ -488,7 +465,7 @@ Key features include the ability to specify which ECS services to deploy, automa * π Lines of Code: 1096 * π Lines of Documentation: 287 * π
Development Period: 2023-04-17 to 2025-06-12 -* π₯ Recent Activity: 586.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 596.2 days (avg. age of last 42 commits) * βοΈ License: Custom License * π·οΈ Latest Release: v1.1.0 (2024-05-03) * π€ AI-Assisted: This project was partially created with the help of generative AI @@ -513,7 +490,7 @@ Architecturally, Gogios is implemented in Go for efficiency and ease of deployme * π Lines of Code: 1525 * π Lines of Documentation: 15 * π
Development Period: 2023-04-17 to 2023-11-19 -* π₯ Recent Activity: 772.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 782.2 days (avg. age of last 42 commits) * βοΈ License: Custom License * π§ͺ Status: Experimental (no releases yet) @@ -536,7 +513,7 @@ The project is still under development, but its planned features include remote * π Lines of Code: 312 * π Lines of Documentation: 416 * π
Development Period: 2013-03-22 to 2025-05-18 -* π₯ Recent Activity: 822.3 days (avg. age of last 42 commits) +* π₯ Recent Activity: 832.3 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: v1.0.0 (2023-04-29) @@ -558,7 +535,7 @@ The architecture of `guprecords` is modular, with classes dedicated to parsing e * π Lines of Code: 51 * π Lines of Documentation: 26 * π
Development Period: 2022-06-02 to 2024-04-20 -* π₯ Recent Activity: 837.0 days (avg. age of last 42 commits) +* π₯ Recent Activity: 847.0 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -581,7 +558,7 @@ The implementation relies on standard Linux utilities: `qpdf` for manipulating P * π Lines of Code: 41 * π Lines of Documentation: 17 * π
Development Period: 2020-01-30 to 2025-04-30 -* π₯ Recent Activity: 1130.5 days (avg. age of last 42 commits) +* π₯ Recent Activity: 1140.5 days (avg. age of last 42 commits) * βοΈ License: GPL-3.0 * π§ͺ Status: Experimental (no releases yet) @@ -603,7 +580,7 @@ The script is implemented by piping the output of `monitor-sensor` into `autorot * π Lines of Code: 342 * π Lines of Documentation: 39 * π
Development Period: 2011-11-19 to 2022-04-02 -* π₯ Recent Activity: 1350.1 days (avg. age of last 42 commits) +* π₯ Recent Activity: 1360.1 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 0.5.0 (2022-02-21) @@ -628,7 +605,7 @@ The `photoalbum` project is a minimal Bash script designed for Linux systems to * π Lines of Code: 671 * π Lines of Documentation: 26 * π
Development Period: 2018-05-26 to 2025-09-04 -* π₯ Recent Activity: 1444.9 days (avg. age of last 42 commits) +* π₯ Recent Activity: 1454.9 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -654,7 +631,7 @@ The architecture centers around a local Git repository that acts as the secure s * π Lines of Code: 1728 * π Lines of Documentation: 18 * π
Development Period: 2020-07-12 to 2023-04-09 -* π₯ Recent Activity: 1501.3 days (avg. age of last 42 commits) +* π₯ Recent Activity: 1511.3 days (avg. age of last 42 commits) * βοΈ License: Custom License * π§ͺ Status: Experimental (no releases yet) @@ -669,6 +646,28 @@ Key features include a modular codebase where each algorithm or exercise is like --- +### foo.zone + +* π Documentation: Markdown (100.0%) +* π Commits: 3078 +* π Lines of Code: 0 +* π Lines of Documentation: 23 +* π
Development Period: 2021-05-21 to 2022-04-02 +* π₯ Recent Activity: 1526.8 days (avg. age of last 42 commits) +* βοΈ License: No license found +* π§ͺ Status: Experimental (no releases yet) + +β οΈ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk. + +This project hosts the static files for the foo.zone website, which is accessible via both the Gemini protocol (gemini://foo.zone) and the web (https://foo.zone). The repository is organized with separate branches for each content formatβsuch as Gemtext, HTML, and Markdownβallowing the site to be served in multiple formats tailored to different protocols and user preferences. This structure makes it easy to maintain and update content across platforms, ensuring consistency and flexibility. + +The site is maintained using a suite of open-source tools, including Neovim for editing, GNU Bash for scripting, and ShellCheck for shell script linting. It is deployed on OpenBSD, utilizing the vger Gemini server (managed via relayd and inetd) for Gemini content and the native httpd server for the HTML site. Source code and hosting are managed through Codeberg. The static content is generated with the help of the gemtexter tool, which streamlines the process of converting and managing content in various formats. This architecture emphasizes simplicity, security, and portability, making it a robust solution for multi-protocol static site hosting. + +=> https://codeberg.org/snonux/foo.zone View on Codeberg +=> https://github.com/snonux/foo.zone View on GitHub + +--- + ### perl-c-fibonacci * π» Languages: C (80.4%), Make (19.6%) @@ -677,7 +676,7 @@ Key features include a modular codebase where each algorithm or exercise is like * π Lines of Code: 51 * π Lines of Documentation: 69 * π
Development Period: 2014-03-24 to 2022-04-23 -* π₯ Recent Activity: 1982.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 1992.2 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -698,7 +697,7 @@ perl-c-fibonacci: source code repository. * π Lines of Code: 12420 * π Lines of Documentation: 610 * π
Development Period: 2018-03-01 to 2020-01-22 -* π₯ Recent Activity: 2523.7 days (avg. age of last 42 commits) +* π₯ Recent Activity: 2533.7 days (avg. age of last 42 commits) * βοΈ License: Apache-2.0 * π·οΈ Latest Release: 0.5.1 (2019-01-04) @@ -723,7 +722,7 @@ The tool operates in five main steps: capturing I/O on the production server, tr * π Lines of Code: 919 * π Lines of Documentation: 12 * π
Development Period: 2015-01-02 to 2021-11-04 -* π₯ Recent Activity: 3032.4 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3042.4 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 1.1.3 (2015-01-02) @@ -746,7 +745,7 @@ In terms of implementation, the project consists of Perl modules that conform to * π Lines of Code: 18 * π Lines of Documentation: 49 * π
Development Period: 2014-03-24 to 2021-11-05 -* π₯ Recent Activity: 3268.3 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3278.3 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -776,7 +775,7 @@ This setup is useful for anyone running their own DNS server who needs to keep D * π Lines of Code: 5360 * π Lines of Documentation: 789 * π
Development Period: 2015-01-02 to 2021-11-05 -* π₯ Recent Activity: 3535.0 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3545.0 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 1.0.1 (2015-01-02) @@ -803,7 +802,7 @@ The "mon" tool is a command-line monitoring API client designed to interact with * π Lines of Code: 273 * π Lines of Documentation: 32 * π
Development Period: 2015-09-29 to 2021-11-05 -* π₯ Recent Activity: 3539.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3549.2 days (avg. age of last 42 commits) * βοΈ License: Apache-2.0 * π·οΈ Latest Release: 0 (2015-10-26) @@ -832,7 +831,7 @@ The architecture is simple but effective: it reads a list of servers, establishe * π Lines of Code: 1839 * π Lines of Documentation: 412 * π
Development Period: 2015-01-02 to 2021-11-05 -* π₯ Recent Activity: 3618.8 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3628.8 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 1.0.2 (2015-01-02) @@ -859,7 +858,7 @@ pingdomfetch is implemented as a script that reads configuration files from stan * π Lines of Code: 499 * π Lines of Documentation: 8 * π
Development Period: 2015-05-24 to 2021-11-03 -* π₯ Recent Activity: 3629.5 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3639.5 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 0.1 (2015-06-01) @@ -880,7 +879,7 @@ The tool is implemented in Go, which offers advantages in terms of performance, * π Commits: 670 * π Lines of Code: 1675 * π
Development Period: 2011-03-06 to 2018-12-22 -* π₯ Recent Activity: 3685.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3695.2 days (avg. age of last 42 commits) * βοΈ License: Custom License * π·οΈ Latest Release: v1.0.0 (2018-12-22) @@ -903,7 +902,7 @@ The implementation is primarily documentation-driven, meant to be included at th * π Lines of Code: 88 * π Lines of Documentation: 148 * π
Development Period: 2015-06-18 to 2015-12-05 -* π₯ Recent Activity: 3733.3 days (avg. age of last 42 commits) +* π₯ Recent Activity: 3743.3 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -928,7 +927,7 @@ The implementation involves several key steps: first, a Debian image is created * π Lines of Code: 1681 * π Lines of Documentation: 539 * π
Development Period: 2014-03-10 to 2021-11-03 -* π₯ Recent Activity: 4011.3 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4021.3 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 1.0.2 (2014-11-17) @@ -955,7 +954,7 @@ The `fapi` project is a command-line tool designed to simplify the management of * π Lines of Code: 65 * π Lines of Documentation: 228 * π
Development Period: 2013-03-22 to 2021-11-04 -* π₯ Recent Activity: 4065.7 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4075.7 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 0.0.0.0 (2013-03-22) @@ -978,7 +977,7 @@ Key features of the template include a Makefile that automates compilation and p * π Lines of Code: 136 * π Lines of Documentation: 96 * π
Development Period: 2013-03-22 to 2021-11-05 -* π₯ Recent Activity: 4078.7 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4088.7 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 0.2.0 (2014-07-05) @@ -1005,7 +1004,7 @@ The core functionality is implemented through a combination of Vim integration, * π Lines of Code: 134 * π Lines of Documentation: 106 * π
Development Period: 2013-03-22 to 2021-11-05 -* π₯ Recent Activity: 4086.2 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4096.2 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 0.1.5 (2014-06-22) @@ -1022,6 +1021,29 @@ The tool operates by having users simultaneously run the same command on both ho --- +### pwgrep + +* π» Languages: Shell (85.0%), Make (15.0%) +* π Documentation: Text (80.8%), Markdown (19.2%) +* π Commits: 142 +* π Lines of Code: 493 +* π Lines of Documentation: 26 +* π
Development Period: 2009-09-27 to 2021-11-02 +* π₯ Recent Activity: 4139.5 days (avg. age of last 42 commits) +* βοΈ License: No license found +* π·οΈ Latest Release: 0.9.3 (2014-06-14) + +β οΈ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk. + +**pwgrep** is a lightweight password manager designed for Unix-like systems, implemented primarily in Bash and GNU AWK. It securely stores and retrieves passwords by encrypting them with GPG (GNU Privacy Guard), ensuring that sensitive information remains protected. Version control for password files is handled using an RCS (Revision Control System) such as Git, allowing users to track changes, revert to previous versions, and maintain an audit trail of password updates. This approach leverages familiar command-line tools, making it accessible to users comfortable with shell environments. + +The core features of pwgrep include encrypted password storage, easy retrieval and search functionality (using AWK for pattern matching), and robust version control integration. The architecture is modular and script-based: Bash scripts orchestrate user interactions and file management, AWK handles efficient searching within password files, GPG provides encryption/decryption, and Git (or another RCS) manages version history. This combination offers a secure, auditable, and scriptable solution for password management without relying on heavyweight external applications or GUIs. + +=> https://codeberg.org/snonux/pwgrep View on Codeberg +=> https://github.com/snonux/pwgrep View on GitHub + +--- + ### japi * π» Languages: Perl (78.3%), Make (21.7%) @@ -1030,7 +1052,7 @@ The tool operates by having users simultaneously run the same command on both ho * π Lines of Code: 286 * π Lines of Documentation: 144 * π
Development Period: 2013-03-22 to 2021-11-05 -* π₯ Recent Activity: 4134.5 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4144.5 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 0.4.3 (2014-06-16) @@ -1055,7 +1077,7 @@ The tool is implemented in Perl and relies on the "JIRA::REST" CPAN module to co * π Lines of Code: 191 * π Lines of Documentation: 8 * π
Development Period: 2014-03-24 to 2014-03-24 -* π₯ Recent Activity: 4195.8 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4205.8 days (avg. age of last 42 commits) * βοΈ License: No license found * π§ͺ Status: Experimental (no releases yet) @@ -1076,7 +1098,7 @@ In terms of implementation, each script is written to be syntactically correct a * π Commits: 7 * π Lines of Code: 80 * π
Development Period: 2011-07-09 to 2015-01-13 -* π₯ Recent Activity: 4275.8 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4285.8 days (avg. age of last 42 commits) * βοΈ License: Custom License * π§ͺ Status: Experimental (no releases yet) @@ -1099,7 +1121,7 @@ The implementation relies on Perl scripts running on a web server, with DNS and * π Lines of Code: 124 * π Lines of Documentation: 75 * π
Development Period: 2010-11-05 to 2021-11-05 -* π₯ Recent Activity: 4316.5 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4326.5 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 1.0.2 (2014-06-22) @@ -1122,7 +1144,7 @@ The tool achieves this by invoking AWK, a powerful text-processing utility, to p * π Lines of Code: 1828 * π Lines of Documentation: 100 * π
Development Period: 2010-11-05 to 2015-05-23 -* π₯ Recent Activity: 4346.6 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4356.6 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: 0.7.5 (2014-06-22) @@ -1135,36 +1157,13 @@ loadbars: source code repository. --- -### pwgrep - -* π» Languages: Shell (85.0%), Make (15.0%) -* π Documentation: Text (72.4%), Markdown (27.6%) -* π Commits: 142 -* π Lines of Code: 493 -* π Lines of Documentation: 29 -* π
Development Period: 2009-09-27 to 2015-05-23 -* π₯ Recent Activity: 4360.0 days (avg. age of last 42 commits) -* βοΈ License: No license found -* π·οΈ Latest Release: 0.9.3 (2014-06-14) - -β οΈ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk. - -**pwgrep** is a lightweight password manager designed for Unix-like systems, implemented primarily in Bash and GNU AWK. It securely stores and retrieves passwords by encrypting them with GPG (GNU Privacy Guard), ensuring that sensitive information remains protected. Version control for password files is handled using an RCS (Revision Control System) such as Git, allowing users to track changes, revert to previous versions, and maintain an audit trail of password updates. This approach leverages familiar command-line tools, making it accessible to users comfortable with shell environments. - -The core features of pwgrep include encrypted password storage, easy retrieval and search functionality (using AWK for pattern matching), and robust version control integration. The architecture is modular and script-based: Bash scripts orchestrate user interactions and file management, AWK handles efficient searching within password files, GPG provides encryption/decryption, and Git (or another RCS) manages version history. This combination offers a secure, auditable, and scriptable solution for password management without relying on heavyweight external applications or GUIs. - -=> https://codeberg.org/snonux/pwgrep View on Codeberg -=> https://github.com/snonux/pwgrep View on GitHub - ---- - ### perldaemon -* π» Languages: Perl (72.3%), Shell (23.8%), Config (3.9%) +* π» Languages: Perl (74.2%), Shell (22.2%), Config (3.6%) * π Commits: 110 -* π Lines of Code: 614 +* π Lines of Code: 659 * π
Development Period: 2011-02-05 to 2022-04-21 -* π₯ Recent Activity: 4396.0 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4500.8 days (avg. age of last 42 commits) * βοΈ License: Custom License * π·οΈ Latest Release: v1.4 (2022-04-29) @@ -1189,7 +1188,7 @@ The implementation centers around a main daemon process that manages the event l * π Lines of Code: 122 * π Lines of Documentation: 10 * π
Development Period: 2011-01-27 to 2014-06-22 -* π₯ Recent Activity: 4727.1 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4737.1 days (avg. age of last 42 commits) * βοΈ License: No license found * π·οΈ Latest Release: v0.2 (2011-01-27) @@ -1212,7 +1211,7 @@ The core architecture of Awksite consists of AWK scripts executed via the Common * π Lines of Code: 720 * π Lines of Documentation: 6 * π
Development Period: 2008-06-21 to 2021-11-03 -* π₯ Recent Activity: 4789.7 days (avg. age of last 42 commits) +* π₯ Recent Activity: 4799.7 days (avg. age of last 42 commits) * βοΈ License: Custom License * π·οΈ Latest Release: v0.3 (2009-02-08) @@ -1231,13 +1230,13 @@ The application is implemented as a desktop GUI, likely using a framework such a ### ychat -* π» Languages: C++ (52.1%), C/C++ (21.3%), Shell (20.1%), HTML (2.5%), Config (2.1%), Perl (1.5%), Make (0.3%) +* π» Languages: C++ (50.4%), Shell (21.3%), C/C++ (20.8%), Perl (2.3%), HTML (2.3%), Config (2.2%), Make (0.7%), CSS (0.1%) * π Documentation: Text (100.0%) * π Commits: 67 -* π Lines of Code: 33823 -* π Lines of Documentation: 109 +* π Lines of Code: 73818 +* π Lines of Documentation: 127 * π
Development Period: 2008-05-15 to 2014-07-01 -* π₯ Recent Activity: 5344.6 days (avg. age of last 42 commits) +* π₯ Recent Activity: 5391.1 days (avg. age of last 42 commits) * βοΈ License: GPL-2.0 * π·οΈ Latest Release: yhttpd-0.7.2 (2013-04-06) @@ -1260,7 +1259,7 @@ yChatβs architecture is built around a core C++ engine that handles HTTP reque * π Lines of Code: 17380 * π Lines of Documentation: 947 * π
Development Period: 2009-02-07 to 2021-05-01 -* π₯ Recent Activity: 5420.4 days (avg. age of last 42 commits) +* π₯ Recent Activity: 5430.4 days (avg. age of last 42 commits) * βοΈ License: GPL-2.0 * π·οΈ Latest Release: v0.1 (2009-02-08) @@ -1287,7 +1286,7 @@ NetCalendar is implemented as a Java application (requiring JRE 6 or higher) and * π Lines of Code: 14582 * π Lines of Documentation: 2903 * π
Development Period: 2008-05-15 to 2022-04-03 -* π₯ Recent Activity: 5456.7 days (avg. age of last 42 commits) +* π₯ Recent Activity: 5466.7 days (avg. age of last 42 commits) * βοΈ License: Custom License * π·οΈ Latest Release: v1.0 (2008-08-24) @@ -1310,7 +1309,7 @@ The simulator features a modular architecture, allowing users to define custom n * π Commits: 80 * π Lines of Code: 601 * π
Development Period: 2009-11-22 to 2011-10-17 -* π₯ Recent Activity: 5516.0 days (avg. age of last 42 commits) +* π₯ Recent Activity: 5526.0 days (avg. age of last 42 commits) * βοΈ License: Custom License * π§ͺ Status: Experimental (no releases yet) @@ -1327,13 +1326,13 @@ The architecture is modular, relying on external Haskell packages: libghc6-hsql- ### fype -* π» Languages: C (67.9%), C/C++ (23.6%), HTML (6.9%), Make (1.6%) -* π Documentation: Text (61.4%), LaTeX (38.6%) +* π» Languages: C (72.1%), C/C++ (20.7%), HTML (5.7%), Make (1.5%) +* π Documentation: Text (71.3%), LaTeX (28.7%) * π Commits: 99 -* π Lines of Code: 8622 -* π Lines of Documentation: 1474 -* π
Development Period: 2008-05-15 to 2014-06-30 -* π₯ Recent Activity: 5840.1 days (avg. age of last 42 commits) +* π Lines of Code: 10196 +* π Lines of Documentation: 1741 +* π
Development Period: 2008-05-15 to 2021-11-03 +* π₯ Recent Activity: 5687.8 days (avg. age of last 42 commits) * βοΈ License: Custom License * π§ͺ Status: Experimental (no releases yet) diff --git a/about/showcase/debroid/image-1.png b/about/showcase/debroid/image-1.png index f62b0f61..bda1217d 100644 --- a/about/showcase/debroid/image-1.png +++ b/about/showcase/debroid/image-1.png @@ -46,29 +46,29 @@ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-dc7ca6859caf.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-f96b923db733.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-2744ca59d025.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-efdc4f8b5091.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-241f81e44892.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-086c1af66525.css" /> - <script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","billing_show_top_100_users_usage_table","client_version_header","codespaces_prebuild_region_target_update","contact_requests_implicit_opt_in","contentful_lp_enterprise","contentful_lp_footnotes","copilot_agent_prefetch_tasks","copilot_agent_task_caching","copilot_api_agentic_issue_marshal_yaml","copilot_api_draft_issue_code_search","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","copilot_chat_group_notifications","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_coding_agent_diff_stats","copilot_custom_copilots_feature_preview","copilot_custom_copilots_images","copilot_duplicate_thread","copilot_features_raycast_logo","copilot_free_to_paid_telem","copilot_ftp_hyperspace_upgrade_prompt","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_global_overlay_v2","copilot_immersive_agent_branch_selection","copilot_immersive_structured_model_picker","copilot_loops_share_button","copilot_no_floating_button","copilot_read_shared_conversation","copilot_show_copilot_sub_issues_button_on_issues_page","copilot_spaces_input_menu_select","copilot_spark_allow_empty_commit","copilot_spark_progressive_error_handling","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_spark_write_iteration_history_to_git","copilot_stable_conversation_view","copilot_workbench_agent_seed_tool","copilot_workbench_cache","copilot_workbench_connection_reload_banner","copilot_workbench_preview_analytics","copilot_workbench_ratelimit_fallback","copilot_workbench_refresh_on_wsod","copilot_workbench_synthetic_generation","custom_copilots_capi_mode","dashboard_public_preview","direct_to_salesforce","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","global_search_multi_orgs","hpc_improve_dom_insertion_observer","hyperspace_diff_view","insert_before_patch","issue_fields_report_usage","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_sticky_sidebar","item_picker_branch_relay_migration","item_picker_issue_type_relay_migration","item_picker_label_relay_migration","item_picker_mutations_relay_migration","item_picker_project_relay_migration","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","mcp_registry_install","memex_mwl_filter_field_delimiter","migrate_toasts_to_banners_web_notifications","new_traffic_page_banner","org_repos_page_route","override_pulse_legacy_url","primer_react_segmented_control_tooltip","primer_react_unified_portal_root","record_sso_banner_metrics","releases_update_ref_selector","remove_child_patch","repos_insights_remove_new_url","sample_network_conn_type","scheduled_reminders_updated_limits","show_edit_on_default_option","site_homepage_contentful","site_msbuild_webgl_hero","spark_commit_on_default_branch","spark_show_data_access_on_publish","spark_sync_repository_after_iteration","viewscreen_sandbox","webp_support","workbench_default_sonnet4","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"}</script> + <script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","billing_fixed_amount_metered_configured_discounts","billing_use_current_discounts_list_dialog_v2","client_version_header","codespaces_prebuild_region_target_update","contact_requests_implicit_opt_in","contact_sales_locale_utm_medium","contentful_lp_enterprise","contentful_lp_footnotes","copilot_agent_cli_public_preview","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_file_reference","copilot_api_agentic_issue_marshal_yaml","copilot_api_draft_issue_code_search","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","copilot_chat_multi_file_picker_attachment","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_coding_agent_diff_stats","copilot_coding_agent_ga","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_deprecation_notice","copilot_features_raycast_logo","copilot_free_to_paid_telem","copilot_ftp_hyperspace_upgrade_prompt","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_global_overlay_v2","copilot_immersive_agent_branch_selection","copilot_immersive_structured_model_picker","copilot_loops_share_button","copilot_no_floating_button","copilot_read_shared_conversation","copilot_show_copilot_sub_issues_button_on_issues_page","copilot_spaces_ga","copilot_spark_allow_empty_commit","copilot_spark_loading_webgl","copilot_spark_progressive_error_handling","copilot_spark_read_iteration_history_from_git_v2","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_spark_write_iteration_history_to_git","copilot_stable_conversation_view","copilot_workbench_agent_seed_tool","copilot_workbench_cache","copilot_workbench_connection_reload_banner","copilot_workbench_preview_analytics","copilot_workbench_ratelimit_fallback","copilot_workbench_refresh_on_wsod","copilot_workbench_synthetic_generation","dashboard_public_preview","direct_to_salesforce","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","global_search_multi_orgs","hpc_improve_dom_insertion_observer","hyperspace_diff_view","inp_reduced_threshold","insert_before_patch","issue_fields_report_usage","issues_copilot_cross_repo_assign","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_sticky_sidebar","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","mcp_registry_install","memex_mwl_filter_field_delimiter","migrate_toasts_to_banners_web_notifications","new_traffic_page_banner","override_pulse_legacy_url","primer_react_segmented_control_tooltip","primer_react_unified_portal_root","record_sso_banner_metrics","releases_update_ref_selector","remove_child_patch","repos_insights_remove_new_url","sample_network_conn_type","scheduled_reminders_updated_limits","show_edit_on_default_option","site_homepage_collaborate_video","site_homepage_contentful","site_msbuild_webgl_hero","spark_commit_on_default_branch","spark_show_data_access_on_publish","spark_sync_repository_after_iteration","viewscreen_sandbox","webp_support","workbench_default_sonnet4","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"}</script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-f3788027bd8d.js"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-6c47ad9ad251.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-05fab4483803.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-468bf7cab607.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_stacktrace-parser_dist_stack-trace-parser_esm_js-node_modules_github_bro-2f4e04-280c10ec004d.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-c8eeba-690858154b11.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-5244438a76a9.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-e36acb721009.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-7e8c9c5d642d.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-7e4d99c9171d.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-c98257dc79a7.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-0d7d60-9ac2b374b638.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-7e4d99c9171d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-0d7d60-b5d92aad9108.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-754f5b5e9e7e.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-fd008e5636c7.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-d41270eb61be.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-c63e9a-b1f4633cac7f.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-379275813036.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-a4a8a5aca339.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-e1b8d79d7efc.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-14ed8f0f364a.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_hydro-analytics-c-2a6094-2f3b5bfd7e3b.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-4e90f1d1076c.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-06c8637a6071.js" defer="defer"></script> @@ -76,14 +76,14 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-8eb9b2209bcd.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-cd5d89ebdb50.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-590a09-91fdc8802bfa.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/packages_document-metadata_document-metadata_ts-packages_failbot_failbot_ts-75c1bcfb5bf5.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/packages_document-metadata_document-metadata_ts-packages_failbot_failbot_ts-b8e9eefcce78.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/packages_updatable-content_updatable-content_ts-a743e72edcf2.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_details-6493f1-5af0195d8874.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_details-6493f1-b7112815a1fc.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_throttled-input_ts-047775-82bfe789bb2f.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-6bc7a8849328.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-913d8cc551d2.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-ef6d0f-641e2ed302b3.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-e0009afb39c7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-6206313cbfca.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-ef6d0f-60422ea0562f.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-f5c28dea1388.js" defer="defer"></script> <title>Page not found Β· GitHub Β· GitHub</title> @@ -93,13 +93,13 @@ <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient> <meta name="route-controller" content="blob" data-turbo-transient> <meta name="route-action" content="show" data-turbo-transient> - <meta name="fetch-nonce" content="v2:9f57eaa2-4017-933a-c623-1fb2e923987f"> + <meta name="fetch-nonce" content="v2:2103c141-fc61-fdcc-9449-c31e8e0a1d35"> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> - <meta name="request-id" content="80CA:21348F:86ACCA:6E3C2A:68CC3C82" data-pjax-transient="true"/><meta name="html-safe-nonce" content="02b56533e09eb79caff0081e9c94309bbd2d949f8cbc6c2118af1cfde9a53b51" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MENBOjIxMzQ4Rjo4NkFDQ0E6NkUzQzJBOjY4Q0MzQzgyIiwidmlzaXRvcl9pZCI6IjQ2MTExNTE0OTg2MjA3MTQxMTQiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="85f63cd2a77ee16ab215b934c8b8bb2779313fb50a91ba23bb8477fec1e33f64" data-pjax-transient="true"/> + <meta name="request-id" content="94B4:2E8306:13EF1CCB:FEC8155:68D96BC8" data-pjax-transient="true"/><meta name="html-safe-nonce" content="959c46f8b16bf0394eb35aa1abdfe56efb0675dc19b1e7e8fff13a56f79fd14e" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5NEI0OjJFODMwNjoxM0VGMUNDQjpGRUM4MTU1OjY4RDk2QkM4IiwidmlzaXRvcl9pZCI6IjcxNTUwNTk2MzU5MDQ5MzI4MDgiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="c7a5e8af8916731043f1e44438c736f095d76dbca61664827ab93738e87a5787" data-pjax-transient="true"/> @@ -175,10 +175,10 @@ <meta name="expected-hostname" content="github.com"> - <meta http-equiv="x-pjax-version" content="ad8bb9e20b26558b390bbaa7f8d115448c7fe08b520aa3b75eabd21f05923724" data-turbo-track="reload"> + <meta http-equiv="x-pjax-version" content="dd202cb24f90d89deaf3e8e69642cdff0d2e68574fad1096fbc499fa8a21ec5e" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="c922ef32c4ab94f8b870c62883f3e41755ec705db76ec4efb0d343458f1e28c7" data-turbo-track="reload"> - <meta http-equiv="x-pjax-css-version" content="0bc51a290919c52cc62b3d8b4eed96609edf264f742d0409c975553b0cdc84a8" data-turbo-track="reload"> - <meta http-equiv="x-pjax-js-version" content="56c08ab2d04523fd3ef5229f176ac1f86d092b5e48ba8b126e87f46bceb48f95" data-turbo-track="reload"> + <meta http-equiv="x-pjax-css-version" content="52346ecdf234263f0a160a1d59dfd68544fb261b3a40e29f8f2743954a4f97b7" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="d5cda63bc195379679efe760b7e522dbde89536cddd557090ecf546cfc73bcae" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> @@ -202,7 +202,7 @@ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> - <meta name="release" content="79147b255a4de6477bf167741fd55c0ecccc4105"> + <meta name="release" content="e0ef98b0e06f71cdbe4a6db33cae9e530e42188d"> <meta name="ui-target" content="full"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> @@ -230,7 +230,7 @@ <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.1376d83c759fa3dd6e71.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.ad9424369aeb6fec9e91.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.2de9c7d6456a311fce49.module.css" /> <react-partial @@ -255,7 +255,7 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_gsap_index_js-23c9606618ce.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-04dd9f3c4754.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-f58d04675ea1.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-ac148cb2a2f3.js" defer="defer"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> @@ -295,13 +295,13 @@ </a> <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-661c7831-f0b1-4e98-8442-e233b1c71026" aria-labelledby="tooltip-a81c5bfc-7b4f-4ab3-a564-2a59abcc1473" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> + <button data-target="react-partial-anchor.anchor" id="icon-button-7fe22e60-76ad-4f99-9364-b9b39de96283" aria-labelledby="tooltip-b5fdf143-581e-4abe-97cc-ee8c5b3d604e" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> <path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path> </svg> -</button><tool-tip id="tooltip-a81c5bfc-7b4f-4ab3-a564-2a59abcc1473" for="icon-button-661c7831-f0b1-4e98-8442-e233b1c71026" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> +</button><tool-tip id="tooltip-b5fdf143-581e-4abe-97cc-ee8c5b3d604e" for="icon-button-7fe22e60-76ad-4f99-9364-b9b39de96283" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> <template data-target="react-partial-anchor.template"> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.1376d83c759fa3dd6e71.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.ad9424369aeb6fec9e91.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.6c63a6de228d6520804d.module.css" /> <react-partial @@ -658,7 +658,13 @@ <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> - + <li> + <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"app_modernization","context":"solutions","tag":"link","label":"app_modernization_link_solutions_navbar"}" href="/solutions/use-case/app-modernization"> + App Modernization + + +</a></li> + <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devsecops","context":"solutions","tag":"link","label":"devsecops_link_solutions_navbar"}" href="/solutions/use-case/devsecops"> DevSecOps @@ -838,12 +844,10 @@ </a></li> <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://partner.github.com"> + <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://github.com/partners"> Partners - <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> - <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> -</svg> + </a></li> <li> @@ -1057,7 +1061,7 @@ -<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="Ir-Xa7XN8bhPcnP_UBy4s3jnmzPG3byOTmzDGnq4V1HVFojAJiquscP45tp5k7PxLiaVvOOIxOKmMMCfKh6QUA" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> +<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="6gvQi4LNMiLzN-b-TqojcrVwFVnxRVnpbE-wE_j7rw3ZRsTHeczNhEA3ToQH-o6P77K9cj_IL7LLIPLlM-P47w" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" @@ -1121,7 +1125,7 @@ ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> - <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-946e0dd9-d0b6-4f35-b719-cd4cb6b45f2c" data-target="query-builder.input" data-action=" + <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-a90a160d-cc8d-45ca-8af9-2aaf5f80118d" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown @@ -1359,7 +1363,7 @@ tabindex="-1" ></ul> </div> - <div class="FormControl-inlineValidation" id="validation-946e0dd9-d0b6-4f35-b719-cd4cb6b45f2c" hidden="hidden"> + <div class="FormControl-inlineValidation" id="validation-a90a160d-cc8d-45ca-8af9-2aaf5f80118d" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> @@ -1400,7 +1404,7 @@ </div> <scrollable-region data-labelled-by="feedback-dialog-title"> - <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="9YGYyFZGSsyhDtf2wpS39+xmf2iejz/FnzPCF7w2AybVX6sLYqXK2y2uHVH4IgymWbViVtSKJQPQeFfHuCio9w==" /> + <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="8obFCqlGn2uhC8f2ZrR5lXZhUXMhVOH5JZyi/PN7joAw5rrFFBDEa98xdCzXbUkFs75pADcgO9f0fSFHIyKj4g==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> @@ -1438,7 +1442,7 @@ <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> - <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="qRnJH9Wt/Hmsl6fxcr0u6LltzwyIiuQ0XEVfW3EaFFmrsEM02OKNH7BkF7VX8onV/mYGsGfYJ91gRg6M8AgNOA==" /> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="5wiHo8b/y1jl3ajAAQIaGBfU5piBTXkopnlLIb6lgR29oZb0G/7+M4e7m3ZUEED7DehiccgyiFf2dsBGm9/ULg==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> @@ -1456,7 +1460,7 @@ placeholder="github-ruby" required maxlength="50"> - <input type="hidden" data-csrf="true" value="V5ru9RDKByxuvwzSqIWyW6ka70doTU2e5lNjs31N2cN8eFvgIOqm60yVX9E+dD71u3wDaQ2sUiS92Yd509RDxQ==" /> + <input type="hidden" data-csrf="true" value="ifzyZ8PB5yALokQC/FPo6/7KHnqkKSA+vQl9mempoTCCnBZNGo/j0dNkIeIPo2zBPuTr8+zG7AVu/MhU+BECpg==" /> </auto-check> </div> @@ -1511,7 +1515,7 @@ <h4 data-view-component="true" class="color-fg-default mb-2"> Sign in to GitHub </h4> -<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="7zI0wxjU/rCnNtgRM+x1sXmT72XTOxBtoms1jPIjZFoabwoBJCFLcG16qTjhb/o4GHaBvX+9RdCVNzes4v+YDQ==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> +<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="HKglBXMYncSwaDflbX+AfojpeT5SVScSCZgBPhzcbjQ/d+qFOGr0mtUO8zG0MdImk+ExoqQVVxb40obsgew7Mw==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> <label for="login_field"> Username or email address @@ -1533,9 +1537,9 @@ <input type="hidden" name="allow_signup" id="allow_signup" autocomplete="off" class="form-control" /> <input type="hidden" name="client_id" id="client_id" autocomplete="off" class="form-control" /> <input type="hidden" name="integration" id="integration" autocomplete="off" class="form-control" /> -<input class="form-control" type="text" name="required_field_03cd" hidden="hidden" /> -<input class="form-control" type="hidden" name="timestamp" value="1758215298328" /> -<input class="form-control" type="hidden" name="timestamp_secret" value="413a0b9367a4ca3d6489ead9c2211b9c4dc13bd559635b9fdafd16e926f4b548" /> +<input class="form-control" type="text" name="required_field_2d3b" hidden="hidden" /> +<input class="form-control" type="hidden" name="timestamp" value="1759079368587" /> +<input class="form-control" type="hidden" name="timestamp_secret" value="fbaf5d0b2fa29cb7f4d6f9098e30636d0e8a84a9caf9a1847ac08799dc0fe5d8" /> <input type="submit" name="commit" value="Sign in" class="btn btn-primary btn-block js-sign-in-button" data-disable-with="Signing inβ¦" data-signin-label="Sign in" data-sso-label="Sign in with your identity provider" development="false" disable-emu-sso="false" /> @@ -1562,13 +1566,13 @@ <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-e903bcff-12d6-4055-8257-932f1dda8fc9" aria-labelledby="tooltip-e44ac6ea-0089-458b-8740-b394710e1157" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> + <button data-target="react-partial-anchor.anchor" id="icon-button-7f060f68-4ac2-4d6f-b60f-791fb2417b0a" aria-labelledby="tooltip-e433506d-3e49-4a06-a955-e00932c83341" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> <path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path> </svg> -</button><tool-tip id="tooltip-e44ac6ea-0089-458b-8740-b394710e1157" for="icon-button-e903bcff-12d6-4055-8257-932f1dda8fc9" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> +</button><tool-tip id="tooltip-e433506d-3e49-4a06-a955-e00932c83341" for="icon-button-7f060f68-4ac2-4d6f-b60f-791fb2417b0a" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> <template data-target="react-partial-anchor.template"> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.1376d83c759fa3dd6e71.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.ad9424369aeb6fec9e91.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.6c63a6de228d6520804d.module.css" /> <react-partial @@ -1603,10 +1607,10 @@ <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> - <button id="icon-button-50a18150-b7d7-4cac-953a-54edc1ede1b8" aria-labelledby="tooltip-02b363dd-387d-4a4e-8bed-e79c6196a154" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> + <button id="icon-button-025d31a7-0de1-4325-a2f3-e7c0f0e2d37e" aria-labelledby="tooltip-8ae1b22d-8520-4766-9365-a3a27433dffd" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> -</button><tool-tip id="tooltip-02b363dd-387d-4a4e-8bed-e79c6196a154" for="icon-button-50a18150-b7d7-4cac-953a-54edc1ede1b8" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> +</button><tool-tip id="tooltip-8ae1b22d-8520-4766-9365-a3a27433dffd" for="icon-button-025d31a7-0de1-4325-a2f3-e7c0f0e2d37e" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> @@ -2082,6 +2086,7 @@ + <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> |
