Revise home page content to align with "PragmaStack" branding
- Updated headers, descriptions, and key messaging across sections for clarity and consistency. - Replaced outdated stats with branding-focused data, emphasizing open-source, type safety, and documentation quality. - Refined tone to highlight pragmatic, reliable values over technical metrics. - Adjusted GitHub icon SVG for accessibility and inline clarity.
This commit is contained in:
@@ -11,7 +11,7 @@ import { CheckCircle2 } from 'lucide-react';
|
||||
export function ContextSection() {
|
||||
const features = [
|
||||
'Clone & Deploy in < 5 minutes',
|
||||
'97% Test Coverage (743 tests)',
|
||||
'Comprehensive Test Suite',
|
||||
'12+ Documentation Guides',
|
||||
'Zero Commercial Dependencies',
|
||||
];
|
||||
@@ -26,11 +26,11 @@ export function ContextSection() {
|
||||
viewport={{ once: true, margin: '-100px' }}
|
||||
transition={{ duration: 0.6 }}
|
||||
>
|
||||
<h2 className="text-3xl md:text-4xl font-bold">What You Get Out of the Box</h2>
|
||||
<h2 className="text-3xl md:text-4xl font-bold">Stop Reinventing the Wheel</h2>
|
||||
<p className="text-lg text-muted-foreground leading-relaxed">
|
||||
This isn't a boilerplate generator or a paid SaaS template. It's a complete,
|
||||
production-ready codebase you can clone and customize. Everything you need to build
|
||||
modern web applications without reinventing authentication, authorization, and admin
|
||||
Avoid analysis paralysis and boilerplate fatigue. This is a complete, production-ready
|
||||
codebase you can clone and customize. Everything you need to build modern web
|
||||
applications without reinventing authentication, authorization, and admin
|
||||
infrastructure.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
import { Link } from '@/lib/i18n/routing';
|
||||
import { motion } from 'framer-motion';
|
||||
import { ArrowRight, Github, Play } from 'lucide-react';
|
||||
import { ArrowRight, Play } from 'lucide-react';
|
||||
import { Button } from '@/components/ui/button';
|
||||
|
||||
interface HeroSectionProps {
|
||||
@@ -46,9 +46,9 @@ export function HeroSection({ onOpenDemoModal }: HeroSectionProps) {
|
||||
/>
|
||||
<span className="font-medium">MIT Licensed</span>
|
||||
<span className="text-muted-foreground">•</span>
|
||||
<span className="font-medium">97% Test Coverage</span>
|
||||
<span className="font-medium">Comprehensive Tests</span>
|
||||
<span className="text-muted-foreground">•</span>
|
||||
<span className="font-medium">Production Ready</span>
|
||||
<span className="font-medium">Pragmatic by Design</span>
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
@@ -59,9 +59,9 @@ export function HeroSection({ onOpenDemoModal }: HeroSectionProps) {
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.5, delay: 0.1 }}
|
||||
>
|
||||
<span className="block">Everything You Need to Build</span>
|
||||
<span className="block">The Pragmatic</span>
|
||||
<span className="block bg-gradient-to-r from-primary via-primary/80 to-primary/60 bg-clip-text text-transparent">
|
||||
Modern Web Applications
|
||||
Full-Stack Template
|
||||
</span>
|
||||
</motion.h1>
|
||||
|
||||
@@ -72,8 +72,8 @@ export function HeroSection({ onOpenDemoModal }: HeroSectionProps) {
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.5, delay: 0.2 }}
|
||||
>
|
||||
Production-ready FastAPI + Next.js template with authentication, multi-tenancy, and
|
||||
comprehensive admin panel. Built by developers, for developers.{' '}
|
||||
Opinionated, secure, and production-ready. PragmaStack gives you the solid foundation
|
||||
you need to stop configuring and start shipping.{' '}
|
||||
<span className="text-foreground font-medium">Start building features on day one.</span>
|
||||
</motion.p>
|
||||
|
||||
@@ -97,7 +97,16 @@ export function HeroSection({ onOpenDemoModal }: HeroSectionProps) {
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Github className="h-5 w-5" aria-hidden="true" />
|
||||
<svg
|
||||
role="img"
|
||||
viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className="h-5 w-5 fill-current"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<title>GitHub</title>
|
||||
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.834 2.807 1.304 3.495.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.566 22.091 24 17.592 24 12.297c0-6.627-5.373-12-12-12" />
|
||||
</svg>
|
||||
View on GitHub
|
||||
<ArrowRight
|
||||
className="h-4 w-4 group-hover:translate-x-1 transition-transform"
|
||||
@@ -116,28 +125,7 @@ export function HeroSection({ onOpenDemoModal }: HeroSectionProps) {
|
||||
</Button>
|
||||
</motion.div>
|
||||
|
||||
{/* Quick Stats */}
|
||||
<motion.div
|
||||
className="flex flex-wrap items-center justify-center gap-6 pt-8 text-sm text-muted-foreground"
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
transition={{ duration: 0.5, delay: 0.4 }}
|
||||
>
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="text-2xl font-bold text-foreground">97%</span>
|
||||
<span>Test Coverage</span>
|
||||
</div>
|
||||
<div className="h-4 w-px bg-border" aria-hidden="true" />
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="text-2xl font-bold text-foreground">743</span>
|
||||
<span>Passing Tests</span>
|
||||
</div>
|
||||
<div className="h-4 w-px bg-border" aria-hidden="true" />
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="text-2xl font-bold text-foreground">0</span>
|
||||
<span>Flaky Tests</span>
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -16,9 +16,9 @@ const wontFind = [
|
||||
];
|
||||
|
||||
const willFind = [
|
||||
'Production patterns that actually work',
|
||||
'Comprehensive test coverage (not aspirational)',
|
||||
'Clear, honest documentation',
|
||||
'Pragmatic Speed: Ship features, not config',
|
||||
'Clarity over Magic: Explicit is better than implicit',
|
||||
'Robustness: Security and testing baked in',
|
||||
'Active development and improvements',
|
||||
];
|
||||
|
||||
@@ -33,7 +33,7 @@ export function PhilosophySection() {
|
||||
viewport={{ once: true, margin: '-100px' }}
|
||||
transition={{ duration: 0.6 }}
|
||||
>
|
||||
<h2 className="text-3xl md:text-4xl font-bold mb-6">Why This Template Exists</h2>
|
||||
<h2 className="text-3xl md:text-4xl font-bold mb-6">Why PragmaStack?</h2>
|
||||
<div className="space-y-4 text-lg text-muted-foreground leading-relaxed">
|
||||
<p>
|
||||
We built this template after rebuilding the same authentication, authorization, and
|
||||
|
||||
@@ -21,31 +21,31 @@ interface Stat {
|
||||
const stats: Stat[] = [
|
||||
{
|
||||
icon: Zap,
|
||||
value: 97,
|
||||
value: 100,
|
||||
suffix: '%',
|
||||
label: 'Test Coverage',
|
||||
description: 'Comprehensive testing across backend and frontend',
|
||||
},
|
||||
{
|
||||
icon: TestTube,
|
||||
value: 743,
|
||||
suffix: '',
|
||||
label: 'Passing Tests',
|
||||
description: 'Backend, frontend unit, and E2E tests',
|
||||
label: 'Open Source',
|
||||
description: 'MIT Licensed. No hidden costs or vendor lock-in.',
|
||||
},
|
||||
{
|
||||
icon: CheckCircle2,
|
||||
value: 100,
|
||||
suffix: '%',
|
||||
label: 'Type Safe',
|
||||
description: 'End-to-end type safety with TypeScript & Pydantic',
|
||||
},
|
||||
{
|
||||
icon: TestTube,
|
||||
value: 0,
|
||||
suffix: '',
|
||||
label: 'Flaky Tests',
|
||||
description: 'Production-stable test suite',
|
||||
label: 'Magic',
|
||||
description: 'Explicit is better than implicit. No hidden logic.',
|
||||
},
|
||||
{
|
||||
icon: FileCode,
|
||||
value: 30,
|
||||
value: 12,
|
||||
suffix: '+',
|
||||
label: 'API Endpoints',
|
||||
description: 'Fully documented with OpenAPI',
|
||||
label: 'Doc Guides',
|
||||
description: 'Comprehensive documentation for every feature',
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -67,11 +67,11 @@ export function TechStackSection() {
|
||||
transition={{ duration: 0.6 }}
|
||||
>
|
||||
<h2 className="text-3xl md:text-4xl font-bold mb-4">
|
||||
Modern, Type-Safe, Production-Grade Stack
|
||||
A Stack You Can Trust
|
||||
</h2>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
||||
Built with the best tools for full-stack development. Async architecture, type safety, and
|
||||
developer experience.
|
||||
We chose these tools because they are boring, reliable, and standard. No hype, just
|
||||
results. Async architecture, type safety, and developer experience.
|
||||
</p>
|
||||
</motion.div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user