diff --git a/.env.example b/.env.example index 48ceb78..5ec5eba 100644 --- a/.env.example +++ b/.env.example @@ -1,15 +1,3 @@ -# Database -DATABASE_URL="" # PostgreSQL connection string -# For Docker Compose: postgresql://hacktoberfest:hacktoberfest123@localhost:5432/hacktoberfest -# For cloud providers: copy the connection string from your provider - -# Authentication -AUTH_SECRET="" # A random string -AUTH_URL="" # Should be http://localhost:3000 for local development -AUTH_GITHUB_ID="" -AUTH_GITHUB_SECRET="" -AUTH_DRIZZLE_URL="$DATABASE_URL" # Should be the same as DATABASE_URL - -# Optional -NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME="" # Optional -NEXT_PUBLIC_ANALYTICS_WEBSITE_ID="" # Optional +# No environment variables are needed: the site is now a static +# discontinuation notice. The old variables (database, GitHub OAuth, +# analytics) are documented in archive/src/env.mjs. diff --git a/.prettierignore b/.prettierignore index 3e82242..bb8943b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,4 +4,5 @@ .github node_modules .all-contributorsrc -.xatarc \ No newline at end of file +.xatarc +archive diff --git a/README.md b/README.md index a89e2ff..24e1748 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # Hacktoberfest Projects 🎉 -A Web app that lets you find eligible repositories for Hacktoberfest! +> [!IMPORTANT] +> **This project has been discontinued.** Hacktoberfest no longer counts pull requests, so there is no need to search for eligible repositories anymore. https://finder.usmans.me now shows a static notice that points visitors to [hacktoberfest.com](https://hacktoberfest.com). All search, sign-in, reporting, database and analytics features are switched off, and the old source code is kept in [`archive/`](archive) for reference. New contributions are no longer being accepted. -Use it here - https://finder.usmans.me +A Web app that lets you find eligible repositories for Hacktoberfest! [![All Contributors](https://img.shields.io/badge/all_contributors-51-orange.svg?style=flat-square)](#contributors-) diff --git a/docker-compose.yml b/archive/docker-compose.yml similarity index 100% rename from docker-compose.yml rename to archive/docker-compose.yml diff --git a/drizzle.config.ts b/archive/drizzle.config.ts similarity index 100% rename from drizzle.config.ts rename to archive/drizzle.config.ts diff --git a/public/hacktoberfest.png b/archive/public/hacktoberfest.png similarity index 100% rename from public/hacktoberfest.png rename to archive/public/hacktoberfest.png diff --git a/public/horizontal_beige.png b/archive/public/horizontal_beige.png similarity index 100% rename from public/horizontal_beige.png rename to archive/public/horizontal_beige.png diff --git a/src/app/(private)/reports/_components/report-card.tsx b/archive/src/app/(private)/reports/_components/report-card.tsx similarity index 100% rename from src/app/(private)/reports/_components/report-card.tsx rename to archive/src/app/(private)/reports/_components/report-card.tsx diff --git a/src/app/(private)/reports/page.tsx b/archive/src/app/(private)/reports/page.tsx similarity index 100% rename from src/app/(private)/reports/page.tsx rename to archive/src/app/(private)/reports/page.tsx diff --git a/src/app/(public)/_components/button.tsx b/archive/src/app/(public)/_components/button.tsx similarity index 100% rename from src/app/(public)/_components/button.tsx rename to archive/src/app/(public)/_components/button.tsx diff --git a/src/app/(public)/_components/header.tsx b/archive/src/app/(public)/_components/header.tsx similarity index 100% rename from src/app/(public)/_components/header.tsx rename to archive/src/app/(public)/_components/header.tsx diff --git a/src/app/(public)/_components/hero.tsx b/archive/src/app/(public)/_components/hero.tsx similarity index 100% rename from src/app/(public)/_components/hero.tsx rename to archive/src/app/(public)/_components/hero.tsx diff --git a/src/app/(public)/_components/icons.tsx b/archive/src/app/(public)/_components/icons.tsx similarity index 100% rename from src/app/(public)/_components/icons.tsx rename to archive/src/app/(public)/_components/icons.tsx diff --git a/src/app/(public)/_components/language-button.tsx b/archive/src/app/(public)/_components/language-button.tsx similarity index 100% rename from src/app/(public)/_components/language-button.tsx rename to archive/src/app/(public)/_components/language-button.tsx diff --git a/src/app/(public)/_components/marque-text-animation.tsx b/archive/src/app/(public)/_components/marque-text-animation.tsx similarity index 100% rename from src/app/(public)/_components/marque-text-animation.tsx rename to archive/src/app/(public)/_components/marque-text-animation.tsx diff --git a/src/app/(public)/_components/mobile-menu.tsx b/archive/src/app/(public)/_components/mobile-menu.tsx similarity index 100% rename from src/app/(public)/_components/mobile-menu.tsx rename to archive/src/app/(public)/_components/mobile-menu.tsx diff --git a/src/app/(public)/_components/search-form.tsx b/archive/src/app/(public)/_components/search-form.tsx similarity index 100% rename from src/app/(public)/_components/search-form.tsx rename to archive/src/app/(public)/_components/search-form.tsx diff --git a/src/app/(public)/contributors/_components/contributor-card.tsx b/archive/src/app/(public)/contributors/_components/contributor-card.tsx similarity index 100% rename from src/app/(public)/contributors/_components/contributor-card.tsx rename to archive/src/app/(public)/contributors/_components/contributor-card.tsx diff --git a/src/app/(public)/contributors/page.tsx b/archive/src/app/(public)/contributors/page.tsx similarity index 100% rename from src/app/(public)/contributors/page.tsx rename to archive/src/app/(public)/contributors/page.tsx diff --git a/src/app/(public)/page.tsx b/archive/src/app/(public)/page.tsx similarity index 100% rename from src/app/(public)/page.tsx rename to archive/src/app/(public)/page.tsx diff --git a/src/app/(public)/repos/[language]/loading.tsx b/archive/src/app/(public)/repos/[language]/loading.tsx similarity index 100% rename from src/app/(public)/repos/[language]/loading.tsx rename to archive/src/app/(public)/repos/[language]/loading.tsx diff --git a/src/app/(public)/repos/[language]/page.tsx b/archive/src/app/(public)/repos/[language]/page.tsx similarity index 100% rename from src/app/(public)/repos/[language]/page.tsx rename to archive/src/app/(public)/repos/[language]/page.tsx diff --git a/src/app/(public)/repos/_components/pagination.tsx b/archive/src/app/(public)/repos/_components/pagination.tsx similarity index 100% rename from src/app/(public)/repos/_components/pagination.tsx rename to archive/src/app/(public)/repos/_components/pagination.tsx diff --git a/src/app/(public)/repos/_components/repo-card.tsx b/archive/src/app/(public)/repos/_components/repo-card.tsx similarity index 100% rename from src/app/(public)/repos/_components/repo-card.tsx rename to archive/src/app/(public)/repos/_components/repo-card.tsx diff --git a/src/app/(public)/repos/_components/report-button.tsx b/archive/src/app/(public)/repos/_components/report-button.tsx similarity index 100% rename from src/app/(public)/repos/_components/report-button.tsx rename to archive/src/app/(public)/repos/_components/report-button.tsx diff --git a/src/app/(public)/repos/_components/scroll-to-top.tsx b/archive/src/app/(public)/repos/_components/scroll-to-top.tsx similarity index 100% rename from src/app/(public)/repos/_components/scroll-to-top.tsx rename to archive/src/app/(public)/repos/_components/scroll-to-top.tsx diff --git a/src/app/(public)/repos/_components/sorter.tsx b/archive/src/app/(public)/repos/_components/sorter.tsx similarity index 100% rename from src/app/(public)/repos/_components/sorter.tsx rename to archive/src/app/(public)/repos/_components/sorter.tsx diff --git a/src/app/(public)/repos/_components/stars-filter.tsx b/archive/src/app/(public)/repos/_components/stars-filter.tsx similarity index 100% rename from src/app/(public)/repos/_components/stars-filter.tsx rename to archive/src/app/(public)/repos/_components/stars-filter.tsx diff --git a/src/app/(public)/repos/loading.tsx b/archive/src/app/(public)/repos/loading.tsx similarity index 100% rename from src/app/(public)/repos/loading.tsx rename to archive/src/app/(public)/repos/loading.tsx diff --git a/src/app/(public)/repos/page.tsx b/archive/src/app/(public)/repos/page.tsx similarity index 100% rename from src/app/(public)/repos/page.tsx rename to archive/src/app/(public)/repos/page.tsx diff --git a/src/app/actions.ts b/archive/src/app/actions.ts similarity index 100% rename from src/app/actions.ts rename to archive/src/app/actions.ts diff --git a/src/app/android-chrome-192x192.png b/archive/src/app/android-chrome-192x192.png similarity index 100% rename from src/app/android-chrome-192x192.png rename to archive/src/app/android-chrome-192x192.png diff --git a/src/app/android-chrome-512x512.png b/archive/src/app/android-chrome-512x512.png similarity index 100% rename from src/app/android-chrome-512x512.png rename to archive/src/app/android-chrome-512x512.png diff --git a/src/app/api/auth/[...nextauth]/route.ts b/archive/src/app/api/auth/[...nextauth]/route.ts similarity index 100% rename from src/app/api/auth/[...nextauth]/route.ts rename to archive/src/app/api/auth/[...nextauth]/route.ts diff --git a/src/app/api/check-repo/route.ts b/archive/src/app/api/check-repo/route.ts similarity index 100% rename from src/app/api/check-repo/route.ts rename to archive/src/app/api/check-repo/route.ts diff --git a/src/app/favicon.svg b/archive/src/app/favicon.svg similarity index 100% rename from src/app/favicon.svg rename to archive/src/app/favicon.svg diff --git a/src/app/fonts/AtkinsonHyperlegibleMono-Italic-VariableFont_wght.ttf b/archive/src/app/fonts/AtkinsonHyperlegibleMono-Italic-VariableFont_wght.ttf similarity index 100% rename from src/app/fonts/AtkinsonHyperlegibleMono-Italic-VariableFont_wght.ttf rename to archive/src/app/fonts/AtkinsonHyperlegibleMono-Italic-VariableFont_wght.ttf diff --git a/src/app/fonts/AtkinsonHyperlegibleMono-VariableFont_wght.ttf b/archive/src/app/fonts/AtkinsonHyperlegibleMono-VariableFont_wght.ttf similarity index 100% rename from src/app/fonts/AtkinsonHyperlegibleMono-VariableFont_wght.ttf rename to archive/src/app/fonts/AtkinsonHyperlegibleMono-VariableFont_wght.ttf diff --git a/src/app/icon-16x16.png b/archive/src/app/icon-16x16.png similarity index 100% rename from src/app/icon-16x16.png rename to archive/src/app/icon-16x16.png diff --git a/src/app/icon-32x32.png b/archive/src/app/icon-32x32.png similarity index 100% rename from src/app/icon-32x32.png rename to archive/src/app/icon-32x32.png diff --git a/archive/src/app/not-found.tsx b/archive/src/app/not-found.tsx new file mode 100644 index 0000000..24be490 --- /dev/null +++ b/archive/src/app/not-found.tsx @@ -0,0 +1,53 @@ +import Link from 'next/link'; +import { Header } from './(public)/_components/header'; +import { Button } from './(public)/_components/button'; + +export default function NotFoundPage() { + return ( + <> +
+
+
+ {/* 404 Number with Animation */} +
+

