441 lines
12 KiB
Markdown
441 lines
12 KiB
Markdown
# EzSepa Bank Payment - Landing Page
|
||
|
||
Production-ready, responsive, accessible static landing page for the EzSepa Bank Payment Shopify app. Built with TailwindCSS, Vite, and vanilla JavaScript.
|
||
|
||
## 📁 Project Structure
|
||
|
||
```
|
||
ezsepa/
|
||
├── index.html # Main landing page
|
||
├── styles.css # TailwindCSS styles with custom utilities
|
||
├── main.js # JavaScript for interactivity and analytics
|
||
├── package.json # Dependencies and build scripts
|
||
├── tailwind.config.js # TailwindCSS configuration
|
||
├── postcss.config.js # PostCSS configuration
|
||
├── i18n-keys.json # Internationalization keys for integration
|
||
├── assets/ # Image assets and placeholders
|
||
│ ├── hero.png # Dashboard hero image (SVG placeholder)
|
||
│ ├── checkout.png # Checkout extension screenshot (SVG)
|
||
│ ├── analytics.png # Analytics dashboard screenshot (SVG)
|
||
│ └── favicon.svg # App favicon
|
||
└── README.md # This file
|
||
```
|
||
|
||
## 🚀 Quick Start
|
||
|
||
### 1. Install Dependencies
|
||
|
||
```powershell
|
||
npm install
|
||
```
|
||
|
||
This will install:
|
||
- Vite (v5.0.0) - Fast development server and build tool
|
||
- TailwindCSS (v3.4.0) - Utility-first CSS framework
|
||
- PostCSS (v8.4.32) - CSS transformation
|
||
- Autoprefixer (v10.4.16) - Auto-add vendor prefixes
|
||
|
||
### 2. Development Server
|
||
|
||
```powershell
|
||
npm run dev
|
||
```
|
||
|
||
Opens development server at `http://localhost:5173` with hot module reload.
|
||
|
||
### 3. Build for Production
|
||
|
||
```powershell
|
||
npm run build
|
||
```
|
||
|
||
Generates optimized production files in `dist/` folder:
|
||
- Minified HTML, CSS, and JS
|
||
- Optimized assets
|
||
- Ready for deployment
|
||
|
||
### 4. Preview Production Build
|
||
|
||
```powershell
|
||
npm run preview
|
||
```
|
||
|
||
Preview the production build locally at `http://localhost:5174`.
|
||
|
||
## 🎨 Design Overview
|
||
|
||
**Modern, clean landing page** with Shopify-esque aesthetic using:
|
||
- **Color palette**: Brand blue (#0A66C2), success green (#00875A), warning yellow (#FFAB00)
|
||
- **Typography**: System font stack (system-ui, Segoe UI, Roboto, etc.)
|
||
- **Responsive breakpoints**: Mobile-first → 640px → 1024px
|
||
- **Animations**: Fade-in-up, float effects, smooth scrolling
|
||
|
||
## 🔧 Customization Guide
|
||
|
||
### 1. Replace Placeholder Links
|
||
|
||
**Search and replace these placeholders** in `index.html`:
|
||
|
||
- `{INSTALL_LINK}` → Your Shopify App Store URL (e.g., `https://apps.shopify.com/ezsepa-bank-payment`)
|
||
- `{DEMO_LINK}` → Demo video or interactive demo URL
|
||
- `https://github.com/your-repo` → Your actual GitHub repository URL
|
||
|
||
**Quick PowerShell find/replace:**
|
||
|
||
```powershell
|
||
(Get-Content index.html) -replace '\{INSTALL_LINK\}', 'https://apps.shopify.com/your-app' | Set-Content index.html
|
||
(Get-Content index.html) -replace '\{DEMO_LINK\}', 'https://youtu.be/demo-video' | Set-Content index.html
|
||
(Get-Content index.html) -replace 'https://github.com/your-repo', 'https://github.com/yourname/auto-bank-payment' | Set-Content index.html
|
||
```
|
||
|
||
### 2. Replace Asset Images
|
||
|
||
**Current assets are SVG placeholders.** Replace with real screenshots:
|
||
|
||
#### Option A: Use existing repo images
|
||
|
||
If your main repo (`auto-bank-payment`) has images in `web/client/src/assets/images/`:
|
||
|
||
```powershell
|
||
# Copy from main repo to landing page
|
||
Copy-Item "../auto-bank-payment/web/client/src/assets/images/hero.png" "./assets/hero.png"
|
||
Copy-Item "../auto-bank-payment/web/client/src/assets/images/analytics.png" "./assets/analytics.png"
|
||
Copy-Item "../auto-bank-payment/web/client/src/assets/images/checkout.png" "./assets/checkout.png"
|
||
```
|
||
|
||
#### Option B: Take new screenshots
|
||
|
||
1. **Hero image** (`assets/hero.png`): Dashboard showing QR codes and analytics (1200×800px recommended)
|
||
2. **Checkout image** (`assets/checkout.png`): Thank-you page with QR code extension (1200×700px)
|
||
3. **Analytics image** (`assets/analytics.png`): Analytics dashboard with charts (800×600px)
|
||
|
||
**Optimize images before deploying:**
|
||
```powershell
|
||
# Install optimization tools (optional)
|
||
npm install -D vite-plugin-imagemin
|
||
```
|
||
|
||
### 3. Configure Analytics
|
||
|
||
**Edit `main.js`** around line 100 to integrate your analytics provider:
|
||
|
||
```javascript
|
||
// Replace this stub with your analytics
|
||
window._ezsepa = window._ezsepa || {
|
||
track: (eventName, properties = {}) => {
|
||
// Option 1: Google Analytics
|
||
gtag('event', eventName, properties);
|
||
|
||
// Option 2: Plausible
|
||
plausible(eventName, { props: properties });
|
||
|
||
// Option 3: Custom endpoint
|
||
fetch('/api/track', {
|
||
method: 'POST',
|
||
body: JSON.stringify({ event: eventName, ...properties })
|
||
});
|
||
}
|
||
};
|
||
```
|
||
|
||
**Add your tracking ID** in `index.html` (before `</head>`):
|
||
|
||
```html
|
||
<!-- Google Analytics example -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-XXXXXXXXXX');
|
||
</script>
|
||
```
|
||
|
||
### 4. Internationalization Integration
|
||
|
||
**File: `i18n-keys.json`** contains all landing page copy as structured JSON.
|
||
|
||
**To integrate with main repo Vue i18n** (`web/client/src/locales/en.json`):
|
||
|
||
```json
|
||
// In web/client/src/locales/en.json, merge:
|
||
{
|
||
"landing": {
|
||
"hero": {
|
||
"title": "EzSepa Bank Payment for Shopify",
|
||
// ... rest from i18n-keys.json
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
Then update `index.html` to use Vue i18n keys:
|
||
|
||
```html
|
||
<h1>{{ $t('landing.hero.title') }}</h1>
|
||
```
|
||
|
||
**For static site**, keep as-is or use a static i18n library like:
|
||
- `i18next` (https://www.i18next.com/)
|
||
- `rosetta` (https://github.com/lukeed/rosetta)
|
||
|
||
### 5. Color Customization
|
||
|
||
**Edit `tailwind.config.js`** to change brand colors:
|
||
|
||
```javascript
|
||
colors: {
|
||
brand: {
|
||
50: '#e6f1ff', // Lightest brand color
|
||
500: '#0A66C2', // Primary brand color
|
||
600: '#085299', // Hover state
|
||
700: '#063e73', // Darkest brand color
|
||
},
|
||
success: '#00875A', // Success/confirmation green
|
||
warning: '#FFAB00', // Warning yellow
|
||
error: '#DE350B', // Error red
|
||
}
|
||
```
|
||
|
||
Or use **CSS variables** in `styles.css`:
|
||
|
||
```css
|
||
:root {
|
||
--color-brand-primary: #0A66C2;
|
||
--color-brand-hover: #085299;
|
||
--color-success: #00875A;
|
||
}
|
||
```
|
||
|
||
## 📦 Deployment
|
||
|
||
### Option 1: Shopify App Hosting (Recommended)
|
||
|
||
If integrating with the main Shopify app:
|
||
|
||
1. **Move to main repo** under `web/landing/`:
|
||
```powershell
|
||
Move-Item -Path "." -Destination "../auto-bank-payment/web/landing" -Force
|
||
```
|
||
|
||
2. **Update Shopify app routing** (Node/Express backend):
|
||
```javascript
|
||
// In web/server.js or similar
|
||
app.use('/landing', express.static(path.join(__dirname, 'landing/dist')));
|
||
```
|
||
|
||
3. **Deploy with app** via Shopify CLI:
|
||
```powershell
|
||
cd ../auto-bank-payment
|
||
shopify app deploy
|
||
```
|
||
|
||
### Option 2: Static Hosting (Netlify, Vercel, Cloudflare Pages)
|
||
|
||
**Netlify:**
|
||
```powershell
|
||
# Install Netlify CLI
|
||
npm install -g netlify-cli
|
||
|
||
# Build and deploy
|
||
npm run build
|
||
netlify deploy --prod --dir=dist
|
||
```
|
||
|
||
**Vercel:**
|
||
```powershell
|
||
npm install -g vercel
|
||
vercel --prod
|
||
```
|
||
|
||
**GitHub Pages:**
|
||
```powershell
|
||
npm run build
|
||
# Push dist/ to gh-pages branch
|
||
```
|
||
|
||
### Option 3: Custom Server
|
||
|
||
Upload `dist/` folder contents to your web server:
|
||
```powershell
|
||
# Example: Upload via FTP, rsync, or SCP
|
||
scp -r dist/* user@yourserver.com:/var/www/ezsepa/
|
||
```
|
||
|
||
## 🔍 SEO Checklist
|
||
|
||
- [x] Meta title and description in `<head>`
|
||
- [x] Open Graph tags for social sharing
|
||
- [x] JSON-LD structured data (SoftwareApplication schema)
|
||
- [x] Semantic HTML5 (`<nav>`, `<section>`, `<footer>`)
|
||
- [x] Alt text for all images
|
||
- [x] Mobile-responsive design
|
||
- [ ] **Replace placeholder hero image** in og:image meta tag
|
||
- [ ] **Add robots.txt** if needed (allow all by default)
|
||
- [ ] **Add sitemap.xml** for better indexing
|
||
- [ ] **Submit to Google Search Console** after deployment
|
||
|
||
**Add `robots.txt`** (optional):
|
||
```txt
|
||
User-agent: *
|
||
Allow: /
|
||
|
||
Sitemap: https://yourapp.com/sitemap.xml
|
||
```
|
||
|
||
## ♿ Accessibility Features
|
||
|
||
- ✅ Semantic HTML5 structure
|
||
- ✅ ARIA labels on interactive elements
|
||
- ✅ Keyboard navigation support (Tab, Enter, Space)
|
||
- ✅ Focus indicators for keyboard users
|
||
- ✅ Alt attributes on all images
|
||
- ✅ Sufficient color contrast (WCAG AA compliant)
|
||
- ✅ Reduced motion support for animations
|
||
- ✅ Screen reader friendly navigation
|
||
|
||
**Test accessibility:**
|
||
- Lighthouse audit in Chrome DevTools (aim for 90+ score)
|
||
- [WAVE browser extension](https://wave.webaim.org/)
|
||
- Keyboard-only navigation test
|
||
|
||
## 🎯 Performance Optimization
|
||
|
||
**Already optimized:**
|
||
- Minified CSS/JS in production build
|
||
- Modern CSS with no heavy frameworks
|
||
- Lazy-loaded images (except hero)
|
||
- Lightweight JavaScript (~10KB gzipped)
|
||
- Vite's code splitting and tree-shaking
|
||
|
||
**Further optimizations:**
|
||
```javascript
|
||
// In vite.config.js (create if needed)
|
||
export default {
|
||
build: {
|
||
minify: 'terser',
|
||
terserOptions: {
|
||
compress: {
|
||
drop_console: true, // Remove console.logs
|
||
},
|
||
},
|
||
},
|
||
};
|
||
```
|
||
|
||
**Compress images:**
|
||
Use tools like TinyPNG, Squoosh, or ImageOptim before adding to `assets/`.
|
||
|
||
## 🐛 Troubleshooting
|
||
|
||
### Issue: TailwindCSS not applying styles
|
||
|
||
**Solution:** Ensure dev server is running and `tailwind.config.js` `content` array includes all HTML files:
|
||
```javascript
|
||
content: [
|
||
"./index.html",
|
||
"./*.html",
|
||
"./src/**/*.{js,jsx,ts,tsx}"
|
||
]
|
||
```
|
||
|
||
### Issue: Mobile menu not toggling
|
||
|
||
**Solution:** Check browser console for JavaScript errors. Ensure `main.js` is loaded:
|
||
```html
|
||
<script type="module" src="/main.js"></script>
|
||
```
|
||
|
||
### Issue: Images not loading
|
||
|
||
**Solution:**
|
||
1. Check file paths are correct (`/assets/hero.png` not `assets/hero.png`)
|
||
2. Ensure images exist in `assets/` folder
|
||
3. Run `npm run dev` to see 404 errors in console
|
||
|
||
### Issue: Build fails
|
||
|
||
**Solution:**
|
||
```powershell
|
||
# Clear node_modules and reinstall
|
||
Remove-Item -Recurse -Force node_modules
|
||
Remove-Item package-lock.json
|
||
npm install
|
||
npm run build
|
||
```
|
||
|
||
## 📚 Tech Stack Summary
|
||
|
||
| Technology | Version | Purpose |
|
||
|------------|---------|---------|
|
||
| **Vite** | 5.0.0 | Lightning-fast dev server and build tool |
|
||
| **TailwindCSS** | 3.4.0 | Utility-first CSS framework |
|
||
| **PostCSS** | 8.4.32 | CSS transformation and processing |
|
||
| **Autoprefixer** | 10.4.16 | Automatic vendor prefixes |
|
||
| **Vanilla JS** | ES6+ | Lightweight, no framework overhead |
|
||
|
||
**No jQuery, no React, no heavy dependencies** — just fast, accessible HTML/CSS/JS.
|
||
|
||
## 🔗 Integration with Main Repo
|
||
|
||
**If moving this landing page into `auto-bank-payment` repo:**
|
||
|
||
1. **Copy to main repo:**
|
||
```powershell
|
||
Copy-Item -Path "." -Destination "../auto-bank-payment/web/landing" -Recurse
|
||
```
|
||
|
||
2. **Update main repo's `package.json`** to include landing scripts:
|
||
```json
|
||
{
|
||
"scripts": {
|
||
"landing:dev": "cd web/landing && npm run dev",
|
||
"landing:build": "cd web/landing && npm run build"
|
||
}
|
||
}
|
||
```
|
||
|
||
3. **Serve from Express backend:**
|
||
```javascript
|
||
// In web/backend/index.js or server.js
|
||
app.use('/landing', express.static(path.join(__dirname, '../landing/dist')));
|
||
```
|
||
|
||
4. **Update app navigation** to link to `/landing` for marketing page.
|
||
|
||
## 📝 Content TODO Checklist
|
||
|
||
Before going live, complete these tasks:
|
||
|
||
- [ ] Replace `{INSTALL_LINK}` with Shopify App Store URL
|
||
- [ ] Replace `{DEMO_LINK}` with demo video or interactive tour
|
||
- [ ] Swap `assets/hero.png`, `checkout.png`, `analytics.png` with real screenshots
|
||
- [ ] Add analytics tracking code (Google Analytics, Plausible, etc.)
|
||
- [ ] Update GitHub repository links
|
||
- [ ] Add contact email in footer (currently `contact@ezsepa.com` placeholder)
|
||
- [ ] Review and adjust pricing (currently €0/€19/€49/Custom)
|
||
- [ ] Test all links and CTAs
|
||
- [ ] Run Lighthouse audit and fix issues
|
||
- [ ] Test on mobile devices (iOS Safari, Chrome Android)
|
||
- [ ] Proofread all copy for typos and accuracy
|
||
- [ ] Add real favicon if different from placeholder
|
||
- [ ] Set up custom domain or subdomain (e.g., `ezsepa.com` or `landing.yourapp.com`)
|
||
|
||
## 🆘 Support & Resources
|
||
|
||
- **Main repo**: [auto-bank-payment](../auto-bank-payment) (if integrated)
|
||
- **Shopify App docs**: https://shopify.dev/docs/apps
|
||
- **TailwindCSS docs**: https://tailwindcss.com/docs
|
||
- **Vite docs**: https://vitejs.dev/
|
||
- **Accessibility guide**: https://www.w3.org/WAI/WCAG21/quickref/
|
||
|
||
## 📄 License
|
||
|
||
Same license as the main EzSepa Bank Payment Shopify app. See main repository for details.
|
||
|
||
---
|
||
|
||
**Built with ❤️ for EU merchants accepting SEPA payments**
|
||
|
||
For questions or issues, open a GitHub issue in the main repository.
|