UNPKG

@wizecorp/stratusjs

Version:
331 lines (264 loc) • 8.74 kB
# ⚔ Stratus - Lightweight React Framework A modern, lightweight React framework inspired by Next.js but designed for simplicity and performance. Build fast, scalable applications with file-based routing, service injection, middleware system, and powerful SSR capabilities. ## šŸš€ Quick Start ```bash # Install CLI globally npm install -g @wizecorp/stratusjs # Create a new project (interactive) stratusjs create my-app # Or create with specific template stratusjs create my-blog --template ssr # Full SSR stratusjs create my-site --template hybrid # Universal routing stratusjs create my-mvp --template default # Services + middleware # Start development cd my-app npm install npm run dev ``` Open [http://localhost:5173](http://localhost:5173) to view your application. ## ✨ Features - **šŸ—‚ļø File-Based Routing** - Automatic routing based on file structure - **āš™ļø Service Container** - Dependency injection with clean architecture - **šŸ›”ļø Middleware System** - HOC-based middleware for cross-cutting concerns - **šŸŽ­ SSR & Hybrid Routing** - Full SSR, hybrid rendering, or client-side only - **šŸŽØ TailwindCSS** - Modern utility-first styling with dark mode - **šŸ”§ TypeScript First** - Full TypeScript support with excellent DX - **šŸ“¦ Lightweight** - Minimal bundle size, maximum performance - **šŸ› ļø Modern Tooling** - Vite-powered development and building - **🚢 Easy Deployment** - One-click deployment to Vercel, Netlify, Docker ## šŸ—ļø Architecture ``` src/ ā”œā”€ā”€ app/ # File-based routes │ ā”œā”€ā”€ layout.tsx # Root layout │ ā”œā”€ā”€ page.tsx # Home page (/) │ └── about/ │ └── page.tsx # About page (/about) ā”œā”€ā”€ services/ # Service layer with DI │ └── ApiService.ts # HTTP service example ā”œā”€ā”€ middleware/ # HOC middleware system │ └── auth.tsx # Authentication middleware └── main.tsx # App entry point with service registration ``` ## šŸ“š Core Concepts ### File-Based Routing Routes are automatically created based on file structure: ``` src/app/page.tsx → / src/app/about/page.tsx → /about src/app/products/[id]/page.tsx → /products/:id src/app/(dashboard)/layout.tsx → Layout for dashboard pages ``` ## Services & Dependency Injection ```tsx // src/services/ApiService.ts export class HttpService { private baseUrl: string; constructor(baseUrl: string = 'https://api.example.com') { this.baseUrl = baseUrl; } async get<T>(endpoint: string): Promise<T> { const response = await fetch(`${this.baseUrl}${endpoint}`); if (!response.ok) { throw new Error(`HTTP Error: ${response.status}`); } return await response.json(); } } // src/main.tsx - Register services const serviceContainer = new ServiceContainer(); serviceContainer.register('httpService', () => new HttpService()); // Use in components function UsersPage() { const httpService = useService<HttpService>('httpService'); const [users, setUsers] = useState([]); useEffect(() => { httpService.get('/users').then(setUsers).catch(console.error); }, [httpService]); return <div>{/* render users */}</div>; } ``` ### Server-Side Rendering Full SSR support with data fetching: ```typescript import { GetServerSideProps } from 'stratus'; export const getServerSideProps: GetServerSideProps = async (context) => { const data = await fetchDataFromAPI(); return { props: { data, serverTimestamp: new Date().toISOString() } }; }; export default function Page({ data, serverTimestamp }) { return ( <div> <h1>{data.title}</h1> <p>Generated at: {serverTimestamp}</p> </div> ); } ``` ### Middleware System Higher-Order Components for cross-cutting concerns: ```typescript // src/middleware/auth.tsx interface AuthOptions { redirectTo?: string; requireAuth?: boolean; } export function withAuth<P extends {}>( Component: React.ComponentType<P>, options: AuthOptions = {} ) { return function AuthenticatedComponent(props: P) { if (options.requireAuth && !isAuthenticated()) { return <LoginPage />; } return <Component {...props} />; }; } // Usage export default withAuth(MyProtectedPage, { redirectTo: '/login' }); ``` ## šŸŽÆ Templates Choose from pre-built templates to kickstart your project: ### šŸ—ļø Default **Perfect for:** Most applications, MVPs, client projects - āœ… Service container with dependency injection - āœ… Authentication middleware example - āœ… TailwindCSS with dark mode support - āœ… TypeScript configuration - āœ… Modern component architecture ### šŸ”„ Hybrid **Perfect for:** Universal applications with SSR needs - āœ… HybridRouter with client-side and server-side rendering - āœ… Automatic hydration support - āœ… All default template features - āœ… Optimized for SEO and performance - āœ… Supports both SSR and CSR pages ### 🌐 SSR **Perfect for:** Content-heavy sites, blogs, e-commerce - āœ… Full server-side rendering with `getServerSideProps` - āœ… Demo SSR page with server data fetching - āœ… Production server configuration - āœ… Enhanced SEO capabilities - āœ… All default template features ## šŸ› ļø CLI Commands ```bash # Create project stratusjs create <name> # Interactive project creation stratusjs create my-app --template ssr --js # Available templates: default, hybrid, ssr # Development stratusjs dev # Start dev server stratusjs dev --port 8080 # Custom port # Building stratusjs build # Production build stratusjs build --ssr # Build with SSR (ssr template) # Code Generation stratusjs generate page about # Create page stratusjs g service user # Create service stratusjs g layout dashboard # Create layout # Deployment stratusjs deploy # Interactive deployment stratusjs deploy --platform vercel # Deploy to Vercel ``` ## 🚢 Deployment ### Vercel (Recommended for SSR) ```bash stratusjs deploy --platform vercel ``` ### Netlify (Great for static sites) ```bash stratusjs deploy --platform netlify ``` ### Docker ```bash stratusjs deploy --platform docker ``` ### Node.js Server ```bash stratusjs deploy --platform node ``` ## File Structure ``` src/ app/ page.tsx # → / about/ page.tsx # → /about layout.tsx # Layout for /about users/ [id]/ page.tsx # → /users/:id blog/ [...slug]/ page.tsx # → /blog/*slug layouts/ main.tsx # Reusable layouts services/ userService.ts # Business logic services ``` ## šŸ“– Documentation - [CLI Documentation](./CLI.md) - Complete CLI reference ## šŸ”§ Configuration Configure your project in `stratus.config.json`: ```json { "name": "my-app", "template": "default", "features": { "ssr": false, "hybrid": false, "typescript": true, "services": true, "middleware": true, "tailwindcss": true }, "routing": { "routesDir": "src/app", "layoutsDir": "src/layouts", "pageExtensions": ["tsx", "ts", "jsx", "js"] }, "build": { "outDir": "dist", "assetsDir": "assets", "ssr": false }, "dev": { "port": 5173, "open": true, "host": "localhost" } } ``` ## šŸ¤ Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Run tests and linting 5. Submit a pull request ## šŸ“„ License MIT License - see [LICENSE](LICENSE) for details. ## šŸ†š Why Stratus? | Feature | Stratus | Next.js | Create React App | |---------|---------|---------|------------------| | Bundle Size | ⚔ Minimal | šŸ“¦ Large | šŸ“¦ Medium | | Learning Curve | šŸ“ˆ Easy | šŸ“ˆ Moderate | šŸ“ˆ Easy | | SSR Support | āœ… 3 Options | āœ… Built-in | āŒ No | | File Routing | āœ… Yes | āœ… Yes | āŒ No | | Services DI | āœ… Built-in | āŒ Manual | āŒ Manual | | Middleware | āœ… HOC System | āš ļø Route-based | āŒ No | | TailwindCSS | āœ… Pre-configured | āš ļø Manual setup | āš ļø Manual setup | | CLI Tools | āœ… Rich | āœ… Rich | āš ļø Basic | | TypeScript | āœ… First-class | āœ… Good | āš ļø Setup required | ## šŸŽÆ Perfect For - **Startups** building MVPs quickly - **Agencies** delivering client projects - **Developers** who want Next.js simplicity without complexity - **Teams** needing clean architecture with services - **Projects** requiring lightweight, fast applications --- Built with ā¤ļø for the React community. Start building amazing applications today!