Skip to content

Commit 3cd243f

Browse files
feat: initial Astra Matrix web portal (Vectra XR)
Co-authored-by: Cursor <cursoragent@cursor.com>
0 parents  commit 3cd243f

17 files changed

Lines changed: 8049 additions & 0 deletions

.gitignore

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Dependencies
2+
node_modules/
3+
.pnp
4+
.pnp.js
5+
6+
# Next.js
7+
.next/
8+
out/
9+
10+
# Production build
11+
build/
12+
dist/
13+
14+
# Environment variables
15+
.env
16+
.env*.local
17+
.env.production
18+
19+
# Vercel
20+
.vercel
21+
22+
# TypeScript
23+
*.tsbuildinfo
24+
next-env.d.ts
25+
26+
# OS
27+
.DS_Store
28+
Thumbs.db
29+
30+
# Debug logs
31+
npm-debug.log*
32+
yarn-debug.log*
33+
yarn-error.log*
34+
35+
# Editor
36+
.vscode/
37+
.idea/
38+
*.suo
39+
*.ntvs*
40+
*.njsproj
41+
*.sln
42+
*.sw?

app/globals.css

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
@tailwind base;
2+
@tailwind components;
3+
@tailwind utilities;
4+
5+
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&family=Share+Tech+Mono&display=swap');
6+
7+
:root {
8+
--obsidian: #121214;
9+
--slate: #1a1a1e;
10+
--neon-cyan: #00f0ff;
11+
--industrial-amber: #ff9900;
12+
}
13+
14+
*,
15+
*::before,
16+
*::after {
17+
box-sizing: border-box;
18+
margin: 0;
19+
padding: 0;
20+
}
21+
22+
html,
23+
body {
24+
height: 100%;
25+
overflow: hidden;
26+
background-color: #121214;
27+
color: #00f0ff;
28+
font-family: 'JetBrains Mono', 'Share Tech Mono', monospace;
29+
}
30+
31+
/* Scanline CRT overlay — purely decorative */
32+
.scanlines::after {
33+
content: '';
34+
position: fixed;
35+
inset: 0;
36+
background: repeating-linear-gradient(
37+
0deg,
38+
transparent,
39+
transparent 2px,
40+
rgba(0, 240, 255, 0.012) 2px,
41+
rgba(0, 240, 255, 0.012) 4px
42+
);
43+
pointer-events: none;
44+
z-index: 5;
45+
}
46+
47+
/* Neon text glow utilities */
48+
.neon-glow {
49+
text-shadow:
50+
0 0 10px rgba(0, 240, 255, 0.8),
51+
0 0 20px rgba(0, 240, 255, 0.5),
52+
0 0 40px rgba(0, 240, 255, 0.3);
53+
}
54+
55+
.amber-glow {
56+
text-shadow:
57+
0 0 10px rgba(255, 153, 0, 0.8),
58+
0 0 20px rgba(255, 153, 0, 0.5),
59+
0 0 40px rgba(255, 153, 0, 0.3);
60+
}
61+
62+
/* @react-three/xr VRButton override — repositioned and re-skinned */
63+
#VRButton {
64+
position: fixed !important;
65+
bottom: 2rem !important;
66+
right: 2rem !important;
67+
z-index: 20 !important;
68+
background: rgba(0, 240, 255, 0.06) !important;
69+
border: 1px solid rgba(0, 240, 255, 0.4) !important;
70+
color: #00f0ff !important;
71+
font-family: 'JetBrains Mono', monospace !important;
72+
font-size: 0.7rem !important;
73+
letter-spacing: 0.18em !important;
74+
padding: 0.625rem 1.25rem !important;
75+
cursor: pointer !important;
76+
text-transform: uppercase !important;
77+
transition: background 0.2s ease, box-shadow 0.2s ease !important;
78+
}
79+
80+
#VRButton:hover {
81+
background: rgba(0, 240, 255, 0.14) !important;
82+
box-shadow: 0 0 18px rgba(0, 240, 255, 0.35) !important;
83+
}
84+
85+
/* Thin custom scrollbar for any rare overflow regions */
86+
::-webkit-scrollbar {
87+
width: 3px;
88+
}
89+
::-webkit-scrollbar-track {
90+
background: #121214;
91+
}
92+
::-webkit-scrollbar-thumb {
93+
background: rgba(0, 240, 255, 0.2);
94+
border-radius: 2px;
95+
}

