diff --git a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_blueprint.webp b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_blueprint.webp index 60540c46f..b3db4e6c5 100644 Binary files a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_blueprint.webp and b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_blueprint.webp differ diff --git a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_chip.webp b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_chip.webp index e84af7319..b3b01559e 100644 Binary files a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_chip.webp and b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_chip.webp differ diff --git a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_midnight.webp b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_midnight.webp index 56938fae4..8dee0e569 100644 Binary files a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_midnight.webp and b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_midnight.webp differ diff --git a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_retro.webp b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_retro.webp index ad92b5359..1f76e2e5d 100644 Binary files a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_retro.webp and b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_retro.webp differ diff --git a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sticker.webp b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sticker.webp index 3d8887c2d..17976c5fd 100644 Binary files a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sticker.webp and b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sticker.webp differ diff --git a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sunrise.webp b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sunrise.webp index 5449766ed..3acfd5d01 100644 Binary files a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sunrise.webp and b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_sunrise.webp differ diff --git a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_terminal.webp b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_terminal.webp index 3dc8c27ec..f36203c49 100644 Binary files a/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_terminal.webp and b/apps/android/app/src/main/res/drawable-nodpi/ic_launcher_alt_terminal.webp differ diff --git a/apps/android/app/src/main/res/drawable/ic_launcher_foreground.xml b/apps/android/app/src/main/res/drawable/ic_launcher_foreground.xml index d5b9e9d50..d54332ef8 100644 --- a/apps/android/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/apps/android/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,47 +1,3 @@ - - - - - - - - - - - - - + + diff --git a/apps/android/core/ui/src/main/kotlin/dev/optio/core/ui/components/OptioGlyph.kt b/apps/android/core/ui/src/main/kotlin/dev/optio/core/ui/components/OptioGlyph.kt index cea509a7b..672e52d31 100644 --- a/apps/android/core/ui/src/main/kotlin/dev/optio/core/ui/components/OptioGlyph.kt +++ b/apps/android/core/ui/src/main/kotlin/dev/optio/core/ui/components/OptioGlyph.kt @@ -6,54 +6,26 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor -import androidx.compose.ui.graphics.StrokeCap -import androidx.compose.ui.graphics.StrokeJoin +import androidx.compose.ui.graphics.PathFillType import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.graphics.vector.addPathNodes import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import dev.optio.core.ui.theme.OptioTheme /** Optio's own icons. */ object OptioIcons { - /** - * The Optio bot (iOS `BotGlyph`): antenna, head, ears, eyes — the app icon's mark, stroked on a - * 24-unit grid so it takes any tint. Use it with `Icon(OptioIcons.Bot, …)` or [OptioGlyph]. - */ + /** Peek, the O-shaped face shared with the app icon and iOS BotGlyph. */ val Bot: ImageVector by lazy { - ImageVector.Builder(name = "OptioBot", defaultWidth = 24.dp, defaultHeight = 24.dp, viewportWidth = 24f, viewportHeight = 24f) - .path( - fill = null, - stroke = SolidColor(Color.Black), - strokeLineWidth = 2.25f, - strokeLineCap = StrokeCap.Round, - strokeLineJoin = StrokeJoin.Round, - ) { - // antenna - moveTo(12f, 8f) - lineTo(12f, 4f) - lineTo(8f, 4f) - // head: a 16×12 rounded rect at (4, 8), corner 2.4 - moveTo(6.4f, 8f) - lineTo(17.6f, 8f) - arcTo(2.4f, 2.4f, 0f, false, true, 20f, 10.4f) - lineTo(20f, 17.6f) - arcTo(2.4f, 2.4f, 0f, false, true, 17.6f, 20f) - lineTo(6.4f, 20f) - arcTo(2.4f, 2.4f, 0f, false, true, 4f, 17.6f) - lineTo(4f, 10.4f) - arcTo(2.4f, 2.4f, 0f, false, true, 6.4f, 8f) - close() - // ears - moveTo(2f, 14f) - lineTo(4f, 14f) - moveTo(20f, 14f) - lineTo(22f, 14f) - // eyes - moveTo(15f, 13f) - lineTo(15f, 15f) - moveTo(9f, 13f) - lineTo(9f, 15f) + ImageVector.Builder(name = "OptioPeek", defaultWidth = 24.dp, defaultHeight = 24.dp, viewportWidth = 100f, viewportHeight = 100f) + .apply { + optioMarkPaths.forEach { data -> + addPath( + pathData = addPathNodes(data), + pathFillType = PathFillType.EvenOdd, + fill = SolidColor(Color.Black), + ) + } } .build() } diff --git a/apps/android/core/ui/src/main/kotlin/dev/optio/core/ui/components/OptioMarkPaths.kt b/apps/android/core/ui/src/main/kotlin/dev/optio/core/ui/components/OptioMarkPaths.kt new file mode 100644 index 000000000..19f9c03e5 --- /dev/null +++ b/apps/android/core/ui/src/main/kotlin/dev/optio/core/ui/components/OptioMarkPaths.kt @@ -0,0 +1,8 @@ +// Generated by scripts/render-brand.mjs from design/brand/mark.svg. +package dev.optio.core.ui.components + +internal val optioMarkPaths = listOf( + "M30 6H66L94 34V70Q94 94 70 94H30Q6 94 6 70V30Q6 6 30 6ZM36 24Q24 24 24 36V64Q24 76 36 76H64Q76 76 76 64V36Q76 24 64 24Z", + "M76 6H82Q94 6 94 18V24Q94 26 92 24L74 8Q72 6 76 6Z", + "M40 40A4 4 0 0 1 44 44V56A4 4 0 0 1 36 56V44A4 4 0 0 1 40 40ZM60 40A4 4 0 0 1 64 44V56A4 4 0 0 1 56 56V44A4 4 0 0 1 60 40Z", +) diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_blueprint.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_blueprint.webp index 69edcee09..283aa5576 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_blueprint.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_blueprint.webp differ diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_chip.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_chip.webp index 179ff885e..fa9bae865 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_chip.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_chip.webp differ diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_default.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_default.webp index d53ad1aee..31b1373e6 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_default.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_default.webp differ diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_midnight.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_midnight.webp index db2f3ffdc..e4adef376 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_midnight.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_midnight.webp differ diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_retro.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_retro.webp index 34314c833..8bcd76aae 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_retro.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_retro.webp differ diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sticker.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sticker.webp index b65997d02..13c499bd3 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sticker.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sticker.webp differ diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sunrise.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sunrise.webp index b6d55f47d..facb9304c 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sunrise.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_sunrise.webp differ diff --git a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_terminal.webp b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_terminal.webp index ab648b6f1..89e6bc882 100644 Binary files a/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_terminal.webp and b/apps/android/feature/more/src/main/res/drawable-nodpi/app_icon_terminal.webp differ diff --git a/apps/android/feature/widgets/src/main/res/drawable/widget_ic_bot.xml b/apps/android/feature/widgets/src/main/res/drawable/widget_ic_bot.xml index a912fc175..bd99d94fb 100644 --- a/apps/android/feature/widgets/src/main/res/drawable/widget_ic_bot.xml +++ b/apps/android/feature/widgets/src/main/res/drawable/widget_ic_bot.xml @@ -1,14 +1,2 @@ - - - - + diff --git a/apps/ios/Design/app-icon-dark.svg b/apps/ios/Design/app-icon-dark.svg index 230755244..0bbd18a8a 100644 --- a/apps/ios/Design/app-icon-dark.svg +++ b/apps/ios/Design/app-icon-dark.svg @@ -1,11 +1 @@ - - - - - - - - - - - + diff --git a/apps/ios/Design/app-icon-tinted.svg b/apps/ios/Design/app-icon-tinted.svg index f59d4df3f..3d3d00982 100644 --- a/apps/ios/Design/app-icon-tinted.svg +++ b/apps/ios/Design/app-icon-tinted.svg @@ -1,11 +1 @@ - - - - - - - - - - - + diff --git a/apps/ios/Design/app-icon.svg b/apps/ios/Design/app-icon.svg index ac0579918..6008e1f18 100644 --- a/apps/ios/Design/app-icon.svg +++ b/apps/ios/Design/app-icon.svg @@ -1,23 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/apps/ios/Design/icons/blueprint.png b/apps/ios/Design/icons/blueprint.png index f8bfa4e35..e8bc7bb9a 100644 Binary files a/apps/ios/Design/icons/blueprint.png and b/apps/ios/Design/icons/blueprint.png differ diff --git a/apps/ios/Design/icons/blueprint.svg b/apps/ios/Design/icons/blueprint.svg index ee7d88679..52f5f9e67 100644 --- a/apps/ios/Design/icons/blueprint.svg +++ b/apps/ios/Design/icons/blueprint.svg @@ -1,49 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/apps/ios/Design/icons/chip.png b/apps/ios/Design/icons/chip.png index 05101922f..0c531cda7 100644 Binary files a/apps/ios/Design/icons/chip.png and b/apps/ios/Design/icons/chip.png differ diff --git a/apps/ios/Design/icons/chip.svg b/apps/ios/Design/icons/chip.svg index 6c679ae4a..0b5e78901 100644 --- a/apps/ios/Design/icons/chip.svg +++ b/apps/ios/Design/icons/chip.svg @@ -1,229 +1,114 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/ios/Design/icons/contact-sheet.png b/apps/ios/Design/icons/contact-sheet.png index 7de1a2083..2bdff81dd 100644 Binary files a/apps/ios/Design/icons/contact-sheet.png and b/apps/ios/Design/icons/contact-sheet.png differ diff --git a/apps/ios/Design/icons/midnight.png b/apps/ios/Design/icons/midnight.png index 5cab45e9d..601fcec4d 100644 Binary files a/apps/ios/Design/icons/midnight.png and b/apps/ios/Design/icons/midnight.png differ diff --git a/apps/ios/Design/icons/midnight.svg b/apps/ios/Design/icons/midnight.svg index 07e88556e..c11d91249 100644 --- a/apps/ios/Design/icons/midnight.svg +++ b/apps/ios/Design/icons/midnight.svg @@ -1,33 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/apps/ios/Design/icons/retro.png b/apps/ios/Design/icons/retro.png index a35a37b82..9644e48a0 100644 Binary files a/apps/ios/Design/icons/retro.png and b/apps/ios/Design/icons/retro.png differ diff --git a/apps/ios/Design/icons/retro.svg b/apps/ios/Design/icons/retro.svg index 383ab99a1..3707603d2 100644 --- a/apps/ios/Design/icons/retro.svg +++ b/apps/ios/Design/icons/retro.svg @@ -1,44 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/apps/ios/Design/icons/sticker.png b/apps/ios/Design/icons/sticker.png index 5b1315bd7..8b12c0dff 100644 Binary files a/apps/ios/Design/icons/sticker.png and b/apps/ios/Design/icons/sticker.png differ diff --git a/apps/ios/Design/icons/sticker.svg b/apps/ios/Design/icons/sticker.svg index 9913819e2..76a8509cb 100644 --- a/apps/ios/Design/icons/sticker.svg +++ b/apps/ios/Design/icons/sticker.svg @@ -1,37 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/apps/ios/Design/icons/sunrise.png b/apps/ios/Design/icons/sunrise.png index 4deeae787..cc2c15a35 100644 Binary files a/apps/ios/Design/icons/sunrise.png and b/apps/ios/Design/icons/sunrise.png differ diff --git a/apps/ios/Design/icons/sunrise.svg b/apps/ios/Design/icons/sunrise.svg index ef4ec8925..d2266341e 100644 --- a/apps/ios/Design/icons/sunrise.svg +++ b/apps/ios/Design/icons/sunrise.svg @@ -1,44 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/apps/ios/Design/icons/terminal.png b/apps/ios/Design/icons/terminal.png index c871c0958..2df2ca92d 100644 Binary files a/apps/ios/Design/icons/terminal.png and b/apps/ios/Design/icons/terminal.png differ diff --git a/apps/ios/Design/icons/terminal.svg b/apps/ios/Design/icons/terminal.svg index 6b51acfa7..48b060f9b 100644 --- a/apps/ios/Design/icons/terminal.svg +++ b/apps/ios/Design/icons/terminal.svg @@ -1,30 +1,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - optio - › - - - + + + + + + + optio + + + + diff --git a/apps/ios/Optio/Features/Auth/SignInView.swift b/apps/ios/Optio/Features/Auth/SignInView.swift index 5fca5feda..079c80710 100644 --- a/apps/ios/Optio/Features/Auth/SignInView.swift +++ b/apps/ios/Optio/Features/Auth/SignInView.swift @@ -172,7 +172,7 @@ struct SignInView: View { RoundedRectangle(cornerRadius: 18, style: .continuous) .fill(AppTheme.accent.opacity(0.14)) BotGlyph() - .stroke(AppTheme.accent, style: StrokeStyle(lineWidth: 2.2, lineCap: .round, lineJoin: .round)) + .fill(AppTheme.accent, style: FillStyle(eoFill: true)) .padding(17) } .frame(width: 72, height: 72) diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Blueprint.appiconset/AppIcon-Blueprint.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Blueprint.appiconset/AppIcon-Blueprint.png index f8bfa4e35..e8bc7bb9a 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Blueprint.appiconset/AppIcon-Blueprint.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Blueprint.appiconset/AppIcon-Blueprint.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Chip.appiconset/AppIcon-Chip.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Chip.appiconset/AppIcon-Chip.png index 05101922f..0c531cda7 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Chip.appiconset/AppIcon-Chip.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Chip.appiconset/AppIcon-Chip.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Midnight.appiconset/AppIcon-Midnight.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Midnight.appiconset/AppIcon-Midnight.png index 5cab45e9d..601fcec4d 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Midnight.appiconset/AppIcon-Midnight.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Midnight.appiconset/AppIcon-Midnight.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Retro.appiconset/AppIcon-Retro.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Retro.appiconset/AppIcon-Retro.png index a35a37b82..9644e48a0 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Retro.appiconset/AppIcon-Retro.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Retro.appiconset/AppIcon-Retro.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sticker.appiconset/AppIcon-Sticker.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sticker.appiconset/AppIcon-Sticker.png index 5b1315bd7..8b12c0dff 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sticker.appiconset/AppIcon-Sticker.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sticker.appiconset/AppIcon-Sticker.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sunrise.appiconset/AppIcon-Sunrise.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sunrise.appiconset/AppIcon-Sunrise.png index 4deeae787..cc2c15a35 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sunrise.appiconset/AppIcon-Sunrise.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Sunrise.appiconset/AppIcon-Sunrise.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Terminal.appiconset/AppIcon-Terminal.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Terminal.appiconset/AppIcon-Terminal.png index c871c0958..2df2ca92d 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Terminal.appiconset/AppIcon-Terminal.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon-Terminal.appiconset/AppIcon-Terminal.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png index 2ce522ed8..b71c09a53 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png index f8e970a33..4a8ce8012 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png index 54216b063..e74d41dd4 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png and b/apps/ios/Optio/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Blueprint.imageset/IconPreview-Blueprint.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Blueprint.imageset/IconPreview-Blueprint.png index f8bfa4e35..9e42073c6 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Blueprint.imageset/IconPreview-Blueprint.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Blueprint.imageset/IconPreview-Blueprint.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Chip.imageset/IconPreview-Chip.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Chip.imageset/IconPreview-Chip.png index 05101922f..7ea4c016a 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Chip.imageset/IconPreview-Chip.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Chip.imageset/IconPreview-Chip.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Default.imageset/IconPreview-Default.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Default.imageset/IconPreview-Default.png index 54216b063..11bed6457 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Default.imageset/IconPreview-Default.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Default.imageset/IconPreview-Default.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Midnight.imageset/IconPreview-Midnight.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Midnight.imageset/IconPreview-Midnight.png index 5cab45e9d..e846aabda 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Midnight.imageset/IconPreview-Midnight.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Midnight.imageset/IconPreview-Midnight.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Retro.imageset/IconPreview-Retro.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Retro.imageset/IconPreview-Retro.png index a35a37b82..328d5361e 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Retro.imageset/IconPreview-Retro.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Retro.imageset/IconPreview-Retro.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sticker.imageset/IconPreview-Sticker.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sticker.imageset/IconPreview-Sticker.png index 5b1315bd7..4ad2f047c 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sticker.imageset/IconPreview-Sticker.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sticker.imageset/IconPreview-Sticker.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sunrise.imageset/IconPreview-Sunrise.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sunrise.imageset/IconPreview-Sunrise.png index 4deeae787..7548fa108 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sunrise.imageset/IconPreview-Sunrise.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Sunrise.imageset/IconPreview-Sunrise.png differ diff --git a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Terminal.imageset/IconPreview-Terminal.png b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Terminal.imageset/IconPreview-Terminal.png index c871c0958..98b0bb3af 100644 Binary files a/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Terminal.imageset/IconPreview-Terminal.png and b/apps/ios/Optio/Resources/Assets.xcassets/IconPreview-Terminal.imageset/IconPreview-Terminal.png differ diff --git a/apps/ios/Shared/StatusColor.swift b/apps/ios/Shared/StatusColor.swift index c30d7c856..20e11d33a 100644 --- a/apps/ios/Shared/StatusColor.swift +++ b/apps/ios/Shared/StatusColor.swift @@ -72,27 +72,36 @@ public enum StatusKind: Hashable, Sendable { } } -/// The Optio bot: antenna, head, ears, eyes — the same mark as the app icon, drawn -/// as a stroke so it can take any colour. 24-unit grid, centred in `rect`. +/// Optio Peek, matching design/brand/mark.svg. Fill with the even-odd rule +/// so the face stays transparent on widgets, sign-in, and the Dynamic Island. public struct BotGlyph: Shape { public init() {} public func path(in rect: CGRect) -> Path { - let s = min(rect.width, rect.height) / 24 - let ox = rect.midX - 12 * s - let oy = rect.midY - 12 * s + let s = min(rect.width, rect.height) / 100 + let ox = rect.midX - 50 * s + let oy = rect.midY - 50 * s func p(_ x: CGFloat, _ y: CGFloat) -> CGPoint { CGPoint(x: ox + x * s, y: oy + y * s) } var path = Path() - // antenna - path.move(to: p(12, 8)); path.addLine(to: p(12, 4)); path.addLine(to: p(8, 4)) - // head - path.addRoundedRect(in: CGRect(x: ox + 4 * s, y: oy + 8 * s, width: 16 * s, height: 12 * s), cornerSize: CGSize(width: 2.4 * s, height: 2.4 * s)) - // ears - path.move(to: p(2, 14)); path.addLine(to: p(4, 14)) - path.move(to: p(20, 14)); path.addLine(to: p(22, 14)) - // eyes - path.move(to: p(15, 13)); path.addLine(to: p(15, 15)) - path.move(to: p(9, 13)); path.addLine(to: p(9, 15)) + path.move(to: p(30, 6)); path.addLine(to: p(66, 6)); path.addLine(to: p(94, 34)) + path.addLine(to: p(94, 70)); path.addQuadCurve(to: p(70, 94), control: p(94, 94)) + path.addLine(to: p(30, 94)); path.addQuadCurve(to: p(6, 70), control: p(6, 94)) + path.addLine(to: p(6, 30)); path.addQuadCurve(to: p(30, 6), control: p(6, 6)) + path.closeSubpath() + // Transparent face inset. + path.move(to: p(36, 24)); path.addQuadCurve(to: p(24, 36), control: p(24, 24)) + path.addLine(to: p(24, 64)); path.addQuadCurve(to: p(36, 76), control: p(24, 76)) + path.addLine(to: p(64, 76)); path.addQuadCurve(to: p(76, 64), control: p(76, 76)) + path.addLine(to: p(76, 36)); path.addQuadCurve(to: p(64, 24), control: p(76, 24)) + path.closeSubpath() + // Detached corner. + path.move(to: p(76, 6)); path.addLine(to: p(82, 6)) + path.addQuadCurve(to: p(94, 18), control: p(94, 6)); path.addLine(to: p(94, 24)) + path.addQuadCurve(to: p(92, 24), control: p(94, 26)); path.addLine(to: p(74, 8)) + path.addQuadCurve(to: p(76, 6), control: p(72, 6)); path.closeSubpath() + for x: CGFloat in [36, 56] { + path.addRoundedRect(in: CGRect(x: ox + x * s, y: oy + 40 * s, width: 8 * s, height: 20 * s), cornerSize: CGSize(width: 4 * s, height: 4 * s)) + } return path } } @@ -110,7 +119,7 @@ public struct OptioGlyph: View { public var body: some View { BotGlyph() - .stroke(style, style: StrokeStyle(lineWidth: max(1.5, size / 9), lineCap: .round, lineJoin: .round)) + .fill(style, style: FillStyle(eoFill: true)) .frame(width: size, height: size) .accessibilityHidden(true) } diff --git a/apps/site/public/apple-touch-icon.png b/apps/site/public/apple-touch-icon.png new file mode 100644 index 000000000..11bed6457 Binary files /dev/null and b/apps/site/public/apple-touch-icon.png differ diff --git a/apps/site/public/favicon-32.png b/apps/site/public/favicon-32.png new file mode 100644 index 000000000..c8d205b55 Binary files /dev/null and b/apps/site/public/favicon-32.png differ diff --git a/apps/site/public/favicon.svg b/apps/site/public/favicon.svg index f2390f6d1..ad21622f6 100644 --- a/apps/site/public/favicon.svg +++ b/apps/site/public/favicon.svg @@ -1,4 +1 @@ - - - - + diff --git a/apps/site/public/optio-mark.svg b/apps/site/public/optio-mark.svg new file mode 100644 index 000000000..9a5a6bacb --- /dev/null +++ b/apps/site/public/optio-mark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/site/src/app/layout.tsx b/apps/site/src/app/layout.tsx index dfa0fbd41..07c3afd21 100644 --- a/apps/site/src/app/layout.tsx +++ b/apps/site/src/app/layout.tsx @@ -19,6 +19,13 @@ const ibmPlexMono = IBM_Plex_Mono({ export const metadata: Metadata = { metadataBase: new URL("https://optio.host"), + icons: { + icon: [ + { url: "/favicon.svg", type: "image/svg+xml" }, + { url: "/favicon-32.png", type: "image/png", sizes: "32x32" }, + ], + apple: "/apple-touch-icon.png", + }, title: { default: "Optio — Self-Hosted AI Agent Swarm & Workflow Orchestration", template: "%s | Optio", diff --git a/apps/site/src/components/footer.tsx b/apps/site/src/components/footer.tsx index d7f53aa22..5b8aea4d9 100644 --- a/apps/site/src/components/footer.tsx +++ b/apps/site/src/components/footer.tsx @@ -1,4 +1,5 @@ import Link from "next/link"; +import Image from "next/image"; export function Footer() { return ( @@ -6,7 +7,11 @@ export function Footer() {
- + + optio

diff --git a/apps/site/src/components/header.tsx b/apps/site/src/components/header.tsx index bf9221947..946f7536d 100644 --- a/apps/site/src/components/header.tsx +++ b/apps/site/src/components/header.tsx @@ -1,6 +1,7 @@ "use client"; import Link from "next/link"; +import Image from "next/image"; import { useState } from "react"; export function Header() { @@ -9,7 +10,11 @@ export function Header() { return (