Frontend (Next.js 15 + shadcn/ui + Tailwind, Supabase Auth): - Landing page: hero, feature grid, social proof (EU Accessibility Act), CTA - Pricing page: Free / Pro $29 / Business $149 with highlighted Pro tier - Auth: magic link login + signup (Supabase OTP, no password) - App layout: sidebar nav (Dashboard, History, Billing, Team) - Dashboard: drag-and-drop PDF upload with quota error handling - Jobs history: table with score badges and status indicators - Billing: Stripe Checkout + Customer Portal integration - Supabase SSR client/server helpers Deploy: - docker-compose.prod.yml: postgres, redis, minio, api, celery, nextjs, caddy - Caddyfile: auto-SSL for pdfaccess.ai-impress.com - Watchtower excluded (locally-built images) CI/CD (Forgejo Actions): - backend-lint-test: pytest with real postgres + redis - frontend-lint: tsc typecheck - build-and-push: docker build → push to registry.ai-impress.com - SSH deploy to homelab on push to main Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
19 lines
692 B
TypeScript
19 lines
692 B
TypeScript
import type { Metadata } from "next";
|
|
import { Inter } from "next/font/google";
|
|
import "./globals.css";
|
|
|
|
const inter = Inter({ subsets: ["latin"] });
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Aimpress PDF Accessibility — WCAG 2.1 AA Compliance Checker",
|
|
description: "AI-powered PDF accessibility checker. WCAG 2.1 AA / PDF/UA-1 compliance in seconds. EU Accessibility Act ready.",
|
|
keywords: ["PDF accessibility", "WCAG 2.1", "PDF/UA", "accessibility checker", "EU Accessibility Act"],
|
|
};
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="en">
|
|
<body className={inter.className}>{children}</body>
|
|
</html>
|
|
);
|
|
}
|