Jakub Zych 336acf5572 docs(02): create phase plan
Phase 02: Plugin System
- 3 plans in 3 waves (sequential)
- 02-01: Plugin discovery and manifest parsing
- 02-02: Lifecycle management and dependency resolution
- 02-03: Extension API with type-safe plugin-to-plugin communication
- Ready for execution
2026-02-05 13:24:06 +01:00
2026-02-05 13:24:06 +01:00
2026-02-04 01:06:15 +01:00
2026-02-05 12:18:55 +01:00
2026-02-04 01:06:15 +01:00
2026-02-05 13:01:34 +01:00
2026-02-04 01:06:15 +01:00
2026-02-04 01:05:21 +01:00

SummerCMS

A Scala/ZIO-based Content Management Framework — a modern rewrite of WinterCMS/OctoberCMS with better performance, type safety, and horizontal scaling.

Status

Phase 1: Foundation — Complete

  • Mill build system with Scala 3.3.4
  • ZIO HTTP server with health endpoints
  • PostgreSQL integration via Quill (compile-time SQL validation)
  • Flyway database migrations
  • Repository pattern with typed errors
  • Pulumi/Besom infrastructure for AWS deployment
  • Docker containerization

Requirements

  • Java 21+ (tested with Java 25)
  • PostgreSQL 14+
  • Mill 1.1.1+ (included as ./mill launcher)

Quick Start

1. Database Setup

# Create database user and database
sudo -u postgres psql -c "CREATE USER summercms WITH PASSWORD 'summercms';"
sudo -u postgres psql -c "CREATE DATABASE summercms OWNER summercms;"

Or use environment variables to connect to an existing database.

2. Run the Server

# Start the development server
./mill summercms.run

You should see the SummerCMS banner and the server starting on port 8080.

3. Verify

# Health check (always returns 200)
curl http://localhost:8080/health

# Readiness check (returns 200 if database connected, 503 otherwise)
curl http://localhost:8080/ready

Configuration

Configuration uses HOCON format in summercms/resources/application.conf. Environment variables override defaults:

Variable Default Description
SERVER_HOST 0.0.0.0 Server bind address
SERVER_PORT 8080 Server port
DB_HOST localhost PostgreSQL host
DB_PORT 5432 PostgreSQL port
DB_NAME summercms Database name
DB_USER summercms Database user
DB_PASSWORD summercms Database password

Project Structure

summercms/
├── build.mill                 # Mill build configuration
├── summercms/
│   ├── src/
│   │   ├── Main.scala         # Application entry point
│   │   ├── api/               # HTTP routes
│   │   │   ├── Routes.scala
│   │   │   └── HealthRoutes.scala
│   │   ├── config/            # Configuration
│   │   │   └── AppConfig.scala
│   │   ├── db/                # Database layer
│   │   │   ├── QuillContext.scala
│   │   │   └── Migrator.scala
│   │   ├── model/             # Domain models
│   │   │   └── User.scala
│   │   └── repository/        # Data access
│   │       ├── RepositoryError.scala
│   │       └── UserRepository.scala
│   └── resources/
│       ├── application.conf   # HOCON configuration
│       └── db/migration/      # Flyway SQL migrations
├── infra/                     # Pulumi/Besom infrastructure
│   ├── project.scala
│   └── Main.scala
└── Dockerfile                 # Container build

Development

Build Commands

# Compile
./mill summercms.compile

# Run
./mill summercms.run

# Build fat JAR
./mill summercms.assembly

# Run tests
./mill summercms.test

Database Migrations

Migrations are in summercms/resources/db/migration/ using Flyway naming convention (V1__description.sql).

Migrations are not auto-run on startup. They will be invoked via CLI commands (coming in Phase 5).

Docker

# Build image
docker build -t summercms .

# Run container
docker run -p 8080:8080 \
  -e DB_HOST=host.docker.internal \
  -e DB_PASSWORD=secret \
  summercms

Infrastructure (Pulumi)

The infra/ directory contains Pulumi infrastructure using Besom (Scala Pulumi SDK):

cd infra
pulumi stack init dev
pulumi config set dbPassword --secret <password>
pulumi up

Defines:

  • S3 bucket for assets
  • RDS PostgreSQL instance

Tech Stack

Component Technology
Language Scala 3.3.4
Effect System ZIO 2.1.14
HTTP Server zio-http 3.0.1
Database PostgreSQL + Quill 4.8.5
Migrations Flyway 10.21.0
Configuration zio-config + HOCON
Build Mill 1.1.1
Infrastructure Pulumi + Besom 0.5.0

Roadmap

SummerCMS is being built in phases:

  • Phase 1: Foundation — Database, migrations, repository pattern, deployment
  • Phase 2: Plugin System — Plugin discovery, lifecycle, dependencies, extension API
  • Phase 3: Component System — Reusable UI components with HTMX handlers
  • Phase 4: Theme Engine — Layouts, partials, asset management, Vue integration
  • Phase 5: CLI Scaffolding — Commands to create plugins, themes, components
  • Phase 6: Backend Authentication — Admin users, login/logout, RBAC
  • Phase 7: Admin Forms & Lists — YAML-driven form and list generation
  • Phase 8: Admin Dashboard — Dashboard widgets and plugin settings
  • Phase 9: Content Management — CMS pages, media library, menus
  • Phase 10: Core Plugins — User plugin and Blog plugin

License

[TBD]

Description
Take the autumn idea hardened with the winter frost to the white boy summer
Readme 1.3 MiB
Languages
Scala 69.4%
HTML 23.3%
Dockerfile 4.6%
PLpgSQL 2.7%