Skip to content

Commit 2878a48

Browse files
author
FreshPass
committed
Initial commit - FreshPass website with case studies and QR generator
Complete Next.js website featuring: - Modern animated homepage with FreshPass branding - Wi-Fi QR code generator at /qr - Hotel Wi-Fi case study at /case-studies/hotel-wifi - Responsive design with Tailwind CSS - Framer Motion animations - TypeScript support - Production-ready build
0 parents  commit 2878a48

32 files changed

Lines changed: 3837 additions & 0 deletions

.github/workflows/deploy.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Deploy freshpass Website
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
workflow_dispatch:
7+
8+
jobs:
9+
deploy:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- uses: actions/checkout@v3
14+
15+
- name: Setup Node.js
16+
uses: actions/setup-node@v3
17+
with:
18+
node-version: '18'
19+
cache: 'npm'
20+
21+
- name: Install dependencies
22+
run: npm ci
23+
24+
- name: Build
25+
run: npm run build
26+
27+
- name: Deploy to server
28+
uses: burnett01/rsync-deployments@5.2
29+
with:
30+
switches: -avzr --delete
31+
path: out/
32+
remote_path: /var/www/freshpass/
33+
remote_host: ${{ secrets.HOST }}
34+
remote_user: ${{ secrets.USERNAME }}
35+
remote_key: ${{ secrets.SSH_KEY }}
36+
37+
- name: Restart nginx
38+
uses: appleboy/ssh-action@v0.1.5
39+
with:
40+
host: ${{ secrets.HOST }}
41+
username: ${{ secrets.USERNAME }}
42+
key: ${{ secrets.SSH_KEY }}
43+
port: 22
44+
timeout: 60s
45+
command_timeout: 5m
46+
script: |
47+
sudo systemctl restart nginx

.gitignore

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Dependencies
2+
node_modules/
3+
.pnp
4+
.pnp.js
5+
6+
# Production
7+
.next/
8+
out/
9+
build/
10+
11+
# Environment variables
12+
.env*
13+
14+
# Debug
15+
npm-debug.log*
16+
yarn-debug.log*
17+
yarn-error.log*
18+
19+
# IDE
20+
.vscode/
21+
.idea/
22+
23+
# OS
24+
.DS_Store
25+
Thumbs.db
26+
node_modules

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# FreshPass Today Website
2+
3+
A modern, animated product website built with Next.js, Tailwind CSS, and Framer Motion.
4+
5+
🚀 **Live at:** freshpass.today
6+
7+
## Features
8+
9+
- **Smooth animations** with Framer Motion
10+
- **Smooth scrolling** with Lenis
11+
- **Responsive design** with Tailwind CSS
12+
- **Modern typography** using Inter font
13+
- **Optimized performance** with Next.js 13
14+
15+
## Sections
16+
17+
- Hero with brand name and CTA
18+
- Services showcase with hover effects
19+
- About section with mission statement
20+
- Blog/Insights placeholder
21+
- Contact with email and social links
22+
- Footer with legal links
23+
24+
## Getting Started
25+
26+
```bash
27+
# Install dependencies
28+
npm install
29+
30+
# Run development server
31+
npm run dev
32+
33+
# Build for production
34+
npm run build
35+
36+
# Start production server
37+
npm start
38+
```
39+
40+
41+
## Tech Stack
42+
43+
- Next.js 13 (React framework)
44+
- React 18 (JavaScript library)
45+
- TypeScript (for type safety)
46+
- Tailwind CSS (for styling)
47+
- Framer Motion (for animations)
48+
- Lenis (for smooth scrolling)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import CaseStudyContent from '../../../components/CaseStudyContent'
2+
import type { Metadata } from 'next'
3+
4+
export const metadata: Metadata = {
5+
title: 'Hotel Wi-Fi Case Study - FreshPass Secure Guest Access',
6+
description: 'How FreshPass transforms hotel guest Wi-Fi with secure QR codes using Meraki IPSK. No shared passwords, no captive portals.',
7+
robots: 'noindex, nofollow'
8+
}
9+
10+
export default function HotelWiFiCase() {
11+
return <CaseStudyContent />
12+
}

app/layout.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import '../styles/globals.css'
2+
import { ReactNode } from 'react'
3+
4+
export default function RootLayout({ children }: { children: ReactNode }) {
5+
return (
6+
<html lang="en">
7+
<head>
8+
<link rel="preconnect" href="https://fonts.googleapis.com" />
9+
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
10+
<link href="https://fonts.googleapis.com/css2?family=Red+Hat+Display:ital,wght@0,400;0,500;0,700;0,900;1,400;1,500;1,700;1,900&family=Red+Hat+Text:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap" rel="stylesheet" />
11+
</head>
12+
<body className="font-text">{children}</body>
13+
</html>
14+
)
15+
}

