diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index 14adca4..ffdaa50 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -15,8 +15,8 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: '20' - cache: 'npm' + node-version: "20" + cache: "npm" cache-dependency-path: package-lock.json - name: Install dependencies @@ -35,8 +35,8 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: '20' - cache: 'npm' + node-version: "20" + cache: "npm" cache-dependency-path: package-lock.json - name: Install dependencies diff --git a/README.md b/README.md index 7cdd889..b854e7a 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ ACTA Web provides a sophisticated frontend experience for managing verifiable cr ## Key Features ### Passkey Authentication + - **WebAuthn Integration**: Industry-standard biometric authentication - **No Seed Phrases**: Secure wallet creation without traditional crypto complexity - **Cross-Device Sync**: Passkeys work seamlessly across all your devices @@ -16,6 +17,7 @@ ACTA Web provides a sophisticated frontend experience for managing verifiable cr - **Enhanced Security**: Private keys never leave your device ### Modern UI/UX + - **Particle Background System**: Dynamic animated particles throughout the app - **Glass Morphism Design**: Transparent elements with backdrop blur effects - **Responsive Layout**: Mobile-first design that works on all screen sizes @@ -23,6 +25,7 @@ ACTA Web provides a sophisticated frontend experience for managing verifiable cr - **Smooth Animations**: Fluid transitions and micro-interactions ### Credential Management + - **Create Verifiable Credentials**: Issue tamper-proof credentials on blockchain - **Credential Dashboard**: Comprehensive view of all your credentials - **Search and Filter**: Find credentials quickly with advanced search @@ -30,6 +33,7 @@ ACTA Web provides a sophisticated frontend experience for managing verifiable cr - **Status Management**: Track credential lifecycle and expiration ### API Integration + - **Secure API Keys**: Generate and manage authentication keys - **Real-time Sync**: Live updates from the ACTA blockchain network - **RESTful Architecture**: Clean integration with backend services @@ -38,18 +42,21 @@ ACTA Web provides a sophisticated frontend experience for managing verifiable cr ## Tech Stack ### Core Framework + - **Next.js 15.5.0** with App Router and Turbopack - **React 19** with modern hooks and concurrent features - **TypeScript** for comprehensive type safety - **Tailwind CSS** for utility-first styling ### Authentication & Blockchain + - **WebAuthn** for passkey implementation - **Stellar SDK** for blockchain interactions - **Custom Wallet Management** via passkey-derived keys - **JWT Authentication** for session management ### UI Components + - **Radix UI** primitives for accessibility - **shadcn/ui** component library - **Lucide React** for icon system @@ -57,6 +64,7 @@ ACTA Web provides a sophisticated frontend experience for managing verifiable cr - **Custom Particle System** for background effects ### Development Tools + - **ESLint** with custom configuration - **Prettier** for code formatting - **Husky** for git hooks @@ -65,6 +73,7 @@ ACTA Web provides a sophisticated frontend experience for managing verifiable cr ## Getting Started ### Prerequisites + - Node.js 18 or higher - npm or yarn package manager - Modern browser with WebAuthn support @@ -159,6 +168,7 @@ src/ ## Authentication Flow ### Passkey Registration + 1. User visits application homepage 2. Clicks "Authenticate with Passkey" 3. Browser prompts for biometric authentication @@ -168,6 +178,7 @@ src/ 7. User automatically logged in and redirected to dashboard ### Passkey Login + 1. Returning user visits homepage 2. Clicks "Authenticate with Passkey" 3. Browser recognizes existing passkey @@ -192,12 +203,14 @@ src/ ## Security Features ### Passkey Security + - **Hardware-Backed Keys**: Stored in secure hardware (TPM, Secure Enclave) - **Biometric Gating**: Access requires fingerprint, face, or PIN - **Phishing Resistant**: Domain-bound authentication prevents attacks - **No Shared Secrets**: No passwords or seed phrases to compromise ### Application Security + - **HTTPS Enforcement**: All communications encrypted in transit - **JWT Tokens**: Secure session management with expiration - **Input Validation**: Comprehensive sanitization of user inputs @@ -205,6 +218,7 @@ src/ - **Content Security Policy**: XSS and injection attack prevention ### Blockchain Security + - **Immutable Storage**: Credentials permanently stored on Stellar - **Cryptographic Proofs**: Mathematical verification of authenticity - **Decentralized Verification**: No central authority required @@ -213,12 +227,14 @@ src/ ## Deployment ### Vercel (Recommended) + 1. Connect repository to Vercel 2. Configure environment variables in dashboard 3. Enable automatic deployments on main branch 4. Production URL provided automatically ### Manual Deployment + ```bash # Build application npm run build @@ -228,6 +244,7 @@ npm run start ``` ### Docker Deployment + ```bash # Build Docker image docker build -t acta-web . @@ -239,12 +256,14 @@ docker run -p 3000:3000 acta-web ## Browser Support ### Passkey Compatibility + - **Chrome**: 67+ (Windows, macOS, Android) - **Safari**: 14+ (macOS, iOS) - **Firefox**: 60+ (Windows, macOS) - **Edge**: 79+ (Windows) ### Platform Support + - **Windows**: Windows Hello (Windows 10+) - **macOS**: Touch ID, Face ID - **iOS**: Touch ID, Face ID @@ -254,6 +273,7 @@ docker run -p 3000:3000 acta-web ## Performance ### Optimization Features + - **Turbopack**: Ultra-fast build system for development - **App Router**: Optimized routing with React Server Components - **Image Optimization**: Automatic WebP conversion and lazy loading @@ -261,6 +281,7 @@ docker run -p 3000:3000 acta-web - **Static Generation**: Pre-rendered pages for optimal performance ### Bundle Analysis + ```bash # Analyze bundle size npm run analyze @@ -272,6 +293,7 @@ npm run lighthouse ## Contributing ### Development Workflow + 1. Fork the repository 2. Create feature branch (`git checkout -b feature/awesome-feature`) 3. Make changes following code style guidelines @@ -282,6 +304,7 @@ npm run lighthouse 8. Create Pull Request ### Code Standards + - **TypeScript**: Strict mode enabled, comprehensive typing - **ESLint**: Custom configuration with React and Next.js rules - **Prettier**: Automatic code formatting on save @@ -293,17 +316,20 @@ npm run lighthouse The frontend integrates with the ACTA API for: ### Authentication Endpoints + - `POST /v1/auth/register` - Passkey registration - `POST /v1/auth/login` - Passkey authentication - `GET /v1/auth/profile` - User profile data ### Credential Endpoints + - `POST /v1/credentials` - Create new credentials - `GET /v1/credentials` - List user credentials - `GET /v1/credentials/:id` - Get credential details - `POST /v1/verify` - Verify credential authenticity ### API Key Endpoints + - `POST /v1/api-keys/generate` - Generate new API key - `GET /v1/api-keys` - List user API keys - `DELETE /v1/api-keys/:id` - Revoke API key @@ -311,12 +337,14 @@ The frontend integrates with the ACTA API for: ## Monitoring and Analytics ### Performance Monitoring + - **Web Vitals**: Core web vitals tracking - **Real User Monitoring**: Performance data from actual users - **Error Tracking**: Comprehensive error logging and alerting - **Bundle Analysis**: Regular bundle size monitoring ### User Analytics + - **Conversion Tracking**: Authentication flow completion rates - **Feature Usage**: Most used features and user journeys - **Performance Metrics**: Page load times and user experience @@ -328,6 +356,7 @@ This project is part of the ACTA ecosystem for verifiable credentials on Stellar ## Support For questions, issues, or contributions: + - **GitHub Issues**: Technical problems and feature requests - **Documentation**: Comprehensive guides and API reference -- **Community**: Join our developer community discussions \ No newline at end of file +- **Community**: Join our developer community discussions diff --git a/package-lock.json b/package-lock.json index 540e223..a3626a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2868,6 +2868,7 @@ "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -2878,6 +2879,7 @@ "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.0.0" } @@ -2934,6 +2936,7 @@ "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.40.0", "@typescript-eslint/types": "8.40.0", @@ -3451,6 +3454,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4410,7 +4414,8 @@ "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/embla-carousel-react": { "version": "8.6.0", @@ -4674,6 +4679,7 @@ "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -4848,6 +4854,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -6902,6 +6909,7 @@ "resolved": "https://registry.npmjs.org/next/-/next-15.5.9.tgz", "integrity": "sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==", "license": "MIT", + "peer": true, "dependencies": { "@next/env": "15.5.9", "@swc/helpers": "0.5.15", @@ -7441,6 +7449,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7471,6 +7480,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.26.0" }, @@ -7498,13 +7508,15 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-redux": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", + "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -7633,7 +7645,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -8480,6 +8493,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -8639,6 +8653,7 @@ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..85b169a --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,6 @@ +# robots.txt for acta.build +User-agent: * +Allow: / + +# Sitemap +Sitemap: https://acta.build/sitemap.xml diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 7148396..f2e37c3 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,13 +1,109 @@ import type { Metadata } from "next"; import { GeistSans } from "geist/font/sans"; import { GeistMono } from "geist/font/mono"; +import Script from "next/script"; import "./globals.css"; import { PostHogProvider } from "@/providers/PostHogProvider"; +import { ACTA_OFFICIAL_LINKS } from "@/lib/constants"; export const metadata: Metadata = { - title: "ACTA", - description: "ACTA landing page", - generator: "SP", + metadataBase: new URL("https://acta.build"), + title: "ACTA | Verifiable Credentials on Stellar", + description: + "ACTA is the new infrastructure for digital trust. Issue, verify, and manage verifiable credentials on the Stellar blockchain using Soroban smart contracts. Decentralized, secure, and tamper-proof digital credentials.", + keywords: [ + "verifiable credentials", + "stellar", + "soroban", + "blockchain credentials", + "digital credentials", + "decentralized identity", + "DID", + "on-chain verification", + "blockchain verification", + "digital trust", + "ACTA", + ], + authors: [{ name: "ACTA Team" }], + creator: "ACTA Team", + publisher: "ACTA", + alternates: { + canonical: "/", + }, + openGraph: { + type: "website", + locale: "en_US", + url: "https://acta.build", + siteName: "ACTA", + title: "ACTA | Verifiable Credentials on Stellar", + description: + "The new infrastructure for digital trust. Issue, verify, and manage verifiable credentials on the Stellar blockchain.", + images: [ + { + url: "/Acta-logo.png", + width: 1200, + height: 630, + alt: "ACTA - Verifiable Credentials on Stellar", + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "ACTA | Verifiable Credentials on Stellar", + description: + "The new infrastructure for digital trust. Issue, verify, and manage verifiable credentials on the Stellar blockchain.", + images: ["/Acta-logo.png"], + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, + verification: { + // Add Google Search Console verification if available + // google: "your-verification-code", + }, +}; + +// Schema.org JSON-LD for Organization +const organizationSchema = { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + name: "ACTA", + applicationCategory: "Blockchain Application", + operatingSystem: "Web", + url: "https://acta.build", + logo: "https://acta.build/Acta-logo.png", + description: + "ACTA is the new infrastructure for digital trust. Issue, verify, and manage verifiable credentials on the Stellar blockchain using Soroban smart contracts.", + sameAs: [ + ACTA_OFFICIAL_LINKS.github, + ACTA_OFFICIAL_LINKS.twitter, + ACTA_OFFICIAL_LINKS.linkedin, + ACTA_OFFICIAL_LINKS.instagram, + ACTA_OFFICIAL_LINKS.docs, + ACTA_OFFICIAL_LINKS.dapp, + ], + offers: { + "@type": "Offer", + price: "1", + priceCurrency: "USDC", + description: "$1 USDC per credential", + }, + featureList: [ + "Verifiable Credentials", + "On-chain verification", + "Stellar blockchain", + "Soroban smart contracts", + "Decentralized identity", + "Tamper-proof credentials", + ], }; export default function RootLayout({ @@ -18,6 +114,14 @@ export default function RootLayout({ return ( +