Skip to content

Commit e2eb9ec

Browse files
Configure for GitHub Pages deployment
1 parent 2188f15 commit e2eb9ec

18 files changed

Lines changed: 1570 additions & 85 deletions

.github/workflows/deploy.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
name: Deploy to GitHub Pages
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: read
10+
pages: write
11+
id-token: write
12+
13+
concurrency:
14+
group: "pages"
15+
cancel-in-progress: false
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
24+
- name: Detect package manager
25+
id: detect-package-manager
26+
run: |
27+
if [ -f "${{ github.workspace }}/yarn.lock" ]; then
28+
echo "manager=yarn" >> $GITHUB_OUTPUT
29+
echo "command=install" >> $GITHUB_OUTPUT
30+
echo "runner=yarn" >> $GITHUB_OUTPUT
31+
exit 0
32+
elif [ -f "${{ github.workspace }}/package.json" ]; then
33+
echo "manager=npm" >> $GITHUB_OUTPUT
34+
echo "command=ci" >> $GITHUB_OUTPUT
35+
echo "runner=npx --no-install" >> $GITHUB_OUTPUT
36+
exit 0
37+
else
38+
echo "Unable to determine package manager"
39+
exit 1
40+
fi
41+
42+
- name: Setup Node
43+
uses: actions/setup-node@v4
44+
with:
45+
node-version: "20"
46+
cache: ${{ steps.detect-package-manager.outputs.manager }}
47+
48+
- name: Setup Pages
49+
uses: actions/configure-pages@v5
50+
with:
51+
static_site_generator: next
52+
53+
- name: Install dependencies
54+
run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
55+
56+
- name: Build with Next.js
57+
run: ${{ steps.detect-package-manager.outputs.runner }} next build
58+
59+
- name: Upload artifact
60+
uses: actions/upload-pages-artifact@v3
61+
with:
62+
path: ./out
63+
64+
deploy:
65+
environment:
66+
name: github-pages
67+
url: ${{ steps.deployment.outputs.page_url }}
68+
runs-on: ubuntu-latest
69+
needs: build
70+
steps:
71+
- name: Deploy to GitHub Pages
72+
id: deployment
73+
uses: actions/deploy-pages@v4

app/favicon.ico

257 KB
Binary file not shown.

app/globals.css

Lines changed: 175 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,191 @@
11
@import "tailwindcss";
22

3+
/* ========================================
4+
GitHub Repo Health Analyzer - Design System
5+
Premium Dark Mode with Glassmorphism
6+
======================================== */
7+
38
:root {
4-
--background: #ffffff;
5-
--foreground: #171717;
9+
--background: #020617;
10+
--foreground: #e2e8f0;
11+
--primary: #6366f1;
12+
--primary-foreground: #ffffff;
13+
--accent: #22d3ee;
14+
--muted: #64748b;
15+
--card: rgba(15, 23, 42, 0.8);
16+
--card-border: rgba(51, 65, 85, 0.5);
17+
--success: #22c55e;
18+
--warning: #f59e0b;
19+
--danger: #ef4444;
620
}
721

822
@theme inline {
923
--color-background: var(--background);
1024
--color-foreground: var(--foreground);
11-
--font-sans: var(--font-geist-sans);
12-
--font-mono: var(--font-geist-mono);
25+
--font-sans: var(--font-inter), system-ui, sans-serif;
1326
}
1427

