Skip to content

blissful-infra service

A service is one process inside a project: one container family, one bounded context, its own database schema.

Terminal window
blissful-infra service add orders --type backend
CommandWhat it does
service add <name>Add a service to a project
service up <name>Start a service
service down <name>Stop a service
service logs <name>Tail service logs
service remove <name>Remove a service from a project

Every subcommand accepts optional leading tenant and project arguments, so all three of these work:

Terminal window
blissful-infra service up orders # tenant + project from context
blissful-infra service up shop orders # project explicit
blissful-infra service up acme shop orders # both explicit
FlagWhat it does
-t, --type <type>backend, frontend or worker
--template <name>Backend: spring-boot, hono or lambda-python. Frontend: react-vite
--runtime <runtime>Worker language: python, node or go
--no-databaseSkip the auto-allocated Postgres schema (backends and workers only)
-y, --skip-promptsSkip prompts, accept defaults
--typeGets an HTTP portGets a DB schemaNotes
backendyesyes, unless --no-databaseAlso gets a metrics port
frontendyesno
workernoyes, unless --no-databaseHeadless; pick a language with --runtime
Terminal window
# Spring Boot backend with its own Postgres schema
blissful-infra service add orders --type backend --template spring-boot
# React frontend
blissful-infra service add web --type frontend --template react-vite
# Python worker, no database
blissful-infra service add mailer --type worker --runtime python --no-database

Every backend and worker gets its own schema on the project’s shared Postgres instance, not a shared one. This is deliberate: it makes the DDD boundary structural rather than a convention people remember to follow. A service reaching into another service’s tables has to work at it.

Pass --no-database when a service genuinely has no persistence.

On the kubernetes runtime, the database binding is currently stripped at scaffold time. There is no in-cluster Postgres yet.

Terminal window
blissful-infra service up orders
blissful-infra service logs orders
blissful-infra service down orders

On a --runtime kubernetes project, service up delegates to deploy, which runs the full GitOps loop rather than starting a container directly.

Services are allocated from a high range so they never collide with infrastructure: HTTP from 30000, metrics from 34000, offset by tenant, project and service index. blissful-infra project status prints what each service actually got.