Skip to content

Commit 78d9f70

Browse files
author
FreshPass
committed
Refactor code structure for improved readability and maintainability
1 parent dd8da9f commit 78d9f70

9 files changed

Lines changed: 236 additions & 5 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
A modern, animated product website built with Next.js, Tailwind CSS, and Framer Motion.
44

5-
🚀 **Live at:** freshpass.today
5+
🚀 **Live at:** freshpass.today, refreshwifi.com
66

77
## Features
88

@@ -45,4 +45,4 @@ npm start
4545
- TypeScript (for type safety)
4646
- Tailwind CSS (for styling)
4747
- Framer Motion (for animations)
48-
- Lenis (for smooth scrolling)
48+
- Lenis (for smooth scrolling)

app/showcase/school/page.tsx

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
'use client'
2+
3+
import { motion } from 'framer-motion'
4+
import Link from 'next/link'
5+
import PageHero from '../../../components/PageHero'
6+
7+
export default function SchoolShowcase() {
8+
return (
9+
<div className="min-h-screen bg-white">
10+
{/* Navigation Header */}
11+
<nav className="absolute top-0 left-0 right-0 z-20 p-6">
12+
<Link href="/" className="inline-block">
13+
<img
14+
src="/Icon-Dark.svg"
15+
alt="FreshPass Logo"
16+
className="w-12 h-12 hover:scale-105 transition-transform"
17+
/>
18+
</Link>
19+
</nav>
20+
21+
<PageHero
22+
title="Simple, Secure Guest Wi-Fi for Schools"
23+
subtitle="Clear guidance for non-technical staff with light technical reassurance"
24+
backgroundImage="https://images.unsplash.com/photo-1580582932707-520aed937b7b?ixlib=rb-4.0.3&auto=format&fit=crop&w=2000&q=80"
25+
showLogo={false}
26+
/>
27+
28+
{/* Content Section */}
29+
<section className="py-20 px-6">
30+
<div className="max-w-4xl mx-auto">
31+
<motion.div
32+
initial={{ opacity: 0, y: 30 }}
33+
whileInView={{ opacity: 1, y: 0 }}
34+
viewport={{ once: true }}
35+
>
36+
<div className="text-lg text-gray-green leading-relaxed space-y-8 font-text">
37+
<p>
38+
FreshPass transforms your school's guest Wi-Fi from a daily headache into a seamless experience. No more shared passwords, no more troubleshooting failed logins, no more security concerns about who has access to your network.
39+
</p>
40+
41+
<div>
42+
<h3 className="text-2xl font-bold text-dark-gray mb-4 font-display">The Problem with Current Guest Wi-Fi</h3>
43+
<p>
44+
Most schools rely on shared passwords ("SchoolGuest123") or Google sign-in systems that frequently fail. Shared passwords get passed around, never expire, and create security risks. Google logins confuse visitors and waste staff time troubleshooting.
45+
</p>
46+
<p className="mt-4">
47+
<strong>FreshPass eliminates these problems entirely.</strong> Each visitor gets their own secure, time-limited access that expires automatically. No shared passwords, no failed logins, no security gaps.
48+
</p>
49+
</div>
50+
51+
<div>
52+
<h3 className="text-2xl font-bold text-dark-gray mb-4 font-display">How It Works (Simple for Everyone)</h3>
53+
<p>
54+
Visitors approach reception and scan a QR code on your tablet. Their device connects instantly—no typing passwords, no creating accounts, no technical knowledge required. It works on phones, tablets, and laptops equally well.
55+
</p>
56+
<p className="mt-4">
57+
For your staff, it's even simpler: the system runs itself. No password management, no troubleshooting visitor connection issues, no explaining complicated login processes.
58+
</p>
59+
</div>
60+
61+
<div>
62+
<h3 className="text-2xl font-bold text-dark-gray mb-4 font-display">Security Benefits You Can Trust</h3>
63+
<p>
64+
FreshPass uses Meraki's enterprise-grade Identity PSK technology. This means:
65+
</p>
66+
<ul className="list-disc list-inside space-y-2 ml-4 mt-4">
67+
<li><strong>Individual credentials:</strong> Each visitor gets unique access—no shared passwords</li>
68+
<li><strong>Automatic expiration:</strong> Access expires when the visit ends (you control the timing)</li>
69+
<li><strong>Network isolation:</strong> Guests can't see or access school devices or data</li>
70+
<li><strong>Audit trail:</strong> You know exactly who connected and when</li>
71+
<li><strong>Instant revocation:</strong> Remove access immediately if needed</li>
72+
</ul>
73+
</div>
74+
75+
<div>
76+
<h3 className="text-2xl font-bold text-dark-gray mb-4 font-display">How Guests Use It</h3>
77+
<ol className="list-decimal list-inside space-y-2 ml-4">
78+
<li>Visitor approaches reception</li>
79+
<li>Scan FreshPass QR code on reception tablet</li>
80+
<li>Device connects automatically</li>
81+
<li>Laptop users enter displayed code or photograph it</li>
82+
</ol>
83+
</div>
84+
85+
<div>
86+
<h3 className="text-2xl font-bold text-dark-gray mb-4 font-display">Dramatically Reduced Staff Workload</h3>
87+
<p>
88+
Your reception and IT staff will immediately notice the difference:
89+
</p>
90+
<ul className="list-disc list-inside space-y-2 ml-4 mt-4">
91+
<li>No more "What's the Wi-Fi password?" questions</li>
92+
<li>No troubleshooting failed Google logins</li>
93+
<li>No explaining complex splash page processes</li>
94+
<li>No worrying about shared passwords spreading to students</li>
95+
<li>No manual password changes or resets</li>
96+
</ul>
97+
<p className="mt-4">
98+
The system handles everything automatically, freeing your staff to focus on more important tasks.
99+
</p>
100+
</div>
101+
102+
<div>
103+
<h3 className="text-2xl font-bold text-dark-gray mb-4 font-display">Perfect for All School Visitors</h3>
104+
<p>
105+
Whether it's parents for meetings, Ofsted inspectors, visiting teachers, partner schools, maintenance contractors, or delivery drivers—everyone gets the same simple, secure experience.
106+
</p>
107+
<p className="mt-4">
108+
<strong>No technical knowledge required.</strong> If they can use a smartphone camera, they can connect to your Wi-Fi. Visual guides and simple instructions are provided for your reception staff.
109+
</p>
110+
</div>
111+
112+
<div>
113+
<h3 className="text-2xl font-bold text-dark-gray mb-4 font-display">Tablet Placement and Control</h3>
114+
<p>
115+
The FreshPass tablet stays at your reception desk where staff can supervise its use. Position it out of students' reach to prevent misuse. The tablet is locked to the FreshPass application—visitors can't browse the internet or access other functions.
116+
</p>
117+
</div>
118+
119+
<div className="bg-cream p-6 rounded-lg">
120+
<h3 className="text-xl font-bold text-dark-gray mb-3 font-display">Showcase School Benefits</h3>
121+
<p className="text-sm">
122+
As a showcase school, the service may be provided at no cost with updates and monitoring included. Participation can be withdrawn at any time. No impact on student or staff networks.
123+
</p>
124+
</div>
125+
</div>
126+
</motion.div>
127+
</div>
128+
</section>
129+
130+
{/* Call to Action */}
131+
<section className="py-20 px-6 bg-dark-gray text-white">
132+
<div className="max-w-4xl mx-auto text-center">
133+
<motion.div
134+
initial={{ opacity: 0, y: 30 }}
135+
whileInView={{ opacity: 1, y: 0 }}
136+
viewport={{ once: true }}
137+
>
138+
<h2 className="text-3xl md:text-4xl font-bold mb-6 font-display">
139+
Ready to Simplify Guest Wi-Fi?
140+
</h2>
141+
<p className="text-xl text-gray-300 mb-8 max-w-2xl mx-auto font-text">
142+
Transform your school's guest Wi-Fi experience with secure, simple access that works for everyone.
143+
</p>
144+
<div className="space-y-4 md:space-y-0 md:space-x-4 md:flex md:justify-center">
145+
<Link
146+
href="/#contact"
147+
className="inline-block bg-freshpass-green text-dark-gray px-8 py-4 rounded-full text-lg font-medium hover:bg-freshpass-green-70 transition-colors font-text"
148+
>
149+
Get in Touch
150+
</Link>
151+
<Link
152+
href="/"
153+
className="inline-block border border-gray-300 text-white px-8 py-4 rounded-full text-lg font-medium hover:bg-gray-green transition-colors font-text"
154+
>
155+
Back to Home
156+
</Link>
157+
</div>
158+
</motion.div>
159+
</div>
160+
</section>
161+
</div>
162+
)
163+
}