15-
@media (prefers-color-scheme: dark) {
16-
:root {
17-
--background: #0a0a0a;
18-
--foreground: #ededed;
19-
}
28+
/* ========================================
29+
Base Styles
30+
======================================== */
31+
32+
html {
33+
scroll-behavior: smooth;
2034
}
2135

2236
body {
2337
background: var(--background);
2438
color: var(--foreground);
25-
font-family: Arial, Helvetica, sans-serif;
39+
font-family: var(--font-sans);
40+
-webkit-font-smoothing: antialiased;
41+
-moz-osx-font-smoothing: grayscale;
42+
}
43+
44+
/* Subtle background gradient */
45+
body::before {
46+
content: "";
47+
position: fixed;
48+
inset: 0;
49+
z-index: -1;
50+
background:
51+
radial-gradient(ellipse 80% 50% at 50% -20%, rgba(99, 102, 241, 0.15), transparent),
52+
radial-gradient(ellipse 60% 40% at 80% 100%, rgba(34, 211, 238, 0.1), transparent);
53+
pointer-events: none;
54+
}
55+
56+
/* ========================================
57+
Animation Keyframes
58+
======================================== */
59+
60+
@keyframes fade-in {
61+
from { opacity: 0; }
62+
to { opacity: 1; }
63+
}
64+
65+
@keyframes slide-up {
66+
from { opacity: 0; transform: translateY(20px); }
67+
to { opacity: 1; transform: translateY(0); }
68+
}
69+
70+
@keyframes slide-down {
71+
from { opacity: 0; transform: translateY(-10px); }
72+
to { opacity: 1; transform: translateY(0); }
73+
}
74+
75+
@keyframes pulse-glow {
76+
0%, 100% { box-shadow: 0 0 20px rgba(99, 102, 241, 0.3); }
77+
50% { box-shadow: 0 0 40px rgba(99, 102, 241, 0.5); }
78+
}
79+
80+
@keyframes shimmer {
81+
0% { background-position: -200% 0; }
82+
100% { background-position: 200% 0; }
83+
}
84+
85+
/* ========================================
86+
Animation Utilities
87+
======================================== */
88+
89+
.animate-fade-in {
90+
animation: fade-in 0.5s ease-out forwards;
91+
}
92+
93+
.animate-slide-up {
94+
animation: slide-up 0.5s ease-out forwards;
95+
}
96+
97+
.animate-slide-down {
98+
animation: slide-down 0.3s ease-out forwards;
99+
}
100+
101+
.animate-pulse-glow {
102+
animation: pulse-glow 2s ease-in-out infinite;
103+
}
104+
105+
/* Staggered animation delays */
106+
.delay-100 { animation-delay: 100ms; }
107+
.delay-200 { animation-delay: 200ms; }
108+
.delay-300 { animation-delay: 300ms; }
109+
.delay-400 { animation-delay: 400ms; }
110+
111+
/* ========================================
112+
Glassmorphism Components
113+
======================================== */
114+
115+
.glass {
116+
background: rgba(15, 23, 42, 0.7);
117+
backdrop-filter: blur(12px);
118+
-webkit-backdrop-filter: blur(12px);
119+
border: 1px solid rgba(51, 65, 85, 0.5);
120+
}
121+
122+
.glass-hover:hover {
123+
background: rgba(30, 41, 59, 0.8);
124+
border-color: rgba(99, 102, 241, 0.3);
125+
}
126+
127+
/* ========================================
128+
Focus & Accessibility
129+
======================================== */
130+
131+
:focus-visible {
132+
outline: 2px solid var(--primary);
133+
outline-offset: 2px;
134+
}
135+
136+
/* Respect user preferences for reduced motion */
137+
@media (prefers-reduced-motion: reduce) {
138+
*,
139+
*::before,
140+
*::after {
141+
animation-duration: 0.01ms !important;
142+
animation-iteration-count: 1 !important;
143+
transition-duration: 0.01ms !important;
144+
}
145+
}
146+
147+
/* ========================================
148+
Custom Scrollbar
149+
======================================== */
150+
151+
::-webkit-scrollbar {
152+
width: 8px;
153+
height: 8px;
154+
}
155+
156+
::-webkit-scrollbar-track {
157+
background: rgba(15, 23, 42, 0.5);
158+
}
159+
160+
::-webkit-scrollbar-thumb {
161+
background: rgba(100, 116, 139, 0.5);
162+
border-radius: 4px;
163+
}
164+
165+
::-webkit-scrollbar-thumb:hover {
166+
background: rgba(100, 116, 139, 0.8);
167+
}
168+
169+
/* ========================================
170+
Selection Highlight
171+
======================================== */
172+
173+
::selection {
174+
background: rgba(99, 102, 241, 0.3);
175+
color: #fff;
176+
}
177+
178+
/* ========================================
179+
Loader Shimmer Effect
180+
======================================== */
181+
182+
.shimmer {
183+
background: linear-gradient(
184+
90deg,
185+
rgba(51, 65, 85, 0.2) 25%,
186+
rgba(51, 65, 85, 0.4) 50%,
187+
rgba(51, 65, 85, 0.2) 75%
188+
);
189+
background-size: 200% 100%;
190+
animation: shimmer 1.5s infinite;
26191
}

app/layout.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
import type { Metadata } from "next";
2-
import { Geist, Geist_Mono } from "next/font/google";
2+
import { Inter } from "next/font/google";
33
import "./globals.css";
44

5-
const geistSans = Geist({
6-
variable: "--font-geist-sans",
7-
subsets: ["latin"],
8-
});
9-
10-
const geistMono = Geist_Mono({
11-
variable: "--font-geist-mono",
5+
const inter = Inter({
6+
variable: "--font-inter",
127
subsets: ["latin"],
8+
display: "swap",
139
});
1410

1511
export const metadata: Metadata = {
16-
title: "Create Next App",
17-
description: "Generated by create next app",
12+
title: "GitHub Repo Health Analyzer | Is That Repo Worth Your Time?",
13+
description: "Analyze any public GitHub repository for documentation quality, maintenance activity, and beginner friendliness. Get an instant health score with clear explanations.",
14+
keywords: ["GitHub", "repository", "analyzer", "health score", "open source", "developer tool"],
15+
openGraph: {
16+
title: "GitHub Repo Health Analyzer",
17+
description: "Instant health reports for public GitHub repositories.",
18+
type: "website",
19+
},
1820
};
1921

2022
export default function RootLayout({
@@ -23,9 +25,9 @@ export default function RootLayout({
2325
children: React.ReactNode;
2426
}>) {
2527
return (
26-
<html lang="en">
28+
<html lang="en" className="dark">
2729
<body
28-
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
30+
className={`${inter.variable} font-sans antialiased bg-slate-950 text-slate-200`}
2931
>
3032
{children}
3133
</body>

0 commit comments

Comments
 (0)