Ciel Social & Ciel

Photo-first social platform: Rust API, media worker, SwiftUI iOS, and Jetpack Compose Android—documented in one place.

main.rs
Cargo.toml
// Ciel API process (simplified)
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let config = AppConfig::from_env()?;
match config.app_mode {
AppMode::Api => run_http_server(config).await,
AppMode::Worker => run_media_worker(config).await,
}
}

Introduction

Getting started

Ciel Social is a photo-only social platform. Ciel is the Rust (Axum) backend and media worker; native iOS (SwiftUI) and Android (Jetpack Compose) apps consume its HTTP API.

Overview

What Ciel Social is, how the monorepo is organized, and where to read next.

Architecture

How Ciel is layered, how api and worker modes differ, and how data flows.

API reference

HTTP routes grouped by domain—auth, posts, feed, media, stories, and more.

Local development

Run the API, worker, and full Docker stack against Postgres, Redis, and LocalStack.


Who this documentation is for

Contributors and operators who need to understand how the backend and clients fit together, which endpoints exist, and what tradeoffs apply as you scale.


Repository layout (monorepo)

The Ciel Social monorepo typically contains:

  • Ciel-backend — API server (APP_MODE=api), SQS media worker (APP_MODE=worker), SQL migrations, Terraform for Scaleway, and this docs site.
  • Ciel-ios — SwiftUI app, repositories, use cases, no third-party packages by design.
  • Ciel-android — Kotlin, Hilt, Retrofit, Room, Compose.

This site focuses on Ciel in depth and summarizes client architecture at a high level.


  • Route definitions: src/http/routes.rs
  • Handlers: src/http/handlers.rs
  • Services: src/app/
  • Domain types: src/domain/

Environment

Ciel expects configuration via environment variables (see .env.example in the backend repo). Common local workflow: docker compose up --build for Postgres, Redis, LocalStack (S3/SQS), API, and worker.