+ 404 +

+
+
+ + {/* Error Message */} +
+

+ Oops! Page Not Found +

+

+ The page you're looking for seems to have wandered off into the + digital void. Don't worry, it happens to the best of us! +

+
+ + {/* Action Buttons */} +
+ + + +
+ + {/* Decorative Elements */} +
+
+
+
+
+
+
+ + ); +} diff --git a/src/app/validation.ts b/archive/src/app/validation.ts similarity index 100% rename from src/app/validation.ts rename to archive/src/app/validation.ts diff --git a/src/assets/languages.json b/archive/src/assets/languages.json similarity index 100% rename from src/assets/languages.json rename to archive/src/assets/languages.json diff --git a/src/auth.ts b/archive/src/auth.ts similarity index 100% rename from src/auth.ts rename to archive/src/auth.ts diff --git a/src/components/Icons.tsx b/archive/src/components/Icons.tsx similarity index 100% rename from src/components/Icons.tsx rename to archive/src/components/Icons.tsx diff --git a/src/components/footer.tsx b/archive/src/components/footer.tsx similarity index 100% rename from src/components/footer.tsx rename to archive/src/components/footer.tsx diff --git a/src/components/report-modal.tsx b/archive/src/components/report-modal.tsx similarity index 100% rename from src/components/report-modal.tsx rename to archive/src/components/report-modal.tsx diff --git a/src/env.mjs b/archive/src/env.mjs similarity index 100% rename from src/env.mjs rename to archive/src/env.mjs diff --git a/src/hooks/use-get-repo.ts b/archive/src/hooks/use-get-repo.ts similarity index 100% rename from src/hooks/use-get-repo.ts rename to archive/src/hooks/use-get-repo.ts diff --git a/src/lib/db/connection.ts b/archive/src/lib/db/connection.ts similarity index 100% rename from src/lib/db/connection.ts rename to archive/src/lib/db/connection.ts diff --git a/src/lib/db/migrations/0000_watery_bill_hollister.sql b/archive/src/lib/db/migrations/0000_watery_bill_hollister.sql similarity index 100% rename from src/lib/db/migrations/0000_watery_bill_hollister.sql rename to archive/src/lib/db/migrations/0000_watery_bill_hollister.sql diff --git a/src/lib/db/migrations/0001_magical_doctor_doom.sql b/archive/src/lib/db/migrations/0001_magical_doctor_doom.sql similarity index 100% rename from src/lib/db/migrations/0001_magical_doctor_doom.sql rename to archive/src/lib/db/migrations/0001_magical_doctor_doom.sql diff --git a/src/lib/db/migrations/0002_concerned_violations.sql b/archive/src/lib/db/migrations/0002_concerned_violations.sql similarity index 100% rename from src/lib/db/migrations/0002_concerned_violations.sql rename to archive/src/lib/db/migrations/0002_concerned_violations.sql diff --git a/src/lib/db/migrations/0003_rich_gargoyle.sql b/archive/src/lib/db/migrations/0003_rich_gargoyle.sql similarity index 100% rename from src/lib/db/migrations/0003_rich_gargoyle.sql rename to archive/src/lib/db/migrations/0003_rich_gargoyle.sql diff --git a/src/lib/db/migrations/0004_organic_slapstick.sql b/archive/src/lib/db/migrations/0004_organic_slapstick.sql similarity index 100% rename from src/lib/db/migrations/0004_organic_slapstick.sql rename to archive/src/lib/db/migrations/0004_organic_slapstick.sql diff --git a/src/lib/db/migrations/0005_kind_saracen.sql b/archive/src/lib/db/migrations/0005_kind_saracen.sql similarity index 100% rename from src/lib/db/migrations/0005_kind_saracen.sql rename to archive/src/lib/db/migrations/0005_kind_saracen.sql diff --git a/src/lib/db/migrations/meta/0000_snapshot.json b/archive/src/lib/db/migrations/meta/0000_snapshot.json similarity index 100% rename from src/lib/db/migrations/meta/0000_snapshot.json rename to archive/src/lib/db/migrations/meta/0000_snapshot.json diff --git a/src/lib/db/migrations/meta/0001_snapshot.json b/archive/src/lib/db/migrations/meta/0001_snapshot.json similarity index 100% rename from src/lib/db/migrations/meta/0001_snapshot.json rename to archive/src/lib/db/migrations/meta/0001_snapshot.json diff --git a/src/lib/db/migrations/meta/0002_snapshot.json b/archive/src/lib/db/migrations/meta/0002_snapshot.json similarity index 100% rename from src/lib/db/migrations/meta/0002_snapshot.json rename to archive/src/lib/db/migrations/meta/0002_snapshot.json diff --git a/src/lib/db/migrations/meta/0003_snapshot.json b/archive/src/lib/db/migrations/meta/0003_snapshot.json similarity index 100% rename from src/lib/db/migrations/meta/0003_snapshot.json rename to archive/src/lib/db/migrations/meta/0003_snapshot.json diff --git a/src/lib/db/migrations/meta/0004_snapshot.json b/archive/src/lib/db/migrations/meta/0004_snapshot.json similarity index 100% rename from src/lib/db/migrations/meta/0004_snapshot.json rename to archive/src/lib/db/migrations/meta/0004_snapshot.json diff --git a/src/lib/db/migrations/meta/0005_snapshot.json b/archive/src/lib/db/migrations/meta/0005_snapshot.json similarity index 100% rename from src/lib/db/migrations/meta/0005_snapshot.json rename to archive/src/lib/db/migrations/meta/0005_snapshot.json diff --git a/src/lib/db/migrations/meta/_journal.json b/archive/src/lib/db/migrations/meta/_journal.json similarity index 100% rename from src/lib/db/migrations/meta/_journal.json rename to archive/src/lib/db/migrations/meta/_journal.json diff --git a/src/lib/db/migrations/schema.ts b/archive/src/lib/db/migrations/schema.ts similarity index 100% rename from src/lib/db/migrations/schema.ts rename to archive/src/lib/db/migrations/schema.ts diff --git a/src/state/repoAtom.ts b/archive/src/state/repoAtom.ts similarity index 100% rename from src/state/repoAtom.ts rename to archive/src/state/repoAtom.ts diff --git a/src/types.ts b/archive/src/types.ts similarity index 100% rename from src/types.ts rename to archive/src/types.ts diff --git a/next.config.mjs b/next.config.mjs index d43ab70..2fea024 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,16 +1,26 @@ import path from 'path'; import { fileURLToPath } from 'url'; -import './src/env.mjs'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); +/** + * The project finder has been discontinued (Hacktoberfest no longer counts + * pull requests). The site is now a single static notice page, and this + * config keeps hosting usage close to zero: + * - every old route (/repos, /contributors, /reports, /api/*, ...) is + * redirected to the notice page by the routing layer, so no server + * function, database or GitHub API call is ever invoked; + * - image optimization is turned off so no image transformations are billed. + * + * The retired feature code lives in /archive for reference. + */ + /**@type {import('next').NextConfig}*/ const config = { reactStrictMode: true, - typedRoutes: true, - experimental: { - viewTransition: true + images: { + unoptimized: true }, webpack(config) { config.resolve.alias['@'] = path.resolve(__dirname, 'src'); @@ -23,6 +33,13 @@ const config = { destination: 'https://github.com/max-programming/hacktoberfest-projects', permanent: true + }, + { + // Any path without a file extension (i.e. any old page or API route) + // goes to the notice page. Static assets and /_next are left alone. + source: '/:path((?!_next/)[^.]+)', + destination: '/', + permanent: false } ]; } diff --git a/package.json b/package.json index 5c1ec40..05f2226 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,9 @@ "@databuddy/sdk": "^2.1.77", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.32.0", + "@fontsource-variable/inter": "^5.3.0", + "@fontsource/barlow-semi-condensed": "^5.3.0", + "@fontsource/space-mono": "^5.3.0", "@t3-oss/env-nextjs": "^0.13.8", "@twuni/emojify": "^1.0.2", "@types/node": "^24.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed64746..27ae788 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,15 @@ importers: '@eslint/js': specifier: ^9.32.0 version: 9.32.0 + '@fontsource-variable/inter': + specifier: ^5.3.0 + version: 5.3.0 + '@fontsource/barlow-semi-condensed': + specifier: ^5.3.0 + version: 5.3.0 + '@fontsource/space-mono': + specifier: ^5.3.0 + version: 5.3.0 '@t3-oss/env-nextjs': specifier: ^0.13.8 version: 0.13.8(typescript@5.9.2)(zod@4.0.14) @@ -537,6 +546,15 @@ packages: resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fontsource-variable/inter@5.3.0': + resolution: {integrity: sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==} + + '@fontsource/barlow-semi-condensed@5.3.0': + resolution: {integrity: sha512-EdpQ1GlLMofGqDsQhEw+g6DonNKmzt21p8y/oNbTl4BFzEkqYkFyE2fj25YGxmZBL/LZZGAxe74FlvEWcgc31w==} + + '@fontsource/space-mono@5.3.0': + resolution: {integrity: sha512-FrpBMOVWn3PRdRHlrZWC55X3kZG/2BTH7SM5ZyS/bky3iKya2BturI5lk+t0RoDQL2JyHzURsVq/EisCsxpI5A==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -583,92 +601,78 @@ packages: resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.0': resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.0': resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.0': resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.0': resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.0': resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.0': resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-linux-arm64@0.34.3': resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-linux-arm@0.34.3': resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-linux-ppc64@0.34.3': resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-linux-s390x@0.34.3': resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-linux-x64@0.34.3': resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.3': resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-linuxmusl-x64@0.34.3': resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-wasm32@0.34.3': resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} @@ -800,28 +804,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@next/swc-linux-arm64-musl@15.5.7': resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@next/swc-linux-x64-gnu@15.5.7': resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@next/swc-linux-x64-musl@15.5.7': resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@next/swc-win32-arm64-msvc@15.5.7': resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} @@ -1029,49 +1029,41 @@ packages: resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] - libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] - libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] - libc: [musl] '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} @@ -3149,6 +3141,12 @@ snapshots: '@eslint/core': 0.15.1 levn: 0.4.1 + '@fontsource-variable/inter@5.3.0': {} + + '@fontsource/barlow-semi-condensed@5.3.0': {} + + '@fontsource/space-mono@5.3.0': {} + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': diff --git a/public/favicon.svg b/public/favicon.svg index b37f4c0..cede9f1 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/public/hacktoberfest-2026.svg b/public/hacktoberfest-2026.svg new file mode 100644 index 0000000..1348a91 --- /dev/null +++ b/public/hacktoberfest-2026.svg @@ -0,0 +1 @@ + diff --git a/src/app/apple-icon.png b/src/app/apple-icon.png index 1616a36..d7d75cb 100644 Binary files a/src/app/apple-icon.png and b/src/app/apple-icon.png differ diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 8f7ee23..4ac35b5 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,102 +1,75 @@ +// Fonts are self-hosted (bundled from npm) so visitors make no requests to +// third-party font services. +import '@fontsource/barlow-semi-condensed/latin-700.css'; +import '@fontsource/barlow-semi-condensed/latin-800.css'; +import '@fontsource/space-mono/latin-400.css'; +import '@fontsource/space-mono/latin-700.css'; +import '@fontsource-variable/inter/wght.css'; import '@/styles/globals.css'; -import Script from 'next/script'; import type { Metadata, Viewport } from 'next'; -import { unstable_ViewTransition as ViewTransition } from 'react'; -import { Toaster } from 'react-hot-toast'; -import { SessionProvider } from 'next-auth/react'; -import { Footer } from '@/components/footer'; -import { ReportModal } from '@/components/report-modal'; -import { env } from '@/env.mjs'; -import localFont from 'next/font/local'; -import { Databuddy } from '@databuddy/sdk/react'; -const atkinsonHyperlegibleMono = localFont({ - variable: '--font-atkinson-hyperlegible-mono', - src: [ - { - path: './fonts/AtkinsonHyperlegibleMono-Italic-VariableFont_wght.ttf', - weight: '400', - style: 'italic' - }, - { - path: './fonts/AtkinsonHyperlegibleMono-VariableFont_wght.ttf', - weight: '400', - style: 'normal' - } - ] -}); +// Analytics are disabled now that the project finder is discontinued. +// Uncomment these (and the matching blocks below) to bring them back. +// The env schema lives in archive/src/env.mjs. +// import Script from 'next/script'; +// import { Databuddy } from '@databuddy/sdk/react'; +// import { env } from '@/env.mjs'; export default function RootLayout({ children }: React.PropsWithChildren) { return ( - + - - - {children} -