Introduction to ShipMySaaS boilerplate

Welcome to the documentation for ShipMySaaS, a boilerplate for SaaS projects designed to accelerate development and streamline deployment. ShipMySaaS is a modern, flexible monorepo built on the Bun JavaScript runtime, offering a robust foundation for SaaS applications. Below, you'll find detailed explanations of the project structure, deployment workflow, and key features.

Project Structure

ShipMySaaS is organized as a monorepo with three main packages, each handling a distinct aspect of your SaaS application:

1. Frontend

  • Technology: Built with Next.js.
  • Purpose: Manages the client-facing part of the SaaS application.
  • Features:
    • Fully responsive and modern UI.
    • Integration with a GraphQL API for seamless data communication.
    • E2E Tests: Uses Playwright to ensure platform integrity through comprehensive end-to-end testing.
  • Deployment: Contains its own Dockerfile to facilitate independent deployment.

2. Backend

  • Technology: Built on Wabe, a flexible and modular Backend as a Service (BaaS) framework written in TypeScript.
  • Purpose: Implements the business logic and handles core backend functionality.
  • Features:
    • Provides a GraphQL API for secure and strongly typed communication with the frontend.

3. Landing page

  • Purpose: Contains the marketing website for your SaaS application.

Additional Features

  • GitHub Actions:
    • A CI workflow is provided ci.yml to test the frontend and backend applications on each push to the repository to ensure platform integrity.
    • A predefined workflow script, release.yml, is provided for automating releases on VPS of your choice.
    • A Dockerfile at the root of the repository, containing 3 stages for each application (app-front, app-back, landing), is provided to facilitate independent deployment.
  • Monorepo Management: Centralized management of all packages for efficient development and CI/CD workflows.

This structure enables modularity and scalability, ensuring that each component can evolve independently while maintaining a seamless integration.