app/legal/page.tsx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
export default function Legal() {
2+
return (
3+
<div className="min-h-screen bg-slate-50 py-24 px-6">
4+
<div className="max-w-4xl mx-auto">
5+
<h1 className="text-4xl font-bold text-slate-900 mb-8">Legal Information</h1>
6+
7+
<div className="prose prose-slate max-w-none">
8+
<section className="mb-8">
9+
<h2 className="text-2xl font-semibold text-slate-900 mb-4">Company Information</h2>
10+
<div className="text-slate-600 space-y-2">
11+
<p><strong>Company Name:</strong> Shababu Systems Ltd</p>
12+
<p><strong>Company Number:</strong> 16621448</p>
13+
<p><strong>Registered in:</strong> England and Wales</p>
14+
<p><strong>Nature of Business:</strong> Information technology consultancy activities</p>
15+
<p>
16+
<strong>Companies House:</strong>{' '}
17+
<a
18+
href="https://find-and-update.company-information.service.gov.uk/company/16621448"
19+
target="_blank"
20+
rel="noopener noreferrer"
21+
className="text-blue-600 hover:underline"
22+
>
23+
View Company Details
24+
</a>
25+
</p>
26+
</div>
27+
</section>
28+
29+
<section className="mb-8">
30+
<h2 className="text-2xl font-semibold text-slate-900 mb-4">Contact Information</h2>
31+
<div className="text-slate-600">
32+
<p><strong>Email:</strong> <a href="mailto:hello@shababu.xyz" className="text-blue-600 hover:underline">hello@shababu.xyz</a></p>
33+
<p><strong>Website:</strong> <a href="https://shababu.xyz" className="text-blue-600 hover:underline">shababu.xyz</a></p>
34+
</div>
35+
</section>
36+
37+
<section className="mb-8">
38+
<h2 className="text-2xl font-semibold text-slate-900 mb-4">Intellectual Property</h2>
39+
<p className="text-slate-600">
40+
All content on this website is the property of Shababu Systems Ltd unless otherwise stated.
41+
</p>
42+
</section>
43+
</div>
44+
</div>
45+
</div>
46+
)
47+
}

app/page.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import SmoothScroll from '../components/SmoothScroll'
2+
import Hero from '../components/Hero'
3+
import Services from '../components/Services'
4+
import About from '../components/About'
5+
import Blog from '../components/Blog'
6+
import Contact from '../components/Contact'
7+
import Footer from '../components/Footer'
8+
9+
export default function Home() {
10+
return (
11+
<>
12+
<SmoothScroll />
13+
<Hero />
14+
<Services />
15+
<About />
16+
<Blog />
17+
<Contact />
18+
<Footer />
19+
</>
20+
)
21+
}

app/privacy/page.tsx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
export default function Privacy() {
2+
return (
3+
<div className="min-h-screen bg-slate-50 py-24 px-6">
4+
<div className="max-w-4xl mx-auto">
5+
<h1 className="text-4xl font-bold text-slate-900 mb-8">Privacy Policy</h1>
6+
7+
<div className="prose prose-slate max-w-none">
8+
<p className="text-lg text-slate-600 mb-8">
9+
Last updated: {new Date().toLocaleDateString()}
10+
</p>
11+
12+
<section className="mb-8">
13+
<h2 className="text-2xl font-semibold text-slate-900 mb-4">Information We Collect</h2>
14+
<p className="text-slate-600 mb-4">
15+
We collect information you provide directly to us, such as when you contact us via email or through our website forms.
16+
</p>
17+
</section>
18+
19+
<section className="mb-8">
20+
<h2 className="text-2xl font-semibold text-slate-900 mb-4">How We Use Your Information</h2>
21+
<p className="text-slate-600 mb-4">
22+
We use the information we collect to respond to your inquiries and provide our services.
23+
</p>
24+
</section>
25+
26+
<section className="mb-8">
27+
<h2 className="text-2xl font-semibold text-slate-900 mb-4">Contact Us</h2>
28+
<p className="text-slate-600">
29+
If you have any questions about this Privacy Policy, please contact us at{' '}
30+
<a href="mailto:hello@shababu.xyz" className="text-blue-600 hover:underline">
31+
hello@shababu.xyz
32+
</a>
33+
</p>
34+
</section>
35+
</div>
36+
</div>
37+
</div>
38+
)
39+
}

0 commit comments

Comments
 (0)