[workspace]
resolver = "2"
members = [
    "crates/chattyness-db",
    "crates/chattyness-error",
    "crates/chattyness-shared",
    "crates/chattyness-admin-ui",
    "crates/chattyness-user-ui",
    "apps/chattyness-owner",
    "apps/chattyness-app",
]
exclude = ["chattyness-webserver"]

[workspace.package]
version = "0.1.0"
edition = "2024"
license = "MIT"
repository = "https://github.com/your-org/chattyness"

[workspace.dependencies]
# Internal crates
chattyness-db = { path = "crates/chattyness-db" }
chattyness-error = { path = "crates/chattyness-error" }
chattyness-shared = { path = "crates/chattyness-shared" }
chattyness-admin-ui = { path = "crates/chattyness-admin-ui" }
chattyness-user-ui = { path = "crates/chattyness-user-ui" }

# Leptos framework
leptos = "0.8"
leptos_meta = "0.8"
leptos_router = "0.8"
leptos_axum = "0.8"

# Axum web server
axum = { version = "0.8", features = ["macros", "ws"] }
axum-extra = { version = "0.10", features = ["multipart"] }
tower = "0.5"
tower-http = { version = "0.6", features = ["fs", "compression-gzip"] }

# Session management
tower-sessions = "0.14"
tower-sessions-sqlx-store = { version = "0.15", features = ["postgres"] }

# Database
sqlx = { version = "0.8", features = [
    "runtime-tokio",
    "tls-rustls",
    "postgres",
    "uuid",
    "chrono",
    "json"
] }

# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"

# Error handling
thiserror = "2"

# CLI
clap = { version = "4", features = ["derive", "env"] }

# Async runtime
tokio = { version = "1", features = ["full"] }
futures = "0.3"

# Concurrent data structures
dashmap = "6"

# Configuration
toml = "0.8"

# Utilities
uuid = { version = "1", features = ["v4", "serde", "js"] }
chrono = { version = "0.4", features = ["serde"] }
dotenvy = "0.15"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
http = "1"
regex = "1"

# Password hashing
argon2 = "0.5"

# Image processing
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "gif", "webp"] }
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }

# Random token generation
rand = "0.8"
sha2 = "0.10"
hex = "0.4"

# WASM dependencies
console_error_panic_hook = "0.1"
wasm-bindgen = "0.2"
gloo-net = "0.6"
gloo-timers = "0.3"
urlencoding = "2"
web-sys = { version = "0.3", features = [
    "Blob",
    "CanvasRenderingContext2d",
    "CloseEvent",
    "Document",
    "DomRect",
    "Element",
    "ErrorEvent",
    "EventTarget",
    "File",
    "FileList",
    "FormData",
    "HtmlCanvasElement",
    "HtmlCollection",
    "HtmlElement",
    "HtmlFormElement",
    "HtmlImageElement",
    "HtmlInputElement",
    "ImageData",
    "KeyboardEvent",
    "Location",
    "MessageEvent",
    "MouseEvent",
    "Node",
    "Storage",
    "TextMetrics",
    "WebSocket",
    "Window",
] }
js-sys = "0.3"

[profile.release]
lto = true
opt-level = 'z'
codegen-units = 1
