{"sha":"f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","node_id":"C_kwDORD3Y59oAKGY0ZmJjN2YzN2FkNGJhYTI3NjkyZjlkNWE2ZGYwZThmMTQyMTQ4N2I","commit":{"author":{"name":"gizzy","email":"me@gizzy.pro","date":"2026-02-01T19:50:52Z"},"committer":{"name":"gizzy","email":"me@gizzy.pro","date":"2026-02-01T19:50:52Z"},"message":"feat: fix 404 on github, 88x31 for this site, github follower count and star count i stole from cyteon, details page","tree":{"sha":"c6f799ee5f862d810c6dae81c85989fa5973f56a","url":"https://api.github.com/repos/GizzyUwU/govgiz/git/trees/c6f799ee5f862d810c6dae81c85989fa5973f56a"},"url":"https://api.github.com/repos/GizzyUwU/govgiz/git/commits/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/GizzyUwU/govgiz/commits/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","html_url":"https://github.com/GizzyUwU/govgiz/commit/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","comments_url":"https://api.github.com/repos/GizzyUwU/govgiz/commits/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/comments","author":{"login":"GizzyUwU","id":61115942,"node_id":"MDQ6VXNlcjYxMTE1OTQy","avatar_url":"https://avatars.githubusercontent.com/u/61115942?v=4","gravatar_id":"","url":"https://api.github.com/users/GizzyUwU","html_url":"https://github.com/GizzyUwU","followers_url":"https://api.github.com/users/GizzyUwU/followers","following_url":"https://api.github.com/users/GizzyUwU/following{/other_user}","gists_url":"https://api.github.com/users/GizzyUwU/gists{/gist_id}","starred_url":"https://api.github.com/users/GizzyUwU/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GizzyUwU/subscriptions","organizations_url":"https://api.github.com/users/GizzyUwU/orgs","repos_url":"https://api.github.com/users/GizzyUwU/repos","events_url":"https://api.github.com/users/GizzyUwU/events{/privacy}","received_events_url":"https://api.github.com/users/GizzyUwU/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"GizzyUwU","id":61115942,"node_id":"MDQ6VXNlcjYxMTE1OTQy","avatar_url":"https://avatars.githubusercontent.com/u/61115942?v=4","gravatar_id":"","url":"https://api.github.com/users/GizzyUwU","html_url":"https://github.com/GizzyUwU","followers_url":"https://api.github.com/users/GizzyUwU/followers","following_url":"https://api.github.com/users/GizzyUwU/following{/other_user}","gists_url":"https://api.github.com/users/GizzyUwU/gists{/gist_id}","starred_url":"https://api.github.com/users/GizzyUwU/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GizzyUwU/subscriptions","organizations_url":"https://api.github.com/users/GizzyUwU/orgs","repos_url":"https://api.github.com/users/GizzyUwU/repos","events_url":"https://api.github.com/users/GizzyUwU/events{/privacy}","received_events_url":"https://api.github.com/users/GizzyUwU/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"89b1fa8f50bb1fd5a74cfe0f877388aa116f5ff8","url":"https://api.github.com/repos/GizzyUwU/govgiz/commits/89b1fa8f50bb1fd5a74cfe0f877388aa116f5ff8","html_url":"https://github.com/GizzyUwU/govgiz/commit/89b1fa8f50bb1fd5a74cfe0f877388aa116f5ff8"}],"stats":{"total":260,"additions":228,"deletions":32},"files":[{"sha":"9cd94092ae8c4142d896f7ac2624d2a9357b59d8","filename":".github/workflows/deploy.yaml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/GizzyUwU/govgiz/blob/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/.github%2Fworkflows%2Fdeploy.yaml","raw_url":"https://github.com/GizzyUwU/govgiz/raw/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/.github%2Fworkflows%2Fdeploy.yaml","contents_url":"https://api.github.com/repos/GizzyUwU/govgiz/contents/.github%2Fworkflows%2Fdeploy.yaml?ref=f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","patch":"@@ -37,7 +37,7 @@ jobs:\n         run: touch .output/public/.nojekyll\n \n       - name: Fix Routes Returning 404 because GH Pages\n-        run: cp .output/public/index.html .output/public/404.html\n+        run: cp .output/public/fourofour.html .output/public/404.html\n \n       - name: Upload artifact\n         uses: actions/upload-pages-artifact@v4"},{"sha":"50283eb9369eb38d96151e5d00ea5ef4eaa713e2","filename":"public/88x31.svg","status":"added","additions":12,"deletions":0,"changes":12,"blob_url":"https://github.com/GizzyUwU/govgiz/blob/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/public%2F88x31.svg","raw_url":"https://github.com/GizzyUwU/govgiz/raw/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/public%2F88x31.svg","contents_url":"https://api.github.com/repos/GizzyUwU/govgiz/contents/public%2F88x31.svg?ref=f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b"},{"sha":"fefa54ec604619ac38a05abb86c0c95b49dc3c3f","filename":"src/app.tsx","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/GizzyUwU/govgiz/blob/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Fapp.tsx","raw_url":"https://github.com/GizzyUwU/govgiz/raw/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Fapp.tsx","contents_url":"https://api.github.com/repos/GizzyUwU/govgiz/contents/src%2Fapp.tsx?ref=f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","patch":"@@ -37,6 +37,7 @@ export default function App() {\n         >\n           <MetaProvider>\n             <Title>Gizzy</Title>\n+            <link rel=\"icon\" sizes=\"88x31\" href=\"/88x31.svg\" />\n             <Link rel=\"icon\" href=\"/haj.svg\" />\n             <Link rel=\"stylesheet\" href=\"/assets/govuk-frontend.min.css\" />\n             <div"},{"sha":"99b321004ada8bbf2047fb5bfa22faad8a21162c","filename":"src/routes/details.tsx","status":"added","additions":103,"deletions":0,"changes":103,"blob_url":"https://github.com/GizzyUwU/govgiz/blob/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Froutes%2Fdetails.tsx","raw_url":"https://github.com/GizzyUwU/govgiz/raw/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Froutes%2Fdetails.tsx","contents_url":"https://api.github.com/repos/GizzyUwU/govgiz/contents/src%2Froutes%2Fdetails.tsx?ref=f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","patch":"@@ -0,0 +1,103 @@\n+export default function Details() {\n+  return (\n+    <main class=\"govuk-main-wrapper\">\n+      <div class=\"govuk-grid-row\">\n+        <h1 id=\"header\" class=\"govuk-heading-l\">\n+          Details about me!\n+        </h1>\n+        <p class=\"govuk-body\">\n+          So you want more information on me? What are you? A fed? Smh I'll\n+          trust you this time.\n+        </p>\n+        <p class=\"govuk-body\">\n+          You probably already know me by my alias Gizzy which I use all over\n+          the internet and that's the only name you get to use for me. If you\n+          couldn't tell from me literally using the{\" \"}\n+          <a class=\"govuk-link\" href=\"https://design-system.service.gov.uk/\">\n+            GOV•UK Design System\n+          </a>\n+          , I'm a nerd. I spent most of my time producing code for mostly dumb\n+          stuff but some of the stuff I make seems cool to me. These projects\n+          for instance I find cool are:\n+        </p>\n+        <ul class=\"govuk-list govuk-list--bullet\">\n+          <li>\n+            <a class=\"govuk-link\" href=\"https://github.com/GizzyUwU/openlink\">\n+              Openlink{\" \"}\n+            </a>{\" \"}\n+            - The custom built EdulinkOne Desktop/Web Client\n+          </li>\n+          <li>\n+            <a class=\"govuk-link\" href=\"https://github.com/GizzyUwU/elt2ical\">\n+              ELT2ICal{\" \"}\n+            </a>{\" \"}\n+            - It's a server that makes use of the EdulinkOne API to convert the\n+            lesson timetable to a ICalendar file so I could use google calendars\n+            to alert me of what room I am in for my next lesson. EdulinkOne does\n+            kind of already have this feature but I built this because it\n+            stopped working after a while which was annoying so I came up with\n+            my own solution.\n+          </li>\n+          <li>\n+            <a class=\"govuk-link\" href=\"https://github.com/GizzyUwU/logpheus\">\n+              Logpheus{\" \"}\n+            </a>{\" \"}\n+            - A Slack Bot built for the Hack Club event Flavortown (Flavourtown\n+            if you want to be correct in the spelling) with the original\n+            intention to post people's devlogs in their personal channels but\n+            now it's becoming more of a generic bot for the event.\n+          </li>\n+          <li>\n+            <a class=\"govuk-link\" href=\"https://github.com/GizzyUwU/uuidle\">\n+              UUIDLE{\" \"}\n+            </a>{\" \"}\n+            - I'd say this is one of my dumbest projects but also a pretty fun\n+            one, I took the idea of{\" \"}\n+            <a\n+              class=\"govuk-link\"\n+              href=\"https://www.nytimes.com/games/wordle/index.html\"\n+            >\n+              Wordle\n+            </a>{\" \"}\n+            by the New York Times and just replaced words with{\" \"}\n+            <a\n+              class=\"govuk-link\"\n+              href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\"\n+            >\n+              UUID's\n+            </a>{\" \"}\n+            and it taught me a bit, you would think it would be hard to guess\n+            and you would be wrong. Kind of, I had the idea of allowing bots to\n+            be able to guess it which lead to it being guessed under a second\n+            because of UUID's being semi repetitive and allowing multiple of the\n+            same characters to be spammed in one guess making it pretty easy to\n+            brute force.\n+          </li>\n+        </ul>\n+        <p class=\"govuk-body\">\n+          Those project's was pretty fun to make and taught me a lot such as\n+          reverse engineering an undocumented API using an MITM. I'm also a\n+          proud{\" \"}\n+          <a class=\"govuk-link\" href=\"https://hackclub.com\">\n+            HackClubber\n+          </a>{\" \"}\n+          participating in their events such as Journey, Summer of Making,\n+          Flavortown and probably more in the future. Now for some information\n+          you may not know about me, I have a disability called{\" \"}\n+          <a\n+            class=\"govuk-link\"\n+            href=\"https://en.wikipedia.org/wiki/Developmental_coordination_disorder\"\n+            title=\"Dyspraxia, also known as developmental co-ordination disorder (DCD), is a common disorder that affects movement and co-ordination.\"\n+          >\n+            Dyspraxia\n+          </a>\n+          . I'm also an{\" \"}\n+          <a class=\"govuk-link\" href=\"https://en.wikipedia.org/wiki/Non-binary\">\n+            enby\n+          </a>{\" \"}\n+          that uses they/them pronouns so please be respectfully of that.\n+        </p>\n+      </div>\n+    </main>\n+  );\n+}"},{"sha":"c57fd13bfde840b25bc3315b1f7a339bc6f70604","filename":"src/routes/fourofour.tsx","status":"added","additions":33,"deletions":0,"changes":33,"blob_url":"https://github.com/GizzyUwU/govgiz/blob/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Froutes%2Ffourofour.tsx","raw_url":"https://github.com/GizzyUwU/govgiz/raw/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Froutes%2Ffourofour.tsx","contents_url":"https://api.github.com/repos/GizzyUwU/govgiz/contents/src%2Froutes%2Ffourofour.tsx?ref=f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","patch":"@@ -0,0 +1,33 @@\n+import { Title } from \"@solidjs/meta\";\n+import { HttpStatusCode } from \"@solidjs/start\";\n+\n+export default function NotFound() {\n+  return (\n+    <main\n+      class=\"govuk-main-wrapper govuk-main-wrapper--l\"\n+      id=\"main-content\"\n+      role=\"main\"\n+    >\n+      <Title>Gizzy - 404</Title>\n+      <HttpStatusCode code={404} />\n+      <div class=\"govuk-grid-row\">\n+        <div class=\"govuk-grid-column-two-thirds\">\n+          <h1 class=\"govuk-heading-l\">Page not found</h1>\n+          <p class=\"govuk-body\">\n+            If you typed the web address, check it is correct.\n+          </p>\n+          <p class=\"govuk-body\">\n+            If you pasted the web address, check you copied the entire address.\n+          </p>\n+          <p class=\"govuk-body\">\n+            If the web address is correct or you selected a link or button, then\n+            this page no longer exists!{\" \"}\n+            <a class=\"govuk-link\" href=\"/\">\n+             Redirect to the homepage!\n+            </a>\n+          </p>\n+        </div>\n+      </div>\n+    </main>\n+  );\n+}"},{"sha":"b1d0095f76308ce86c3fe381e6cae5d1b477f6f0","filename":"src/routes/index.tsx","status":"modified","additions":78,"deletions":31,"changes":109,"blob_url":"https://github.com/GizzyUwU/govgiz/blob/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Froutes%2Findex.tsx","raw_url":"https://github.com/GizzyUwU/govgiz/raw/f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b/src%2Froutes%2Findex.tsx","contents_url":"https://api.github.com/repos/GizzyUwU/govgiz/contents/src%2Froutes%2Findex.tsx?ref=f4fbc7f37ad4baa27692f9d5a6df0e8f1421487b","patch":"@@ -13,12 +13,44 @@ const fetchStats = async () => {\n \n     return res.json();\n   } catch (error) {\n-    return { error: \"Failed to fetch\" };\n+    return { error: \"Failed to fetch hackatime stats\" };\n+  }\n+};\n+\n+const fetchGithub = async (): Promise<{\n+  public_repos?: number;\n+  followers?: number;\n+  error?: string;\n+}> => {\n+  try {\n+    const res = await fetch(\"https://api.github.com/users/gizzyuwu\");\n+    return res.json();\n+  } catch (error) {\n+    return { error: \"Failed to fetch github\" };\n+  }\n+};\n+\n+const fetchStarsFrom100 = async (): Promise<number> => {\n+  try {\n+    const res = await fetch(\n+      \"https://api.github.com/users/gizzyuwu/repos?per_page=100\",\n+    );\n+\n+    const data = (await res.json()) as Record<string, any>[];\n+    return data.reduce(\n+      (acc: number, repo: any) => acc + repo.stargazers_count,\n+      0,\n+    );\n+  } catch (error) {\n+    return 0;\n   }\n };\n \n export default function Home() {\n   const [stats] = createResource(fetchStats);\n+  const [github] = createResource(fetchGithub);\n+  const [stars] = createResource(fetchStarsFrom100);\n+\n   onMount(() => {\n     new Typed(\"#typed-list\", {\n       strings: [\"programmer\", \"developer\", \"nerd\", \"maker\"],\n@@ -107,12 +139,18 @@ export default function Home() {\n           and a <span id=\"typed-list\"></span>based in the United Kingdom!\n         </p>\n         <Show when={stats()}>\n-          <div class=\"govuk-inset-text\">\n+          <div class=\"govuk-inset-text govuk-!-margin-bottom-2\">\n+            <p class=\"govuk-body-s\">\n             <span id=\"typed-time\"></span> -{\" \"}\n             {stats().data?.human_readable_total\n               ? stats().data.human_readable_total.replace(/\\s*\\d+s/, \"\")\n               : \"0m\"}{\" \"}\n-            spent writing code.\n+            spent writing code -{\" \"}\n+            <Show when={!github()?.error}>\n+                {github()?.followers} followers and {stars()} stars on\n+                github!\n+            </Show>\n+            </p>\n           </div>\n         </Show>\n         <hr class=\"govuk-section-break govuk-section-break--m govuk-section-break--visible\" />\n@@ -175,34 +213,43 @@ export default function Home() {\n             </li>\n           </ul>\n         </div>\n-        <Show when={posts && posts?.filter((post) => post.tags?.includes(\"projects\")).length > 0}>\n-        <h2 class=\"govuk-heading-m\">Latest Projects</h2>\n-        <ul class=\"govuk-task-list\">\n-          <For\n-            each={posts\n-              .filter((post) => (post.tags?.includes(\"projects\") || post.tag?.includes(\"projects\")))\n-              .sort(\n-                (a, b) =>\n-                  new Date(b.date).getTime() - new Date(a.date).getTime(),\n-              )\n-              .slice(0, 3)}\n-          >\n-            {(post) => (\n-              <li class=\"govuk-task-list__item govuk-task-list__item--with-link\">\n-                <div class=\"govuk-task-list__name-and-hint\">\n-                  <a\n-                    class=\"govuk-link govuk-task-list__link\"\n-                    href={`/blog/${post.slug}`}\n-                    aria-describedby=\"company-details-1-status\"\n-                  >\n-                    {post.title}\n-                  </a>\n-                  <div class=\"govuk-task-list__hint\">{post.description}</div>\n-                </div>\n-              </li>\n-            )}\n-          </For>\n-        </ul>\n+        <Show\n+          when={\n+            posts &&\n+            posts?.filter((post) => post.tags?.includes(\"projects\")).length > 0\n+          }\n+        >\n+          <h2 class=\"govuk-heading-m\">Latest Projects</h2>\n+          <ul class=\"govuk-task-list\">\n+            <For\n+              each={posts\n+                .filter(\n+                  (post) =>\n+                    post.tags?.includes(\"projects\") ||\n+                    post.tag?.includes(\"projects\"),\n+                )\n+                .sort(\n+                  (a, b) =>\n+                    new Date(b.date).getTime() - new Date(a.date).getTime(),\n+                )\n+                .slice(0, 3)}\n+            >\n+              {(post) => (\n+                <li class=\"govuk-task-list__item govuk-task-list__item--with-link\">\n+                  <div class=\"govuk-task-list__name-and-hint\">\n+                    <a\n+                      class=\"govuk-link govuk-task-list__link\"\n+                      href={`/blog/${post.slug}`}\n+                      aria-describedby=\"company-details-1-status\"\n+                    >\n+                      {post.title}\n+                    </a>\n+                    <div class=\"govuk-task-list__hint\">{post.description}</div>\n+                  </div>\n+                </li>\n+              )}\n+            </For>\n+          </ul>\n         </Show>\n       </div>\n     </main>"}]}