Skip to content

Commit 0a44c0b

Browse files
committed
Add Selenix Browser repo browser and releases pages
Introduces interactive browsing for the Selenix-Browser repository, including file/tree navigation, blob viewing, and release details. Updates navigation and project listing to separate Selenix from other projects. Adds new CSS for GitHub-style UI components and refactors related components for improved user experience.
1 parent 7718864 commit 0a44c0b

File tree

13 files changed

+640
-70
lines changed

13 files changed

+640
-70
lines changed

.yarn/install-state.gz

113 Bytes
Binary file not shown.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"private": true,
44
"version": "1.1.0",
55
"type": "module",
6-
"packageManager": "yarn@4.3.1",
6+
"packageManager": "yarn@4.10.3",
77
"scripts": {
88
"dev": "vite",
99
"build": "vite build",

src/components/Navbar.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ export default function Navbar() {
3131

3232
<Link to="/" className="flex items-center gap-3">
3333
<img src={logo} alt="Revalex Technologies" className="h-9 w-9" />
34-
34+
3535
<span className="brand-text hidden md:inline text-lg font-semibold tracking-tight">Revalex Technologies</span>
3636
</Link>
3737

3838
<nav className="hidden md:flex items-center gap-1">
3939
<NavLink to="/" className={navLinkClass} end>Home</NavLink>
40-
<NavLink to="/projects" className={navLinkClass}>Projects</NavLink>
40+
<NavLink to="/projects" className={navLinkClass}>Other Projects</NavLink>
4141
<NavLink to="/labs" className={navLinkClass}>Labs</NavLink>
42+
<NavLink onClick={() => setOpen(false)} to="/projects/selenix" className={navLinkClass}>Selenix Browser</NavLink>
4243

4344
<div className="ml-3 h-6 w-px bg-gray-200" />
4445

@@ -70,8 +71,9 @@ export default function Navbar() {
7071
<div className="pb-4 pt-1">
7172
<nav className="grid gap-1">
7273
<NavLink onClick={() => setOpen(false)} to="/" className={navLinkClass} end>Home</NavLink>
73-
<NavLink onClick={() => setOpen(false)} to="/projects" className={navLinkClass}>Projects</NavLink>
74+
<NavLink onClick={() => setOpen(false)} to="/projects" className={navLinkClass}>Other Projects</NavLink>
7475
<NavLink onClick={() => setOpen(false)} to="/labs" className={navLinkClass}>Labs</NavLink>
76+
<NavLink onClick={() => setOpen(false)} to="/projects/selenix" className={navLinkClass}>Selenix Browser</NavLink>
7577
</nav>
7678
<div className="mt-3 grid gap-2">
7779
<Link onClick={() => setOpen(false)} to="/projects" className="btn btn-primary w-full">Explore</Link>

src/index.css

Lines changed: 91 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ html, body { overflow-x: hidden; }
1919
img, video, canvas, svg { max-width: 100%; height: auto; }
2020
iframe { max-width: 100%; }
2121

22-
* { word-break: break-word; }
23-
.prose, p { overflow-wrap: anywhere; }
24-
2522
header nav { display: flex; flex-wrap: wrap; }
2623
@media (max-width: 640px) {
2724
header nav a,
@@ -44,10 +41,100 @@ header nav { display: flex; flex-wrap: wrap; }
4441

4542
html, body { max-width: 100%; overflow-x: hidden; }
4643
img, video, svg, canvas { max-width: 100%; height: auto; }
47-
* { min-width: 0; }
44+
* { min-width: 0; }
4845
.break-words { overflow-wrap: anywhere; word-break: break-word; }
4946

5047
@media (max-width: 380px) {
5148
.btn { padding-left: 0.875rem; padding-right: 0.875rem; }
5249
.card { padding: 1rem; }
5350
}
51+
52+
.gh-container { max-width: 1200px; margin: 0 auto; padding: 1.25rem; }
53+
.gh-grid { display: grid; grid-template-columns: 1fr 300px; gap: 24px; }
54+
.gh-card { background: #ffffff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 16px;}
55+
.gh-table { width: 100%; border-collapse: collapse; }
56+
.gh-table tr { border-bottom: 1px solid #e5e7eb; }
57+
.gh-table td { padding: 8px 4px; vertical-align: middle; }
58+
.gh-file { display:flex; align-items:center; gap:.5rem; color: #111827; }
59+
.gh-file .type { color: #6b7280; font-size: 12px; }
60+
.gh-breadcrumbs a { color: var(--brand-red); text-decoration: none; }
61+
.gh-breadcrumbs span.sep{ color: #9ca3af; margin: 0 .25rem; }
62+
.gh-tabs { display:flex; gap:8px; border-bottom:1px solid #e5e7eb; }
63+
.gh-tab { padding:8px 12px; border:1px solid #e5e7eb; border-bottom:none; background:#f9fafb; border-top-left-radius:8px; border-top-right-radius:8px; color:#111827; }
64+
.gh-tab.active { background: #ffffff; }
65+
.gh-readme { background: #ffffff; border:1px solid #e5e7eb; border-radius:12px; padding:16px; }
66+
.gh-badge { display:inline-block; padding:2px 6px; font-size: 12px; border:1px solid #e5e7eb; border-radius: 999px; color: #6b7280; }
67+
.gh-download { display:flex; align-items:center; gap:.5rem; border:1px solid #e5e7eb; border-radius:8px; padding:.5rem .75rem; background: #ffffff; }
68+
.gh-download:hover { background:#f3f4f6 }
69+
.gh-heading { font-size: 20px; font-weight: 600; }
70+
.gh-sub { color: #6b7280; font-size: 12px; }
71+
72+
pre.code-view { background:#0b1020; color:#e5e7eb; padding:12px; border-radius:10px; overflow:auto; }
73+
.file-viewer { background:#fff; border:1px solid #e5e7eb; border-radius:12px; padding:16px; }
74+
@media (max-width: 1024px) { .gh-grid { grid-template-columns: 1fr; } }
75+
76+
.readme-wrap, .blob-wrap { max-width: 980px; margin: 0 auto; }
77+
78+
.badge-row img { vertical-align: middle; }
79+
.file-actions { display:flex; gap:.5rem; align-items:center; }
80+
.code-shell { background:#0b1020; color:#e5e7eb; padding:16px; border-radius:12px; border:1px solid #e5e7eb; overflow:auto; }
81+
.table-file-list { width:100%; border-collapse: collapse; }
82+
.table-file-list tr { border-bottom: 1px solid #e5e7eb; }
83+
.table-file-list td { padding: 8px 4px; }
84+
85+
pre.code-view, pre.code-shell,
86+
87+
.markdown-body { box-sizing:border-box; max-width: 980px; margin: 0 auto; padding: 16px; }
88+
.markdown-body { font-family: system-ui, -apple-system, Segoe UI, Helvetica, Arial, Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji; line-height: 1.6; font-size: 16px; }
89+
.markdown-body code, .markdown-body pre, .code-view code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
90+
.markdown-body a { color:#0969da; text-decoration:none; }
91+
.markdown-body a:hover { text-decoration:underline; }
92+
.markdown-body ul, .markdown-body ol { padding-left: 2em; }
93+
.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4 { margin-top: 24px; margin-bottom: 16px; }
94+
.markdown-body h1 { font-size: 2em; padding-bottom:.3em; border-bottom:1px solid #d0d7de; }
95+
.markdown-body h2 { font-size: 1.5em; padding-bottom:.3em; border-bottom:1px solid #d0d7de; }
96+
.markdown-body img { display:inline-block; vertical-align:middle; max-width:100%; }
97+
.readme-wrap { max-width: 980px; margin: 0 auto; }
98+
99+
pre.code-view,
100+
pre.code-shell,
101+
.markdown-body pre {
102+
background: #f6f8fa !important;
103+
color: #24292f !important;
104+
border: 1px solid #eaeef2 !important;
105+
border-radius: 6px !important;
106+
padding: 16px !important;
107+
overflow: auto !important;
108+
}
109+
.markdown-body code {
110+
background: rgba(175, 184, 193, 0.2) !important;
111+
color: #24292f !important;
112+
border-radius: 4px !important;
113+
padding: .2em .4em !important;
114+
}
115+
.markdown-body pre code {
116+
background: transparent !important;
117+
color: inherit !important;
118+
padding: 0 !important;
119+
}
120+
121+
.markdown-body img {
122+
display: inline-block;
123+
vertical-align: middle;
124+
}
125+
126+
.readme-wrap, .blob-wrap, .markdown-body {
127+
max-width: 980px;
128+
margin: 0 auto;
129+
}
130+
131+
@media (max-width: 768px) {
132+
.gh-container { padding: 0.75rem; }
133+
.gh-grid { grid-template-columns: 1fr !important; gap: 16px !important; }
134+
.markdown-body { padding: 12px !important; }
135+
.readme-wrap, .blob-wrap { padding: 0 8px !important; }
136+
.file-actions { flex-wrap: wrap; gap: 6px; }
137+
.file-actions .btn { width: auto; }
138+
}
139+
140+
.markdown-body p { margin: 16px 0; }

src/main.jsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,20 @@ import './index.css'
55
import Home from './pages/Home'
66
import Projects from './pages/Projects'
77
import Selenix from './pages/Selenix'
8+
import SelenixTree from './pages/SelenixTree'
9+
import SelenixBlob from './pages/SelenixBlob'
10+
import SelenixReleases from './pages/SelenixReleases'
11+
import SelenixRelease from './pages/SelenixRelease'
812
import Labs from './pages/Labs'
913

1014
const router = createHashRouter([
1115
{ path: '/', element: <Home /> },
1216
{ path: '/projects', element: <Projects /> },
1317
{ path: '/projects/selenix', element: <Selenix /> },
18+
{ path: '/projects/selenix/tree/:branch/*', element: <SelenixTree /> },
19+
{ path: '/projects/selenix/blob/:branch/*', element: <SelenixBlob /> },
20+
{ path: '/projects/selenix/releases', element: <SelenixReleases /> },
21+
{ path: '/projects/selenix/releases/:tag', element: <SelenixRelease /> },
1422
{ path: '/labs', element: <Labs /> },
1523
])
1624

src/pages/Home.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default function Home() {
77
<div>
88
<Navbar />
99

10-
{/* HERO */}
10+
{}
1111
<section className="hero border-b">
1212
<div className="mx-auto grid max-w-6xl grid-cols-1 items-center gap-10 px-4 py-16 md:grid-cols-2">
1313
<div>
@@ -30,7 +30,7 @@ export default function Home() {
3030
</div>
3131
</section>
3232

33-
{/* VALUE SECTIONS */}
33+
{}
3434
<section className="mx-auto max-w-6xl px-4 py-12 grid grid-cols-1 md:grid-cols-3 gap-6">
3535
{[
3636
{title: 'Solid foundations', body: 'We build on reliable, well-tested stacks to minimize surprises and maximize velocity.'},
@@ -44,7 +44,7 @@ export default function Home() {
4444
))}
4545
</section>
4646

47-
{/* CTA */}
47+
{}
4848
<section className="mx-auto max-w-6xl px-4 pb-14">
4949
<div className="card flex flex-col items-start gap-4 md:flex-row md:items-center md:justify-between">
5050
<div>

src/pages/Labs.jsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,18 @@ function SnakeGame() {
3636
if (t - last < speed) return
3737
last = t
3838

39-
// move
4039
const head = { x: snake[0].x + dir.x, y: snake[0].y + dir.y }
41-
// wrap
40+
4241
const cols = canvas.width/size, rows = canvas.height/size
4342
head.x = (head.x + cols) % cols
4443
head.y = (head.y + rows) % rows
4544

46-
// collision with self
4745
if (snake.some(p => p.x === head.x && p.y === head.y)) {
4846
alive = false
4947
}
5048

5149
snake.unshift(head)
5250

53-
// eat
5451
if (head.x === food.x && head.y === food.y) {
5552
setScore(s => s + 1)
5653
speed = Math.max(60, speed - 2)
@@ -59,15 +56,14 @@ function SnakeGame() {
5956
snake.pop()
6057
}
6158

62-
// draw
6359
ctx.clearRect(0,0,canvas.width, canvas.height)
64-
// grid bg
60+
6561
ctx.fillStyle = '#f8fafc'
6662
ctx.fillRect(0,0,canvas.width, canvas.height)
67-
// food
63+
6864
ctx.fillStyle = '#e50914'
6965
ctx.fillRect(food.x*size, food.y*size, size, size)
70-
// snake
66+
7167
ctx.fillStyle = '#111827'
7268
snake.forEach(p => ctx.fillRect(p.x*size, p.y*size, size, size))
7369

src/pages/Projects.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default function Projects() {
1616
if (!res.ok) throw new Error('GitHub API error ' + res.status)
1717
const data = await res.json()
1818
data.sort((a,b) => new Date(b.updated_at) - new Date(a.updated_at))
19-
setRepos(data)
19+
setRepos(data.filter(r => r.name !== 'Selenix-Browser'))
2020
} catch (e) {
2121
setError(e.message || 'Failed to load repositories')
2222
} finally {
@@ -32,7 +32,7 @@ export default function Projects() {
3232
<main className="mx-auto max-w-6xl px-4 py-12">
3333
<div className="mb-8 flex items-end justify-between">
3434
<div>
35-
<h1 className="text-3xl font-bold">Projects</h1>
35+
<h1 className="text-3xl font-bold">Other Projects</h1>
3636
<p className="mt-2 text-gray-600">Public repositories from our GitHub organization.</p>
3737
</div>
3838
<a className="btn btn-primary" href="https://github.com/orgs/Revalex-Technologies/repositories" target="_blank" rel="noreferrer">All Repositories</a>

0 commit comments

Comments
 (0)