Skip to content

Commit 4d8379b

Browse files
committed
add /preview route with phone mockup frame
1 parent 6abb677 commit 4d8379b

2 files changed

Lines changed: 127 additions & 3 deletions

File tree

frontend/src/Preview.jsx

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import React from 'react';
2+
3+
export default function Preview() {
4+
return (
5+
<div style={styles.page}>
6+
<div style={styles.bg} />
7+
<div style={styles.content}>
8+
<div style={styles.brand}>
9+
<span style={styles.brandZ}>Z</span>appify
10+
</div>
11+
<p style={styles.tagline}>Premium Shoe Store</p>
12+
<div style={styles.phoneWrap}>
13+
<div style={styles.phone}>
14+
<div style={styles.notch} />
15+
<div style={styles.screen}>
16+
<iframe
17+
src="/"
18+
style={styles.iframe}
19+
title="Zappify App"
20+
/>
21+
</div>
22+
<div style={styles.homeBar} />
23+
</div>
24+
</div>
25+
</div>
26+
</div>
27+
);
28+
}
29+
30+
const styles = {
31+
page: {
32+
minHeight: '100vh',
33+
display: 'flex',
34+
alignItems: 'center',
35+
justifyContent: 'center',
36+
background: 'linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%)',
37+
fontFamily: 'sans-serif',
38+
padding: '40px 20px',
39+
flexDirection: 'column',
40+
},
41+
bg: {
42+
position: 'fixed',
43+
inset: 0,
44+
background: 'radial-gradient(ellipse at 20% 50%, rgba(232,93,4,0.15) 0%, transparent 60%), radial-gradient(ellipse at 80% 20%, rgba(100,100,255,0.1) 0%, transparent 60%)',
45+
pointerEvents: 'none',
46+
},
47+
content: {
48+
display: 'flex',
49+
flexDirection: 'column',
50+
alignItems: 'center',
51+
gap: '12px',
52+
position: 'relative',
53+
zIndex: 1,
54+
},
55+
brand: {
56+
fontSize: '36px',
57+
fontWeight: '900',
58+
color: '#fff',
59+
letterSpacing: '-1px',
60+
},
61+
brandZ: {
62+
color: '#e85d04',
63+
},
64+
tagline: {
65+
color: 'rgba(255,255,255,0.5)',
66+
fontSize: '14px',
67+
margin: 0,
68+
letterSpacing: '2px',
69+
textTransform: 'uppercase',
70+
},
71+
phoneWrap: {
72+
marginTop: '20px',
73+
filter: 'drop-shadow(0 40px 80px rgba(0,0,0,0.6))',
74+
},
75+
phone: {
76+
width: '375px',
77+
height: '780px',
78+
background: '#111',
79+
borderRadius: '50px',
80+
padding: '12px',
81+
border: '2px solid rgba(255,255,255,0.1)',
82+
position: 'relative',
83+
display: 'flex',
84+
flexDirection: 'column',
85+
alignItems: 'center',
86+
},
87+
notch: {
88+
width: '120px',
89+
height: '28px',
90+
background: '#111',
91+
borderRadius: '0 0 20px 20px',
92+
position: 'absolute',
93+
top: '12px',
94+
left: '50%',
95+
transform: 'translateX(-50%)',
96+
zIndex: 10,
97+
},
98+
screen: {
99+
flex: 1,
100+
width: '100%',
101+
borderRadius: '40px',
102+
overflow: 'hidden',
103+
background: '#fff',
104+
},
105+
iframe: {
106+
width: '100%',
107+
height: '100%',
108+
border: 'none',
109+
},
110+
homeBar: {
111+
width: '120px',
112+
height: '4px',
113+
background: 'rgba(255,255,255,0.3)',
114+
borderRadius: '2px',
115+
marginTop: '8px',
116+
},
117+
};

frontend/src/main.jsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@ import { createRoot } from 'react-dom/client'
33
import { GoogleOAuthProvider } from '@react-oauth/google'
44
import './index.css'
55
import App from './App.jsx'
6+
import Preview from './Preview.jsx'
7+
8+
const isPreview = window.location.pathname === '/preview';
69

710
createRoot(document.getElementById('root')).render(
811
<StrictMode>
9-
<GoogleOAuthProvider clientId="1076957044730-mht8sbihb0d4661hprrvbjf9v4gb0njr.apps.googleusercontent.com">
10-
<App />
11-
</GoogleOAuthProvider>
12+
{isPreview ? (
13+
<Preview />
14+
) : (
15+
<GoogleOAuthProvider clientId="1076957044730-mht8sbihb0d4661hprrvbjf9v4gb0njr.apps.googleusercontent.com">
16+
<App />
17+
</GoogleOAuthProvider>
18+
)}
1219
</StrictMode>,
1320
)

0 commit comments

Comments
 (0)