Skip to content

na2sime/Stratus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

31 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

⚑ 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

# 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 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

// 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:

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:

// 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

# 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)

stratusjs deploy --platform vercel

Netlify (Great for static sites)

stratusjs deploy --platform netlify

Docker

stratusjs deploy --platform docker

Node.js Server

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

πŸ”§ Configuration

Configure your project in stratus.config.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 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!

About

Simple react based frontend framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •