Compare commits
4 Commits
8fdbc2b359
...
210204eb7a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
210204eb7a | ||
|
|
6ad4cda3f4 | ||
|
|
54ceaa6f5d | ||
|
|
34e7f69465 |
27
README.md
27
README.md
@@ -1,6 +1,6 @@
|
||||
# FastAPI + Next.js Full-Stack Template
|
||||
# PragmaStack
|
||||
|
||||
> **Production-ready, security-first, full-stack TypeScript/Python template with authentication, multi-tenancy, and a comprehensive admin panel.**
|
||||
> **The Pragmatic Full-Stack Template. Production-ready, security-first, and opinionated.**
|
||||
|
||||
<!--
|
||||
TODO: Replace these static badges with dynamic CI/CD badges when GitHub Actions is set up
|
||||
@@ -21,20 +21,25 @@
|
||||
|
||||
This project includes comprehensive documentation designed for AI coding assistants:
|
||||
|
||||
- **[AGENTS.md](./AGENTS.md)** - Framework-agnostic AI assistant context (works with Claude, Cursor, GitHub Copilot, etc.)
|
||||
- **[CLAUDE.md](./CLAUDE.md)** - Claude Code-specific guidance and preferences
|
||||
- **[AGENTS.md](./AGENTS.md)** - Framework-agnostic AI assistant context for PragmaStack
|
||||
- **[CLAUDE.md](./CLAUDE.md)** - Claude Code-specific guidance
|
||||
|
||||
These files provide AI assistants with project architecture, development patterns, testing strategies, and best practices to help them work more effectively with this codebase.
|
||||
These files provide AI assistants with the **PragmaStack** architecture, patterns, and best practices.
|
||||
|
||||
---
|
||||
|
||||
## Why This Template?
|
||||
## Why PragmaStack?
|
||||
|
||||
Building a modern full-stack application from scratch means solving the same problems over and over: authentication, authorization, multi-tenancy, admin panels, session management, database migrations, API documentation, testing infrastructure...
|
||||
Building a modern full-stack application often leads to "analysis paralysis" or "boilerplate fatigue". You spend weeks setting up authentication, testing, and linting before writing a single line of business logic.
|
||||
|
||||
**This template gives you all of that, battle-tested and ready to go.**
|
||||
**PragmaStack cuts through the noise.**
|
||||
|
||||
Instead of spending weeks on boilerplate, you can focus on building your unique features. Whether you're building a SaaS product, an internal tool, or a side project, this template provides a rock-solid foundation with modern best practices baked in.
|
||||
We provide a **pragmatic**, opinionated foundation that prioritizes:
|
||||
- **Speed**: Ship features, not config files.
|
||||
- **Robustness**: Security and testing are not optional.
|
||||
- **Clarity**: Code that is easy to read and maintain.
|
||||
|
||||
Whether you're building a SaaS, an internal tool, or a side project, PragmaStack gives you a solid starting point without the bloat.
|
||||
|
||||
---
|
||||
|
||||
@@ -63,7 +68,7 @@ Instead of spending weeks on boilerplate, you can focus on building your unique
|
||||
|
||||
### 🎨 **Modern Frontend**
|
||||
- Next.js 15 with App Router and React 19
|
||||
- Comprehensive design system built on shadcn/ui + TailwindCSS
|
||||
- **PragmaStack Design System** built on shadcn/ui + TailwindCSS
|
||||
- Pre-configured theme with dark mode support (coming soon)
|
||||
- Responsive, accessible components (WCAG AA compliant)
|
||||
- Rich marketing landing page with animated components
|
||||
@@ -416,7 +421,7 @@ python migrate.py current
|
||||
|
||||
### Frontend Documentation
|
||||
|
||||
- **[Design System Docs](./frontend/docs/design-system/)** - Complete design system guide
|
||||
- **[PragmaStack Design System](./frontend/docs/design-system/)** - Complete design system guide
|
||||
- Quick start, foundations (colors, typography, spacing)
|
||||
- Component library guide
|
||||
- Layout patterns, spacing philosophy
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
# Backend API
|
||||
# PragmaStack Backend API
|
||||
|
||||
> FastAPI-based REST API with async SQLAlchemy, JWT authentication, and comprehensive testing.
|
||||
> The pragmatic, production-ready FastAPI backend for PragmaStack.
|
||||
|
||||
## Overview
|
||||
|
||||
Production-ready FastAPI backend featuring:
|
||||
Opinionated, secure, and fast. This backend provides the solid foundation you need to ship features, not boilerplate.
|
||||
|
||||
Features:
|
||||
|
||||
- **Authentication**: JWT with refresh tokens, session management, device tracking
|
||||
- **Database**: Async PostgreSQL with SQLAlchemy 2.0, Alembic migrations
|
||||
|
||||
@@ -5,7 +5,7 @@ from pydantic_settings import BaseSettings
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
PROJECT_NAME: str = "App"
|
||||
PROJECT_NAME: str = "PragmaStack"
|
||||
VERSION: str = "1.0.0"
|
||||
API_V1_STR: str = "/api/v1"
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ def check_database_connection():
|
||||
def main():
|
||||
"""Main function"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Database migration helper for FastNext template'
|
||||
description='Database migration helper for PragmaStack template'
|
||||
)
|
||||
subparsers = parser.add_subparsers(dest='command', help='Command to run')
|
||||
|
||||
|
||||
@@ -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