components/PageHero.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ interface PageHeroProps {
1111

1212
export default function PageHero({ title, subtitle, backgroundImage, showLogo = false }: PageHeroProps) {
1313
return (
14-
<section className="relative min-h-[60vh] flex items-center justify-center bg-cream overflow-hidden">
14+
<section className="relative min-h-[40vh] flex items-center justify-center bg-cream overflow-hidden">
1515
{backgroundImage && (
1616
<div
1717
className="absolute inset-0 bg-cover bg-center opacity-30"

next-env.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/// <reference types="next" />
22
/// <reference types="next/image-types/global" />
3+
/// <reference types="next/navigation-types/compat/navigation" />
34

45
// NOTE: This file should not be edited
56
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.

nginx/freshpass.today.conf

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ server {
66
return 301 https://freshpass.today$request_uri;
77
}
88

9+
# HTTP to HTTPS redirect for refreshwifi.com
10+
server {
11+
listen 80;
12+
listen [::]:80;
13+
server_name refreshwifi.com www.refreshwifi.com;
14+
return 301 https://refreshwifi.com$request_uri;
15+
}
16+
917
# Redirect www and .com domains to freshpass.today
1018
server {
1119
listen 443 ssl http2;
@@ -18,6 +26,18 @@ server {
1826
return 301 https://freshpass.today$request_uri;
1927
}
2028

29+
# Redirect www to refreshwifi.com
30+
server {
31+
listen 443 ssl http2;
32+
listen [::]:443 ssl http2;
33+
server_name www.refreshwifi.com;
34+
35+
ssl_certificate /etc/letsencrypt/live/refreshwifi.com/fullchain.pem;
36+
ssl_certificate_key /etc/letsencrypt/live/refreshwifi.com/privkey.pem;
37+
38+
return 301 https://refreshwifi.com$request_uri;
39+
}
40+
2141
# Main server block for freshpass.today
2242
server {
2343
listen 443 ssl http2;
@@ -62,4 +82,50 @@ server {
6282
# Error pages
6383
error_page 404 /404.html;
6484
error_page 500 502 503 504 /50x.html;
65-
}
85+
}
86+
87+
# Main server block for refreshwifi.com
88+
server {
89+
listen 443 ssl http2;
90+
listen [::]:443 ssl http2;
91+
server_name refreshwifi.com;
92+
93+
# SSL Configuration
94+
ssl_certificate /etc/letsencrypt/live/refreshwifi.com/fullchain.pem;
95+
ssl_certificate_key /etc/letsencrypt/live/refreshwifi.com/privkey.pem;
96+
ssl_protocols TLSv1.2 TLSv1.3;
97+
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
98+
ssl_prefer_server_ciphers off;
99+
100+
# Security headers
101+
add_header X-Frame-Options "SAMEORIGIN" always;
102+
add_header X-XSS-Protection "1; mode=block" always;
103+
add_header X-Content-Type-Options "nosniff" always;
104+
add_header Referrer-Policy "no-referrer-when-downgrade" always;
105+
add_header Content-Security-Policy "default-src 'self' https: data: blob:; script-src 'self' https://client.crisp.chat https://*.crisp.chat 'unsafe-inline' 'unsafe-eval'; connect-src 'self' https://client.crisp.chat https://*.crisp.chat wss://client.crisp.chat wss://*.crisp.chat; img-src 'self' https://image.crisp.chat https://client.crisp.chat data: blob:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://client.crisp.chat; font-src 'self' https://fonts.gstatic.com https://client.crisp.chat data:; frame-src https://client.crisp.chat https://*.crisp.chat;" always;
106+
107+
# Document root
108+
root /var/www/freshpass;
109+
index index.html;
110+
111+
# Gzip compression
112+
gzip on;
113+
gzip_vary on;
114+
gzip_min_length 1024;
115+
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
116+
117+
# Cache static assets
118+
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
119+
expires 1y;
120+
add_header Cache-Control "public, immutable";
121+
}
122+
123+
# Main location
124+
location / {
125+
try_files $uri $uri/ $uri.html /index.html;
126+
}
127+
128+
# Error pages
129+
error_page 404 /404.html;
130+
error_page 500 502 503 504 /50x.html;
131+
}
1.99 MB
Loading
507 KB
Loading
475 KB
Loading

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
{
2222
"name": "next"
2323
}
24-
]
24+
],
25+
"strictNullChecks": true
2526
},
2627
"include": [
2728
"next-env.d.ts",

0 commit comments

Comments
 (0)