diff --git a/.env.example b/.env.example index 1f98b6c..33f62eb 100644 --- a/.env.example +++ b/.env.example @@ -35,3 +35,7 @@ BASESCAN_API_KEY="your_basescan_api_key" # Mapbox (for scan location maps) NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN="your_mapbox_access_token" + +# Ghost Blog API (for blog posts) +NEXT_PUBLIC_GHOST_URL="https://blog.example.com" +NEXT_PUBLIC_TOKEN="your_ghost_content_api_key" diff --git a/CLAUDE.md b/CLAUDE.md index 2f90b32..fac8874 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -106,6 +106,16 @@ Server actions are organized in `src/lib/actions/`: **Public Routes:** - `/` - Public landing page +- `/about` - About Etags, mission, vision, team +- `/features` - Comprehensive features showcase +- `/pricing` - Pricing plans and FAQs +- `/showcase` - Success stories and testimonials +- `/careers` - Job openings and company culture +- `/contact` - Contact form and information +- `/blog` - Blog articles from Ghost CMS +- `/privacy` - Privacy policy +- `/terms` - Terms and conditions +- `/security` - Security practices and policies - `/login` - Login page (redirects to /manage if authenticated) - `/register` - User registration page - `/scan` - QR code scanner for tag verification @@ -249,3 +259,4 @@ Copy `.env.example` to `.env` and configure: - `KOLOSAL_API_KEY` - Kolosal AI for fraud detection - `BASESCAN_API_KEY` - BaseScan API for explorer features - `NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN` - Mapbox token for scan location maps +- `NEXT_PUBLIC_TOKEN` - Ghost CMS Content API key for blog posts diff --git a/README.md b/README.md index 253b112..4208c63 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,8 @@ | Blockchain | ethers.js, ERC721 NFT (Base Sepolia) | | Storage | Cloudflare R2 | | AI | Kolosal AI (Fraud Detection), Gemini AI (NFT Art) | -| Styling | Tailwind CSS v4, shadcn/ui | +| CMS | Ghost CMS (Blog) | +| Styling | Tailwind CSS v4, shadcn/ui, Framer Motion | | Testing | Vitest | ## Features @@ -53,6 +54,14 @@ - **Auto Product Detection** - System detects owned products from NFT - **Brand/Admin Routing** - Tickets route to brand, fallback to admin +### Public Pages + +- **Landing & Marketing** - About, Features, Pricing, Showcase pages +- **Company** - Careers, Contact pages with form integration +- **Legal** - Privacy Policy, Terms & Conditions, Security documentation +- **Blog** - Ghost CMS integration with pagination support +- **Resources** - FAQ, API Documentation (Swagger) + ## Quick Start ```bash @@ -89,20 +98,49 @@ NFT_CONTRACT_ADDRESS, NEXT_PUBLIC_NFT_CONTRACT_ADDRESS, GEMINI_API_KEY # Optional - AI KOLOSAL_API_KEY + +# Optional - Blog +NEXT_PUBLIC_TOKEN="ghost_content_api_key" # Ghost CMS Content API Key ``` ## Routes -| Route | Description | -| ---------------- | -------------------- | -| `/` | Landing page | -| `/login` | Authentication | -| `/scan` | QR scanner | -| `/verify/[code]` | Tag verification | -| `/support` | Web3 support tickets | -| `/explorer` | Blockchain explorer | -| `/manage/*` | Admin dashboard | -| `/docs` | Swagger API docs | +### Public Routes + +| Route | Description | +| ---------------- | ------------------------- | +| `/` | Landing page | +| `/about` | About company & team | +| `/features` | Features showcase | +| `/pricing` | Pricing plans | +| `/showcase` | Success stories | +| `/careers` | Job openings | +| `/contact` | Contact form | +| `/blog` | Blog articles (Ghost CMS) | +| `/privacy` | Privacy policy | +| `/terms` | Terms & conditions | +| `/security` | Security practices | +| `/faqs` | FAQ page | +| `/login` | Authentication | +| `/register` | User registration | +| `/scan` | QR scanner | +| `/verify/[code]` | Tag verification | +| `/support` | Web3 support tickets | +| `/explorer` | Blockchain explorer | +| `/docs` | Swagger API docs | + +### Admin Routes + +| Route | Description | +| ------------------ | ----------------------- | +| `/manage` | Dashboard home | +| `/manage/brands` | Brand management | +| `/manage/products` | Product CRUD | +| `/manage/tags` | Tag management | +| `/manage/nfts` | NFT monitoring | +| `/manage/tickets` | Support tickets | +| `/manage/users` | User management (admin) | +| `/manage/profile` | Profile settings | ## Scripts @@ -129,17 +167,21 @@ docker run -p 3000:3000 -e DATABASE_URL="..." -e AUTH_SECRET="..." etags ``` src/ -├── app/ # Next.js App Router -│ ├── api/ # API Routes -│ ├── manage/ # Admin Dashboard -│ └── support/ # Web3 Support +├── app/ # Next.js App Router +│ ├── api/ # API Routes +│ ├── manage/ # Admin Dashboard +│ ├── about/ # Public pages (about, features, pricing, etc.) +│ ├── blog/ # Blog with Ghost CMS +│ └── support/ # Web3 Support ├── lib/ -│ ├── actions/ # Server Actions -│ └── *.ts # Utilities (db, auth, r2, blockchain) +│ ├── actions/ # Server Actions +│ └── *.ts # Utilities (db, auth, r2, blockchain) ├── components/ -│ ├── ui/ # shadcn/ui components -│ └── landing/ # Landing page components -└── tests/ # Test setup & mocks +│ ├── ui/ # shadcn/ui components +│ ├── landing/ # Landing page components +│ ├── blog/ # Blog components (Grid, Pagination) +│ └── faq/ # FAQ components +└── tests/ # Test setup & mocks ``` ## NFT Collectible Flow @@ -159,9 +201,14 @@ src/ | Phase 3 | 🔜 | Distribution Tracking, Supply Chain | | Phase 4 | 🔜 | Blockchain Warranty | | Phase 5 | ✅ | Web3 Support Tickets | +| Phase 6 | ✅ | Public Pages & Blog (Ghost CMS) | See [ROADMAP.md](./ROADMAP.md) for details. +## Contributing + +See [CONTRIBUTING.md](./CONTRIBUTING.md) for contribution guidelines. + ## License MIT diff --git a/next.config.ts b/next.config.ts index 7f742f4..c3d17b6 100644 --- a/next.config.ts +++ b/next.config.ts @@ -23,6 +23,21 @@ const nextConfig: NextConfig = { protocol: 'https', hostname: '*.cloudflarestorage.com', }, + { + // Ghost CMS blog images + protocol: 'https', + hostname: 'blog.javapixa.com', + }, + { + // Unsplash images (used by Ghost) + protocol: 'https', + hostname: 'images.unsplash.com', + }, + { + // Ghost CDN + protocol: 'https', + hostname: 'static.ghost.org', + }, ], }, }; diff --git a/package-lock.json b/package-lock.json index f87b5d2..5baee4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,6 @@ "@aws-sdk/s3-request-presigner": "^3.705.0", "@fingerprintjs/fingerprintjs": "^5.0.1", "@google/genai": "^1.30.0", - "@gsap/react": "^2.1.2", "@prisma/client": "^6.1.0", "@radix-ui/react-avatar": "^1.1.11", "@radix-ui/react-checkbox": "^1.3.3", @@ -24,12 +23,12 @@ "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", "@types/mapbox-gl": "^3.4.1", + "axios": "^1.13.2", "bcryptjs": "^3.0.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "ethers": "^6.13.4", "framer-motion": "^12.23.25", - "gsap": "^3.13.0", "html5-qrcode": "^2.3.8", "lucide-react": "^0.555.0", "mapbox-gl": "^3.16.0", @@ -2454,16 +2453,6 @@ } } }, - "node_modules/@gsap/react": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@gsap/react/-/react-2.1.2.tgz", - "integrity": "sha512-JqliybO1837UcgH2hVOM4VO+38APk3ECNrsuSM4MuXp+rbf+/2IG2K1YJiqfTcXQHH7XlA0m3ykniFYstfq0Iw==", - "license": "SEE LICENSE AT https://gsap.com/standard-license", - "peerDependencies": { - "gsap": "^3.12.5", - "react": ">=17" - } - }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -11659,12 +11648,6 @@ "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", "license": "ISC" }, - "node_modules/gsap": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.13.0.tgz", - "integrity": "sha512-QL7MJ2WMjm1PHWsoFrAQH/J8wUeqZvMtHO58qdekHpCfhvhSL4gSiz6vJf5EeMP0LOn3ZCprL2ki/gjED8ghVw==", - "license": "Standard 'no charge' license: https://gsap.com/standard-license." - }, "node_modules/gtoken": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", diff --git a/package.json b/package.json index aa0d39c..c005694 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", "@types/mapbox-gl": "^3.4.1", + "axios": "^1.13.2", "bcryptjs": "^3.0.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 0000000..7704e00 --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,49 @@ +import { Metadata } from 'next'; +import { Navbar } from '@/components/landing/Navbar'; +import { Footer } from '@/components/landing/Footer'; +import { + AboutHero, + MissionVision, + ValuesSection, + TechnologyStack, + TeamSection, + StatsSection, +} from '@/components/about'; + +export const metadata: Metadata = { + title: 'About Us - Etags', + description: + 'Learn about Etags, our mission to secure product authenticity with blockchain technology, and meet the team behind the platform.', + openGraph: { + title: 'About Us - Etags', + description: + 'Platform verifikasi produk berbasis blockchain yang mengamankan rantai pasokan.', + }, +}; + +export default function AboutPage() { + return ( +
+ Insights, berita terbaru, dan artikel mendalam tentang blockchain, + product authentication, dan teknologi Web3. +
++ Belum ada artikel yang dipublikasikan. +
+NFT Collectible
-+ Ketika Anda mendaftar sebagai pengguna Etags, kami mengumpulkan + informasi seperti nama, email, nama perusahaan, dan kata sandi + terenkripsi. Informasi ini digunakan untuk membuat dan mengelola + akun Anda. +
+ ++ Kami menyimpan informasi produk yang Anda upload, termasuk nama + produk, deskripsi, gambar, dan metadata lainnya. Data QR code + dan transaksi blockchain juga dicatat untuk verifikasi keaslian. +
+ ++ Ketika konsumen scan QR code produk, kami mengumpulkan data + seperti waktu scan, lokasi (jika diizinkan), fingerprint browser + untuk mendeteksi fraud, dan informasi device. +
+ ++ Untuk fitur NFT collectible dan support ticket, kami + mengumpulkan wallet address, transaction hash, dan metadata NFT. + Kami tidak pernah meminta private key atau seed phrase. +
++ Informasi digunakan untuk menyediakan, memelihara, dan + meningkatkan layanan Etags, termasuk verifikasi produk, + dashboard analytics, dan NFT minting. +
++ Data scan dianalisis menggunakan AI untuk mendeteksi pola + mencurigakan dan melindungi brand dari pemalsuan. Kami + menggunakan Kolosal AI dengan enkripsi end-to-end. +
++ Kami menggunakan email Anda untuk mengirim notifikasi penting, + update produk, dan newsletter (dapat unsubscribe kapan saja). +
++ Semua data sensitif dienkripsi menggunakan AES-256 encryption. + Kata sandi di-hash dengan bcrypt dan tidak dapat dibaca dalam + bentuk plain text. +
++ Kami menggunakan HTTPS untuk semua komunikasi dan implementasi + rate limiting untuk mencegah abuse. Database kami di-backup + secara teratur dan disimpan secara terenkripsi. +
++ Akses ke data dibatasi dengan role-based access control (RBAC) + dan semua aktivitas dicatat untuk audit trail. +
++ Kami tidak menjual data pribadi Anda kepada pihak ketiga. Data + hanya dibagikan dalam kondisi berikut: +
++ Anda memiliki hak untuk mengakses, memperbarui, atau menghapus + data pribadi Anda kapan saja melalui dashboard atau dengan + menghubungi kami. +
++ Anda dapat mengekspor semua data Anda dalam format JSON dan + meminta penghapusan akun beserta semua data terkait. +
++ Untuk pertanyaan atau request terkait privasi, hubungi: + privacy@etags.id +
++ Kami menggunakan cookies untuk menjaga sesi login dan mengingat + preferensi Anda. Anda dapat menonaktifkan cookies melalui + browser settings, namun beberapa fitur mungkin tidak berfungsi + optimal. +
++ Kami dapat memperbarui kebijakan privasi ini sewaktu-waktu. + Perubahan signifikan akan diberitahukan via email dan tercantum + tanggal pembaruan di bagian atas dokumen ini. +
++ Semua komunikasi antara browser Anda dan server kami menggunakan + TLS 1.3 encryption. Ini memastikan bahwa data tidak dapat dibaca + oleh pihak ketiga selama transmisi. +
+ ++ Data sensitif di database dienkripsi menggunakan AES-256 + encryption. Kata sandi di-hash menggunakan bcrypt dengan salt + unik per pengguna. +
+ ++ API keys dan environment variables disimpan secara terenkripsi + dan tidak pernah di-hardcode dalam source code. Kami menggunakan + secure secret management system. +
++ Platform menggunakan NextAuth v5 dengan credentials provider. + Session di-manage dengan secure HTTP-only cookies yang tidak + dapat diakses via JavaScript. +
+ ++ User roles (admin, brand) dengan permission yang jelas. Brand + users hanya dapat mengakses data brand mereka sendiri dengan + brand_id isolation. +
+ ++ Untuk NFT features, user connect wallet via MetaMask. Kami tidak + pernah meminta atau menyimpan private keys. Semua transaksi + di-sign oleh user di browser mereka. +
++ API endpoints dilindungi dengan rate limiting (misalnya, contact + form: 3 requests per 15 menit). Ini mencegah abuse dan DoS + attacks. +
+ ++ Semua user input divalidasi di client-side dan server-side. Kami + sanitize input untuk mencegah XSS, SQL injection, dan command + injection attacks. +
+ ++ Form submissions dilindungi dengan CSRF tokens untuk mencegah + cross-site request forgery attacks. +
+ ++ Kami implementasi CSP headers untuk mencegah XSS attacks dan + clickjacking. +
++ Smart contracts (ETagRegistry, ETagCollectible) telah diaudit + dan tested secara komprehensif. Source code tersedia untuk + review. +
+ ++ Admin wallet untuk NFT minting menggunakan hardware wallet dan + multi-signature setup untuk transaksi besar. +
+ ++ Tag stamping di blockchain bersifat immutable. Setelah tag + dicreate, data tidak dapat diubah, memastikan integritas + verifikasi. +
++ Semua aktivitas penting dicatat (login, API calls, blockchain + transactions) tanpa menyimpan informasi sensitif seperti kata + sandi atau private keys. +
+ ++ AI fraud detection menganalisis pola scan untuk mendeteksi + aktivitas mencurigakan. Alert otomatis dikirim untuk aktivitas + anomaly. +
+ ++ Kami melakukan security audits berkala dan penetration testing + untuk mengidentifikasi dan memperbaiki vulnerability. +
++ Database di-backup setiap hari dan disimpan secara terenkripsi + di multiple locations. Backup dapat di-restore dalam waktu 1 jam + untuk disaster recovery. +
++ Blockchain data bersifat permanen dan tersedia di Base Sepolia + network. +
++ Dalam kasus security incident, kami memiliki prosedur response + yang jelas: +
+Etags compliant dengan:
+Kami merekomendasikan user untuk:
++ Jika Anda menemukan security vulnerability, harap laporkan ke: + security@etags.id. Kami berkomitmen untuk menangani laporan + dengan serius dan akan memberikan credit untuk responsible + disclosure. +
++ Dengan mengakses dan menggunakan platform Etags, Anda menyetujui + untuk terikat dengan syarat dan ketentuan ini. Jika Anda tidak + setuju, harap tidak menggunakan layanan kami. +
++ Anda bertanggung jawab untuk menjaga kerahasiaan akun dan kata + sandi Anda. Anda setuju untuk tidak membagikan akses akun kepada + pihak lain dan segera memberitahu kami jika terjadi akses tidak + sah. +
+ ++ Anda setuju untuk tidak menggunakan platform untuk: +
++ Anda mempertahankan semua hak atas konten yang Anda upload + (gambar produk, deskripsi, dll). Dengan mengunggah konten, Anda + memberikan Etags lisensi non-eksklusif untuk menggunakan konten + tersebut dalam rangka menyediakan layanan. +
++ Etags menggunakan blockchain Base Sepolia untuk verifikasi + produk dan NFT minting. Transaksi blockchain bersifat permanen + dan tidak dapat diubah setelah dikonfirmasi. +
++ NFT yang di-mint melalui Etags adalah milik Anda sepenuhnya. + Anda bertanggung jawab untuk menjaga keamanan wallet Anda. +
++ Etags tidak bertanggung jawab atas kehilangan akses ke wallet + atau NFT akibat kelalaian Anda dalam menjaga private key atau + seed phrase. +
++ Paket gratis (Starter) tersedia dengan limit 1.000 tag per + bulan. Paket berbayar (Professional, Enterprise) dikenakan biaya + sesuai pricing yang tercantum. +
++ Pembayaran diproses secara bulanan atau tahunan tergantung paket + yang dipilih. Refund dapat diajukan dalam 14 hari pertama untuk + paket berbayar. +
++ Kami berhak mengubah pricing dengan pemberitahuan 30 hari + sebelumnya. Perubahan tidak berlaku untuk langganan yang sudah + berjalan. +
++ Kami berusaha menjaga uptime 99.9%, namun tidak menjamin layanan + akan selalu tersedia tanpa gangguan. Maintenance terjadwal akan + diberitahukan sebelumnya. +
++ Kami berhak membatasi atau menangguhkan akses ke layanan jika + terjadi pelanggaran syarat dan ketentuan atau aktivitas + mencurigakan. +
++ Semua teknologi, software, dan brand assets Etags dilindungi + oleh hak cipta dan hak kekayaan intelektual. Anda tidak + diperkenankan untuk menyalin, memodifikasi, atau + mendistribusikan tanpa izin tertulis dari kami. +
++ Etags tidak bertanggung jawab atas kerugian langsung atau tidak + langsung yang timbul dari penggunaan layanan, termasuk namun + tidak terbatas pada: +
++ Tanggung jawab maksimal kami terbatas pada jumlah yang Anda + bayarkan dalam 12 bulan terakhir. +
++ Anda dapat menghentikan layanan kapan saja melalui dashboard. + Data Anda akan dihapus dalam 30 hari setelah penghentian. +
++ Kami berhak menghentikan layanan Anda tanpa pemberitahuan jika + terjadi pelanggaran berat terhadap syarat dan ketentuan. +
++ Syarat dan ketentuan ini diatur oleh hukum Republik Indonesia. + Setiap sengketa akan diselesaikan melalui pengadilan di Jakarta, + Indonesia. +
++ Untuk pertanyaan terkait syarat dan ketentuan, hubungi: + legal@etags.id +
++ Memberikan solusi autentikasi produk yang aman, transparan, dan mudah + digunakan untuk melindungi konsumen dari produk palsu dan meningkatkan + kepercayaan terhadap brand. +
++ Menjadi standar global untuk verifikasi keaslian produk dengan + teknologi blockchain, menciptakan ekosistem di mana setiap produk + dapat diverifikasi dengan mudah dan aman. +
++ Tim Pemuja Deadline Anti Refund - Developer berpengalaman yang + berdedikasi membangun solusi blockchain terbaik untuk IMPHEN 2025. +
+{member.role}
+ + GitHub Profile + ++ Etags dibangun dengan teknologi terdepan untuk memberikan keamanan, + kecepatan, dan skalabilitas yang optimal. +
+{tech.description}
++ {value.description} +
+{message}
+ ++ Belum ada artikel yang tersedia saat ini. Kembali lagi nanti untuk + konten terbaru! +
+Etags Blog
++ {post.excerpt} +
+ + {/* Read More Link */} + + Baca Selengkapnya ++ {benefit.description} +
++ Kirim resume dan portfolio Anda ke kami. Kami selalu mencari talenta + yang passionate untuk bergabung dengan tim. +
+ ++ {position.description} +
+ ++ {value.description} +
++ Jelajahi dokumentasi lengkap kami atau lihat FAQ untuk pertanyaan yang + sering diajukan. +
++ {RESPONSE_TIME} +
++ {reason.description} +
+ + {reason.email} + ++ Mulai gratis dengan 1.000 tag per bulan. Upgrade kapan saja sesuai + kebutuhan bisnis Anda. +
++ {feature.description} +
+{integration.description}
++ Tim sales kami siap membantu Anda memilih paket yang tepat dan + memberikan demo gratis. +
+{plan.description}
+ + + {plan.cta} + + +{faq.answer}
++ Bergabunglah dengan 100+ brand yang sudah mempercayai Etags untuk + melindungi produk mereka. +
++ {item.description} +
+ ++ +
+ “{testimonial.quote}” +
+ +{testimonial.author}
+{testimonial.company}
++ {testimonial.industry} +
+