app/layout.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import type { Metadata, Viewport } from 'next'
2+
import './globals.css'
3+
4+
export const metadata: Metadata = {
5+
title: 'Astra Matrix | Vectra XR — Spatial Computing Platform',
6+
description:
7+
'The Native Spatial Supply Chain & Hardware Diagnostics Visor for Horizon OS. Built for Meta Quest 3 by Astra Matrix.',
8+
keywords: [
9+
'spatial computing',
10+
'Meta Quest 3',
11+
'WebXR',
12+
'supply chain',
13+
'Vectra XR',
14+
'Astra Matrix',
15+
'Horizon OS',
16+
'hardware diagnostics',
17+
],
18+
openGraph: {
19+
title: 'Astra Matrix | Vectra XR',
20+
description:
21+
'The Native Spatial Supply Chain & Hardware Diagnostics Visor for Horizon OS.',
22+
type: 'website',
23+
siteName: 'Astra Matrix',
24+
},
25+
robots: {
26+
index: true,
27+
follow: true,
28+
},
29+
}
30+
31+
export const viewport: Viewport = {
32+
width: 'device-width',
33+
initialScale: 1,
34+
maximumScale: 1,
35+
themeColor: '#121214',
36+
}
37+
38+
export default function RootLayout({ children }: { children: React.ReactNode }) {
39+
return (
40+
<html lang="en" className="h-full overflow-hidden">
41+
<body className="h-full overflow-hidden bg-obsidian scanlines">{children}</body>
42+
</html>
43+
)
44+
}

app/page.tsx

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import dynamic from 'next/dynamic'
2+
import Navigation from '@/components/ui/Navigation'
3+
import HeroOverlay from '@/components/ui/HeroOverlay'
4+
5+
// Three.js / WebGL requires the browser DOM — SSR must be disabled for the canvas layer.
6+
const SpatialCanvas = dynamic(() => import('@/components/xr/SpatialCanvas'), {
7+
ssr: false,
8+
loading: () => (
9+
<div className="fixed inset-0 z-0 flex items-center justify-center bg-obsidian">
10+
<div className="flex flex-col items-center gap-4">
11+
<div className="flex gap-2">
12+
{[...Array(3)].map((_, i) => (
13+
<span
14+
key={i}
15+
className="h-1 w-8 bg-neonCyan/20 animate-pulse"
16+
style={{ animationDelay: `${i * 0.15}s` }}
17+
/>
18+
))}
19+
</div>
20+
<span className="font-mono text-[10px] tracking-[0.45em] text-neonCyan/30 uppercase animate-pulse">
21+
INITIALIZING SPATIAL RENDERER
22+
</span>
23+
<div className="flex gap-2">
24+
{[...Array(3)].map((_, i) => (
25+
<span
26+
key={i}
27+
className="h-1 w-8 bg-neonCyan/20 animate-pulse"
28+
style={{ animationDelay: `${i * 0.15 + 0.45}s` }}
29+
/>
30+
))}
31+
</div>
32+
</div>
33+
</div>
34+
),
35+
})
36+
37+
export default function HomePage() {
38+
return (
39+
<main className="relative w-full h-full overflow-hidden bg-obsidian">
40+
{/* z-0 — Three.js WebXR canvas fills entire viewport */}
41+
<SpatialCanvas />
42+
43+
{/* z-10 — Navigation bar: pointer events active for links */}
44+
<Navigation />
45+
46+
{/* z-10 — Hero copy & CTA overlay: pointer-events-none by default,
47+
re-enabled specifically on interactive children */}
48+
<HeroOverlay />
49+
</main>
50+
)
51+
}

0 commit comments

Comments
 (0)