{"id":17754633,"url":"https://github.com/maddiemort/maddie-wtf","last_synced_at":"2026-04-30T00:08:05.868Z","repository":{"id":258422934,"uuid":"866548952","full_name":"maddiemort/maddie-wtf","owner":"maddiemort","description":"My personal website and blog, written as a server-side rendered Rust app using axum","archived":false,"fork":false,"pushed_at":"2025-07-27T11:15:26.000Z","size":665,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-27T13:05:43.487Z","etag":null,"topics":["axum","blog","rust","rust-lang","website"],"latest_commit_sha":null,"homepage":"https://maddie.wtf","language":"Nix","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maddiemort.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-02T13:13:37.000Z","updated_at":"2025-07-27T11:15:26.000Z","dependencies_parsed_at":"2024-10-18T23:35:32.573Z","dependency_job_id":"36d019d0-a2f0-4375-9878-8cd05dfcdc29","html_url":"https://github.com/maddiemort/maddie-wtf","commit_stats":null,"previous_names":["maddiemort/maddie-wtf"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/maddiemort/maddie-wtf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maddiemort%2Fmaddie-wtf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maddiemort%2Fmaddie-wtf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maddiemort%2Fmaddie-wtf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maddiemort%2Fmaddie-wtf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maddiemort","download_url":"https://codeload.github.com/maddiemort/maddie-wtf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maddiemort%2Fmaddie-wtf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32448902,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"ssl_error","status_checked_at":"2026-04-29T22:10:49.234Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axum","blog","rust","rust-lang","website"],"created_at":"2024-10-26T14:07:38.882Z","updated_at":"2026-04-30T00:08:05.862Z","avatar_url":"https://github.com/maddiemort.png","language":"Nix","funding_links":[],"categories":[],"sub_categories":[],"readme":"# maddie.wtf\n\nMy personal website and blog, hosted at [maddie.wtf]. This is essentially a custom static site\ngenerator, which server-side renders everything and serves it with [`axum`][axum].\n\nA few slightly cool things it does:\n\n- It watches for filesystem notifications in the content directory using [`notify`][notify] and\n  hot-reloads any changed content. When running in debug mode, it also automatically reloads the\n  page when this happens.\n- Custom middleware intercepts `HandlerError`s returned from the request handlers and renders them\n  with a template just like any other page, making the error handling code for each endpoint\n  minimal.\n- Commit info is gathered at build time so that the footer on every page can link back to the exact\n  version that's being served.\n\nThis isn't really designed for anyone else to be able to come along and just _run_. That being said,\nthe licenses allow re-use, and feel free to take inspiration from anything I've done here. I am not\never going to convert this project into a more general static site generator.\n\nThe real content is hosted in a separate private repo so I can write blog posts and commit them\nbefore they're finished without them being accessible to the whole world. There's example content in\nthis repo, in `/example-content`, if you want to run this locally.\n\n## Development\n\n### Set up Rust toolchain\n\nIf you're using `rustup`, there's a `rust-toolchain.toml` file in the root of the repository that\nspecifies the toolchain needed to build the crate. To format the code, though, you'll have to\ninstall a nightly toolchain and ensure it contains the `rustfmt` component, and then format with\n`cargo +nightly fmt` or `rustup nightly run rustfmt`.\n\nIf you're using Nix, there's a flake that defines a dev shell with a Rust toolchain (including\nnightly `rustfmt`) and a few other useful tools included. You can load this either with `nix\ndevelop` or via the [`direnv`][direnv] `.envrc` file, and then build the crate as normal with `cargo\nbuild`. Formatting should work out of the box with `cargo fmt` or `rustfmt`.\n\nThere's also a Nix package defined in the flake for release builds.\n\n### Cutting a Release\n\nThis project uses [Conventional Commits][conventional-commits], and [`convco`][convco] is included\nin the Nix devShell to assist with this.\n\nThe overall list of things that has to happen for each release is as follows:\n\n- The commit that changes the version should use the message `release: v\u003cversion\u003e`.\n- That commit should update the version in `Cargo.toml` to match the version output by `convco\n  version --bump`.\n- That commit should include an updated `Cargo.lock` file, most easily generated by running a `cargo\n  build` after updating the version.\n- That commit should include an updated `Cargo.nix` file, generated using `cargo2nix -ls \u003e Cargo.nix\n  \u0026\u0026 nix fmt`.\n- That commit should include the updated `CHANGELOG.md`, generated with `convco changelog -u\n  $(convco version --bump) \u003e CHANGELOG.md`.\n- That commit should be tagged with `v\u003cversion\u003e`.\n- The commit should be pushed to `main`, and the tag pushed as well. This will trigger the\n  [`cargo-dist`][cargo-dist] workflow to build the artifacts and create the release on GitHub.\n\n[axum]: https://github.com/tokio-rs/axum\n[cargo-dist]: https://github.com/axodotdev/cargo-dist\n[convco]: https://github.com/convco/convco\n[conventional-commits]: https://www.conventionalcommits.org/en/v1.0.0/\n[direnv]: https://github.com/direnv/direnv\n[maddie.wtf]: https://maddie.wtf\n[notify]: https://github.com/notify-rs/notify\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaddiemort%2Fmaddie-wtf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaddiemort%2Fmaddie-wtf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaddiemort%2Fmaddie-wtf/lists"}