July 14, 2025
Added a helpful CLI using Typer (https://typer.tiangolo.com/) and did some minor improvements like organizing the file output better so that the result is not mixed with any of the application source code.
Added an easter egg and deployed to Hack Club's Nest server: https://michael-m.hackclub.app/keystrike/
Created a webpage template using the jinja2 and markdown packages. I also had to update the script that generates charts to use a dark theme.
I wrote a shell script that gather commit information from the last year of history in a git repository. Then I wrote a python script that parses that information and creates three charts. The first chart is a bar graph with the top three committers and their number of commits. The second is a line graph of commits over time. The third is a stacked area chart of lines added vs lines removed over time.
Git Leaderboard generates a leaderboard page for your git repo.
Added a new modal view for the file browser
Added a few easter eggs and setup a demo deployment with HackClub nest: https://michael-m.hackclub.app/git
The demo is read-only, so you cannot push commits. If you want to see that functionality, this devlog has a video that shows most of the features. (Or you could setup a local instance by following the instructions in the README file)
Created an API endpoint for serving raw files, and added the file browser again.
Added some more features to the README display. It now supports loading images from the API, and also has a few new remark plugins.
Designed an API for checking the state of repositories. This is much more efficient than some of my initial solutions because it doesn't need a worktree of the repository. The API also uses CGI, as that is already used on the server for handling git via git http-backend. I also enabled directory listing(just for the API scripts folder), which gives me something like Swagger for very little effort. Users can go to /api
to get a list of available endpoints.
Integrated the new API with the frontend. I haven't implemented API endpoints for files or tags yet, so those tabs in the repo viewer are commented out for now. But, this means it is almost production-ready.
Redid the layout of the repository viewing page. It should work on mobile now as well, though the file/tag tabs will be hidden.
Made the Dockerfile into a multi-stage build. It builds the frontend first, and then copies it into the final image.
Added routing (or conditional configuration in lighttpd terms) to the lighttpd configuration. This allows the server to determine if a request should be handled by the frontend or if it should be passed on to the git http-backend CGI script wrapper.
Added a page for viewing a single repository instead of the list as a whole. It has a README viewer, a file browser, and a list of tags.
Added a search bar to the repository list
Converted the list into a table that looks decent, using Mantine.
Added a WIP frontend using Vite/React/Typescript. The single file plugin is included so that the final version will be easier to copy into the docker container.
The UI does not look great at the moment and it does not make API calls yet.
Self-hostable lightweight Git forge built with CGI scripts and lighttpd.
This was widely regarded as a great move by everyone.